Климатический монитор Смотрителя Убежища в стилe Fallout на ESP8266

Смотритель, однажды твоё Убежище откроет бронированную дверь, и жители выйдут наружу, чтобы добывать припасы и заселять истерзанную радиацией пустошь. А знаешь ли ты, что происходит снаружи, выдавать ли поисковым партиям силовую броню и гаусс-пушки, или в ближайшие 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 ModuleESP8266 ESP-12-E nodemcu v31
    Q1, Q2
    Биполярный транзисторBC8472
    D1, D2
    Светодиод3мм цвет по вкусу2
    D3, D4
    Выпрямительный диодUS1M2
    R1
    Резистор1 кОм1
    R3, R4, R9
    Резистор10 кОм3
    R2
    Резистор100R1
    R10
    Резистор100 кОм1
    R5, R6, R7
    Резистор1M3
    R8
    Резистор2M1
    C1, C2
    Конденсатор4.7-100nF 600v2
    C3
    Конденсатор100-150 нФ1
    C4
    Конденсатор4.7 нФ1
    LCD1
    LCD-дисплейILI93411
    Без тачскрина, с SPIU2
    Датчик влажности и температурыDHT-221

    Газоразрядный счетчик ГейгераСБМ-201
    СБМ-20М, или любой на 400вУличный датчикU1
    Wi-Fi MCU ModuleESP8266 ESP-071
    Q1, Q2
    Биполярный транзисторBC8472
    D1, D2, D3
    Светодиод3мм цвет по вкусу3
    D4, D5
    Выпрямительный диодUS1M2
    R1, R8, R6
    Резистор1 кОм3
    R2, R3, R4, R5, R9
    Резистор10 кОм5
    R7
    Резистор100R1
    R14
    Резистор100 кОм1
    R10, R11, R12
    Резистор1M3
    R13
    Резистор2M1
    C1, C2
    Конденсатор4.7-100nF 600v2
    C3
    Конденсатор100-150nF1
    C4
    Конденсатор4.7 нФ1
    C5
    Конденсатор100 нФ1
    C6, C7
    Электролитический конденсатор100uF2
    U3
    Датчик влажности и температурыDHT-221
    U2
    Датчик атм.давления и температурыBMP-1801
    U4
    LDOLM1117-3.31
    JP1
    Перемычка1

    Газоразрядный счетчик ГейгераСБМ-201
    СБМ-20М, или любой на 400вДобавить все

    Скачать список элементов (PDF)

    Прикрепленные файлы:

    Добавить комментарий

    Ваш адрес email не будет опубликован.