Простейшая метеостанция на ардуино

В этом уроке мы создадим простую метеостанцию на Arduino, очень простой проект, который дает информацию о погоде.

Шаг 1: Покупаем нужные компоненты

  • DHT22, датчик температуры и влажности.
  • BMP180, датчик давления.
  • Arduino Nano
  • Припой
  • LCD дисплей с модулем I2c
  • Макетная плата
  • Однорядный разъем на 40 выходов

Из оборудования вам понадобятся:

  • Паяльник
  • Плоскогубцы для носоупоров
  • Провода

Что понадобится

    — микроконтроллер Arduino Uno
    — термистор (терморезистор)
    — сопротивление на 10 кОм
    — семисегментный индикатор
    — макетная плата
    — соединительные провода «папа-папа»

Простая метеостанция с ЖК-экраном

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

Мы будем собирать устройство на макетной плате. Схему можно поправить за считанные мгновения и не придётся ничего перепаивать.

Что это такое?

В этой статье мы расскажем о том, как собрать полноценную метеостанцию,передающую данные о погоде на широко известный сервис«народный мониторинг».

Наша метеостанция будет состоять из двух устройств: компактного автономногоустройства, измеряющего погодные показатели, и устройства-ретранслятора,получающего эти показатели и отправляющего их на «народный мониторинг».Устройства будут связываться по беспроводному каналу связи на частоте 433 МГц.Автономная часть будет питаться от трёх пальчиковых батареек и сможетпросуществовать на одном комплекте батарей до года при периоде опроса датчиковв 20 мин.

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

Комплектующие

Начинаем по традиции с комплектующих для погодной станции Ардуино.

  • Arduino UNO (Genuino UNO) × 1
  • Adafruit стандартный LCD дисплей  16×2 × 1
  • GY-BM E/P 280 × 1
  • Резистор 221 ом × 1
  • Провода (на выбор)

Дополнительно нам понадобится Arduino IDE.

Цветные поляны. Новый флешмоб!

Объявляю новый флешмоб. Или марафон. Или просто движуху. Кому как нравится называть:) Самый простой, классический. Без условий и заданий, без подписок на спонсоров и без раскрутки. 

А просто так, для радости:)

В прошлый раз когда мне хотелось в марте-апреле фотографировать здания и разбираться с архитектурой в прозрачном воздухе ранней весны, вы поддержали мою затею «Архитектурные прогулки» и активно участвовали в моих уроках архитктуры для детей на свежем воздухе:)

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

Ведь у всех сейчас полный фотоаппарат цветов? 

И вы тоже чувствуете, что весна проходит мимо каждую минуту? Только-только в одуванчиках фотографировались, а вот вам уже и маки… 

Хочется все эти миги цветения успеть поймать? И самим полюбоваться, и другим показать?

Для этого и нужен флешмоб!

Делитесь своими фото в соцсети Инстаграм или во ВКонтакте под тегом #цветныеполяны

Иначе куда деть эти мегабайты весеннего настроения? Лично меня они просто распирают! И я с удовольствием посмотрю на ваши:)

Ведь как не поделиться цветущими полями Крыма с моими подписчиками и единомышленниками? А ведь вы единомышленники, раз вы мой блог читаете:) Читаете — значит вы из тех, кто как и я, смотрит вокруг широко открытыми глазами.

Поэтому вместе со мной публикуйте в соцсетях свои фото цветущих полян, полей или просто клумб. И ставьте тег #цветныеполяны

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

Давайте делиться им!

флешмоб цветные поляны
0_f7908_f84b19f9_orig.png

Что для этого необходимо?

meteo_collage.jpg

Для изготовления автономного передатчика нам понадобятся:

  1. Держатель пальчиковых батареек на x3 AA

Для изготовления ретранслятора нам понадобятся:

Так же удобно установить два светодиода для индикации процессов:

Для звуковой индикации разряда батареи автономной части удобно использоватьпьезо-пищалку:

Шаг 2: Датчик температуры и влажности DHT22

Для измерения температуры используются разные датчики. Популярностью пользуются DHT22, DHT11, SHT1x

Я объясню, чем они отличаются друг от друга, и почему я использовал именно DHT22.

Датчик AM2302 использует цифровой сигнал. Этот датчик работает на уникальной системе кодировки и сенсорной технологии, поэтому его данные надежны. Его сенсорный элемент соединен с 8-битным однокристальным компьютером.

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

Маленький размер, низкое потребление энергии, большое расстояние передачи (100 м) позволяют AM2302 подходить почти ко всем приложениям, а 4 выхода в один ряд делают монтаж очень простым.

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

DHT11

Плюсы: не требует пайки, самый дешевый из трех моделей, быстрый стабильный сигнал, дальность свыше 20 м, сильная интерференция.
Минусы: Библиотека! Нет вариантов разрешения, погрешность измерений температуры +/- 2°С, погрешность измерений уровня относительной влажности +/- 5%, неадекватный диапазон измеряемых температур (0-50°С).
Области применения: садоводство, сельское хозяйство.

DHT22

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

SHT1x

Плюсы: не требует пайки, сглаженные кривые, малые погрешности измерений, быстрое срабатывание, низкое потребление энергии, автоматический режим сна, высокая стабильность и согласованность данных.
Минусы: два цифровых интерфейса, погрешность в измерении уровня влажности, диапазон измеряемых температур 0-50°С, нужна библиотека.
Области применения: эксплуатация в суровых условиях и в долгосрочных установках. Все три датчика относительно недорогие.

Соединение

  • Vcc – 5В или 3,3В
  • Gnd – с Gnd
  • Data – на второй вывод Arduino

Если что-то пошло не так:

  • Не загружается код — проверьте подключение к компьютеру и выбор порта. Если всё верно попробуйте выбрать другой загрузчик:

выбор процессора платы

  • Ошибка компиляции — проверьте весь ли код вы скопировали, возможно упущена какая-нибудь строка или скобка. Проверьте путь установки библиотек.
  • Всё загрузилось, но не работает — проверяйте подключение, если всё верно, то покрутите крутилку контрастности на задней стороне дисплея.
  • Всё равно не работает — попробуйте заменить адрес «0х27» во второй строке кода на «0x3F», китайцы делают дисплеи с разными контроллерами и у них разные адреса.

Добрый Электрик/ автор статьи

Электрик Дома

Внешний модуль

Ну а теперь кое-что поинтереснее. Это внешний модуль метеостанции. Просто повесить датчик на какую-то поверхность или оставить болтаться на проводе – это плохая идея.

А знаете ли вы как располагаются метеорологические датчики температуры и влажности? Используют специальные вентилируемые корпуса на подобие вантузов. Белого цвета. Вот мне и захотелось, сделать все по красоте. На thingiverse я нашел интересный проект “DHT22 TEMPERATURE HUMIDITY SHELTER” от автора NEO BUILDER.

Как видно по рендеру, это тот самый метеорологический вантуз. Проект разрабатывался как раз для датчика DHT22. Так что это оказалось то что мне нужно. Порадовало, что кроме STL файлов в архиве с проектом оказалась подробная инструкция по сборке данного корпуса. В итоге именно этот проект я и решил реализовать так сказать в пластике. Для печати использовался пластик PETG от компании ABSmaker, если интересно, вот статья про него  “PETG пластик от компании ABSMaker. Краткий обзор и отзыв“. Естественно, печаталась модель из белого пластика.

И вот что у меня получилось:

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

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

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

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

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

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

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

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

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

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

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

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

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

Шаг 4: Собираем прибор

Устанавливаем однорядные разъемы для Arduino Nano. Вообще, мы обрезали их до нужного размера и немного зашкурили, так что они смотрятся, словно такими и были. Потом припаиваем их. После, устанавливаем однорядные разъемы для датчика DHT22.

Устанавливаем 10кОМ резистор от вывода данных к земле (Gnd). Все паяем.
Потом точно также устанавливаем однорядный разъем для датчика BMP180, питание делаем 3,3В. Соединяем все с шиной I2C.

В последнюю очередь подключаем LCD-дисплей, на ту же I2C шину, что и датчик BMP180.
(в четвертый разъем я планирую позже подключить RTC-модуль (часы реального времени), чтобы прибор еще и время показывал).

Прошивка

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

Я уже довольно давно работаю с альтернативной прошивкой для датчиков Sonoff, которая называется Tasmota. Я устанавливаю эту прошивку на модули умного дома Sonoff. Эта прошивка прекрасно работает по MQTT с моим сервером умного дома. Задача по мониторингу температуры и влажности для этой прошивки более чем тривиальная. При этом не нужно собирать какой-то кастомный билд прошивки. Берем готовую прошивку и заливаем. Хочешь из hex файла, хочешь, компилируешь в среде arduino ide и заливаешь.

Для тех кому не нравится Tasmota, можете использовать проект espeasy. С этой прошивкой тоже все будет работать, но опыта ее использования у меня практически нет.

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

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

Вот такие вот параметры были выставлены у меня. После полной сборки проекта необходимо было переходить к монтажу.

Регистрация метеостанции в «Народном мониторинге»

Чтобы данные, передаваемые нашим устройством, корректно отображались на народноммониторинге, необходимо выполнить следующее:

  1. Установить уникальный MAC-адрес устройства.

  2. Зарегистрироваться на сайте «Народного мониторинга».

  3. Авторизоваться.

  4. Открыть список датчиков и установить номиналы передаваемых данных.

Шаг 5: Кодирование

Загрузите библиотеки

Для BMP180
для DHT22

Чтобы установить библиотеки на Arduino, перейдите по ссылке

#include
#include #include #include «DHT.h»#include

SFE_BMP180 pressure;

#define ALTITUDE 20.56 #define I2C_ADDR 0x27 // <<- Add your address here.#define Rs_pin 0#define Rw_pin 1#define En_pin 2#define BACKLIGHT_PIN 3#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7

#define DHTPIN 2 // what digital pin we’re connected to

// Uncomment whatever type you’re using!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321DHT dht(DHTPIN, DHTTYPE);LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);float t1,t2;

void setup(){ Serial.begin(9600); lcd.begin (16,2); // <<— our LCD is a 20×4, change for your LCD if needed// LCD Backlight ONlcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);lcd.setBacklight(HIGH); lcd.home (); // go home on LCDlcd.print(«Weather Station»);delay(5000);dht.begin(); pressure.begin(); } void loop(){ char status; double T,P,p0,a; status = pressure.startTemperature(); if (status != 0) { delay(status);

status = pressure.getTemperature(T); if (status != 0) { Serial.print(«1»); lcd.clear(); lcd.setCursor(0,0); lcd.print(«Baro Temperature: «); lcd.setCursor(0,1); lcd.print(T,2); lcd.print(» deg C «); t1=T; delay(3000);

status = pressure.startPressure(3); if (status != 0) { // Wait for the measurement to complete: delay(status);

status = pressure.getPressure(P,T); if (status != 0) {lcd.clear(); lcd.setCursor(0,0); lcd.print(«abslt pressure: «); lcd.setCursor(0,1); lcd.print(P,2); lcd.print(» mb «); delay(3000);

p0 = pressure.sealevel(P,ALTITUDE); // we’re at 1655 meters (Boulder, CO)

a = pressure.altitude(P,p0); lcd.clear(); lcd.setCursor(0,0); lcd.print(«Altitude: «); lcd.setCursor(0,1); lcd.print(a,0); lcd.print(» meters»); delay(3000); } } } } float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); t2=t; lcd.clear(); lcd.setCursor (0,0); // go to start of 2nd line lcd.print(«Humidity: «); lcd.setCursor(0,1);lcd.print(h); lcd.print(» %»); delay(3000); lcd.clear(); lcd.setCursor (0,0); // go to start of 2nd line lcd.print(«DHT Tempurature: «); lcd.setCursor(0,1); lcd.print(t); lcd.print(» deg C «); delay(3000); lcd.clear(); lcd.setCursor (0,0); // go to start of 2nd line lcd.print(«Mean Tempurature: «); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print(» deg C «); delay(3000);}

Я использовал версию Arduino 1.6.5, код точно к ней подходит, к более поздним так же может подойти. Если код по каким-либо причинам не подходит, используйте версию 1.6.5 как базовую.

Файлы

  • weather.ino

Что ещё можно сделать?

  1. Teensy прямо на борту имеет часы реального времени (RTC). Для их работоспособности не хватает только кварца. Можно купить кварц на 32,768 КГц в любом магазине радиоэлементов и припаять его. Тогда можно пробуждать Teensy по будильнику RTC. Достоинство в том, что можно будить устройство чаще в те часы, когда нужны более точные показания. Например, в рабочее время будить устройство каждые 5 минут, а в остальное — каждые полчаса.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...