Смотритель, однажды твоё Убежище откроет бронированную дверь, и жители выйдут наружу, чтобы добывать припасы и заселять истерзанную радиацией пустошь. А знаешь ли ты, что происходит снаружи, выдавать ли поисковым партиям силовую броню и гаусс-пушки, или в ближайшие 3 дня будет достаточно кожаной брони и ржавых дробовиков? Сколько им выдать антирадина с изрядно опустевшего склада? Какая будет погода? Какой уровень радиации? Какая сейчас температура, влажность и давление? Нет ли утечки реактора внутри убежища? Не страдают ли твои жители от избыточной температуры или влажности?
На эти, и многие другие вопросы тебе поможет ответить Климатический Монитор от компании Vault-Tec!
Подай заявку сейчас, и получи шанс укомплектовать им своё Убежище!
(Шутка, конечно, навеянная серией игр Fallout, но, подумалось, почему бы и не сделать такую полезную игрушку/прибор).
Предупреждение: Для нормальной работы конструкции необходима wi-fi сеть с доступом в Интернет.(хотя, думаю, по нынешним временам это не проблема ни для кого)
Функционал:
- Точное время/дата (периодическая синхронизация c NTP серверами)
- Погода на сегодня +3 дня вперед
- Отображение данных внешнего датчика находящегося на улице:
- Радиационный фон на улице
- Атмосферное давление (в скетче можно выбрать, что больше нравится мм.рт.ст или гектопаскали)
- Влажность
- Температура
- Внешний датчик сделан на «младшей» модели esp8266 esp-07, связывается и передает данные настольному модулю посредством своей wi-fi сети, UDP пакетами данных в формате json, требует только питание.
- Отображение данных с датчиков в помещении:
- Радиационный фон внутри помещения
- Влажность
- Температура
- Настройка основных параметров (сеть, к которой подключаться, пароль, часовой пояс, местоположение для прогноза погоды вашего региона) не требует перепрошивки.
Главный экран выглядит так:
2 прогресс-бара визуально показывают время до следующего запроса погоды или времени из интернета.
Таймер уличного модуля считает время от 0 до минуты, полоса удлиняясь становится при этом из зеленой — желтой, затем красной, при поступлении данных счётчик сбрасывается в 0. Таким образом можно судить об актуальности поступивших с внешнего модуля данных и его работоспособности.
Остальное, думаю, понятно из подписей на иллюстрации.
Схемы соответственно будет две. Разберём по-порядку.
Настольный модуль с экраном.
Использован esp8266 ESP-12-E nodemcu lua v3, в модуле 4М флеша. Температуру и влажность получаем с DHT-22. Радиацию измеряем датчиком СБМ-20, в принципе можно подключить любой датчик с рабочим напряжением 400в и поменять в скетче время счёта на соответствующее вашему датчику, схема классическая — блокинг-генератор, умножитель, и катодное «считывание» импульсов на 1 транзисторе, проще некуда.
Схема:
Стадии сборки:
Обычный корпус из пластика тут явно испортит весь стиль, поэтому принято решение делать свой, в стиле «простой тесла-панк», не используя «презренного пластика», только труЪ латунь и дерево. Если будут вопросы как именно сделано что-то конкретное — постараюсь ответить, вкратце всё просто: фрезеровка, шлифовка, полировка, травление рисунков и надписей, немного патины в парах аммиака.
Готовый прибор:
Выносной модуль
Поскольку здесь уже не нужно ни много ног, ни много места под красивости, применен esp8266 ESP-07 с 1М флеша.
Влажность получаем с DHT-22. Температуру и давление с BMP-180. Радиацию измеряем датчиком СБМ-20М(применен из соображений компактности), датчик также может быть любой. Все эти данные передаются на настольный модуль раз в 5 секунд.
На схеме/плате 3 светодиода:
- Питание — просто показывает, что модуль включен(у меня он зеленый).
- Статус — не горит, если все нормально, горит, если по любым причинам модуль не может связаться и передать данные (у меня он красный).
- «RAD», импульс датчика радиации — вспыхивает, когда счётчиком Гейгера регистрируется частица(у меня он синий).
Схема:
Плата в несколько слоёв покрыта лаком Plastik для защиты от окисления и влажности:
Корпус из разветкоробки, без украшательств, чтобы не привлекать ненужного внимания соседей/прохожих. Ну висит серая коробочка, и пусть висит.
Трансформаторы блокинг-генератора в обоих случаях использовал от радиометров «Мастер-1» просто потому что были в наличии, однако и намотать их совсем не сложно.
Трансформатор делается на ферритовой гантельке (их можно как купить, так и выпаять из энергосберегаек и компьютерных БП), мотается быстро и просто, желательно покрывать каждые 50-100 витков лаком во избежание межвитковых пробоев. Обязательно соблюдать направление намотки и правильно подключать начала/концы обмоток, иначе блокинг не запустится.
Программная часть:
Код написан в среде Arduino IDE с использованием библиотеки Arduino core for ESP8266 WiFi chip — https://github.com/esp8266/Arduino , для работы с датчиками использованы библиотеки Adafruit, для дисплея этот порт библиотеки на esp8266 — https://github.com/gnulabis/UTFT-ESP8266 , кроме того для сборки понадобится Arduino Json Parser, Time, OneWire. Рекомендую использовать Arduino 1.6.8, не старше, поскольку могут быть неявные ошибки при сборке, Arduino core for ESP8266 WiFi писалась именно под 1.6.8.
В начале каждого скетча есть несколько #define которыми вы можете настроить ряд параметров, там всё откомментрировано, и, думаю, будет понятно.
Настольный модуль работает одновременно и как клиент домашней сети, через которую от берет из интернета время и прогноз погоды, и как точка доступа для внешнего датчика.
Модуль внешнего датчика работает только как клиент, он постоянно держит связь с настольным, и в случае пропадания сети перегружается и пробует снова и снова. Каждые 5 секунд передает UDP пакетом данные со своих датчиков.
Прошивка модуля делается прямо из Ардуино. esp8266 ESP-12-E nodemcu v3 уже имеет все необходимое на борту, просто соединить кабелем с компьютером, и можно шить. Для прошивки же esp8266 ESP-07 я использовал usb-uart адаптер ch340, вот такой:
на плате под него предусмотрен разъем. Для прошивки надо выключить модуль, замкнуть джампер JP1 и прошить, для дальнейшей работы программы прошивки джампер нужно разомкнуть.
Затрудняюсь решить, что ещё нужно написать о коде, безусловно там есть нюансы, но какие не очевидны, пока непонятно, просто если будут вопросы — постараюсь ответить.
Теперь о прогнозе погоды. Он берётся с сервера wunderground.com. Удобный сервис, бесплатно для некоммерческого использования, во многих городах есть много «погодных станций» на основе которых делается прогноз, а значит можно выбрать поближе к дому и прогноз будет точнее. Кроме того сервис умеет отдавать данные в удобном для автоматизированного парсинга формате json.
Подключиться там очень просто.
Нужно зарегистрироваться и получить API Key здесь https://www.wunderground.com. Регистрируемся или входим, если уже зарегистрированы, идем в раздел «API» и просим ключ. Нам понадобится ключ «Developer», он бесплатный https://www.wunderground.com/weather/api/d/pricing.html.
Найти свой город и подходящую вам погодную станцию (просто ищем их сервисом свой город, выбираем наиболее подходящую нам станцию, и смотрим нужную нам кодировку локации, например Москва):
После чего заходим в настройки настольного модуля (удерживаем кнопку setup при включении, он напишет, что запустился в режиме настройки:
Далее цепляемся к появившейся точке доступа «Overseer_101», заходим браузером на 192.168.10.1) вводим там ключ, локацию, сеть, к которой подключаться для доступа к интернету, часовой пояс:
Перед названием выбранной «именной» погодной станции в вашем регионе обязательно писать pws: , например IBALASHI24 вводить в настройках как pws:IBALASHI24.
Жмём «отправить запрос», и перегружаем настольный модуль.
Важное замечание: все модули esp8266 ОЧЕНЬ чувствительны к питанию, должны быть стабильные 3.3 вольта, желательно не менее 1А, без «проседаний» напряжения и пульсаций, в противном случае возможны зависания и самопроизвольные перезагрузки. Кстати, это относится и к такой, казалось бы, мелочи как кабель от usb адаптера до устройства — многие китайские производители экономят на проводах и качестве в дешевых кабелях, и напряжение на другом конце может проседать.
Напоследок немного личных впечатлений с точки зрения того, кто привык работать с «голыми» МК (не-ардуинами), возможно будет интересно тому, кто надумает что-то делать на этих модулях. Во-первых очень дешево, 4 мегабайта флеша при 80МГц за 2-3$ или 1 мегабайт за $1 считаю вполне приемлемым на фоне любых других МК. Есть библиотека, позволяющая писать код не ограничиваясь рамками узкоспециализированых фреймворков. Есть аппаратные i2c, SPI, внутренние таймеры и поддержка внешних прерываний. Это были плюсы, а теперь минусы: про питание уже написал — любой всплеск или проседание напряжения и оно зависнет или перегрузится 50/50. Следующий минус — порты, смотришь на их количество, и кажется — на всё хватит и еще останется, однако это не так, часть из них уже зарезервирована для подтяжки к питанию или земле и под загрузку прошивки, и подтянуть их надо обязательно, иначе модуль не будет корректно работать, некоторые уже подключены к led самого модуля и тоже не могут быть использованы. Это решение разработчиков Espressif вызывает как минимум недоумение. К примеру, в этом проекте, в настольном модуле использованы все порты, которые вообще в принципе можно использовать, не нарушая работу платы, даже кнопку пришлось подключать уже на adc. Почти аналогичная ситуация и с esp-07.
Ну и, раз уж стиль конструкции обязывает, ещё одно важное напоминание: «Не кормите Яо-Гаев!»
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Настольный модуль | |||||||
U1 | Wi-Fi MCU Module | ESP8266 ESP-12-E nodemcu v3 | 1 | ||||
Q1, Q2 | Биполярный транзистор | BC847 | 2 | ||||
D1, D2 | Светодиод | 3мм цвет по вкусу | 2 | ||||
D3, D4 | Выпрямительный диод | US1M | 2 | ||||
R1 | Резистор | 1 кОм | 1 | ||||
R3, R4, R9 | Резистор | 10 кОм | 3 | ||||
R2 | Резистор | 100R | 1 | ||||
R10 | Резистор | 100 кОм | 1 | ||||
R5, R6, R7 | Резистор | 1M | 3 | ||||
R8 | Резистор | 2M | 1 | ||||
C1, C2 | Конденсатор | 4.7-100nF 600v | 2 | ||||
C3 | Конденсатор | 100-150 нФ | 1 | ||||
C4 | Конденсатор | 4.7 нФ | 1 | ||||
LCD1 | LCD-дисплей | ILI9341 | 1 | Без тачскрина, с SPI | |||
U2 | Датчик влажности и температуры | DHT-22 | 1 | ||||
Газоразрядный счетчик Гейгера | СБМ-20 | 1 | СБМ-20М, или любой на 400в | ||||
Уличный датчик | |||||||
U1 | Wi-Fi MCU Module | ESP8266 ESP-07 | 1 | ||||
Q1, Q2 | Биполярный транзистор | BC847 | 2 | ||||
D1, D2, D3 | Светодиод | 3мм цвет по вкусу | 3 | ||||
D4, D5 | Выпрямительный диод | US1M | 2 | ||||
R1, R8, R6 | Резистор | 1 кОм | 3 | ||||
R2, R3, R4, R5, R9 | Резистор | 10 кОм | 5 | ||||
R7 | Резистор | 100R | 1 | ||||
R14 | Резистор | 100 кОм | 1 | ||||
R10, R11, R12 | Резистор | 1M | 3 | ||||
R13 | Резистор | 2M | 1 | ||||
C1, C2 | Конденсатор | 4.7-100nF 600v | 2 | ||||
C3 | Конденсатор | 100-150nF | 1 | ||||
C4 | Конденсатор | 4.7 нФ | 1 | ||||
C5 | Конденсатор | 100 нФ | 1 | ||||
C6, C7 | Электролитический конденсатор | 100uF | 2 | ||||
U3 | Датчик влажности и температуры | DHT-22 | 1 | ||||
U2 | Датчик атм.давления и температуры | BMP-180 | 1 | ||||
U4 | LDO | LM1117-3.3 | 1 | ||||
JP1 | Перемычка | 1 | |||||
Газоразрядный счетчик Гейгера | СБМ-20 | 1 | СБМ-20М, или любой на 400в | ||||