Метеостанция Гайвера (Улучшенная)

22.04.2023 11:38, автор DiEitch

Как-то ранее я писал, что собираю очередную метеостанцию. Конечно, я её уже собрал, но вот время для статьи смог выделить только в длинные выходные. Итак, поехали...

Главное окно с "фирменными часами".

Третья строка на экране периодически меняется, отображая разные параметры. Сейчас это СО2 и ЛОВ. Следующими идут  метеопараметры: температура, влажность и атмосферное давление:

Строка меняется каждые 15 секунд, чтобы успеть рассмотреть. Каждый параметр имеет индикатор изменения: стрелка влево - уменьшается, вправо - растёт. Если стрелки нет, то параметр не изменяется в данный момент.  Самая нижняя строка - моё личное "изобретение", погодная шкала с 0 посередине в процентах показывает вероятность ухудшения (влево - значок дождя) и улучшения погоды (вправо - значок солнца/луны). А теперь немного информации по конструкции.

Как всегда, сборка DIY устройств начинается с корпуса.smiley Я точно знал, какой корпус применил Алекс, но батарейный отсек, малое пространство внутри и множество мелких доработок с этим корпусом подтолкнули меня к другому выбору (более того, там есть как белый, так и чёрный варианты, и места предостаточно внутри: справа и слева). А главное - очень доступная цена!

Изначально я планировал вот такой корпус:

но он слишком уж велик для этой начинки. А выбранный в итоге подходит на все 100% и смотрится вроде даже культурнее:

Кроме того, индикатор становится в такой корпус прекрасно и прижимается по краям шляпками четырёх винтов (см. ниже) и никаких дополнительных креплений не надо. Красиво и надёжно. Слева от дисплея приютился датчик освещённости на фоторезисторе. Снизу корпуса - подставка из пластика от полки холодильника Атлант, которая делает конструкцию устойчивой и позволяет установить наклон. Шарнир сделан из латунной части клеммной колодки на 220 Вольт (3 штуки свинчены длинным винтом).

Подставка сделана по эскизу, углы скруглены напильником.

В качестве "мозга" я выбрал Arduino Pro Mini 16MHz (как на рисунке, только чип у меня 328PA), так как соединение с компьютером мне потребуется только лишь для зашивки программы. Ниже: процесс отладки и прошивки. Т.к. мой адаптер не имеет провода DTR, ресет приходится делать вручную. Сначала у меня не получалось вовремя его нажимать, но со временем научился. Нажать ресет (на фото справа от кварца) надо на 1 секунду приблизительно в середине процесса компиляции.

Кроме того, эта платка меньше габаритами и дешевле. Напаял я только угловой разъём для подключения адаптера USB-UART (TX,RX,VCC и GND), остальные из комплекта не трогал.

К основной плате добавил "хаб" I2C (пины A4,A5 и GND), где развёл и питание, и саму шину (с резисторами 4к7, а также оставил возможность физического добавления других I2C датчиков, вдруг когда-нибудь понадобится внешний датчик температуры). Вся электроника метеостанции (как и у автора) приклеена термоклеем на плату китайского стандартного индикатора LCD2004 с синим цветом свечения (если выбрать чёрный корпус то предпочтительнее взять чёрные символы на зелёном фоне). По центру снимка видна Arduino Pro mini и хаб I2C.

А вот вид со стороны энкодера, видны разъёмы, взятые из той донорской мыши и RTC (которые позволят позже сделать будильник). Слева за энкодером приклеена кнопка на плате, а от неё два провода синий и белый на разъём справа.

Для приклеивания я выбрал не белый прозрачный термоклей, а серый с хорошей адгезией к любым материалам. Я полагаю, он приклеит и стекло, и металл.

Индикатор я выбирал без адаптера I2C (так и дешевле, и меньше места занимает), а выводов контроллера хватило при подключении по 4-битной шине. Если уже имеется индикатор с платой I2C, то не проблема в программе это перенастроить, тогда сэкономите шесть цифровых выводов контроллера.

Светодиод (снизу на фото видны его ножки) подключен к аналоговым портам A1...A3 (они могут работать и в цифровом режиме), а вот ШИМ идёт на общий катод через резистор 200 Ом (в моём случае). Справа виден датчик освещённости, с измерениями при обработке корпуса я чуть намудрил, и пришлось отверстие для него сделать овальным, а не круглым. Прозрачные окошки сделаны по технологии Gyver (прозрачный термоклей, скотч, шпатель). Получилось неплохо. Сверху виден транзистор BC337 подсветки, регулятор контрастности (подстроечный резистор на 10K), датчик eСО2 и часы реального времени на DS3231 с ионистором для сохранения хода при отключении основного питания.

Ёмкостной сенсор я не применял, вместо него энкодер от мышки с кнопкой под колесом. Почему так? Мне очень нравится концепция "колёсика" от мыши, кроме того, оно является ещё и кнопкой (а иногда и не одной), что уменьшает кол-во органов управления (а в данном случае ещё и отверстий в корпусе). Я долго искал подходящий по размерам, и нашёл его в мышке фирмы ACME.

Энкодер там механический (квадратурный) и встроен в само колесо, что экономит пространство. Если же не удастся таковой найти, то можно приспособить энкодер с колесом от любой мыши (как механический, так и оптический), и кнопку отдельно (или ёмкостной сенсор, как у Gyver).

  

Это колесо с родным кронштейном я закрепил на канцелярской скрепке и приклеил к боковой части корпуса (с отверстием под колесо) сначала суперклеем, а потом усилил термоклеем:

Штатный измеритель СО2 на модуле MH-Z19B в последнее время как-то сильно подорожал (в рамке на фото Гайвера).

Поэтому было решено применить датчик эквивалентного значения концентрации еСО2 на микросхеме CCS811 (MOX-технология). Датчик измеряет содержание в воздухе ЛОВ (летучих органических веществ), а затем, зная коррелляцию между содержанием в воздухе ЛОВ и СО2, вычисляет эквивалентное значение СО2. Забегая наперёд, скажу, что он измеряет довольно быстро и точно для такого класса приборов. Датчик самокалибруется. Первое включение должно быть произведено приблизительно на одни-двое суток для первичной калибровки и обкатки. 

Датчик легко "отравить", поэтому, как и в случае с BME280, его при пайке надо залепить скотчем. Кстати, немного об основном датчике метеостанции:

   

Иногда китайцы шлют вместо BME280 датчик (только) давления BMP280 (который стоит раза в четыре дешевле), как же отличить эти два датчика не включая? По отверстию на корпусе. Вот тут подробно.

Что касается программмного обеспечения: я провел полные ревью и рефакторинг кода. Разбросал его по модулям для удобства чтения и редактирования. Добавил функцию настройки даты, времени и яркости для дисплея и светодиода, добавил также соответствующее меню (вызывается по нажатию на колесо, вращение - меняем параметр, нажатие следующий, пока не выйдет из меню, при выходе - сохранение). Текущий параметр мигает. Настройка дня недели пропущена - DS3231 высчитывает его самостоятельно.

Нижняя строка меню целиком посвящена яркости дисплея и светодиода: * - значок яркости,  10____100% шкала в процентах (шаг 12,5%), [A/P] - режим (автоматический или ручной). В ручном режиме яркость задаётся из меню от 10 до 100%. В автоматическом - меняется от 2% до значения, установленного в меню, в зависимости от внешнего освещения. Для коррекции используется Гамма-функция, аппроксимированная кубической параболой (позаимствовал у Gyver).

Добавил сохранение этих настроек в EEPROM. Ввёл также возможность добавления кода для использования будильника DS3231.

Хоть в программе все пины и определены, но лучше приведу "схему":

А здесь: файлы к проекту.

Повторяйте, совершенствуйте и вспоминайте добрым словом автора (я про настоящего автора)blush.