Метеостанция на Arduino Nano. Часть 1.

В новогодние каникулы приключилась со мной удивительная история. Началось всё с того, что заметил я, накануне, что-то слишком влажно стало в ванной. Ну, вот 31-го вечером решил: «Дай, посмотрю», и посмотрел… 

Там оказалось всё тривиально, просто забилась решётка вентиляции пылью. Но, как теперь проверить не слишком ли влажно? Решил поставить туда метеостанцию небольшую. Сунулся — а её нет!

А давно, лет пять назад, подарили мне набор Arduino с разными датчиками и радиодеталями. Я тогда воспринял это как игрушку, и так и не придумал, как использовать. А тут такая необходимость.

Сначала подключил датчик влажности и температуры. С ним пришлось покопаться в интернете т.к. в стандартной Arduino IDE примера  и подходящей библиотеки не было. Нашел вот эту библиотеку: https://github.com/amperka/dht/.

Подключил датчик по схеме ниже и всё заработало.

Датчик работает. Показывает влажность и температуру. Над чашкой чай показатели меняются. Словом, всё отлично! Но все показания выдаются на экран компьютера. Я же не потащу, компьютер в ванну! Ну, да ладно! В наборе ещё есть небольшой ЖК-дисплейчик.

Его подключить получилось без проблем по схеме ниже и по стандартному примеру. Загрузил и всё заработало, только пришлось потенциометром контрастность дисплея подстроить. 

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

// include the library code: #include <LiquidCrystal.h> // подключаем библиотеку #include <dht.h> // initialize the library by associating any needed LCD interface pin // with the arduino pin number it is connected to const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // создаём объект-сенсор DHT sensor = DHT(); void setup() { Serial.begin(9600); // методом attach объявляем к какому контакту подключен // сенсор. В нашем примере это нулевой аналоговый контакт sensor.attach(A0); // // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); // после подачи питания ждём секунду до готовности сенсора к работе delay(1000); } void loop() { // метод update заставляет сенсор выдать текущие измерения sensor.update(); if(sensor.getLastError() == DHT_ERROR_OK) { lcd.clear(); // set the cursor to column 0, line 0 // (note: line 0 is the second row, since counting begins with 0): lcd.setCursor(0, 0); lcd.print("T: " + String(sensor.getTemperatureInt())); lcd.setCursor(0, 1); lcd.print("H: " + String(sensor.getHumidityInt())); } else { lcd.setCursor(15, 0); lcd.print("E"); } delay(5000); }

Теперь вот снимаю показания с датчика. Вы вероятно спросите: «Что же здесь удивительного?» А удивительно то, что я человек далёкий от электроники и программирования микроконтроллеров собрал такую метеостанцию буквально на коленке за час. 

Восхищён тем, кто придумал этот Ардуино.