Espruino:Примеры/Таймлапс-камера
Таймлапс-камера[1]
![](/ruwiki/images/4/40/Time_Lapse_Camera_camera.jpg)
Хотя у самой Espruino недостаточно памяти, чтобы делать снимки хорошего качества, ничего не мешает вам воспользоваться Espruino для управления другими устройствами, имеющими делать такие снимки. Во многих случаях это даже более дешёвый и энергоэффективный способ для достижения того же результата.
В этом руководстве мы расскажем, как сделать таймлапс-камеру при помощи дешёвой брелочной камеры и платы Espruino.
С помощью Espruino мы будем имитировать нажатия на кнопки, чтобы включать камеру, переводить её в режим фотографирования, делать снимок, а затем выключать.
Нам понадобятся
- «808-ая» брелочная камера. Они бывают разных типов, у каждого из которых свои характеристики – более подробно читайте в этом отличном руководстве. Я использую камеру под номером 16.
- Тонкий изолированный провод.
- Паяльник с относительно тонким носиком и крепкая (в смысле, не трясущаяся) рука
Подсоединение
![](/ruwiki/images/0/0d/Time_Lapse_Camera_disasm.jpg)
- Разберите камеру на части. Она держится на двух шурупах, которые находятся рядом с брелочным кольцом.
- Выньте из корпуса печатную плату (она держится на 3 шурупах) и отключите батарею
![](/ruwiki/images/7/74/Time_Lapse_Camera_wiring.jpg)
- Подключите провода как показано на картинке выше:
- Красный провод нужно подключить к положительному терминалу батареи.
- Подключите по проводу к каждой стороне затворного переключателя. Зелёный провод (тот, что ближе к датчику камеры) нужно подключить к заземлению, а другой (жёлтый) – к контакту, передающему сигнал затвора.
- Оранжевый провод нужно подключить к кнопке включения на краю платы.
![](/ruwiki/images/f/f2/Time_Lapse_Camera_assembled.jpg)
- Соберите всё заново. Если ваши провода слишком толстые, то две пластиковые кнопки и три внутренних шурупа ставить обратно необязательно.
- Теперь подключите это всё к Espruino:
Провод | Функция | Espruino |
---|---|---|
Красный | Батарея + | Vin / JST-конектор батареи |
Зелёный | Батарея - | GND |
Жёлтый | Затвор | A7 |
Оранжевый | Питание | A5 и A6 |
![](/ruwiki/images/7/7a/Time_Lapse_Camera_finish.jpg)
На фото выше изображён прототип Espruino Pico, но вы можете воспользоваться для этого проекта и классической платой Espruino.
Как это работает
В руководстве по использованию камеры говорится следующее:
Чтобы сделать снимок:
- Убедитесь, что вы правильно вставили TF-камеру.
- Зажмите кнопку питания примерно на 2 секунды, пока не загорится жёлтый индикатор. Это будет значить, что камера включена и готова записывать видео. Ещё раз нажмите кнопку питания – загорится красный светодиод. Это будет значить, что камера готова делать фотоснимки.
- На короткое время нажмите на кнопку затвора – в результате должен мигнуть жёлтый индикатор. Это будет значить, что снимок сделан и сохранён в память. Продолжайте нажимать на эту кнопку, чтобы делать новые снимки.
- Чтобы снова переключиться в режим готовности для записи видео, на короткое время нажмите на кнопку питания.
Соответственно, нам нужно написать код, где будет всё то же самое (за исключением проверки карты памяти – Espruino этого сделать не сможет), и мы сделаем это при помощи таймаутов и функций обратного вызова.
Единственная закавыка в том, что кнопке питания нужно, прошу прощения за тавтологию, много питания, чтобы включить камеру. И мы можем организовать это без каких-либо внешних компонентов, просто объединив два выходных контакта (A5 и A6).
Код
Загрузите код ниже на Espruino, напечатайте save() и готово! В результате Espruino будет питаться от батареи камеры и делать снимки каждые 60 секунд.
Если вы хотите изменить этот период, сделать это можно в одной из последних строчек кода.
var PWR = [A5,A6];
// У терминала PWR будет активный высокий уровень.
// Для включения камеры нужно много питания,
// так что мы воспользуемся для этого двумя контактами.
var SHUTTER = A7;
// У терминала SHUTTER будет активный низкий уровень.
// Переводим контакты питания в режим HIGH на заданный период времени,
// ждём и запускаем функцию обратного вызова:
function pulsePWR(time, callbackDelay, callback) {
digitalWrite(PWR,255);
setTimeout(function() {
digitalRead(PWR); // размыкаем цепь
if (callback) setTimeout(callback,callbackDelay);
},time);
}
// Включаем питание:
function powerOn(callback) {
pulsePWR(2000, 2000, callback);
}
// Выключаем питание:
function powerOff(callback) {
pulsePWR(3000, 2000, callback);
}
// Для переключения режимов
// будет использоваться короткое нажатие на кнопку питания:
function toggleMode(callback) {
pulsePWR(100, 1000, callback);
}
// Для снимка будет использоваться
// короткое нажатие на кнопку питания:
function shutter(callback) {
digitalWrite(SHUTTER,0);
setTimeout(function() {
digitalRead(SHUTTER); // размыкаем цепь
if (callback) setTimeout(callback,1000);
},100);
}
// Склеиваем все команды вместе,
// чтобы включить камеру и сделать снимок:
function takePicture() {
powerOn(function() {
toggleMode(function() {
shutter(function() {
powerOff();
});
});
});
}
// Мигаем каждые 15 секунд, чтобы показать, что мы «живы»:
setInterval(function() {
digitalPulse(LED1,1,20);
}, 15000);
// Делаем снимок каждые 60 секунд:
setInterval(function() {
takePicture();
}, 60*1000);
// Переходим в энергосберегающий режим:
setDeepSleep(1);
Теперь с помощью этого каркаса вы также можете сделать код, который будет записывать несколько секунд видео каждые несколько минут или при обнаружении движения пироэлектрическим датчиком.
См.также
Внешние ссылки