DIY Portable Air Raid Alert — портативний пристрій для сигналізації повітряної тривоги, який можна під’єднати до зовнішньої сирени
Привіт усім!
Сьогодні ми спробуємо створити Portable Air Raid Alert — портативний пристрій для сигналізації повітряної тривоги, який можна під’єднати до зовнішньої сирени.
Ми маємо автономні сирени, вебсайти та мобільні застосунки, які будуть сповіщати про активацію та вимкнення тривоги.
Спробуємо створити портативний пристрій, який можна використовувати особисто або під’єднати до зовнішньої сирени в громадських місцях.
Звичайно, щоб зробити його комерційним продуктом для серійного випуску, ще потрібно багато працювати (особливо щодо безпеки), але сподіваюся, що це може бути цікавою інформацією для спільноти DOU.

Розгляньмо основні функції цього пристрою:
- під’єднання до WiFi мережі;
- використання NTP для синхронізації часу;
- відображення статусу тривоги повітряної атаки за допомогою RGB LED;
- відтворення мелодії під час активації або вимкненні тривоги за допомогою динаміка (в реальних умовах це слід замінити сиреною);
- можливість вимкнення динаміка за допомогою перемикача;
- визначення робочих годин пристрою — знову ж таки, в реальному житті він має бути в роботі цілодобово.
Наступна версія буде більш автономною за допомогою двох акумуляторів 18650 та GSM модуля.
Ось список компонентів, які нам будуть потрібні для побудови пристрою (базова версія без 18650 та GSM):
- модуль ESP32 WROOM DevKit;
- індикатор RGB LED;
- динамік;
- перемикач на дві або три позиції;
- резистори на 220 Ом;
- провідники-перехідники;
- USB-кабель для під’єднання та живлення мікроконтролера;
- і, звичайно, корпус, роздрукований на 3D-принтері.

Корпус для пристрою я вирішив зробити схожим на стару сигналізацію, яку раніше можна було побачити на кожному магазині. Цей пристрій можна зробити автономним, з двома акумуляторами 18650 та GSM-модемом для роботи на вулиці або під час можливого вимкнення електроживлення.
Для 3D-моделінгу я використовую Blender. Це дуже потужний опенсорс-інструмент, який, на мою думку, не надто складний. Наразі в мене дуже малий досвід у Blender (можливо ~20), але цього достатньо для початку створення простих 3D-об’єктів, таких як цей корпус.
У мене є багато нових ідей для наступних проєктів, де, ймовірно, знадобиться трохи складніший рівень вмінь у Blender :)

Цей пристрій побудований на основі ESP32-WROOM-32, який є досить потужним і водночас доступним за ціною мікроконтролера.
Це двоядерний
Особливо важливою є наявність вбудованого Wi-Fi та Bluetooth, що забезпечує необхідні можливості без додаткових модулів.
Для програмування ESP32 зазвичай використовують C/C++, але ресурсів і пам’яті достатньо для завантаження прошивки, що підтримує MicroPython, Lua та інші.
Електрична схема є досить простою. Цей мікроконтролер живиться від пґятивольтового блока живлення або USB-кабеля. Для правильної роботи нам потрібно встановити резистори на 220 Ом між контактами, які йдуть до анодів RGB-світлодіода. Пін D13 на мікроконтролері буде використовуватися для червоного світлодіода, а пін D12 — для зеленого. Катод під’єднати до негативного контакту на мікроконтролері.
Додамо перемикач між динаміком та мікроконтролером. Плюс піде на перемикач та з нього до позитивного контакту на динаміку. Мінус піде прямо на негативний контакт на динаміку.
Для використання зовнішньої сирени потрібно реле. Якщо це реле на пʼять вольт, для нього слід використовувати зовнішнє джерело живлення, оскільки цей мікроконтролер може забезпечити лише 3,3 вольт.
Сигнальний пін реле має йти безпосередньо до мікроконтролера. Коли на реле подається HIGH (логічна одиниця або «увімкнено»), воно під’єднає сирену до напруги змінного струму 220 вольт. Сигнал LOW (логічний нуль або «вимкнено») відключає від напруги змінного струму 220 вольт.

Ми створимо чотири класи, які допоможуть нам керувати пристроєм. Це буде Music, Alert API, NTP та Logic.
Взагалі ESP32 має вбудований RTC, але він може дрейфувати з часом.
Для API request ми будемо робити HTTP GET запит з використанням API Key у header. Зазвичай відповідь від API сервера ми отримуємо у форматі JSON. Тому нам доведеться виконати процес десеріалізації JSON-об’єкта. Проте для цього існують бібліотеки, такі як ArduinoJson, які значно спрощують цей процес.
В Україні є декілька ресурсів, де можна отримати доступ до Air Raid Alert API. Один з них — www.ukrainealarm.com. Ви можете подати заявку на API key за посиланням на api.ukrainealarm.com.
Основний клас Logic відповідає за керування пристроєм та зв’язує всі інші класи разом. Він буде виконувати оновлення NTP, видачу запитів API, відтворення звуків та контролювати RGB LED, коли це потрібно.
Якщо пристрій буде використовуватися із зовнішньою сиреною, нам знадобиться додатковий цифровий вихідний пін для керування реле.
Звісно, ще можна додати багато функціональності, щоб покрити всі можливі випадки використання. Але для першої ревізії та розуміння, як воно працює, думаю, буде достатньо.
Сподіваюся, що ця інформація буде корисною для когось (тоді з вас «вподобайка» та підписка на YouTube :D )
Посилання на відео про те, як був зроблений цей пристрій.
Посилання на GitHub: github.com/2CoderOK/air-raid-alert
Дякую за увагу.
27 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівC++? Він же повільний на таких пристроях
Ви ще не бачили, як на ньому літають MicroPython скрипти )))
Нажаль, вони документацію та приклади не відкрили без реєстрації... Якось не хочеться реєструватись, щоб зрозуміти, що це не те, що потрібно. :(
А які ще ресурси є?
Телеграм канали, які повідомляють про тривогу автоматично. Але в такому разі треба зареєструвати ще один телеграм аккаунт.
А, про телегу знаю, але то не цікаво.
Нажаль інші не знаю ..
Я тупо по ендпоінтах їх фронта забирав та і все... Мені то просто конкретний регіон зпарсити...
import axios from "axios"; import { decode } from "@msgpack/msgpack"; const regions = { '3': { eng: 'Khmelnytska', ua: 'Хмельницька' }, '4': { eng: 'Vinnytska', ua: 'Вінницька' }, '5': { eng: 'Rivnenska', ua: 'Рівненська' }, '8': { eng: 'Volynska', ua: 'Волинська' }, '9': { eng: 'Dnipropetrovska', ua: 'Дніпропетровська' }, '10': { eng: 'Zhytomyrskа', ua: 'Житомирська' }, '11': { eng: 'Zakarpatska', ua: 'Закарпатська' }, '12': { eng: 'Khersonska', ua: 'Херсонська' }, '13': { eng: 'Ivano-Frankivska', ua: 'Івано-Франківська' }, '14': { eng: 'Kyivska', ua: 'Київська' }, '15': { eng: 'Kirovohradska', ua: 'Кіровоградська' }, '16': { eng: 'Luhanska', ua: 'Луганська' }, '17': { eng: 'Mykolaivska', ua: 'Миколаївська' }, '18': { eng: 'Odeska', ua: 'Одеська' }, '19': { eng: 'Poltavska', ua: 'Полтавська' }, '20': { eng: 'Sumska', ua: 'Сумська' }, '21': { eng: 'Ternopilska', ua: 'Тернопільська' }, '22': { eng: 'Kharkivska', ua: 'Харківська' }, '23': { eng: 'Zaporizka', ua: 'Запорізька' }, '24': { eng: 'Cherkaska', ua: 'Черкаська' }, '25': { eng: 'Chernihivska', ua: 'Чернігівська' }, '26': { eng: 'Chernivetska', ua: 'Чернівецька' }, '27': { eng: 'Lvivska', ua: 'Львівська' }, '28': { eng: 'Donetska', ua: 'Донецька' }, '29': { eng: 'Avtonomna Respublika Krym', ua: 'Автономна Республіка Крим' }, '30': { eng: 'Sevastopol', ua: 'Севастополь' }, '31': { eng: 'Kyiv', ua: 'Київ' } } const getAlerts = () => axios.get("https://api.alerts.in.ua/v3/alerts/active.mp", { responseType: "arraybuffer", }).then(({data}) => decode(data)?.alerts.map(({luid}) => regions[luid] ? {...regions[luid], id: luid} : null) .filter(Boolean)); console.log(await getAlerts());Це залишає тільки області, в яких тривога:[ { "eng": "Luhanska", "ua": "Луганська", "id": 16 }, { "eng": "Avtonomna Respublika Krym", "ua": "Автономна Республіка Крим", "id": 29 }, { "eng": "Khersonska", "ua": "Херсонська", "id": 12 }, { "eng": "Dnipropetrovska", "ua": "Дніпропетровська", "id": 9 }, { "eng": "Zaporizka", "ua": "Запорізька", "id": 23 }, { "eng": "Mykolaivska", "ua": "Миколаївська", "id": 17 }, { "eng": "Odeska", "ua": "Одеська", "id": 18 } ]Я зробив на LILYGO TTV з прозорим дисплеєм. Малює бомбу при тривозі.
О, круто.
Цікаво було б побачити.
Можна фото ? ))
ibb.co/Jt8ysvG
Круто, дуже атмосферно!
Я собі дома зробив таку приблуду на esp8266 сервер моніторить статус тривоги і якщо вона є в Києві світлодіод світиться червоним, а на дисплеї виводяться останні повідомлення з моніторингових телеграм каналів щодо мого міста. Завжди лежить біля ліжка і зразу видно яка зараз ситуація щодо літаючих пісюнів.
Я бачу, що багато людей робили такі проекти. Було б цікаво подивитися, як це виглядає. Розумію, що не кожен захоче писати статтю, але тут у коментарях можна додати фото або відео. Мені цікаво ))
easyimg.io/g/jaim7v4×1
Ось так в режимі без тривоги. При тривозі світлодіод світиться червоним і вмикається дисплей з повідомленнями. Повідомлення беруться з ТГ каналу «Реальний Київ». Відповідно вся ця логіка на бекенді, esp-ішка просто через вайфай з’єднується з сервером через сокет з’єднання з мінімальним протоколом отримання статусу тривоги і повідомлень для відображення.
Зрозуміло, що треба би корпус зробити, але якось ніяк не візьмусь.
Прикольно! Дякую за фото!
Так, я думаю як буде корпус, то буде мати інший вигляд і сприйматися інакше.
Бажаю успіху та натхнення на корпус!
Ну і фотку у корпусі ;)
Зробив щось схоже на основі esp8266-01 та WLED + staircase usermod, вмикаючи обраний ефект на сходах під час тривоги. Сама складна частина — підібрати ефект, бо їх там дуже багато, і всі класні )
А можна побачити відео?
Крута ідея!
Класно, дякую.
Чекаю з нетерпінням версію повноцінною реалізацією батарейного живлення.
Дякую! Буде ))
Я рік назад по приколу зробив приблуду на основі такого сигнального фонаря oxo.ua/...fonar-signalnyj-na-vyshku
Ну і звісно у якості звукового сигналу я не міг не вибрати таке www.electropromopt.com.ua/...p/dzvonyk_revun/rvp-220v
Потім його поставив на сигналку в гараж. Виглядає досить кіберпанково і мужики у кооперативі поважають :-)
Як таке не поважати :) Круто!
Там і ESP12(nodeMCU)+JQ6500 та десяток рядків коду на JS було достатньо- робив таке півтора роки тому...
Ну оти робив і закинув. А вони зробили, доробили і запатентують і продадуть :)
Хто сказав що закинув? Там було роботи на пару годин- скільки треба часу щоб робити запит на захаркоджений урл по таймеру і на зміну стейту дьоргати 2 піни...
Якби ж кожен хелло вордл патентували та продавали :)
А ще проще не стукаться по АПІ до сервера для перевірки, а просто були би у того сервіса вебхуки. І тоді в таких пристоях ще менше строчок би було.
Так дуже просто і потім піднімати http сервер, мати білий IP+DDNS, на роутері біндити MAC на статичний IP на кожну залізяку, прокидувати порти DSTNAT...
По нормальному в api повинен бути MQTT сервер, але полінгом теж норм, якщо затримка прийнятна.
Дякую)) Залюбки подивився б на вашу розробку і десяток рядків. (не сарказм)