Проект " метеостанция в домашних условиях". Цифровая комнатная метеостанция Схема электронных часов метеостанция на контроллере

(хроно-термо-гигро-барометр)

Как поется в известной песне «Главней всего погода в доме…». Конечно автор под погодой имел ввиду душевное состояние супругов живущих под одной крышей. Но если подходить к этой фразе буквально, то она о том, что под крышей кроме душевного должен быть и климатический комфорт. Предлагаемое устройство обеспечивает измерение и отображение на светодиодном индикаторе температуры и относительной влажности воздуха в помещении, значения атмосферного давления и текущего времени.

Станция снабжена датчиком движения, который включает ее при появлении человека в зоне действия датчика. Этот режим позволяет экономить потребляемую энергию и использовать в качестве источника питания гальванические батареи. Кроме того, этот режим удобно использовать в спальне - выключенный дисплей станции не будет раздражать своим свечением. В этом случае для включения станции будет достаточно выполнить движение рукой или ногой.

Внешний вид станции показан на рисунках (Рисунок 1 и Рисунок 2).

Рисунок 1.
Внешний вид станции

Рисунок 2.
Внешний вид станции (обратная сторона)

Видео с демонстрацией работы станции представлено ниже:


Электрическая схема.

Схема электрическая принципиальная представлена на рисунке 3.

Рисунок 3.
Схема электрическая принципиальная.

Станция собрана на микроконтроллере ATmega8. Цепочка R1С1 обеспечивает начальный сброс (Reset) микроконтроллера при включении. Предусмотрено внутрисхемное программирование МК через разъем XP3 «SPI программатор».
Фьюзы МК ATmega8: HIGH=0xD9, LOW=0xE4.

В качестве дисплея используется четырех-разрядный 7-сегментный индикатор типа CL5642BN c общим анодом и двухточечным («:») разделителем часов и минут. Катоды сегментов индикатора подключены к МК через ограничительные резисторы. МК обеспечивает динамическую индикацию поочередно включая транзисторные ключи VT3…VT6.

Хронометр собран на микросхеме DS1307 по штатной схеме включения. Точность хода часов обеспечивается кварцевым резонатором Y1 с частотой 32768Гц. При отсутствии основного питания (5 Вольт) непрерывность хода часов обеспечивается резервным источником питания на гальваническом элементе CR2032 (3 Вольта). Взаимодействие МК с микросхемой DS1307 осуществляется по шине TWI (I2C). Линии шины TWI «подтянуты» к питанию VCC2 резисторами R20, R21. Установка часов и минут обеспечивается кнопками SA1 («Часы+»), SA2 («Минуты+»), SA3 («Установка»). При этом необходимо в момент начала цикла отображения данных на дисплее нажать и удерживать кнопку «Установка». Нажатием или нажатием с удержанием кнопок «Часы+» или «Минуты+» устанавливается время хронометра. При отпускании кнопки «Установка» в микросхему DS1307 в соответствующие ячейки запишутся значения часов и минут, отображенные на дисплее, а в ячейку секунд запишется значение 0. Таким образом можно точно синхронизировать время с внешними эталонными источниками точного времени (например, от вещательных радиостанций или телевидения).

К шине TWI также подключена плата барометра BMP180. Программа устройства считывает калибровочные коэффициенты, устанавливаемые производителем, и учитывает их при расчете атмосферного давления.

Измерение температуры осуществляется датчиком DHT11. МК управляет датчиком по последовательному однопроводному двунаправленному интерфейсу. Линия интерфейса «подтянута» к питанию VCC2 резистором R19.

Для экономного расходования энергии батарей микроконтроллер большую часть своего времени пребывает в состоянии глубокого сна («power-down»). При этом МК перед засыпанием обесточивает все измерительные датчики, подключенные к VCC2 (хронометр, датчик атмосферного давления, датчик влажности и температуры). Обесточивание датчиков обеспечивается ключами на транзисторах VT1 и VT2.

Для пробуждения МК в схему станции включен датчик движения HC-SR501. Его задача - вывести МК из состояния сна. При срабатывании датчик посылает сигнал МК, который пробуждается сам и подает питание VCC2 на периферийные датчики (хронометр, датчик атмосферного давления, датчик влажности и температуры). Ключ на транзисторе VT7 обеспечивает инверсию сигнала датчика движения для согласования с МК. Переключатель «Движение» позволяет отключить датчик движения, для еще большей экономии энергии батарей. В этом случае альтернативную команду на пробуждение МК можно подать нажатием кнопки «Установка».

Питание станции осуществляется от двух альтернативных типов источников: от трех батарей типа АА или от сетевого источника питания 5 Вольт по шине USB. Для переключения между источниками питания необходимо установить переключатель «Питание» в одно из положений: «USB» или «Батарея». При питании от батарей ток потребления станции в режиме сна составляет не более 200мкА, что при емкости батареи 2000мАч соответствует 10000 часам (более одного года) непрерывной работы.

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

При питании от шины USB иногда целесообразно обеспечить постоянное измерение значений датчиками и отображение данных на дисплее. Для этого необходимо установить переключатель «Дисплей» в положение «Вкл». В этом случае МК не будет переводится в состояние сна.

Печатные платы.

Печатные платы разработаны в программе Dip Trace. Они выполнены на одностороннем фольгированном стеклотекстолите. Расположение деталей на основной печатной плате показано на рисунке (Рисунок 4). На рисунке перемычки со стороны монтажа выделены цветными ломаными линиями. Печатная плата со стороны дорожек показана на рисунке (Рисунок 5).

Рисунок 4.
Печатная плата (вид со стороны радиодеталей).

Рисунок 5.
Печатная плата (вид снизу, зеркальное отображение).

Кнопки и переключатели пульта управления станцией установлены на отдельной печатной плате (Рисунок 6 и Рисунок 7).

Рисунок 6.
Печатная плата Пульта управления (вид сверху).

Рисунок 7.
Печатная плата Пульта управления (вид со стороны дорожек).

Гнездо для подключения USB кабеля установлено на отдельной плате, купленной на AliExpress (Рисунок 8).

Рисунок 8.
Плата с гнездом USB.

Монтаж.

Станция смонтирована в корпусе универсальной коробки для кабельных каналов «Промрукав» - IP42; 400V; полистирол ГОСТ Р 50827.1-2009 ТУ 3464-001-97341529-2012 Артикул 40-0460.

На передней стороне корпуса прорезаны окна для дисплея и датчика движения. На тыльной стороне корпуса размещен датчик влажности и температуры DHT11, кнопки и переключатели пульта управления.

Батарея питания - три элемента AA 1.5 Вольт каждый размещены в специализированном держателе - «кроватке» .

Размещение радиодеталей на печатной плате показан на рисунке (Рисунок 9).

Рисунок 9.
Внешний вид размещения деталей на плате.

Архив к статье «CTBH.rar» содержит:

1. Папку CTBH - файлы проекта на Си в среде Atmel Studio 7.
2. CTBH.dch - схема электрическая принципиальная в формате Dip Trace.
3. CTBH.dip - печатная плата устройства в формате Dip Trace.
4. CTBH_Buttons.dip - печатная плата Пульта управления в формате Dip Trace.
5. CTBH.hex - загрузочный файл для МК.

Удачи Вам в творчестве и всего наилучшего!

Скачать архив.

Изготовьте и установите на высоком шесте флюгер и расскажите детям, как определять направление ветра. Возьмите гладкую палку и вбейте в один из её концов длинный гвоздь. Вырежьте из плотного картона флажок и заламинируйте его, чтобы не промокал при дожде.

Край флажка оберните вокруг гвоздя так, чтобы он мог свободно вращаться при дуновении ветра. Сделайте из тонких проволочек стрелки, указывающие на юг, север, запад и восток и закрепите их на палке. Флюгер готов. Установите его на вашей метеоплощадке, сориентировав стрелки по сторонам света.

С детьми постарше (6–9 лет) изготовление флюгеров замечательно вписывается в уроки по географии, когда вы рассказываете, как образуются ветра, как использовали знания о них первые мореплаватели, что означают ветры на «конских широтах», что такое пассаты.

Моряки, зная о пассатах - устойчивых ветрах, дующих в тропических поясах, - называли их «торговыми ветрами», потому что с их помощью торговые корабли-парусники (тогда ещё не были изобретены двигатели) пересекали Атлантический океан. На парусниках везли товар из Европы в Америку.

Субтропические ветры между 30 и 38 параллелями южных и северных широт были настолько лёгкими, что парусники вставали в штиль. Приходилось месяцами ждать подходящего ветра. Часто ожидания затягивались на 3–5 месяцев. У моряков заканчивалась пресная вода и еда, и им приходилось питаться лошадьми, которых перевозили в больших количествах из Европы. Поэтому эти широты прозвали «конными».

Используя флюгер, дети отмечают в своих календариках наблюдения за погодой направление, силу и смену ветра. Таким образом мы не просто знакомим их с основными метеорологическими приборами, но и с методикой и техникой наблюдений и обработки результатов.

Термометр своими руками

Установите на метеоплощадке большой термометр и научите детей читать значения температур воздуха. Эта работа является также подготовкой для понимания концепции отрицательных чисел в математике, которая предлагается детям 9–12 лет в школе Монтессори.

Малыши 3–6 лет с удовольствием изготовят собственные термометры из картона и цветных ниток. Для этого:

  1. Посередине белой полоски картона шириной 4–6 см наносят шкалу термометра (выше и ниже нуля).
  2. Соединяют вместе красную и синюю (белую) нити.
  3. В верхнем и нижнем концах шкалы делают отверстия и пропускают через них концы ниток, связав их с обратной стороны.

Сверяясь с настоящим термометром, ребята двигают нить на своих самодельных градусниках, устанавливая и записывая значения температур в календарики погоды.

Гигрометр своими руками

Следующим прибором детской метеостанции является гигрометр - прибор для измерения влажности воздуха. Для его изготовления гигрометра понадобятся:

  • прямоугольный кусок деревянной дощечки или пенопласта;
  • две канцелярские кнопки;
  • скотч;
  • человеческий волос длиной около 10 см;
  • отрезок тонкой проволоки.

Укрепите на дощечке две кнопки на расстоянии примерно 8–10 см. К нижней прикрепите проволоку так, чтобы она могла приходить в движение, то есть нетуго. К верхней кнопке прикрепите кончик волоса, затем протяните его вокруг проволоки и закрепите на верхней кнопке. Прибор готов.

Расскажите детям, как человеческий волос реагирует на влажность воздуха, становясь короче или длиннее. При высокой влажности он удлинится, опустив таким образом стрелку вниз; при низкой влажности, наоборот, волос станет короче и поднимет проволочную стрелку вверх. Это свойство волоса и использовано для изготовления гигрометра.

Осадкомер своими руками

Дополнит вашу метеоплощадку осадкомер - прибор для измерения жидких и твёрдых осадков (града). Возьмите обычное ведро, установите его на небольшой возвышенности (тумбе, табурете). Накапливаемые осадки сливаются в мерный стакан со шкалой. Результаты дети заносят в свои календарики.

Метеостанция, построенная своими руками - это не только часть предметно-развивающей Монтессори-среды, но и увлекательная и познавательная возможность наблюдать за погодой и вести журнал наблюдений.

Обсуждая с детьми погоду, можно расширить тематику и рассказывать им о современных профессиях, зависящих от погодных условий. С детьми постарше (8–9 лет), в рамках Монтессори-программы по экономической географии, мы говорим о том, как климатические условия в целом влияют на экономику разных стран.

Наблюдение за погодой - весьма увлекательное занятие. Я решил построить свою погодную станцию на базе популярного .

Прототип метеостанции выглядит так:

Функции моей метеостанции:

  • измерение и отображение комнатной и наружной температур;
  • отображение текущего времени (часы и минуты);
  • отображение текущих фазы Луны и лунного дня;
  • передача результатов измерений на компьютер через последовательное соединение;
  • передача результатов измерений по протоколу MQTT с помощью приложения на компьютере.


Hex
-файл
прошивки для (версия от 9 мая 2018 года) - .
Как прошить hex -файл в плату Arduino , я описал .

Микроконтроллер Arduino Nano 3.0

"Сердцем" моей метеостанции является микроконтроллер eBay ):

Для управления индикацией и опросом датчиков я использую таймер 1 Arduino , вызывающий прерывания с частотой 200 Гц (период - 5 мс).

Индикатор

Для отображения измеряемых показаний датчиков и текущего времени я подключил к Arduino четырехразрядный светодиодный индикатор Foryard FYQ-5643BH с общими анодами (аноды одинаковых сегментов всех разрядов объединены).
Индикатор содежит четыре семисегментных разряда и две разделительные (часовые) точки:

Аноды индикатора подключены через токограничивающие резисторы к выводам Arduino :

разряд 1 2 3 4
вывод A3 A2 D3 D9

Катоды сегментов подключены к выводам Arduino :

сегмент a b c d e f g p
вывод D7 D12 D4 D5 D6 D11 D8 D13

Сегмент индикатора светится, если на аноде соответствующего разряда высокий потенциал (1), а на катоде - низкий (0).

Я использую динамическую индикацию для отображения информации на индикаторе - в каждый момент времени активен только один разряд. Активные разряды чередуются с частотой 200 Гц (период отображения 5 мс). При этом для глаз мерцание сегментов незаметно.

Датчик температуры DS18x20

Для возможности удаленного измерения температуры я подключил датчик , который обеспечивает измерение наружной температуры в широких пределах. Датчик подключается к шине 1-Wire и имеет три вывода - питание (VCC ), данные (DAT ), земля (GND ):

вывод датчика VCC DAT GND
вывод Arduino 5V A1 GND

Между выводами VCC и DAT я включил подтягивающий резистор сопротивлением 4,7 кОм.

Для перевода между градусами Цельсия и Фаренгейта можно использовать такую табличку:

Я разместил датчик за окном дома в пластиковом корпусе от шариковой ручки:

\

В профессиональных метеостанциях для защиты термометра от прямых солнечных лучей и обеспечения циркуляции воздуха используется экран Стивенсона (англ. Stevenson screen ):

Датчик давления и температуры BMP280

Для измерения атмосферного давления традиционно используют ртутные барометры и барометры-анероиды.

В ртутном барометре атмосферное давление уравновешивается весом столба ртути, высота которого и ипользуется для измерения давления:

В барометре-анероиде используется сжатие и растяжение коробки под действием атмосферного давления:

Для измерения атмосферного давления и комнатной температуры в своей домашней метеостанции я использую датчик - маленький SMD -датчик размером 2 x 2,5 мм, основанный на пьезорезистивной технологии:

Платка с датчиком приобретена на торговой площадке eBay :

Датчик подключается к шине I2C (контакт данных - SDA/SDI , контакт синхронизации - SCL/SCK ):

вывод датчика VCC GND SDI SCK
вывод Arduino 3V3 GND A4 A5

Adafruit - файлы Adafruit_Sensor.h , Adafruit_BMP280.h , Adafruit_BMP280.cpp .

Единицы измерения атмосферного давления

Датчик через функцию readPressure выдает значение атмосферного давления в паскалях. Основной единицей измерения атмосферного давления служит гектопаскаль (гПа) (1 гПа = 100 Па), аналогом которого является внесистемная единица "миллибар " (мбар) (1 мбар = 100Па = 1гПа). Для перевода между часто используемой внесистемной единицей измерения давления "миллиметр ртутного столба " (мм рт. ст.) и гектопаскалями используются соотношения:
1гПа = 0,75006 мм рт. ст. ≈ 3/4 мм рт.ст.; 1 мм рт.ст. =1,3332 гПа ≈ 4/3 гПа.

Зависимость атмосферного давления от высоты над уровнем моря

Атмосферное давление может быть представлено как в абсолютной, так и в относительной форме.
Абсолютное давление QFE (англ. absolute pressure ) – это актуальное атмосферное давление, не учитывающее поправку над уровнем моря.
Атмосферное давление уменьшается примерно на 1 гПа при повышении высоты на 1 м:

Барометрическая формула позволяет определить коррекцию показаний барометра для получения относительного давления (в мм рт. ст.):
$\Delta P = 760 \cdot (1 - {1 \over {10^ { {0,0081350 \cdot H} \over {T + 0,00178308 \cdot H} }}})$ ,
где $T$ - средняя температура воздуха по шкале Ранкина, °Ra , $H$ - высота над уровнем моря, футы.
Перевод градусов Цельсия в градусы Ранкина:
$^{\circ}Ra = {^{\circ}C \cdot 1,8} + 491,67$
Барометрическая формула используется при барометрическом нивелировании - определении высот (с погрешностью 0,1 - 0,5 %). В формуле не учитывается влажность воздуха и изменение ускорения свободного падения с высотой. Для небольших перепадов высоты эту экспоненциальную зависимость можно с достаточной точностью аппроксимировать линейной зависимостью.
Относительное давление QNH (англ. relative pressure , Q-code Nautical Height ) – это атмосферное давление, учитывающее поправку к среднему уровню моря (англ. Mean Sea Level, MSL ) (для ISA и температуры 15 градусов Цельсия), и первоначально выставляется с учётом высоты, на которой находится метеостанция. Его можно узнать из данных метеослужбы, показаний откалиброванных приборов в публичных местах, аэропорту (из сводок METAR ), из Интернета.
Например, для расположенного рядом аэропорта Гомель (UMGG ) я могу посмотреть сводку фактической погоды METAR на ru.allmetsat.com/metar-taf/russia.php?icao=UMGG :
UMGG 191800Z 16003MPS CAVOK M06/M15 Q1014 R28/CLRD// NOSIG ,
где Q1014 - давление QNH на аэродроме равно 1014 гПа.
Историю сводок METAR можно получить на aviationwxchartsarchive.com/product/metar .
За нормальное относительное давление воздуха QNH принимается давление 760 мм рт. ст. или 1013,25 гПа (при температуре 0ºС, под широтой 45º Северного или Южного полушария).
Я выставил для барометра-анероида давление QNH с помощью винта настройки чуткости:

Прогноз погоды

Анализ изменения давления позволяет строить прогноз погоды, причем его точность тем выше, чем более резко меняется давление. Например, старое эмпирическое правило мореплавателей гласит - падение давления на 10 гПа (7,5 мм рт. ст.) за период 8 часов говорит о приближении сильного ветра.

Откуда же возникает ветер? Воздух стекается к центру области низкого давления, возникает ветер - горизонтальное перемещение воздуха из областей высокого давления в области низкого давления (высокое атмосферное давление выдавливает воздушные массы в область низкого атмосферного давления). Если давление очень низкое, ветер может достигать силы шторма . При этом в области пониженного давления (барическая депрессия или циклон) теплый воздух поднимается вверх и формирует облака, которые часто приносят дождь или снег .

За направление ветра в метеорологии принимается направление, откуда дует ветер:

Это направление сводится к восьми румбам.

Для предсказания погоды на основе атмосферного давления и направления ветра часто используется алгоритм Zambretti .

Датчик влажности

Для определения относительной влажности воздуха я использую модуль DHT11 (приобретен на торговой площадке eBay ):

Датчик влажности DHT11 имеет три вывода - питание (+ ), данные (out ), земля (- ):

вывод датчика + out -
вывод Arduino 5V D10 GND

Для работы с датчиком я использую библиотеку от Adafruit - файлы DHT.h , DHT.cpp .

Влажность воздуха характеризует количество водяного пара, содержащегося в воздухе. Относительная влажность показывает долю влаги в воздухе (в процентах) по отношению к максимальному возможному количеству при текущей температуре. Для измерения относительной влажности служит :

Для человека оптимальный интервал влажности воздуха - 40 ... 60 %.

Часы реального времени

В качестве часов реального времени я применил модуль RTC DS1302 (платка с часиками приобретена на торговой площадке eBay ):

Модуль DS1302 подключается к шине 3-Wire . Для использования этого модуля совместно с Arduino разработана библиотека iarduino_RTC (от iarduino.ru ).

Плата с модулем DS1302 имеет пять выводов, которые я соединил с выводами платы Arduino Nano :

вывод RTC VCC GND RST CLK DAT
вывод Arduino 5V GND D2 D1 D0

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

Точность моего часового модуля оказалась не слишком высокой - часы спешат примерно на одну минуту за четверо суток. Поэтому я сделал сброс минут на "ноль" и часа на ближайший при удержании кнопки, подключенной к выводу A0 Arduino, после включения питания метеостанции. После инициализации вывод A0 используется для передачи данных через последовательное соединение.

Передача данных на компьютер и работа по протоколу MQTT

Для передачи данных через последовательное соединение к Arduino подключается USB -UART преобразователь:

Вывод Arduino используется для передачи данных в формате 8N1 (8 бит данных, без бита четности, 1 стоп-бит) со скоростью 9600 бит/с. Данные передаются пакетами, причем длина пакета - 4 символа. Передача данных осуществляется в "bit-bang " режиме, без использования аппаратного последовательного порта Arduino .

Формат передаваемых данных:

Параметр 1-й байт 2-й байт 3-й байт 4-й байт
наружная температура o пробел либо минус десятки градусов либо пробел единицы градусов
комнатная температура i пробел либо минус десятки градусов либо пробел единицы градусов
атмосферное давление p сотни мм р. ст. десятки мм рт.ст. единицы мм рт. с.
относительная влажность h пробел десятки процентов либо пробел единицы процентов
текущее время десятки часов единицы часов десятки минут единицы минут

MQTT

Golang приложение - клиент протокола MQTT , отправляющую принятую от метеостанции информации на сервер (MQTT -брокер) :

Сервис позволяет создать акаунт с бесплатным тарифным планом "" (ограничения: 10 соединений, 10 Кб/с):

Для мониторинга показаний метеостанции при этом можно использовать Android -приложение :

Питание

Для питания метеостанции я использую зарядное устройство от старого мобильного телефона Motorola , выдающее напряжение 5 В с током до 0,55 А и подключаемое к контактам 5V (+) и GND (-):

Также можно использовать для питания батарейку напряжением 9 В, подключаемую к контактам VIN (+) и GND (-).

Эксплуатация метеостанции

При запуске происходит инициализация и проверка датчиков.

При отсутствии датчика DS18x20 выдается ошибка "E1", при отсутствии датчика - ошибка "E3".

Затем запускается рабочий цикл метеостанции:

  • измерение и отображение наружной температуры;
  • измерение и отображение комнатной температуры;
  • измерение и отображение атмосферного давления и тренда его изменения;
  • измерение и отображение относительной влажности воздуха;
  • отображение текущего времени;
  • отображение фазы Луны и лунного дня.


Видео работы моей метеостанции доступно на моем -канале: https://youtu.be/vVLbirO-FVU

Отображение температуры

При измерении температуры индицируется две цифры температуры и для отрицательной температуры знак "минус" (с символом градуса в крайнем правом разряде);
для наружной температуры знак градуса отображается вверху:


для комнатной температуры - внизу:

Отображение давления

При измерении давления индицируются три цифры давления в мм ртутного столба (с символом "P " в крайнем правом разряде):

Если давление резко упало, то вместо символа "P " в крайнем правом разряде отображается символ "L ", если резко выросло - то "H ". Критерий резкости изменения - 8 мм рт. ст. за 8 часов:

Так как моя метеостанция отображает абсолютное давление (QFE ), то показания оказываются несколько заниженными по сравнению со сведениями в сводке METAR (в которой приводится QNH ) (14 UTC 28 марта 2018 года):

Отношение давлений (по сведениями ATIS ) составило ${1015 \over 998} = 1,017$. Возвышение аэропорта Гомель (код ИКАО UMGG ) над уровнем моря составляет 143,6 м. Температура по данным ATIS составляла 1 °C .

Показания моей метеостанции практически совпали с абсолютным давлением QFE по сведениями ATIS !

Максимальное/минимальное давления (QFE ), зарегистрированные моей метеостанцией за все время наблюдений:

Отображение относительной влажности воздуха

Относительная влажность воздуха отображается в процентах (в двух правых разрядах отображается символ процента):

Отображение текущего времени

Текущее время отображается на индикаторе в формате "ЧЧ:ММ", причем разделительное двоеточие мигает раз в секунду:

Отображение фаз Луны и лунного дня

Первые два разряда индикатора отображают текущую лунную фазу, а следующие два - текущий лунный день:

У Луны выделяются восемь фаз (приведены английские и русские (синим цветом - неточные) названия):

На индикаторе фазы отображаются пиктограммами:

фаза пиктограмма
растущий серп (полумесяц)
убывающий серп (полумесяц)

Передача данных на компьютер

Если соединить метеостанцию с USB -UART преобразователем (например, на базе микросхемы CP2102 ), подключенным к USB -порту компьютера, то можно с помощью терминальной программы наблюдать передаваемые метеостанцией данные:

Я разработал на языке программирования golang программу, ведущую журнал метеонаблюдений и отправляющую данные в сервис , и их можно просматривать на Android -смартфоне с помощью приложения :

По данным журнала метеонаблюдений можно, например, строить график изменения атмосферного давления:
пример графика с заметным минимумом давления


пример графика с незначительным ростом давления

Планируемые доработки:

  • добавление датчиков направления и скорости ветра

В метеостанциях для измерения скорости ветра используется трехчашечный анемометр (1), а для определения направления ветра - флюгер (2):

Также для измерения скорости ветра используются термоанемометры с нитью накала (англ. hot wire anemometer ). В качестве нагреваемой проволоки можно использовать вольфрамовую нить накала от лампочки с разбитым стеклом. В промышленно выпускаемых термоанемометрах датчик обычно располагается на телескопической трубке:

Принцип действия этого прибора заключается в том, что тепло отводится от нагревательного элемента вследствие конвекции воздушным потоком - ветром. При этом сопротивление нити накала определяется температурой нити. Закон изменения сопротивления нити накала $R_T$ от температуры $T$ имеет вид:
$R_T = R_0 \cdot (1 + {\alpha \cdot (T - T_0)})$ ,
где $R_0$ - сопротивление нити при температуре $T_0$, $\alpha$ - температурный коэффициент сопротивления (для вольфрама $\alpha = 4,5\cdot{10^{-3} {^{\circ}{C^{-1}}}}$).

С изменением скорости воздушного потока изменяется температура при неизменном токе накала (анемометр с постоянным током, англ. CCA ). Если температура нагревательного элемента поддерживается постоянной, то ток через элемента будет пропорционален скорости воздушного потока (анемометр с постоянной температурой, англ. CTA ).

Продолжение следует

В этом проекте будет реализована комнатная настольная метеостанция своими руками. Вы можете подумать, что таких проектов было уже много, но этот проект будет базироваться на новом чипе ESP32, также он будет оснащен новым датчиком BME280, этот датчик измеряет температуру, влажность и атмосферное давление.

Когда настольная метеостанция будет включена, она подключится к WiFi и запросит свежий прогноз погоды для заданной местности. Затем она отобразит его, наряду с данными датчика, на 3,2″ дисплее. Данные с датчика будут обновляться каждые 2 секунды, а данные о погоде — каждый час. Как вы видите, в этом проекте мы будем использовать последние технологии, доступные на сегодняшний день. Если у вас есть опыт в DIY, то проект займёт у вас всего 5 минут.

Если вы новичок, то просмотрите видео, в котором разобраны нюансы сборки.

Шаг 1: Компоненты станции

Чтобы построить свою станцию, нам понадобятся:

  • Плата ESP32 (ссылка)
  • Датчик BME280 I2C (ссылка)
  • Дисплей 3.2” Nextion (ссылка)
  • Небольшая макетная плата (ссылка)
  • Немного проводов (ссылка)

Стоимость проекта будет варьироваться в районе $30.

Вместо модуля ESP32 можно использовать более дешевый чип ESP8266, но я решил использовать ESP32, чтобы получить представление об этом новом модуле и посмотреть, как он работает.

Шаг 2: ESP32


Это первый проект, который я собрал, используя чип ESP32. Если вы не знакомы с ним, чип ESP32 — это следующее поколение популярного чипа ESP8266. ESP32 предоставляет два 32-процессных ядра, работающих на 160MHz,большой объем памяти, WiFi, Bluetooth и много других функций. И это всего за $7.

Посмотрите видео с моим детальным описанием этой платы. Оно поможет понять, почему этот чип изменит наш подход к созданию вещей.

Шаг 3: Дисплей Nextion

Также, это первый проект, в котором я использовал тачевый дисплей Nextion. Это новый вид дисплеев, который оснащен собственным ARM-процессором, позволяющим настраивать дисплей и создавать графический интерфейс. Поэтому мы можем использовать его с любым микроконтроллером и получать хорошие результаты.

Шаг 4: Датчик BME280


Датчик BME280 — это новейший сенсор от Bosch. Он может измерять температуру, влажность и атмосферное давление. Нам нужен всего один датчик, чтобы собрать целую погодную станцию.

В дополнение, этот датчик очень маленький и он прост в управлении. Датчик управляется через интерфейс I2C, так что взаимодействие с Ардуино будет очень простым — для стабильной работы нам нужно будет запитать его и припаять всего пару проводов.

Также существует множество библиотек, разработанных для этого датчика, так что в нашем проекте мы можем использовать любую из них.

Заметка: нам нужен датчик BME280. Существует также датчик BMP280, который не измеряет влажность воздуха. Проверьте название перед тем, как купите датчик.

Шаг 5: Соединяем части вместе





Соединение модулей достаточно простое, вы можете увидеть это на приложенной схеме.

Так как датчик BME280 использует интерфейс I2C, нам нужно всего два провода, чтобы соединить его с ESP32. Я соединил датчик с пинами 26 и 27. В теории, каждый цифровой пин платы ESP32 может быть использован для взаимодействия с периферией, работающей на I2C. На практике, я обнаружил, что некоторые пины не работают, так как зарезервированы для других целей. Пины 26 и 27 работают без перебоев.

Чтобы отправить данные на дисплей, нам нужно соединить провод с пином TX0 на ESP32. Мне пришлось согнуть пин на 90 градусов, чтобы соединить его с дисплеем, так как плата ESP32 оказалась великоватой для макетной платы.

После сборки всех частей, нам нужно залить код на ESP32, а также залить интерфейс на дисплей Nextion. Если у вас возникли трудности при прошивке ESP32, зажмите кнопку BOOT сразу после нажатия кнопки загрузки в ИДЕ Ардуино.

Чтобы залить интерфейс на дисплей, скопируйте файл WeatherStation.tft, который будет приложен ниже, на пустую карту SD. Поместите карту в слот, располагающийся на задней части дисплея. После подачи питания, интерфейс будет загружен в дисплей — можно выключить его и извлечь карту, затем включить заново.

После успешной загрузки кода, станция соединится с WiFi, запросит данные о погоде с сайта openweathermap.org, а также отобразит данные с датчика. Давайте теперь посмотрим на программную часть проекта.

Шаг 6: Код проекта



Чтобы спарсить погодные данные, нам понадобится библиотека JSON для Ардуино. Также нам понадобится библиотека для датчика.

Рассмотрим код. Сначала нам нужно отправить SSID и пароль нашей сети WiFi. Затем нам нужно ввести ключ API с сайта operweathermap.org. Чтобы создать собственный ключ, нужно зарегистрироваться на сайте. Получение текущей погоды бесплатно, но сайт предлагает больше услуг, если вы хотите платить за них. Затем нам нужно найти ID нашего местонахождения. Найдите ваш населённый пункт и скопируйте его ID из URL.

Затем скопируйте ваш ID в переменную CityID. Также скопируйте высоту над уровнем моря для вашего населённого пункта. Это необходимо для того, чтобы барометр показывал точные данные.

Const char* ssid = "yourSSID"; const char* password = "yourPassword"; String CityID = "253394"; //Sparta, Greece String APIKEY = "yourAPIkey"; #define ALTITUDE 216.0 // Altitude in Sparta, Greece

Ответ мы получим в формате JSON. Перед отправкой данных в библиотеку JSON, я вручную удалил некоторые символы, которые вызывали проблемы. После этого библиотека спокойно принимает данные, и мы можем сохранить их в переменные. После сохранения данных в переменные, всё, что нам нужно сделать — это отобразить их на дисплее и ждать, пока через час они не обновятся. Я отобразил на дисплее только прогноз погоды, но вы, при желании, можете вывести на него больше информации — всё сохраняется в переменные. Затем мы считываем информацию о температуре, влажности, давлении с датчика и также отправляем их на дисплей.

Чтобы обновить информацию на дисплее, мы просто отправляем команды на серийный порт:

Void showConnectingIcon() { Serial.println(); String command = "weatherIcon.pic=3"; Serial.print(command); endNextionCommand(); }

Интерфейс дисплея Nextion состоит из заднего фона, текстовых блоков и картинки, которая меняется в зависимости от погоды. Посмотрите руководство к дисплею, чтобы узнать больше о его возможностях. Вы можете быстро спроектировать свои интерфейс, если хотите, чтобы дисплей отображал больше данных.

Или вы можете просто использовать мой код, приложенный к этой инструкции.

Файлы

Шаг 7: Заключительные мысли и улучшения

Как вы видите, на сегодняшний день, искушенный человек может собрать своими руками удивительные вещи всего за несколько часов и написав всего несколько строчек кода. Проекты такого уровня были невообразимы даже два года назад.

Конечно, это только начало проекта. Я бы хотел добавить в него много улучшений, например графики, тачевую функциональность, может быть, заменил бы дисплей на другой, размером побольше. Также я бы напечатал на 3D принтере красивый корпус. Еще я бы спроектировал более интересный интерфейс и иконки. И у меня уже есть несколько свежих идей комнатных метеостанций, которые можно внедрить!

Сегодня, чтобы собрать рабочий прототип базовой домашней метеостанции не нужно обладать сильными навыками программирования (в нашем случае и подавно) или схемотехники. Достаточно умения «гуглить» и толики желания сделать что-то своими руками. В этом материале я расскажу и покажу, как за вечер собрать домашнюю метеостанцию с подключением к сети. Базовый бюджет - всего 10 долларов.

Текст может содержать и наверняка содержит грамматические, орфографические, пунктуационные и другие виды ошибок, включая смысловые. Я всячески прошу читателей указывать на эти ошибки с помощью системы ORPHUS. Для этого достаточно выделить необходимый участок текста и нажать комбинацию клавиш CTRL+Enter.

Базовый набор комплектующих

Основой нашего будущего устройства является отладочная плата NodeMCU на базе модуля ESP8266. Я взял ее на Gearbest , но при желании вы можете поискать оную и на других площадках.

Для соединения модулей можно использовать шлейф с BLS-разъемами ($0.9) или беспаечную макетную плату с набором соединительных проводов ($3.74).

Подключение и настройка

Несмотря на доступные 4 вывода, подключается наш датчик всего по 3 проводам: питание +5В (1 вывод), земля (4) и линия передачи данных (2). Питание для датчика берем либо с пина VUSB, либо с 3V, если первого на вашей плате не оказалось. Линию данных подключаем к порту GPIO14 (пин D5).

Напомню, что навыков программирования в нашем случае не нужно абсолютно никаких. Прошивку для модуля будем генерировать с помощью сайта WiFi-IoT.ru , автором которого является Максим Малкин, также известный по проекту домашней автоматизации homes-smart.ru . Для начала попросту регистрируемся на WIFi-IoT и подтверждаем почту.

Перед сборкой прошивки необходимо подготовить приобретенный модуль к работе и очистить его от возможного предустановленного китайского ПО. Для этого нам понадобится рабочий USB-microUSB кабель и компьютер или виртуальная машина с Windows. После регистрации на сайте вы попадете на англоязычную страницу «Getting started » с пояснениями по подготовке модуля к работе. Скачивайте файлы с ПО из первых двух пунктов инструкции.

Теоретически, после подключения модуля к компьютеру, Windows должна сама отыскать драйвера и установить их. На случай, если этого не произойдет, попробуйте идентифицировать на плате микросхему (отличается большим количеством «ножек») возле microUSB порта. Вероятнее всего это будут CP2102 или CH340 (драйвера к ним доступны по ссылкам).

После установки драйверов повторно подключаем нашу плату к компьютеру и запускаем программу NodeMCU Flasher, которую скачали ранее. В выпадающим списке выбираем присвоенный нашему устройству COM-порт. Скорее всего он будет один, в противном случае его номер можно уточнить в диспетчере устройств Windows. Во вкладке Config указываем расположение загруженного ранее blank-файла с расширением.bin.

Для NodeMCU параметры во вкладке Advanced необходимо выставить в соответствии с нижеприведенным скриншотом, после чего возвращаемся на стартовую страницу и нажимам кнопку Flash. О завершении процесса прошивки программа просигнализирует зеленой галочкой в левом нижнем углу.

После данных манипуляций модуль готов к загрузке прошивки, которую нам еще предстоит скомпоновать. Идем в конструктор и отмечаем необходимые нам пункты:

  • «DHT22» - это наш датчик температуры и влажности;
  • «Время и NTP» - для отображения времени в веб-интерфейсе;
  • «Настройки по умолчанию». Нажимаем шестеренку возле этого пункта и вводим логин и пароль от точки доступа, к которой будет подключен модуль. Остальные пункты пока не трогаем.

Нажимаем клавишу «Скомпилировать» внизу страницы и на выходе получаем готовое к установке ПО. Скачиваем одним файлом.

Далее повторяется процесс с прошивкой blank-файла, только вместо него выбираем уже загруженную на компьютер прошивку. После завершения процесса полностью перезагружаем модуль (отключаем и подключаем заново USB-кабель) и отправляемся в админ-панель роутера в поисках модуля. Так как мы не использовали предварительное присвоение статического IP, роутер должен сам выдать ему адрес. Напомню, что админ-панель обычно находится по адресу 192.168.0.1 или 192.168.1.1. Моему модулю роутер выдал адрес 192.168.1.142. После перехода по этому IP попадаем в веб-интерфейс нашей метеостанции. Предварительно необходимо будет ввести стандартный логин «esp8266» и пароль «0000» во всплывающем окне.

Теперь нужно указать модулю к какому порту подключен датчик, чтобы первый смог считывать его показания. Делается это на странице «Hardware». Соответствующей отметкой активируем первый датчик, а в строке GPIO указываем 14-й порт. Произойдет инициализация и на главной странице интерфейса появится отображение температуры и влажности. Ура!

Напоследок не забудьте на странице «Main» изменить пароль для входа в систему и часовой пояс для отображения времени. Также необходимо перевести модуль на статический IP-адрес (кнопка внизу страницы), чтобы после перезагрузки роутера ваша метеостанция не «потерялась». Если разбираетесь в настройках своего роутера, то лучше сделать бессрочную аренду IP-адреса для модуля, вместо установки статического IP.

Прототип готов, теперь перейдя по установленному IP-адресу можно посмотреть температуру и влажность в месте, где вы установили датчик.

Подключение метеостанции к сервису метрик Thingspeak.com

Но просто смотреть температуру не интересно. Необходима визуализация данных, чтобы можно было проследить какие-то тенденции в изменении показаний. Для этого регистрируемся в сервисе метрик Thingspeak.com и в своем профиле создаем новый канал.

На открывшееся странице заполняем название канала, отмечаем первых два поля field и записываем туда значения «temp» (первое поле) и «humidity / temp» (второе).

Теперь снова займемся модулем. В конструкторе прошивок в дополнение ко всем предыдущим отметкам добавляем «Thingspeak.com», компилируем прошивку и прошиваем по аналогии. К сожалению, все настройки на модуле придётся произвести заново, т.к. OTA-обновления с сохранением оных доступны только в платной версии ПО (цена вопроса всего 100 рублей на модуль).

Возвращаемся на страницу созданного нами канала в сервисе Thingspeak.com и открываем вкладку «Api Keys». Нам понадобится код из поля «Write Api Key». Его нужно скопировать и вставить в соответствующее поле на странице «Servers» в веб-интерфейсе нашей метеостанции, предварительно не забыв установить отметку на «Enable Thingspeak.com send.».

Показания будут отправляться каждые 5 минут. А выглядеть это в итоге будет следующим образом:

Внешний вид графиков поддается редактированию, так что вы вольны творить! 🙂

Итоги

Наверное кто-то спросит: «Почему итоговый результат отличается от представленного на приведенной выше и заглавной картинках?». Как минимум потому, что информации в этом материале новичкам в теме точно хватит на вечер-другой, а подключение дисплея и барометра потребуют наличия базовых навыков пайки и соответствующего оборудования. Если вы заинтересованы в дальнейшем совершенствовании метеостанции и моих заметках по этой теме, то обязательно напишите об этом в комментариях.