Espruino:Примеры/Espruino, питаемая от солнечной батареи
Espruino, питаемая от солнечной батареи[1]
Итак, допустим, вы написали программу, хотите загрузить её на Espruino, но при этом не беспокоиться о смене батареи.
Самое очевидное решение – это воспользоваться солнечной панелью и батареей (чтобы Espruino могла работать и ночью). Для этого отлично подойдёт фонарь, питаемый от солнечной батареи (такое устройство можно купить относительно дёшево). Производитель заявляет, что внутри такого фонаря стоит 3.6-вольтовая перезаряжаемая литиевая батарея, которая идеально подойдёт для Espruino.
Нам понадобятся
- Плата Espruino
- Маленький фонарь, питаемый от солнечной батареи (на eBay такой можно купить за 2$)
- Старая батарея от мобильного телефона (см. ниже)
- Батарейный JST-коннектор (о том, где взять его, читайте в этой статье)
Фонарь
Маленькое устройство, оснащённое батареей и солнечной панелью, всего за 2 доллара... Кажется, это слишком хорошо, чтобы быть правдой. Но, как ни странно, такие устройства есть!
Вскройте фонарь, вставив нож в боковой шов и поддев крышку. Возможно, сначала лучше согнуть и вынуть металлическое кольцо, которое держит брелочное отверстие.
На первый взгляд, всё отлично. Внутри у нас маленькая печатная плата с 3 светодиодами, переключатель и круглый пластиковый батарейный корпус с красноречивой надписью «CHARGE».
Но если взглянуть чуть поближе, становится видна пара проблем.
- В нижней части этого фото можно заметить тёмно-красную солнечную панель с двумя металлическими пластинами на ней. Но они ни к чему не подключены! То есть хотя в этом фонаре и есть рабочая солнечная панель, он вообще не питается от солнечной энергии.
- Если снять круглый пластиковый корпус с надписью «CHARGE», то обнаружится, что внутри есть две батарейки CR2016. Вместе они дают 6 вольт, а не 3.6 вольт, но они не перезаряжаемые.
- Если померить цепь платы вольтметром, то обнаружится, что батарейки и светодиоды стоят задом наперёд, и поэтому дорожки, помеченные «+», на самом деле являются «-» и наоборот. Солнечная панель стоит правильно, так что если вы подключите её, она будет разряжать батареи, а не заряжать их!
Как это исправить
Если ваш фонарь устроен согласно заявленным характеристикам (то есть оснащён перезаряжаемой батареей и подключенной солнечной панелью), то поздравляем. Если нет, то к нему нужно будет подключить качественную перезаряжаемую батарею.
- Осторожно отпаяйте все компоненты от платы.
- Капните две капли припоя между солнечной панелью и печатной платой – чтобы, наконец, подключить их друг к другу!
- Возьмите старую телефонную батарею и определите её положительный (+) и отрицательный (-) терминалы. Они, как правило, уже помечены, но если нет, это можно узнать вольтметром. Также определите положительный и отрицательный терминалы у солнечной панели.
- Возьмите провода и припаяйте к батарее солнечную панель и батарейный JST-коннектор. Более подробно о JST-коннекторе читайте в этой статье.
Готово! Теперь у вас должна быть батарея, питаемая от солнечной энергии. Вы также можете приклеить одну из крышек фонаря к верхней части батареи, чтобы защитить её (как показано на самом первом фото в этой статье).
Энергопотребление
Давайте посмотрим, сколько энергии входит в батарею и уходит из неё:
Энергия | Причина |
---|---|
- 110 мкА | Espruino в режиме глубокого сна (см. статью об энергопотреблении). |
- 60 мкА | Espruino может проснуться (потребляя 35 мА) на 0.1 с каждую минуту, то есть получаем 35000 мкА * 0.1 с / 60 с = 58 мкА. |
+ 150 мкА | Солнечная панель генерирует около 300 мкА при ярком свете, но так может быть только половину дня. |
= - 20 мкА |
В общем, результат так себе. Дефицит – 20 мкА (разве что вы не живёте рядом с экватором, благодаря чему эффективность солнечной панели будет выше). Это можно исправить, если просыпаться реже и на более короткий промежуток времени. Кроме того, 20 мкА – это не конец света. С таким дефицитом телефонная батарея на 750 мА·ч проработает 4 года!
Проблема в солнечной панели. С этими 150 мкА панели (без Espruino) по-прежнему потребуется 6 месяцев, просто чтобы зарядить батарею.
Мы можем оптимизировать Espruino – в режиме глубокого сна большая часть потребляемой энергии приходится на регулятор напряжения. Но мы питаем Espruino от литий-ионной батареи, поэтому регулятор нам не нужен, а без него Espruino станет гораздо более энергоэффективной. Более подробно о том, как снять регулятор напряжения, читайте в этой статье. В результате энергопотребление должно уменьшиться:
Энергия | Причина |
---|---|
- 30 мкА | Espruino без регулятора напряжения в режиме глубокого сна. |
- 60 мкА | Espruino может проснуться (потребляя 35 мА) на 0.1 с каждую минуту, то есть получаем 35000 мкА * 0.1 с / 60 с = 58 мкА. |
+ 150 мкА | Солнечная панель генерирует около 300 мкА при ярком свете, но так может быть только половину дня. |
= + 60 мкА |
Вот теперь отлично! Теперь Espruino будет питаться от солнечной панели, а батарея будет заряжаться.
Код
Теперь давайте займёмся кодом. Включение режима глубокого сна выполняется очень просто – при помощи функции setDeepSleep(1);. В коде ниже мы будем мигать светодиодом каждые 10 секунд, а также записывать напряжение батареи в массив. Обратите внимание, что мы добавляем «0.7» к напряжению батареи, потому что после удаления регулятора напряжения мы подключили к плате диод (что снизило напряжение на 0.7 вольт). Это не самый точный, но всё же рабочий способ измерения напряжения.
var history = new Uint8Array(64);
var currentHistory = 0;
function onTimer() {
currentHistory = (currentHistory+1) % history.length;
history[currentHistory] = E.getAnalogVRef()+0.7;
digitalWrite(LED1, 1);
setTimeout(function () {
digitalWrite(LED1, 0);
}, 10);
}
setInterval(onTimer, 10000);
setDeepSleep(1);
Теперь просто отключите USB-коннектор и готово. Espruino будет работать вечно!
Как уже говорилось выше, литий-ионные и литий-полимерные батареи не следует заряжать выше 4.2 вольт. Зная, что солнечная панель генерирует очень мало энергии, мы можем сделать так, чтобы уровень батареи никогда не добрался до этой отметки, просто определив момент, когда напряжение станет слишком высоким, а потом включив светодиод (который потребляет больше энергии, чем генерирует солнечная панель). Всё это можно организовать при помощи вот этой функции onTimer():
function onTimer() {
var voltage = E.getAnalogVRef()+0.7;
digitalWrite(LED2, voltage>4.2);
currentHistory = (currentHistory+1) % history.length;
history[currentHistory] = voltage;
digitalWrite(LED1, 1);
setTimeout(function () {
digitalWrite(LED1, 0);
}, 10);
}
См.также
Внешние ссылки