Размер
Управление съемкой с помощью телефона
Play

Управление съемкой с помощью телефона

Любое электронное устройство требует систем ввода и отображения информации. Конечно, проблему можно решить минимальными средствами. Одной кнопкой с помощью морзянки можно передать любую информацию, аналогично одним светодиодом ее можно отобразить, однако, это требует определенной сноровки. Сегодня почти у каждого в кармане есть прекрасное устройство ввода и отображения информации, такое как телефон. Я уже давно писал, что фотокубикам не нужен какой-то специальный орган управления, достаточно и последовательного интерфейса, к которому может быть подключен как пульт дистанционного управления, так и экран. А если экран сенсорный, то и пульта с кнопками не надо. Причем экран может быть один, подключаемый по мере необходимости к разным установкам. Действительно, зачем иметь несколько экранов, если не предполагается на них смотреть одновременно; можно носить один и переключать на него текущую задачу.

Таким образом, задачей сегодняшней статьи является описание системы, связывающей телефон под управлением ОС Android с кубиками, построенными с использованием микро-ЭВМ на платформе Arduino. Проблема, однако, состоит в том, что разъемов для подключения внешних устройств у телефона нет. Говорят, у некоторых телефонов железо поддерживает порт USB для подключения периферии, но не в этой жизни. Чтобы воспользоваться данной возможностью, придется ставить натуральный Linux вместо пародии на него. Тем не менее, решение есть, даже более интересное. У любого телефона есть множество беспроводных интерфейсов. Среди них есть и Bluetooth, который можно рассматривать как хорошо замаскированный последовательный порт. Arduino тоже способна работать с Bluetooth. Это может быть плата со встроенным модулем ArduinoBT или отдельный модуль, присоединенный к последовательному порту. Поскольку у меня уже были платы Mega и Nano, то логичным решением казалось приобретение отдельного модуля BT. Быстрый поиск по московским интернет-магазинам показал, что в отличие от его компьютерного собрата с красивым корпусом и интерфейсом USB, встраиваемый вариант с последовательным интерфейсом является дефицитным продуктом. Он есть, но выбор небогатый и цены раза в три больше. В результате я купил якобы вот это устройство Bluetooth COM-порт (Master/Slave). Судя по заявленным характеристикам, предлагаемое устройство совпадало с уже использованными умельцами и описанными в сети. Например, в статье «Arduino робот. Этап 2 — связь по bluetooth». (Отмечу, что на приведенной в статье схеме делителя для согласования напряжения, похоже, забыли букву «к» в «кОм». 43 Ом на землю — это для цифровых выходов Arduino маловато будет). Очень полезной для меня оказалась и статья на английском «Serial Bluetooth module slave test» и особенно обсуждение в комментариях к ней с разбором проблем.

Плата очень маленькая и подпаиваться к ней не очень удобно. Я решил эту проблему так, как показано на фотографии.

Для начала надо запрограммировать сам модуль Bluetooth. С этой целью его надо подключить к последовательному порту, причем не RS232, а к однополярному, да еще и с напряжением 3,3 В. Я для этого воспользовался платой Seeeduino Mega.

У нее четыре аппаратных последовательных порта (UART). Порт с номером ноль 0 связан с USB и через него с компьютером, к порту за номером 1 я подключил купленное устройство. Плата имеет переключатель 5 — 3,3 В (помечен цифрой 1 на фотографии), и, следовательно, установив его в положение 3,3 В, можно не делать делитель на входе. Для работы с 5 В платами я сделал делитель из двух сопротивлений номиналом 30 кОм и 64 кОм.

Правда, быстро выяснилось, что нет в мире совершенства и простота подключения уравновешивается невозможностью работать с командой Serial в последних версиях Arduino IDE. С версией Arduino IDE 0022 и avr-gcc 4.5.3 под Linux система не работала, а с 0017 под Win XP все работало. Поиск в интернете показал, что проблема известна и, вероятно, связана с версией avr-gcc. Сообщалось, что откат на версию 4.3.3 решил проблему. Вот только откат по gcc мог создать много других проблем, поэтому я экспериментировать не стал. Для настройки модуля нам надо транслировать команды с компьютера в модуль обратно. Для этого слегка модернизируем предлагаемую в виде примера программу MultiSerialMega:void setup()

void loop()

Первые эксперименты показали, что здесь что-то не так либо с самим устройством, либо с описанием. При подаче питания устройство обнаружилось телефоном под именем linvor, но не реагировало на команды, подаваемые через последовательный порт. Анализ информации в интернете по ключевому слову linvor показал, что одинаковые внешне устройства имеют разные системы команд и светодиод индикации состояния подключаются к разным контактам. Кроме того, некоторые имеют контакт выбора режимов, а некоторые нет. Хорошо, хоть ножки питания и сигналов совпадали. А коли так, то можно попытаться заставить ответить само устройство, что оно из себя представляет. Надо было только подобрать скорость передачи данных, заданную по умолчанию. Наконец скорость подобрана, она оказалось 9600 бод, а не 38400 бод, как следовало из документации, приведенной на сайте продавца. Посылаем команду AT, получаем ответ OK. Посылаем команду AT+VERSION и получаем в ответ OKlinvorV1.5. (Замечу, что для старшей версии команда имеет другой синтаксис — AT+VERSION?). Таким образом, из всех возможных вариантов я получил самое простое и дешевое устройство, в котором о переключении Master/Slave можно забыть. Функционально, тем не менее, оно меня устраивало, и раздражение вызывали не лишние деньги, все равно более дешевого устройства в Москве не наблюдалось, а потраченные усилия и время.

Список команд по настройке у этой версии совсем короткий, поэтому приведу его целиком:software version Linvor v1.5.

Command DescriptionOptionsResponseAT+VERSION Returns the software version of the moduleOKlinvorV1.5AT+BAUDx Sets the baud rate of the moduleThe command AT+BAUD8 sets thebaud rate to 1152001 >> 12002 >> 24003 >> 48004 >> 9600 (Default)5 >> 192006 >> 384007 >> 576008 >> 1152009 >> 230400OK115200AT+NAMEOpenPilot Sets the name of the moduleAny name can be specified up to 20 charactersOKsetnameAT+PINxxxx Sets the pairing password of the device Any 4 digit number can be used, the default pincode is 1234

С помощью команды AT+BAUD7 я задал скорость 57600 бод, что должно было быть одинаково приемлемо для обеих имевшихся у меня плат Arduino. Теперь, когда задачи, связанные с программированием модуля и его подключением, решены, надо научить телефон управлять моей установкой по съемке сферических панорам. Это оказалось довольно просто, если воспользоваться результатами проекта Amarino. Если удовлетвориться работой с командной строкой, то для этого оказалось достаточно загрузить в телефон программу Amarino_2.apk и AmarinoPluginBundle.apk. Здесь важным моментом является то, что при установке телефон должен быть подключен к компьютеру, на котором установлен пакет Android SDK Tools, и папка с ним включена в PATH. Если в дальнейшем есть желание писать собственные программы для Android и еще не установлен Android SDK Tools, то есть смысл сперва установить свободную интегрированную среду разработки Eclipse и затем с ее помощью уже установить ADT Plugin. Для этого выбираем в меню: Help > Install New Software, нажимаем Add, в открывшемся окне набираем https://dl-ssl.google.com/android/eclipse/, нажимаем OK. Подробно об установке на английском можно прочитать здесь.

При программировании Аrduino можно воспользоваться соответствующей библиотекой MeetAndroid — Arduino Library и примерами из Amarino. Если работать с Seeeduino Mega, то в библиотеке MeetAndroid.cpp надо заменить Serial на Serial1. Однако, поскольку Mega мне нужна была только для программирования модуля, а установка для съемки панорам у меня собрана на Freeduino Nano v5, то я через делитель подключил модуль к ее нулевому порту и вернулся со старого компьютера с XP на новый с Slackware 13.37-64. Отмечу, что в случае Nano программировать плату можно только отключив модуль. Другими словами: отключаем питание, отключаем модуль, подключаем к компьютеру, программируем, отключаем компьютер, подключаем модуль, подключаем питание и работаем.

Общий вид установки. В качестве источника питания используется буферный накопитель «Вампирчик», с которого берется 9 В. Он удобен тем, что позволяет легко менять напряжение и контролировать уровень заряда аккумуляторов и потребляемый ток. Напряжения в 5 и 3,3 В создаются преобразователями на плате Arduino.

Здесь в очередной раз выяснилось, что обновление программ не всегда оправданно — версия Arduino IDE 1.0-rc1 вступила в конфликт с библиотекой MeetAndroid. Поэтому программа писалась с помощью Arduino IDE 0022. Целиком ее можно скачать здесь. Ниже приведу только фрагменты кода, связанные с управлением по Bluetooth. #include // declare MeetAndroid so that you can call functions with itMeetAndroid meetAndroid;. int wzat; . void setup() < Serial.begin(57600);//Задаем скоростьпоследовательного порта платы Nano

//Регистрируем функции, которые должны вызываться при получении соответствующего флага meetAndroid.registerFunction(fo, 'o');//Затвор meetAndroid.registerFunction(fp, 'p');//Низ . meetAndroid.registerFunction(ft, 't');//Пуск meetAndroid.registerFunction(fk, 'k');//Передача параметра - Задержка meetAndroid.registerFunction(fm, 'm');//Передача параметра > void loop() < meetAndroid.receive();//Принимаем сообщения присланные телефоном > // Функции реакции на зарегистрированные события void fk(byte flag, byte numOfValues)

void fo(byte flag, byte numOfValues) void fp(byte flag, byte numOfValues)

Программа PanoAmarino позволяет выбрать два режима съемки. Если галочка в графе Конвертер отсутствует, то предполагается, что установлен объектив с фокусным расстоянием 16 мм, и при нажатии кнопки Пуск телефон передает команду плате Freeduino Nano начать съемку панорамы в 3 ряда по 10 кадров в каждом. При наличии галочки производится съемка объективом с конвертером в два ряда по пять кадров в каждом. В процессе съемки Freeduino Nano передает телефону информацию о положении камеры, которое отображается телефоном. Слева горизонтальный угол в градусах, справа — вертикальный. Следующая группа кнопок позволяет поворачивать камеру на заданный угол. Нижняя кнопка Затвор посылает команду на спуск затвора с заданной паузой перед съемкой и задержкой после спуска затвора.

Последнее может оказаться полезным, если панорамы привязываются к карте. Прикрепив телефон к установке, мы на самом деле не лишаемся возможности дистанционного управления, поскольку можем задействовать одну из множества программ по дистанционному управлению телефоном с компьютера по WiFi. Я успешно пользуюсь Remote Control Add-on или PicMe. После их запуска на экране большого компьютера возникает изображение экрана телефона с возможностью нажимать мышью на кнопки.

📎📎📎📎📎📎📎📎📎📎