В этот раз объектом нашего внимания стал проект развлекательной серии, предложенный автором reichley – мы будем создавать кормушку для животных с встроенной камерой наблюдения. Чтобы не зависеть от электросети для питания, будем использовать автономные блоки с аккумуляторами и зарядкой от солнечных элементов. 

На выполнение данного проекта среднего уровня сложности, представленного на hakster.io, вам потребуется около 3 часов времени.

В проекте используются следующие технологии:

  • основы деревообработки (дом–кормушка);
  • микроэлектроника: Pi Zero W с модулем камеры и питанием от батарей/солнечных батарей и включением/выключением с помощью ATtiny85 и BH1750.

 

Что потребуется для сборки (часть комплектующих можно приобрести в интернет-магазине evo.net.ua по приведенным ссылкам):

Аппаратная часть:

  • Raspberry Pi Zero Wireless × 1    
  • Raspberry Pi Camera Module × 1    
  • Raspberry pi zero v1.3 camera cable × 1    
  • Чехол для камеры Raspberry pi camera board case × 1    
  • Microchip Technology ATtiny85 × 1    
  • SparkFun 8-pin DIP socket × 1    
  • Солнечные панели ALL POWERS 2.5W 5V 500mAh solar panel × 4    
  • Модуль зарядки tp4056 lithium charging module × 4    
  • 3 x 2 Velleman Plastic Project Case × 1    
  • Модуль датчика освещённности bh1750 lux sensor module × 1    
  • Диод 1N4001 × 4    
  • Разъём Adafruit JST 2-pin connector × 1    
  • Плата адаптера питания Pimoroni LiPo SHIM × 1    

 

Программная часть:

motioneye
squirrelkam os (raspbian lite [april 2018], motioneye, homebridge, homebridge-camera-ffmpeg, etc.)

 

Идея проекта пришла к автору когда он наблюдал за белками, которые стаями кружили вокруг его дома. Дело было весной и руки просто чесались сделать что-то, с одной стороны для развлечения, а с другой стороны для проверки способов беспроводной передачи видео с помощью микрокомпьютера Raspberry Pi. Так и появилась идея "белко-камеры".

 

Шаг 1. Планирование и сборка каркаса

Первым делом надо было решить, насколько большим надо создавать беличий дом, где предполагалось разместить камеру, и будет ли дом привязан к бытовой электросети или будет автономным (используя солнечные панели, модули зарядки литиевых аккумуляторов и аккумуляторы типа 18650). Не долго размышляя склонились к последнему варианту: автономности и возобновляемым источникам энергии.

Ниже приведены эскизы домика ... В наличии была сосновая доска толщиной 1/2 дюйма, но это не жёсткое условие, поскольку дом, сделанный из чего-то и более тонкого, легко выдержит солнечные панели, макетную плату, батареи и другие части.

Основание дома было измерено таким образом, чтобы оно соответствовало перилам палубы, построенным из 2 дюймов на 6 дюймов. После измерения размера солнечных панелей, которые были в наличии (5,1"x 5,9", 5В, 500 мАч, макс. 2,5 Вт), стало понятно, насколько большой должна быть крыша дома, чтобы разместить панели, покрывающие обе её стороны. 

Ниже представлен готовый каркас с несколькими слоями морилки и парой слоев лака.

 

Шаг 2. Солнечные панели, литиевые зарядные модули и держатели батарей 18650

Следующим шагом стал монтаж панелей с достаточным провисанием, чтобы их можно было прикрепить к макетной плате, а затем отодвинуть, чтобы нанести клей, прежде чем прикрепить к крыше. Затем подключаем 4 литиевых зарядных модуля TP4056 и 4 держателя батарей 18650. Для положительных входов в цепи зарядки (от солнечных панелей) требуется блокирующий диод (1N4001), включенный последовательно, чтобы ток от батарей не протекал через панели ночью, когда на панелях нет напряжения.

ВАЖНОЕ ПРИМЕЧАНИЕ: Подключение цепи зарядного модуля сделано параллельно, чтобы батареи 3,7-4,2 В 2600 мАч сохраняли одно напряжение (макс. 4,2 В), но обеспечивали значительный общий ток / емкость ... макс. до 10400 мАч. Кроме того, поскольку в наличии не было зарядного модуля, который мог бы заряжать несколько батарей от одного источника, поэтому выбрали безопасную конфигурацию «1 модуль на 1 батарею».

Затем припаиваем макетную плату ATtiny85 к плате (подробнее о ATtiny85 ниже) вместе с блокирующими диодами. После подключения панелей к входам литиевого зарядного устройства можно визуально проверить проводку, поместив обе стороны дома на достаточное количество солнечного света и наблюдая, как загораются красные светодиоды «зарядки» модуля.

 

 

 

Шаг 3. Питание: почему используются  ATtiny85 и LiPo SHIM

Многие сайты протестировали энергопотребление Pi Zero W. В наше проекте мы будем транслировать потоковое видео, а также использовать Wi-Fi, поэтому пришлось это учитывать. В целом устройство потребляет около 225-250 мАч. Теоретически, если бы RPi работал 24/7, ему потребовалось бы 6000 мАч. Поскольку 4 аккумулятора обеспечивают всего 10400 мАч, то вы можете использовать его менее чем на 2 дня. Но у нас 4 панели, не так ли? Предполагая, что будем получать только ~ 4 «качественных» часа солнечного света в день, а также при условии, что не более 250 мАч на панель в час, что восполнит только около 4000 из 6000 мАч, используемых в течение 24-часового периода. И это предположение относится к «удачному» солнечному дню. Если бы было частично солнечно или пасмурно, то стоит рассчитывать на ~ 100 мАч (или меньше) на панель в час.

Как уменьшить потребление Pi Zero и камеры? И есть ли вообще смысл стримить в темноте?

В комплект входят LiPo SHIM, BH1750 и ATtiny85.

ПРИМЕЧАНИЕ. Мы также включили в скрипт на python "clean shutdown" – функцию хронометража, которая отключает питание "белко-камеры" после 8 часов работы. 

LiPo SHIM имеет двоякое назначение. Во-первых, Pi Zero работает от 5В, но батареи выдают только 4,15В (при полной зарядке). SHIM увеличивает входное напряжение LiPo до 5В при сохранении КПД ~ 96%! Конечно, есть более дешевые повышающие преобразователи ... но большинство из них имеют КПД всего 70-80%, что в данном случае неприемлемо, поскольку мы уже и так находимся в затруднительном положении по потреблению энергии и её восполнению. Вторая цель SHIM – это изящный «разрешающий» контакт. При опускании на землю SHIM отключает питание RPi. Вот где блистают ATtiny85 и BH1750.

Измеряя внешнее освещение (съемка на 100 люкс, что соответствует пасмурному дню) каждые 5 минут, мы можем определить, достаточно ли светлая погода, чтобы производить приличные кадры потокового видео, или слишком темно (сумерки, пасмурно) и вместо этого надо выключить RPi. В этом случае нам нужно держать вывод ATtiny85 на высоком или низком уровне, чтобы не уйти в спящий режим ATtiny. Но не беспокойтесь. В активном состоянии и при измерении или в части задержки кода ATtiny (и BH1750) потребляют не более 1,05 мАч. Более 24 часов 24 мАч - это НАМНОГО МЕНЬШЕ, чем, скажем, ... 2500-3500 мАч от работы RPi, когда он не будет эффективно снимать просматриваемое видео. Код для загрузки в ATtiny [с помощью Arduino IDE] приведен ниже.

     

 

Шаг 4. Код для ATtiny85, скрипт python "выключение / работа", общая схема цепи

Ниже вы найдете код IDE Arduino, написанный и загруженный в ATtiny85. ATtiny считывает показания люкс с BH1750 каждые 3 минуты (задержка между ними). Если люкс МЕНЬШЕ 100, выход контакта 4 становится HIGH в течение 15 секунд. Скрипт (python, функция в цикле while) проверяет ввод GPIO 17 на RPi каждые полсекунды. Если он обнаруживает сигнал HIGH, он отправляет электронное письмо и запускает sudo poweroff. Это дает время для полного отключения до того, как LiPo SHIM получит сигнал LOW от ATtiny85 и отключит все питание RPi и камеры.

ПРИМЕЧАНИЕ: Если LiPo SHIM не отключил питание RPi и камеры, будет происходить постоянное потребление 45 мА на батареях, поскольку состояние «выключения» RPi не является истинным отключением. Если уровень люкс выше 100, выходной сигнал HIGH, и RPi работает нормально. Схема цепи и скрипт Python, которые созданы, приведены ниже. 

 

shutdown_workday.py
После загрузки скрипт отправляет «пробуждающее» электронное письмо на вашу настроенную учетную запись (необязательно). Функция workday_start() проверяет директорию /home/pi на наличие файла workday.txt. Если файл существует, он проверяет дату / время создания. ЕСЛИ файл существует и старше 8 часов, скрипт переходит к функциям цикла while. ЕСЛИ файл существует, НО старше 8 часов, тогда сценарий перезаписывает файл с текущей меткой времени (эпохой). ЕСЛИ файл не существует, он создает файл workday.txt и записывает в него текущую временную метку. ПРИМЕЧАНИЕ. Этот файл понадобится для более поздней работы. Функция shutdown_check() проверяет состояние вывода 17 GPIO каждые полсекунды. Если вход HIGH, функция отправляет электронное письмо о завершении работы и запускает команду sudo poweroff. Это отключает RPi до того, как произойдет резкое отключение питания LiPo SHIM. Если вход LOW, функция проходит. Функция workday_over() открывает файл workday.txt и сравнивает его с текущим временем. Это происходит каждые 3 минуты. ЕСЛИ разница во времени превышает 8 часов, скрипт отправляет электронное письмо и запускает sudo poweroff. Если менее 8 часов функция пропускается.

ПРИМЕЧАНИЕ. Этот сценарий, входящий в состав операционной системы squirrelkam, запускается через 30 секунд после загрузки из-за того, что он установлен как служба systemd. Если вы не хотите использовать этот сценарий, запустите sudo systemctl stop shutdown_workday.service, а затем sudo systemctl disable shutdown_workday.service.

attiny85_bh1750 code (Arduino)

Shutdown Workday (python)

 

Обратите внимание на 3 провода, идущие к RPi. Питание и земля поступают от LiPo SHIM, а сигнал выключения подается между контактом 4 ATTINY [arduino] и RPi GPIO 17.

 

Шаг 5. Программное обеспечение камеры, Homebridge, библиотеки датчиков и готовый продукт

Программное обеспечение камеры, которое использовалось, было motioneye от Калина Крисана. Это отличный интерфейс для программного обеспечения Motion. Вдобавок был обнаружен проект NEAT, который проксирует сеть таким образом, чтобы камеры отображались в homekit. Это называется homebridge-camera-ffmpeg. Также добавлен код датчика (библиотеки / модули python) для чтения люкс (BH1750), температуры / влажности / давления (BME280) и датчика тока / напряжения INA219.

ПРИМЕЧАНИЕ. Эти датчики тоже будут интегрированы. Ниже приведен список образов на основе raspbian с предустановленным программным обеспечением и именами пользователей / паролями.

 

Программное обеспечение squirrelkam для ОС

  • на основе raspbian-lite (апрель 2018)
  • сборка FFmpeg в середине апреля (со всеми исправлениями) и motion 4.1.1
  • nodejs 8.11.1, homebridge, homebridge-camera-ffmpeg
  • модификации /boot/config.txt и /etc/rc.local (экономия энергии)
  • скрипты / код для различных датчиков (bh1750, ina219, bme280)
  • экран, git, python (pyserial, paho-mqtt)

 

Информация об ОС squirrelkam

  • user = pi, password = raspberry
  • timezone = US/Eastern
  • enabled = ssh, i2c, i2s, spi, camera, serial port
  • disabled = HDMI (added /usr/bin/tvservice -o to /etc/rc.local)
  • homekit pin # = 123-45-678
  • motioneye (kam) = port 80, admin (no password), user (no password)

 

Приступаем к работе!

  • Записать squirrelkam.img на SD-карту с помощью Etcher.
  • откройте /boot/wpa_supplicant.conf, замените ssid и передайте информацию о вашем маршрутизаторе.
  • Загрузка!

ПРИМЕЧАНИЕ. Вы можете легко найти свою squirrelkam, перейдя на squirrelkam.local или SSHing на pi@squirrelkam.local. Кроме того, при добавлении камеры в хомкит у вас не будет штрих-кода, поэтому вы добавите его вручную. ГЛАВНОЕ, однако, то, что он обнаруживается автоматически и должен быть таким же простым, как нажатие на камеру и ввод пина #!

Ниже готовое изделие ...

... и скриншот с моими белками!