В новогодние каникулы приключилась со мной удивительная история. Началось всё с того, что заметил я, накануне, что-то слишком влажно стало в ванной. Ну, вот 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);
}
Code language: PHP (php)
Теперь вот снимаю показания с датчика. Вы вероятно спросите: «Что же здесь удивительного?» А удивительно то, что я человек далёкий от электроники и программирования микроконтроллеров собрал такую метеостанцию буквально на коленке за час.
Восхищён тем, кто придумал этот Ардуино.