Espruino:Примеры/Таймлапс-камера

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Таймлапс-камера[1]

Хотя у самой Espruino недостаточно памяти, чтобы делать снимки хорошего качества, ничего не мешает вам воспользоваться Espruino для управления другими устройствами, имеющими делать такие снимки. Во многих случаях это даже более дешёвый и энергоэффективный способ для достижения того же результата.

В этом руководстве мы расскажем, как сделать таймлапс-камеру при помощи дешёвой брелочной камеры и платы Espruino.

С помощью Espruino мы будем имитировать нажатия на кнопки, чтобы включать камеру, переводить её в режим фотографирования, делать снимок, а затем выключать.

Нам понадобятся

  • «808-ая» брелочная камера. Они бывают разных типов, у каждого из которых свои характеристики – более подробно читайте в этом отличном руководстве. Я использую камеру под номером 16.
  • Тонкий изолированный провод.
  • Паяльник с относительно тонким носиком и крепкая (в смысле, не трясущаяся) рука

Подсоединение

  • Разберите камеру на части. Она держится на двух шурупах, которые находятся рядом с брелочным кольцом.
  • Выньте из корпуса печатную плату (она держится на 3 шурупах) и отключите батарею
  • Подключите провода как показано на картинке выше:
    • Красный провод нужно подключить к положительному терминалу батареи.
    • Подключите по проводу к каждой стороне затворного переключателя. Зелёный провод (тот, что ближе к датчику камеры) нужно подключить к заземлению, а другой (жёлтый) – к контакту, передающему сигнал затвора.
    • Оранжевый провод нужно подключить к кнопке включения на краю платы.
  • Соберите всё заново. Если ваши провода слишком толстые, то две пластиковые кнопки и три внутренних шурупа ставить обратно необязательно.
  • Теперь подключите это всё к Espruino:
Провод Функция Espruino
Красный Батарея + Vin / JST-конектор батареи
Зелёный Батарея - GND
Жёлтый Затвор A7
Оранжевый Питание A5 и A6

На фото выше изображён прототип 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);

Теперь с помощью этого каркаса вы также можете сделать код, который будет записывать несколько секунд видео каждые несколько минут или при обнаружении движения пироэлектрическим датчиком.

См.также

Внешние ссылки