Pull to refresh

Пульт для фотосъемки с геометками на базе LinkIt One

Reading time7 min
Views12K
Волей судьбы мне в руки попался образец достаточно интересной платы LinkIt One от Mediatek. Это одноплатный компьютер с впечатляющим набором периферии подготовленный для использования в проектах, связанных с носимыми устройствами и IoT.

Для того, чтобы получить «боевой» опыт работы с этим контроллером мы разработали несложный пульт, который подключается к зеркальной фотокамере, делает снимки и записывает координаты точки съемки.

В этой статье я расскажу о получившемся устройстве и поделюсь нашими впечатлениями от работы с LinkIt One.



Идея создания пульта


Все знают, что в EXIF фотографии можно добавить геометку с координатами места снимка. Этим сейчас никого не удивишь. Любой смартфон легко справляется с этой задачей. С другой стороны не у каждой (даже профессиональной) камеры есть эта опция. Понятно, что смартфон располагает всем, что нужно для определения геолокации, а фотоаппарату для этого необходим как минимум дополнительный GPS-модуль. Да и у профессиональных фотографов редко возникает нужда в этом. Но что делать, если все-таки надо снимать много и знать где сделаны снимки?

Для этого мы и сделали наш пульт. Он подключается к стандартному разъему фотокамеры, который специально предусмотрен для этих целей. Пользователь нажимает на кнопку, пульт замыкает оптопару для съемки и записывает время и координаты. Если время на камере выставлено правильно, то никакого труда не составит сопоставить снимки с координатами.

Но на практике гораздо проще установить на смартфон приложение, записывающее GPS-трэк непрерывно во время съемки, а затем сделать все то же самое, что и с пультом. Зачем тогда делать отдельное устройство?

На самом деле, главная цель проекта даже не сам пульт, а получение реального опыта работы с платой LinkIt One, к которой мы вернемся чуть позже.

Аппаратная часть пульта для фотосъемки


Основой пульта является плата LinkIt One, для которой я сделал специальный шилд для фотосъемки.
С аппаратной точки зрения, пульты для фотографирования устроены предельно просто. Они подключаются к камере разъемом типа jack, диаметром 2,5мм. В нем три контакта — земля, половинное нажатие и полное нажатие. В самом пульте стоит простая кнопка которая замыкает сигнальные контакты с землей. Поэтому на нашем шилде для фотосъемки в первую очередь стоит двухканальная оптопара PVT322. Она и замыкает эти контакты.

Во-вторых, я установил трехцветный светодиод, который позволяет понять, в каком состоянии приемник. То есть при старте ему нужно время, пока он не найдет спутники и в это время съемка невозможна. По тому же светодиоду определяется уровень заряда.

Также на шилде установлены две кнопки для управления пультом (съемка и контроль батареи), разъем для подключения фотоаппарата и GPS-антенна из комплекта LinkIt One.



Схема получается предельно простая. Скажу только, что все нагрузки (RGB-светодиод и оптопару) я подключал через логические транзисторы BCR108E6327. Плату щилда прикрепил в конце статьи, на случай, если кто-то захочет повторить устройство.

Корпус для пульта


Еще нам незапланированно удалось сделать для него нормальный корпус. Когда я работал над проектом, я познакомился с одним начинающим дизайнером-полиграфистом, который проявлял интерес к 3D-печати и промышленному дизайну. Вот его профиль на складе SketchUp'а. Не долго думая он согласился помочь.

Он, как и я обычно, использовал для этого SketchUp, но на своем, гораздо более высоком уровне. Эта программа достаточно простая, но вооруженная плагинами, в руках профессионала она может творить чудеса. Посмотреть на корпус получившегося пульта можно в онлайн-просмотрщике здесь.



Мы, конечно, его распечатали, зачистили, покрасили, cобрали и получили следующее:





С корпусом, кончено, есть проблемы. Дело в том, что дизайнер пришел на помощь позже чем я сделал электронику. Разъем для фотосъемки утоплен в глубь пульта, а тумблеры на самой плате LinkIt One не доступны, когда пульт закрыт. В общем, корпус получился не идеальным, но вполне симпатичным и пригодным к использованию.

Работа пульта


Сразу после включения, пульт определяет свое местоположение. В это время индикаторный светодиод мигает красным цветом и съемка невозможна. После того, как позиция становится известна, светодиод начинает мигать зеленым цветом. При нажатии на правую кнопку происходит снимок, в память записываются координаты, а светодиод на это время загорается синим цветом.

Вторая кнопка отвечает за аккумулятор. После нажатия на нее на одну секунду зажигается зеленый или красный светодиод. Если зеленый, значит заряд больше 20%, если красный — то меньше.

Есть две проблемы из-за корпуса. Во-первых: к тумблеру включения питания можно подобраться только открыв крышку. Быть может его проще не выключать, но мы не проверяли насколько при этом хватит аккумулятора. Во-вторых: у платы есть переключатель отвечающий за режим работы с компьютером: либо UART, либо Mass Storage. Причем в режиме Mass Storage программа при отключении от ПК не запускается. Это значит, что необходимо переключать и этот переключатель, когда надо скачать данные с пульта.

Все это проще один раз увидеть:



Пульт парсит NMEA-сообщения, которые присылает приемник и сохраняет их в формате kml. Записанный файл можно скачать, подключив пульт к компьютеру, а посмотреть содержимое можно в Google Earth:



А теперь немного подробней о сердце пульта.

Что такое LinkIt One?


На первый взгляд это просто еще один клон Arduino, но когда начинаешь разбираться, то все оказывается намного менее прозаично.



Подробно с техническими характеристиками можно ознакомиться в вики и в Developer's Guide. Я лишь перечислю отличительные особенности:
  1. ARM-процессор, работающий на частоте 260МГц с 16Мб флэша и 4Мб оперативной памяти
  2. Слот для установки SD-карты памяти объемом до 32Гб
  3. Встроенные модули с внешними антеннами: WiFi, Bluetooth, GPS/GLONASS, GSM (на плате есть слот для SIM-карты)
  4. Питание от аккумулятора емкостью 1Ач. Это сделано хорошо: он заряжается от USB, а API позволяет узнать оставшийся заряд
  5. Аудио разъем. Для наушников и микрофона
  6. Arduino-совместимость. Об этом чуть подробней ниже

На самом деле на плате масса очень приятных мелочей, которые уже реализованы в API. Работа с GSM, GPS, Bluetooth, I2C, SPI, 3xUART, работа MP3 файлами, аккумулятором и т.д. Сама идея платы в том, что на ней уже есть все, что может понадобиться. Но из-за этого LinkIt One не очень удобна в контексте управления каким-либо внешним железом в реальном времени. На ней крутится специализированная RTOS, но тайминги все-равно плавают. Логические уровни GPIO — 3,3В. Три аналоговых входа, два выхода ШИМ (и только к ним можно подключить сервоприводы). То есть по железу есть риск, что она не совместима с некоторыми готовыми решениями.

Работа с ней предполагается в Arduino IDE. К ней вам необходимо будет установить дополнительную SDK в которой реализована часть функций языка Processing/Wiring и много специальных функций для LinkIt One. Фактически, все ПО для этой платы разрабатывается на C++. Прямо в среде можно посмотреть много готовых примеров кода. Документации, кончено, пока относительно мало. Я, к примеру, не смог найти ни описания схемы электропитания платы, ни ее габаритных размеров. А еще гугл постоянно выдает при поиске ссылки на LinkedIn.

Купить плату можно на Seeedstudio.com за 79 долларов. Продается плата в симпатичной коробочке с инструкцией, тремя антеннами и аккумулятором.

Фотографии с коробочкой






Еще я проделал небольшой бэнчмарк.

Частота мигания светодиодом
Я понимаю, что нельзя сделать какие-то выводы ни о железе, ни о софте, по результатам такого теста, но решил проверить с какой частотой будет дергаться нога, если переключать ее функцией digitalWrite без задержки.
Автор этого поста проверял, что МК с ардуиновской прошивкой делает это с частотой 210кГц, а запрограммированный нормальными средствами — 1,6МГц. LinkIt One при тех же условиях показал мне 312кГц.

Далее я приведу инструкции по быстрому старту под Windows и Linux. Это может показаться интересными только для тех, кто с ней действительно будет работать или планирует этим заняться.

Hello World для LinkIt One под Windows


Прежде всего необходимо прокачать Arduino IDE для работы с LinkIt One. Производители рекомендуют скачать SDK и последнюю версию Arduino IDE, а затем запустить SDK и указать папку со средой. Но с ходу у меня этого сделать не получилось. Вместо этого я скачал уже развернутую среду для программирования LinkIt One.

В верхней части платы есть три переключателя, отвечающие за режим работы платы. Первый переключатель задает способ инициализации в системе (как COM-порт или как USB Mass Storage). Второй задает режим питания: от USB или от аккумулятора. Третий задает подключение к SPI SD-карты или разъема. Прежде чем подключать плату к компьютеру, необходимо установить эти переключатели так, как показано на фотографии:



Затем можно подключать плату к компьютеру. Сразу после подключения в диспетчере устройств появится два неизвестных устройства:



Теперь необходимо установить драйвер. Установщик лежит в папке …\Arduino-LinkIt-ONE-IDE-master\drivers\mtk. Просто запустите InstallDriver.exe и подождите. В диспетчере устройств появится сразу два COM-порта:



На этом вся установка закончена. Я на всякий случай обновили прошивку платы до последней версии. Как это сделать — описано в вики (если коротко, надо просто запустить FirmwareUpdate.exe).

Можно приступить к загрузке примера с миганием светодиода. Запускаем Arduino IDE и выбераем плату LinkIt One:



Теперь выберем COM-порт. Необходимо обязательно указать тот порт, который в диспетчере устройств отображается как Debug Port!



Затем открываем готовый пример Blink и нажимаем кнопку «Загрузить». Если все сделано правильно, то среда выдаст об этом соответствующее сообщение (обратите внимание на процент занятой памяти):



После того, как загрузка закончится, на плате начнет мигать пользовательский светодиод:



Работа с LinkIt One под Linux


Mediatek поддерживает работу только под Windows, но при желании можно работать и под Linux. Для этого потребуется:
  1. Установить Arduino IDE
  2. Скачать SDK для LinkIt One (хоть и написано, что он только для Windows) и установить его с помощью wine. В папке установщик проверяет наличие arduino.exe, ему подойдет пустой файл с таким названием
  3. Написать свою программу и нажать «Проверить»
  4. После этого компилятор выдаст некоторое кол-во ошибок связанных с тем что в некоторых исходниках библиотек из SDK включаются заголовочные файлы в неправильном регистре(под Windows-то регистр не имеет значения)
  5. Подключить LinkIt One в режиме карты памяти к компьютеру
  6. Найти папку MRE на съемном диске и закинуть туда файл прошивки *.vxp. В файле autostart.txt в корне указан путь до прошивки которая будет выполнена.
  7. Перевести плату в режим UART и перезагрузить кнопкой
  8. Смотреть, как выполняется прошивка

Это все очень не удобно и всерьез разрабатывать что-то в таком режиме не получится. Но для одного проекта на вечер это решение.

Заключение


В целом, опыт работы с LinkIt One позитивный. Есть, кончено, шероховатости. Ощущение такое, что работаешь с чем-то слегка недоделанным, как всегда при освоении чего-то нового. Но с другой стороны она действительно может помочь быстро запустить даже относительно сложный проект.

Файлы для скачивания:

Шилд для LinkIt One
3D-модель корпуса
Пример kml-файла
Исходный код программы пульта

Это единственный хаброадаптированный репост статей с моего сайта (1 и 2).
Tags:
Hubs:
Total votes 11: ↑11 and ↓0+11
Comments3

Articles