Управление съемкой с помощью телефонаСвязь через Bluetooth между фотокубиками на базе Arduino и коммуникатором с ОС AndroidЛюбое электронное устройство требуют систем ввода и отображения информации. Конечно, проблему можно решить минимальными средствами. Одной кнопкой с помощью морзянки можно передать любую информацию, аналогично одним светодиодом ее можно отобразить, однако, это требует определенной сноровки. Сегодня почти у каждого в кармане есть прекрасное устройства ввода и отображения информации, такое как телефон. Я уже давно писал, что фотокубикам не нужен какой-то специальный орган управления, достаточно и последовательного интерфейса, к которому может быть подключен, как пульт дистанционного управления, так и экран. А если экран сенсорный, то и пульта с кнопками не надо. Причем экран может быть один, подключаемый по мере необходимости к разным установкам. Действительно, зачем иметь несколько экранов, если не предполагается на них смотреть одновременно; можно носить один и переключать на него текущую задачу. Таким образом, задачей сегодняшней статьи является описание системы, связывающей телефон под управлением ОС 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. Плата Seeeduino Mega. Переключатель 5 - 3,3 В, помеченный цифрой 1, установлен в положение 3,3 В. У нее четыре аппаратных последовательных порта (UART). Порт с номером ноль 0 связан с USB и через него с компьютером, к порту за номером 1 я подключил купленное устройство. Плата имеет переключатель 5 - 3,3 В (помечен цифрой 1 на фотографии) и, следовательно, установив его в положение 3,3 В, можно не делать делитель на входе. Для работы с 5 В платами я сделал делитель из двух сопротивлений номиналом 30 кОм и 64 кОм. Модуль Bluetooth припаян к макетной плате, соединенной с Seeeduino Mega, которая переключена в режим 3,3 В, поэтому модуль подключен напрямую ( без делителя) к ножкам RX1 и TX1. Правда, быстро выяснилось, что нет в мире совершенства и простота подключения уравновешивается невозможностью работать с командой Serial в последних версиях Arduino IDE. С версией Arduino IDE 0022 и avr-gcc 4.5.3 под Linux система не работала, а с 0017 под Win XP все работало. Поиск в интернете показал, что проблема известна и, вероятно, связана с версией avr-gcc. Сообщалось, что откат на версию 4.3.3 решил проблему. Однако, откат по gcc мог создать много других проблем, поэтому я экспериментировать не стал. Для настройки модуля нам надо транслировать команды с компьютера в модуль обратно. Для этого слегка модернизируем предлагаемую в виде примера программу MultiSerialMega : void setup() { Первые эксперименты показали, что здесь что-то не так, либо с самим устройством, либо с описанием. При подаче питания устройство обнаружилось телефоном под именем linvor, но не реагировало на команды, подаваемые через последовательный порт. Анализ информации в интернете по ключевому слову linvor показал, что одинаковые внешне устройства имеют разные системы команд и светодиод индикации состояния подключаются к разным контактам. Кроме того, некоторые имеют контакт выбора режимов, а некоторые нет. Хорошо, хоть ножки питания и сигналов совпадали. А коли так, то можно попытаться заставить ответить само устройство, что оно из себя представляет. Надо было только подобрать скорость передачи данных, заданную по умолчанию. Наконец скорость подобрана, она оказалось 9600 бод, а не 38400 бод, как следовало из документации, приведенной на сайте продавца. Посылаем команду AT, получаем ответ OK. Посылаем команду AT+VERSION и получаем в ответ OKlinvorV1.5. (Замечу, что для старшей версии команда имеет другой синтаксис - AT+VERSION?). Таким образом, из всех возможных вариантов я получил самое простое и дешевое устройство, в котором о переключении Master/Slave можно забыть. Функционально, тем не менее, оно меня устраивало, и раздражение вызывали не лишние деньги, все равно более дешевого устройства в Москве не наблюдалось, а потраченные усилия и время. Схема подключения модуля linvorV1.5
Список команд по настройке у этой версии совсем короткий, поэтому приведу его целиком: software version Linvor v1.5. С помощью команды AT+BAUD7 я задал скорость 57600 бод, что должно
было быть одинаково приемлемо для обеих имевшихся у меня плат
Arduino. Интегрированная среда разработки Eclipse При программировании А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. Модуль Bluetooth припаян к макетной плате, соединенной с Freeduino Motor Shield v3, с которой в свою очередь контачит плата Freeduino Nano v5. Для питания модуля BT 3,3 В берутся с платы Freeduino Nano v5. Сигнал берется с единственного аппаратного порта этой платы - ножки 0 и 1. Поскольку у этой платы амплитуда сигнала 5 В, то в цепь ножки 1 включен делитель напряжения. Здесь очередной раз выяснилось, что обновление программ не всегда оправдано - версия Arduino IDE 1.0-rc1вступила в конфликт с библиотекой MeetAndroid. Поэтому программа писалась с помощью Arduino IDE 0022. Целиком ее можно скачать здесь. Ниже приведу только фрагменты кода, связанные с управлением по Bluetooth. ... void setup() meetAndroid.registerFunction(fo, 'o');//Затвор void loop() { meetAndroid.receive();//Принимаем сообщения присланные телефоном // Функции реакции на зарегистрированные события void fk(byte flag, byte numOfValues) void fp(byte flag, byte numOfValues) Включаем установку на телефоне запускаем Amarino 2.0, нажимаем + и добавляем наше устройство, нажимаем на кнопку Connect, дожидаемся пока не зажжется зеленая метка и светодиод на установке перестанет мигать. Нажимаем на кнопку Monitoring. В открывшемся окне, например, для спуска затвора выбираем для Flag маленькую букву o и в строке рядом вводим желаемую задержку. Нажимаем Send, и аппарат делает снимок. А разобравшись с двумя предлагаемыми в проекте Amarino примерами, можно написать и собственную программу для устройств, работающих под управлением ОС Android. Мой вариант с архивом для Eclipse можно скачать здесь. Для ее запуска в Eclipse открываем меню File > New > Android Project. Отмечаем пункт create from existing source и выбираем папку PanoAmarino. Для работы понадобится также библиотека AmarinoLibrary_v0_55.jar . Скачиваем ее, нажимаем правой кнопкой мыши на папку PanoAmarino в левой колонке и выбираем пункт build path > configure build path > libraries > add external jar >. Далее в Eclipse открываем файл PanoAmarino.java и в строке private static final String DEVICE_ADDRESS = "00:11:09:09:02:51"; изменяем имеющийся адрес на адрес используемого Bluetooth модуля. Адрес вашего модуля можно увидеть, например, при запуске на телефоне программы Amarino 2.0. Подключаем телефон к компьютеру через USB, помечаем галочкой в установках телефона в графе Приложения пункт Неизвестные источники и в подпункте Разработка - Отладка USB. Нажимаем правой кнопкой мыши на папку PanoAmarino в левой колонке и выбираем пункт Run As > Android Application, нажимаем на него, и программа загружается в телефон.
Программа PanoAmarino позволяет выбрать два режима съемки. Если галочка в графе Конвертер отсутствует, то предполагается, что установлен объектив с фокусным расстоянием 16 мм, и при нажатии кнопки Пуск телефон передает команду плате Freeduino Nano начать съемку панорамы в 3 ряда по 10 кадров в каждом. При наличии галочки производится съемка объективом с конвертером в два ряда по пять кадров в каждом. В процессе съемки Freeduino Nano передает телефону информацию о положении камеры, которое отображается телефоном. Слева горизонтальный угол в градусах, справа - вертикальный. Следующая группа кнопок позволяет поворачивать камеру на заданный угол. Нижняя кнопка Затвор посылает команду на спуск затвора с заданной паузой перед съемкой и задержкой после спуска затвора. Телефон буквально напичкан датчиками, и если его использовать не как пульт дистанционного управления, а прикрепить к установке, то можно воспользоваться датчиком ускорения для предотвращения съемки до того, как камера перестанет колебаться после поворота, и точно сориентировать первый кадр на север.
Последнее может оказаться полезным, если панорамы привязываются к карте. Прикрепив телефон к установке, мы на самом деле не лишаемся возможности дистанционного управления, поскольку можем задействовать одну из множества программ по дистанционному управлению телефоном с компьютера по WiFi. Я успешно пользуюсь Remote Control Add-on или PicMe. После их запуска на экране большого компьютера возникает изображение экрана телефона с возможностью нажимать мышью на кнопки. 6.11.2011
Установите проигрыватель Flash
|
Облако тегов:
...
|