На цей раз об'єктом нашої уваги став проект розважальної серії, запропонований автором 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
- hostname = squirrelkam.local
- 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 на [email protected]. Крім того, при додаванні камери в хомкіт у вас не буде штрих-коду, тому ви додайте його вручну. ГОЛОВНЕ, однак, те, що він виявляється автоматично і повинен бути таким самим простим, як натискання на камеру та введення піна #!
Нижче наведено готовий виріб ...
... та скріншот з моїми білками!