Смотритель, однажды твоё Убежище откроет бронированную дверь, и жители выйдут наружу, чтобы добывать припасы и заселять истерзанную радиацией пустошь. А знаешь ли ты, что происходит снаружи, выдавать ли поисковым партиям силовую броню и гаусс-пушки, или в ближайшие 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в | Поиск в магазине Отрон | |||
Скачать список элементов (PDF)
Прикрепленные файлы:
- Ovs_Env_PCB.zip (82 Кб)
- Sketches_Bins_v1_3.zip (1203 Кб)
Комментарии (171) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Купить api я так понял тоже нельзя. Кто нибудь возьмется переписать на другой сервер погоды? А то как то жаль потраченных средств и времени, чтоб смотреть на вопросики вместо прогноза.
Год отработал стабильно
Т.к. я не программист от слова вообще, то получилось как получилось. Настраивать как и раньше, переводим в режим сетап. в поле ключ вводим полученный апи ключ от openweathermap.org (нужна регистрация) длина его 32 символа. локация пишем название города латиницей как он указан на openweathermap.org сохраняем. Что теперь отображается в прогнозе:
openweathermap.org отдает прогноз погоды на 5 дней. в сутках прогноз с интервалом в 3 часа.
На дисплее отображается информация о погоде за 4 интервала по 3 часа. Температура это максимальная и минимальная на прогнозируемый интервал. Есть непонятная проблема с ребутами при очередном запросе погоды с сервера. Я на это не обращаю внимание. Перегузится несколько раз, получит погоду и все дальше работает.
По поводу второго коментаря: если не менять прошивку, а пользоваться локально, нужно удалить локацию и апи ключ. В авторской прошивке стоит проверка на правильность этих данных. Если не правильно будет вечный рестарт.
Я тоже убрал ключ и локацию = вечный перезагруз.
Однако не даёт скинуть в комментарии инструкцию, пишите мыло кому нужно, скину. Вместе покумекаем, а может и автор подключится
Прошивка база в гектопаскалях, улица температура с dht22. Вот бы вместо прогноза вставить шкалу изменения давления, это лучший прогноз в режиме реального времени. За основу взять нормальное давление для своей высоты. Сам тоже не программист, любитель-повторитель.
Не могли бы вы выложить обновленный исходник?
библиотека UTFT-ESP8266 по ссылке из статьи.
Ардуино ИДЕ 1.8.5
Во вложении файл bitmap.c с правками которые требует библиотека UTFT-ESP8266 текущей версии.
Т.к. сервер погоды не отдает данные о вероятности осадков, то освободилось место под прогнозом температуры. туда можно добавить на пример давление или влажность.
И скажите это только у меня после очередного запроса погоды идет ребут или у всех так? EspExceptionDecoder внятного ничего не дает.
Обновил библиотеку ArduinoJson до 5.13.5
С ней намного понятней (не проф программисту) работать. тем более есть генератор кода assistant который генерит код под конкретный json. С этим кодом легко можно сделать вывод прогноза на экран как раньше на 4 дня, проверял в устройстве - все работает.
И еще вопрос можно ли отображение температуры сделать с десятыми долями градуса?
Не пойму что ему не нравиться в ней
Используется: C:\Program Files (x86)\Arduino\libraries\Adafruit_sensor
Не используется: C:\Users\Sergio\Documents\Arduino\libraries\Adafruit_Unified_Sensor
Используем библиотеку Wire версии 1.0 из папки: C:\Users\Sergio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\Wire
Используем библиотеку DHT_sensor_library версии 1.3.10 из папки: C:\Users\Sergio\Documents\Arduino\libraries\DHT_sensor_library
Используем библиотеку ArduinoJson версии 5.13.5 из папки: C:\Users\Sergio\Documents\Arduino\libraries\ArduinoJson
Используем библиотеку ESP8266WiFi версии 1.0 из папки: C:\Users\Sergio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi
Используем библиотеку ESP8266HTTPClient версии 1.2 из папки: C:\Users\Sergio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266HTTPClient
Используем библиотеку ESP8266WebServer версии 1.0 из папки: C:\Users\Sergio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WebServer
Используем библиотеку ESP8266mDNS версии 1.2 из папки: C:\Users\Sergio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266mDNS
Используем библиотеку UTFT-AVR в папке: C:\Users\Sergio\Documents\Arduino\libraries\UTFT-AVR (legacy)
Используем библиотеку SPI версии 1.0 из папки: C:\Users\Sergio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\SPI
Используем библиотеку EEPROM версии 1.0 из папки: C:\Users\Sergio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\EEPROM
Используем библиотеку Adafruit_sensor в папке: C:\Program Files (x86)\Arduino\libraries\Adafruit_sensor (legacy)
exit status 1
no matching function for call to 'UTFT::UTFT(int, int, int, int)'