В первой части статьи было описано, как с помощью контроллера Freeduino и ИК-светодиода генерировать сигнал для управления съемкой камерами Canon. Эта часть будет посвящена практической реализации пульта управления на Freeduino. Пульт должен дистанционно запускать съемку в обычном режиме и режиме с предварительной паузой, а также запускать съемку серии с заранее заданным интервалом между снимками. С помощью кнопок и потенциометра пульта управления будем управлять длительностью пауз между снимками, запуском съемки и выбором режима ДУ.
Пульт управления
К контролерам типа Arduino могут быть подключены кнопки и потенциометры, позволяющие управлять работой программ, загруженных в контроллер. Узнать об основных функциональных возможностях контроллеров, подключении внешних устройств и программировании для Arduino можно, к примеру, из книги (переведенной на русский) «Arduino: блокнот программиста» автора Brian W. Evans. Стандартные способы подключения кнопок и потенциометров (я использовал потенциометр и нагрузку на кнопках ≈10 кОм) приведены далее на схемах:
Схемы симметричны относительно подключения «земли» и питающего напряжения +5 В. Однако при том подключении для кнопки, которое показано на схеме, можно использовать встроенные в контроллер подтягивающие сопротивления, что обеспечит стабильную подачу сигнала +5 и 0 В на входы контроллера в процессе работы схемы. При этом нужно лишь обратить внимание на то, что кнопка в разомкнутом положении соответствует сигналу +5 В, а в замкнутом — нулю, и потому проверка на включение будет соответствовать константе LOW, а выключение — HIGH. После этих замечаний перейдем к созданию самого́ пульта.
В пульте я использовал 1 потенциометр и 6 кнопок и переключателей. Три переключателя будут дискретно задавать время задержки между снимками. Потенциометр выполняет псевдоаналоговую (дискретную с большим количеством шагов) регулировку. Две кнопки с фиксацией будут управлять включением программы-таймера и режимом работы пульта (с задержкой и без). Одна кнопка без фиксации (синяя на картинке) дублирует кнопку «сброс» контроллера. Количество кнопок было выбрано исходя из возможностей понравившегося мне телефонного разветвителя — у него 8 выводов, что достаточно для «земли» и 7 сигнальных линий. Схема подключения элементов проста — кнопки и потенциометр собраны вместе и подключены к общей земле и +5 В в соответствии с указанными выше схемами их индивидуального подключения. Фотография конструкции приведена далее:
Те, кто уже знаком с Arduino, возможно, заметят необычное подключение пульта управления не к цифровым линиям контроллера, а к аналоговым. Так как я планирую использовать контроллер одновременно для управления шаговыми двигателями поворота камеры и для управления съемкой, приходится задействовать все доступные порты. Сигналы для шаговых двигателей и ИК-светодиода управления передаются через цифровые линии, сигналы пульта управления — через аналоговые.
Управляющая программа
Отмечу некоторые особенности программы.
В блоке объявлений из необычного — переопределение аналоговых портов как цифровых и использование типа long для переменной счетчика задержки съемки. Аналоговые порты с адресами по умолчанию 0—5 переопределены как цифровые 14—19 — теперь к ним можно обращаться, как к стандартным цифровым. Счетчик задержки съемки cycle_delay может принимать довольно большие значения, поэтому нужно выбрать допускающий такие значения тип — long.
Цикл будет исполняться, если включена кнопка start_switch; проверка на включение/выключение: digitalRead(start_switch)==HIGH.
Проверка условия digitalRead(type_rc_switch)==HIGH задает режим работы пульта — с задержкой перед срабатыванием затвора и без таковой.
Счетчик пауз в процессе съемки суммирует «секунды» задержки. Пауза по умолчанию — 1 секунда. Три переключателя, определенные переменными switch1/switch2/switch3 работают как разряды двоичного числа, позволяя задавать паузу в пределах от 0 до 7. Потенциометр с аналоговым подключением по умолчанию позволяет задать 1024 шага управления. Для ограничения формируемой им задержки величиной в ≈100 секунд значение считываемого уровня округляется умножением на 0,1: 0.1*analogRead(potentiometer).
Так как в нашей схеме нет цифрового индикатора времени задержки (паузы), для отладки шкалы потенциометра в программу введен блок индикации задержки в секундах — светодиод, встроенный в плату Freeduino на 13-м порту, мигает задаваемое счетчиком задержки (в секундах) число раз:
for (int i=0; i {
digitalWrite(ledPin, HIGH); // индикаторный светодиод включен
delay(500); // ждем 0,5 секунды
digitalWrite(ledPin, LOW); // индикаторный светодиод выключен
delay(500); // ждем 0,5 секунды
}
После нанесения шкалы потенциометра на пульт управления этот блок нужно просто закомментировать: /*…*/.
За блоком индикации следует блок генератора ИК-сигнала, описанный в первой части статьи. К нему лишь добавлен небольшой объем кода для индикации срабатывания (для визуального контроля — сигнал ИК-светодиода для глаза невидим) с помощью встроенного во Freeduino светодиода на 13-м порту.
Пауза между циклами съемки задается командой delay(1000*cycle_delay).
Эксплуатация пульта
Пульт подключается к батарее питания или компьютеру по USB. Чтобы выбрать время задержки между снимками в диапазоне 1—8 секунд, используем переключатели, установив потенциометр в положение с минимальным сопротивлением. Если диапазон 1—8 секунд не достаточен, расширяем его с помощью потенциометра. Установив потенциометр примерно в положение 1/10 от полного оборота, включаем кнопку съемки. Считаем число миганий индикатора-светодиода на 13-м порту и отмечаем получившуюся задержку на пульте маркером. Таким образом можно проградуировать весь диапазон допустимого угла поворота потенциометра. Далее закомментируем (/*…*/) часть программы, отвечающую за индикацию задержки. После этого используем пульт по назначению. Отмечу еще, что программа допускает изменение задержки между импульсами в процессе съемки, то есть при необходимости можно вести съемку с разными по длительности паузами, не перегружая программу.