Espruino:Примеры/Таймлапс-камера: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlig...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =Таймлапс-камера<ref>[https://www.espruino.com/Time+Lapse+Camera www.espruino.com - Time Lapse Camera]</ref>= | ||
[Картинка] | |||
Хотя у самой [[Espruino]] недостаточно памяти, чтобы делать снимки хорошего качества, ничего не мешает вам воспользоваться [[Espruino]] для управления другими устройствами, имеющими делать такие снимки. Во многих случаях это даже более дешёвый и энергоэффективный способ для достижения того же результата. | |||
В этом руководстве мы расскажем, как сделать таймлапс-камеру при помощи дешёвой брелочной камеры и платы [[Espruino]]. | |||
С помощью [[Espruino]] мы будем имитировать нажатия на кнопки, чтобы включать камеру, переводить её в режим фотографирования, делать снимок, а затем выключать. | |||
== Нам понадобятся == | |||
* «808-ая» брелочная камера. Они бывают разных типов, у каждого из которых свои характеристики – более подробно читайте в этом отличном руководстве. Я использую камеру под номером 16. | |||
* Тонкий изолированный провод. | |||
* Паяльник с относительно тонким носиком и крепкая (в смысле, не трясущаяся) рука | |||
== Подсоединение == | |||
[Картинка] | |||
* Разберите камеру на части. Она держится на двух шурупах, которые находятся рядом с брелочным кольцом. | |||
* Выньте из корпуса печатную плату (она держится на 3 шурупах) и отключите батарею | |||
[Картинка] | |||
* Подключите провода как показано на картинке выше: | |||
** Красный провод нужно подключить к положительному терминалу батареи. | |||
** Подключите по проводу к каждой стороне затворного переключателя. Зелёный провод (тот, что ближе к датчику камеры) нужно подключить к заземлению, а другой (жёлтый) – к контакту, передающему сигнал затвора. | |||
** Оранжевый провод нужно подключить к кнопке включения на краю платы. | |||
[Картинка] | |||
* Соберите всё заново. Если ваши провода слишком толстые, то две пластиковые кнопки и три внутренних шурупа ставить обратно необязательно. | |||
* Теперь подключите это всё к [[Espruino]]: | |||
{| class="wikitable" | |||
|- | |||
! Провод !! Функция !!Espruino | |||
|- | |||
| Красный || Батарея + || Vin / JST-конектор батареи | |||
|- | |||
| Зелёный || Батарея - || GND | |||
|- | |||
| Жёлтый || Затвор || A7 | |||
|- | |||
| Оранжевый || Питание || A5 и A6 | |||
|} | |||
[Картинка] | |||
На фото выше изображён прототип [[Espruino Pico]], но вы можете воспользоваться для этого проекта и классической платой [[Espruino]]. | |||
== Как это работает == | |||
В руководстве по использованию камеры говорится следующее: | |||
Чтобы сделать снимок: | |||
* Убедитесь, что вы правильно вставили TF-камеру. | |||
* Зажмите кнопку питания примерно на 2 секунды, пока не загорится жёлтый индикатор. Это будет значить, что камера включена и готова записывать видео. Ещё раз нажмите кнопку питания – загорится красный светодиод. Это будет значить, что камера готова делать фотоснимки. | |||
* На короткое время нажмите на кнопку затвора – в результате должен мигнуть жёлтый индикатор. Это будет значить, что снимок сделан и сохранён в память. Продолжайте нажимать на эту кнопку, чтобы делать новые снимки. | |||
* Чтобы снова переключиться в режим готовности для записи видео, на короткое время нажмите на кнопку питания. | |||
Соответственно, нам нужно написать код, где будет всё то же самое (за исключением проверки карты памяти – [[Espruino]] этого сделать не сможет), и мы сделаем это при помощи таймаутов и функций обратного вызова. | |||
Единственная закавыка в том, что кнопке питания нужно, прошу прощения за тавтологию, много питания, чтобы включить камеру. И мы можем организовать это без каких-либо внешних компонентов, просто объединив два выходных контакта ('''A5''' и '''A6'''). | |||
== Код == | |||
Загрузите код ниже на [[Espruino]], напечатайте save() и готово! В результате [[Espruino]] будет питаться от батареи камеры и делать снимки каждые 60 секунд. | |||
Если вы хотите изменить этот период, сделать это можно в одной из последних строчек кода. | |||
<syntaxhighlight lang="javascript" enclose="div"> | <syntaxhighlight lang="javascript" enclose="div"> | ||
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); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Теперь с помощью этого каркаса вы также можете сделать код, который будет записывать несколько секунд видео каждые несколько минут или при обнаружении движения пироэлектрическим датчиком. | |||
=См.также= | =См.также= |
Версия от 18:26, 14 июля 2021
Таймлапс-камера[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);
Теперь с помощью этого каркаса вы также можете сделать код, который будет записывать несколько секунд видео каждые несколько минут или при обнаружении движения пироэлектрическим датчиком.
См.также
Внешние ссылки