Облако тегов

Глобус

Навигация

Вход на сайт

  • Войти с Twitter

Как сделать таймер для TimeLapse своими руками

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

Если вы разбираетесь в контроллерах и можете спаять программатор самостоятельно, дальше можно не читать :) Скорее всего, это вам известно и так. И, более того, вы можете сделать тоже самое значительно дешевле, чем я расскажу.

Я нашел интересную для себя платформу, на которой энтузиасты делают различные приборы от роботов с дистанционным управлением через интернет, до станков с ЧПУ и автопилотов для радиоуправляемых самолетов.

Платформа называется Arduino. Освоить ее может любой желающий. Практически ничего не надо паять. По крайней мере для первых экспериментов уж точно. Что это такое? Состоит она из аппаратной и программной частей.

Аппаратная представляет собой плату, на которой уже есть контроллер, стабилизатор напряжения для питания его и подключаемых устройств, куча припаяных выходов для внешних устройств и разъем USB для подключения к компьютеру для программирования. Программная часть - это бесплатное программное обеспечение, позволяющее писать программы для контроллера на C/C++ без вникания в ассемблер. Так же позволяет писать код и для компьютера, например для взаимодействия Arduino с PC. Программное обеспечение мультиплатформенное. Работает в Win, MacOS и Linux.

Если вы никогда не сталкивались с электронными приборами и дальше закона ома из школьной программы не продвинулись, то это как раз для вас. Для начала стоит конечно почитать обзорные статьи про Arduino. Но можно сразу посмотреть 10-ти серийный практический фильм на русском языке, где подробнейше объясняется все, от того как что подключать, до того как программировать и взаимодействовать с PC и окружающим миром. Очень полезное пособие. Я его нашел, когда уже разобрался в Arduino и пожалел, что не раньше. Много времени сэкономил бы :)

Arduino  - открытая платформа и все могут ее копировать. Единственное условие, называть свои клоны другим именем. Так появись Freeduino, Carduino, Orduino и множество других. Все они совместимы друг с другом и немного добавляют функционала к базовой идее. А иногда и просто ее копируют.

Что надо купить для первых опытов:

1. Плату Arduino (я нашел плату Freeduino Nano в мск за 499 рублей).

2. Инфракрасный фото диод. Цена ему 10 рублей. Можно выдрать из старого пульта ДУ.

3. Резистор (он же сопротивление) на 330 ом. Он нужен для правильного подключения фотодиода к плате.

4. Проводочки для соединения.

5. Если в вашей камере нет ИК порта, то еще понадобится микромоторчик для нажатия на кнопку спуска. Например очень популярный у любителей радиоуправляемых моделей HXT900. В мск его реально купить рублей за 200, если не хочется заказывать в хоббийном магазине за рубежом. Там он стоит 2-3 доллара без доставки.

6. Можно для удобства купить разъемов BLS-40 для удобства соединения всего этого.  В нем 40 штырьков и он легко режется на нужное количество контактов.

7. Еще можно купить батарейный отсек. Я выбрал такой для 4-ех ААА аккумуляторов. Про них надо написать отдельно. Пока обойдемся питанием от USB компьютера. Для начала обойдемся пунктами 1-4. Моторчик прикрутим в конце :) Вот так выглядит Freeduino Nano в сравнении с AA и AAA аккумуляторами:

Вот схема, которую мы соберем:

Все платы Arduino немного отличаются по внешнему виду, но входы/выходы у них промаркированы одинаково. На схеме видно, что плата имеет аналоговые входы/выходы с А0 по А5, цифровые с D0 по D13. Так же есть Вход/Выход плюс 5 вольт. Пока нам этого достаточно.

Дальше я их буду называть контакты. А являются они входом или выходом определяется ежу в программе. Про контакт "плюс 5 вольт" надо добавить, что при подключении к USB он является выходом и от него можно питать маломощные приборы, например тот самый "моторчик" из п6 нашего списка. Если же USB отключено, то мы можем подать напряжение на наш "контакт +5вольт" для питания платы. Про это я напишу отдельно ниже. Пока считаем, что все питается от USB. Последний контакт GND - это земля или еще иногда называют "минус". Про него надо знать, что если мы питаемся от USB, то "минус" всех подключенных к Arduino приборов соединяется с ним. Если мы питаемся от батареек, то "минусы" все устройств подключаются к минусу батареек и GND Arduino тоже обязательно подключить к минусу батареек.  Но об этом позже. Подключаем все к ардуине.

На схеме ниже виден порядок подключения:   К 13-му цифроводу контакту подключаем резистор. К резистору анод фотодиода.  Анод определить очень просто.  Его "нога" длиннее, чем "нога" катода.  Катод соединяем с землей (GND).  

Подключаем плату в USB порт копьютера. Соединение завершено. Теперь пора заняться программированием. Тут немного сложнее, если вы не программист. Но тоже осуществимо. Идем на сайт Arduino  и скачиваем последнюю версию программы. Устанавливаем. Запускаем. На экране будет примерно следющее:

Идем в меню Tools, Board и там выбираем ту плату, которую купили. У меня первый пункт - это Nano с контроллером Atmega328. Далее в меню Tools,Serial Port выбираем порт к которому подключена плата Arduino. У меня Com1. На MacOS и Linux порту будет имет длинное название, содержащее символы TTY в имени.

Я не буду рассказывать технологию управления фотоаппаратами с помощью ИК пультов, скажу сразу, что есть готовая библиотека под все современные камеры. Для своей старой мыльницы мне пришлось ее переписать, она у меня редкая очень оказалась и пульт для нее левый (код в конце). Итак, идем на страницу автора библиотеки. Скачиваем последнюю версию, файл с названием примерно таким: multiCameraIrControl1-5.zip

Распаковываем.

Переходим в программу Arduino и выбираем меню File, Open. Находим папку, в которую распакована наша библиотека. Там в папке samples ищем марку камеры. Например Canon. Заходим внутрь и выбираем файл с одноименным названием Canon. Нажимаем "Открыть". На экране будет следующее:

Эти программы в Arduino называются скетчами. Нам надо поправить скетч для нашей задачи. Первое что надо сделать - это перетащить мышкой файлы multiCameraIrControl.h и multiCameraIrControl.cpp в окно Arduino и изменить строчку

#include <multiCameraIrControl.h>

на

#include "multiCameraIrControl.h"

То есть угловые скобки поменять на кавычки. Это скажет Arduine искать добавленные нами файлы в текущей папке. Иначе не заработает пример. И немного изменим код. Получиться должно следующее:

 

#include "multiCameraIrControl.h"

Canon D5(13);

void setup() { }

void loop() {

D5.shutterNow();

delay(5000);

}

Прокомментирую код:

#include "multiCameraIrControl.h" //Подключаем библиотеку для управления фотокамерами.

Canon D5(13);                 //Определяем переменную D5 типа Canon. Если у вас другая камера, то у вас и

//тип будет другой. В скобках указываем 13, что значит, что подключили фотодиод к 13-му контакту ардуины.

void setup()                   

// Эта функция в данный момент пуста, она нам не нужна пока. Она вызывается один раз по ходу выполнения программы. Как использовать ее ниже.

{ }

void loop() { // Эта функция представляет из себя бесконечный цикл. Фактисески она вызывается бесконечно число раз, пока есть питание на ардуине.

D5.shutterNow();

//Тут мы говорим нашей ардуине, что надо подать на наш фотодиод определенный импульс, чтобы

//камера поняла его и сделала кадр. Если интересно, можно посмотреть исходники библиотеки

//и увидеть как кодируется исгнал для разных камер. Но это довольно сложно и с ходу свою функцию для новой камеры не написать. delay(5000);        

//Это задержка перед следующим кадром - 5 мекунд. }

Вот и все. Таким образом у нас будет бесконечно с интервалом в 5 секунд срабатывать затвор камеры. Не забудьте в камере выставить режим срабатывания по ИК пульту. Теперь, надо "прошить" контроллер. То бишь записать в него нашу программу. Для этого идем в меню File, Upload to I/O board или жмем кнопку со стрелкой вправо и подсказкой Upload (она вторая справа, не путайте с первой слева кнопкой!). Теперь останется только направить фотодиод на нашу камеру и она будет снимать с интервалом в  5 секунд пока не сядет аккумулятор и не кончится место на карте памяти. Что делать, если нет ИК порта в фотоаппарате? Ничего страшного. Для этого у нас есть "моторчик". На самом деле - это не просто моторчик, а так называемый серво-привод или просто серво (servo).  Он достаточно умный и содержит в себе свой контроллер. Он может управляться ардуиной и в зависимости от подаваемого сигнала, поворачиваться на определенный угол. Более того, он имеет обратную связь, что позволяет считать угол, на который повернута серва. Подключим его вместо светодиода. Что означают провода у серво моторчиков?

Обычно сервы имеют три провода: коричневый или черный - земля, красный - питание (4-6 вольт обычно), оранжевый - управляющий. Правильную схему подключения всегда смотрите в так называемом даташите (datasheet). это документ в котором есть вся необходимая информация по тому или иному электронному компоненту. Например у Arduino тоже есть свой Datasheet . Итак, красный провод присоединяем к "контакту +5 вольт", коричневый к GND, оранжевый  - к контакту, например 12. Не забывайте отсоединять плату от питания, на время всех коммутаций. Для того чтобы нажать кнопку спуска моего фотоаппарата, надо повернуть белую тягу на оси сервы на 27 градусов. Угол расчитывается экспериментально, чтобы и нажатие было четким и серва не жужжала от натуги. Прикручиваем моторчик изолентой или пластиковой стяжкой к фотоаппарату так, что бы тяга попадала на кнопку при повороте. Это можно сделать после проверки программы. Изменим программу.

#include <Servo.h>

//подключаем стандартную библиотеку Arduino для управления сервами, используем угловые скобки, так как она стандартная.

Servo shot; //Создаем объект типа серво-привод

void setup()

//Вот и пригодилась функция Setup. Она вызывается один раз при включении питания ардуины, что нам и нужно.

{

shot.attach(12); //Сообщаем нашему объекту, что серва подключена к 12 контакту ардуины

}

void loop()

{

//управление движком для нажатия на кнопку

shot.write(117);

//Поворачиваем серву на 27 градусов. Функция принимает параметр от 0 до 180-ти,

//что соответствует крайним левому и правому положения сервы. Серва обычно имеет ход в 180 градусов.

delay(2000);     

// Пауза 2 сек. зависит от скорости сервы и скорострельности вашей камеры. У моей надо держать кнопку около 2-х секунд для фокусировки и снимка.

shot.write(90); 

// Возвращаем тягу в центральное положение

delay(500);        

// Пауза 0,5 сек. Даем время серве на поворот. Цифра примерная, зависит от сервы.

}

Как видно, с одной стороны программирование довольно сложно для новичка, а с другой программы получаются очень простые. В этом и состоит удобство Arduino. Многие вещи в ней делаются очень просто. Но конечно, если хочется большего, то и программы получатся значительно сложнее. Про новые пульты: Для моей мыльницы Canon S60 общеизвестный пульты Canon RC1 и RC5 не подходят. И, соответственно, вышеупомянутая библиотека не годится. Для все линейки PowerShot (S60/S70/S1IS/G1/G2/G3/G5/G6/Pro90/Pro1) Canon использовала специальный пульт Canon WL-DC100. Его поддержку я добавил в библиотеку, порывшись в технологии кодирования ИК посылок в пультах. Если у вас одна из этих камер еще сохранилась, то вот код:

class CanonWLDC100

{

public: CanonWLDC100(int pin);

void shutterNow();

private: int _pin; int _freq;

};

CanonWLDC100::CanonWLDC100(int pin)

{

pinMode(pin, OUTPUT);

_pin = pin; _freq = 38;

}

void CanonWLDC100::shutterNow()

{

bool _seq[] = { 0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1 };

high(9042,_freq,_pin);

wait(4379);

for (int i=0;i<sizeof(_seq);i++)

{

if (_seq[i]==0)

{

high(612,_freq,_pin);

wait(512);

} else

{

high(612,_freq,_pin);

wait(1621);

}

};

high(599,_freq,_pin);

}

А использовать в программе надо так:

#include "multiCameraIrControl.h"

CanonWLDC100 D100(13);

void setup(){ }

void loop()

{

D100.shutterNow();

delay(5000);

}

Если библиотека, не поддерживает вашего пульта, присылайте модель пульта, поищем спецификацию и напишу для него новый класс. Теперь как запитать эту схему от батареек. Для автономного питания я использую 4 ААА аккумулятора. Их общее напряжение 4.8 вольта вполне достаточно для Ардуины. Что будет, если вместо них подключить батарейки я не знаю. У них напряжение больше и как себя поведет ардуина я не знаю. На форуме ардуины мне сказали что можно попробовать и разница не существенна. Но на свой страх и риск. Еще раз советую посмотреть видео по ссылке выше - это даст старт творческой фантазии. Ведь контроллеры используются во всех устройствах, окружающих нас. И в мигающих елках и в часах. Кстати, часы тоже можно сделать при помощи Arduino и светодиодного дисплея. С Arduino можно сделать управление домашними приборами через интернет, поворотную веб камеру для дома, интересного робота для ребенка. Способы применения лучше всего смотреть на ютьюбе.   Первый тест TimeLapse прямо на балконе на пару часов.

Видео зациклил туда-сюда несколько раз для разнообразия :)   PS. Вообще говоря можно сделать и чисто механический триггер для камеры. Взять мотор с редуктором, подходящим по скорости, прилепить как-нить к фотоаппарату и пусть крутится бесконечно и давит кнопку. Но раз уж занялся подвеской фото к змею, то грех не воспользоваться попутными знаниями. PS2. В сети много проектов универсальных пультов на разных контроллерах. Есть на AVR (как в ардуино), есть на PIC. Они требуют отдельных программаторов и кода на ассемблере, но зато там можно сделать мелкую плату и всунуть в понравившийся корпус.

Вот пара ссылок: 1 и 2. Эти ребята очень помогли с добыванием кодов  для моего пульта. За что им большое спасибо.  

Комментарии

Доброго времени суток! Прочитал вашу статью про таймер таймлэпс, мне очень понравилось я загорелся, и сразу купил ардуину
поморгал светодиодом и решил заморачиваться до конца но...камера Samsung WB500, пульт SRC-A5 другое название EZ-CREMO0A5
пульт для моей камеры наверно редкость нашел за границей за ~30евро дороговато для бюджетной камеры
не представляю как получить код с этого пульта. буду признателен если подскажите как решить эту проблему с уважением Александр Комаров.

Обыскался :) Но, к сожалению, спецификации на самсунговские пульты нет в открытом доступе. От пентакса не подошло?

Код можно принять с помощью не хитрой схемы
Нужно всего -то ардуино и ИК приемник.на ютубе есть некий Дмитрий Осипов.он делал проект по управлению ИК пультом.в одном из видео он получает код с пульта.в описании есть скетч(программа). С помощью этого видео сделал дистанционный ИК спуск

Код можно принять с помощью не хитрой схемы
Нужно всего -то ардуино и ИК приемник.на ютубе есть некий Дмитрий Осипов.он делал проект по управлению ИК пультом.в одном из видео он получает код с пульта.в описании есть скетч(программа). С помощью этого видео сделал дистанционный ИК спуск

Вот задачка так задачка :) С ходу не нашел описания. Надо искать тип кодировки.
Я бы попробовал в такой последовательности:
1. Самсунг часто делает клоны фотоаппаратов по лицензии. Например, пентакса и вроде даже панасоника. Перепробовать их коды из библиотеки.
2. Попробовать узнать действительно ли это чей-то клон. Если нет, посмотреть какие еще есть пульты у самсунговских аппаратов. Самая понятная библиотека кодов к пультам лежит тут: http://lirc.sourceforge.net/remotes/samsung/ Если там найти похожий пульт, это уже половина успеха.
3. Есть еще библиотеки пультов. Попробую посмотреть там.
4. Самый фиговый вариант - искать человека с таким пультом и осцилографом.

Вечером поищу варианты.

Добавить комментарий