ИК-пульт управления для камер Canon на базе микрокомпьютера Freeduino Through-Hole

Часть вторая: создание пульта и управляющей программы
Пульт управления на Freeduino

В первой части статьи было описано, как с помощью контроллера Freeduino и ИК-светодиода генерировать сигнал для управления съемкой камерами Canon. Эта часть будет посвящена практической реализации пульта управления на Freeduino. Пульт должен дистанционно запускать съемку в обычном режиме и режиме с предварительной паузой, а также запускать съемку серии с заранее заданным интервалом между снимками. С помощью кнопок и потенциометра пульта управления будем управлять длительностью пауз между снимками, запуском съемки и выбором режима ДУ.

Пульт управления

К контролерам типа Arduino могут быть подключены кнопки и потенциометры, позволяющие управлять работой программ, загруженных в контроллер. Узнать об основных функциональных возможностях контроллеров, подключении внешних устройств и программировании для Arduino можно, к примеру, из книги (переведенной на русский) «Arduino: блокнот программиста» автора Brian W. Evans. Стандартные способы подключения кнопок и потенциометров (я использовал потенциометр и нагрузку на кнопках ≈10 кОм) приведены далее на схемах:

Компоненты

Схемы симметричны относительно подключения «земли» и питающего напряжения +5 В. Однако при том подключении для кнопки, которое показано на схеме, можно использовать встроенные в контроллер подтягивающие сопротивления, что обеспечит стабильную подачу сигнала +5 и 0 В на входы контроллера в процессе работы схемы. При этом нужно лишь обратить внимание на то, что кнопка в разомкнутом положении соответствует сигналу +5 В, а в замкнутом — нулю, и потому проверка на включение будет соответствовать константе LOW, а выключение — HIGH. После этих замечаний перейдем к созданию самого́ пульта.

В пульте я использовал 1 потенциометр и 6 кнопок и переключателей. Три переключателя будут дискретно задавать время задержки между снимками. Потенциометр выполняет псевдоаналоговую (дискретную с большим количеством шагов) регулировку. Две кнопки с фиксацией будут управлять включением программы-таймера и режимом работы пульта (с задержкой и без). Одна кнопка без фиксации (синяя на картинке) дублирует кнопку «сброс» контроллера. Количество кнопок было выбрано исходя из возможностей понравившегося мне телефонного разветвителя — у него 8 выводов, что достаточно для «земли» и 7 сигнальных линий. Схема подключения элементов проста — кнопки и потенциометр собраны вместе и подключены к общей земле и +5 В в соответствии с указанными выше схемами их индивидуального подключения. Фотография конструкции приведена далее:

Пульт управления на Freeduino
Пульт управления

Пульт управления на Freeduino
Схема в сборе в варианте автономной работы (без подключения к компьютеру) на стенде, описанном в статье «Установка для съемки панорам на базе контроллера Freeduino. Часть 1, механическая»

Те, кто уже знаком с Arduino, возможно, заметят необычное подключение пульта управления не к цифровым линиям контроллера, а к аналоговым. Так как я планирую использовать контроллер одновременно для управления шаговыми двигателями поворота камеры и для управления съемкой, приходится задействовать все доступные порты. Сигналы для шаговых двигателей и ИК-светодиода управления передаются через цифровые линии, сигналы пульта управления — через аналоговые.

Управляющая программа

Пульт управления на Freeduino, программа
Управляющую программу для пульта можно скачать по ссылке.

Отмечу некоторые особенности программы.

Пульт управления на Freeduino, программа
Первая часть программы — объявление переменных и констант

В блоке объявлений из необычного — переопределение аналоговых портов как цифровых и использование типа long для переменной счетчика задержки съемки. Аналоговые порты с адресами по умолчанию 0—5 переопределены как цифровые 14—19 — теперь к ним можно обращаться, как к стандартным цифровым. Счетчик задержки съемки cycle_delay может принимать довольно большие значения, поэтому нужно выбрать допускающий такие значения тип — long.

Пульт управления на Freeduino, программа
Функция инициализации. Обращу внимание на команды digitalWrite(var, HIGH) включения подтягивающих резисторов, встроенных в контроллер, на портах, соответствующих переменным var.

Пульт управления на Freeduino, программа
Основной цикл программы loop

Цикл будет исполняться, если включена кнопка 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-м порту и отмечаем получившуюся задержку на пульте маркером. Таким образом можно проградуировать весь диапазон допустимого угла поворота потенциометра. Далее закомментируем (/*…*/) часть программы, отвечающую за индикацию задержки. После этого используем пульт по назначению. Отмечу еще, что программа допускает изменение задержки между импульсами в процессе съемки, то есть при необходимости можно вести съемку с разными по длительности паузами, не перегружая программу.




30 сентября 2011 Г.

- Canon Freeduino Through-Hole. ,

- Canon Freeduino Through-Hole

:

   Freeduino

, Freeduino - Canon. Freeduino. , . , .

Arduino , , . , Arduino , , ( ) «Arduino: » Brian W. Evans. ( ≈10 ) :

«» +5 . , , , +5 0 . , +5 , — , LOW, — HIGH. ́ .

1 6 . . ( ) . - ( ). ( ) «» . — 8 , «» 7 . — +5 . :

   Freeduino

   Freeduino
( ) , « Freeduino. 1, »

, Arduino, , , . , . - , — .

   Freeduino,
.

.

   Freeduino,

— long . 0—5 14—19 — , . cycle_delay , — long.

   Freeduino,
. digitalWrite(var, HIGH) , , , var.

   Freeduino,
loop

, 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<cycle_delay; 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- . . (/*…*/) , . . , , , .