Метеостанция на 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);
}Code language: PHP (php)

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

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