// nano "thermo" project v1.3
// sensors: dht22
// display: lcd1604
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <DHT_U.h>
// Define digital pins connected to Sensors
#define DHT_A_PIN 2
#define DHT_B_PIN 3
#define DHT_C_PIN 4
#define DHT_A_TYPE DHT22
#define DHT_B_TYPE DHT22
#define DHT_C_TYPE DHT22
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT_Unified dht_A(DHT_A_PIN, DHT_A_TYPE);
DHT_Unified dht_B(DHT_B_PIN, DHT_B_TYPE);
DHT_Unified dht_C(DHT_C_PIN, DHT_C_TYPE);
void setup() {
lcd.init();
lcd.backlight();
delay(1000);
lcd.home();
lcd.print("Lilyhammer Meteo");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("by Andrey Sobina");
// Initialize device
Serial.begin(9600);
Serial.println(F("nano thermo project v1.3"));
// Initialize Sensors
dht_A.begin();
dht_B.begin();
dht_C.begin();
delay(3000);
}
void loop() {
dht_sauna();
delay(5000);
dht_room();
delay(5000);
dht_outside();
delay(5000);
}
void dht_sauna() {
lcd.clear();
lcd.home();
// Get temperature event from sensor A and print its value
sensors_event_t event;
dht_A.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Sauna sensor: Error reading temperature"));
lcd.setCursor(0, 0);
lcd.print("Error sensor A");
}
else {
lcd.print("Sauna: ");
lcd.print(event.temperature);
lcd.print(" ");
lcd.print(char(223));
lcd.print("C");
}
// Get humidity event from sensor A and print its value
dht_A.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Sauna sensor: Error reading humidity"));
lcd.setCursor(0, 1);
lcd.print("Error sensor A");
}
else {
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(event.relative_humidity);
lcd.print(" %");
}
}
void dht_room() {
lcd.clear();
lcd.home();
// Get temperature event from sensor B and print its value
sensors_event_t event;
dht_B.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Room sensor: Error reading temperature"));
lcd.setCursor(0, 0);
lcd.print("Error sensor B");
}
else {
lcd.print("Room: ");
lcd.print(event.temperature);
lcd.print(" ");
lcd.print(char(223));
lcd.print("C");
}
// Get humidity event from sensor B and print its value
dht_B.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Room sensor: Error reading humidity"));
lcd.setCursor(0, 1);
lcd.print("Error sensor B");
}
else {
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(event.relative_humidity);
lcd.print(" %");
}
}
void dht_outside() {
lcd.clear();
lcd.home();
// Get temperature event from sensor C and print its value
sensors_event_t event;
dht_C.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Outside sensor: Error reading temperature"));
lcd.setCursor(0, 0);
lcd.print("Error sensor C");
}
else {
lcd.print("Outs.: ");
lcd.print(event.temperature);
lcd.print(" ");
lcd.print(char(223));
lcd.print("C");
}
// Get humidity event from sensor C and print its value
dht_C.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Outside sensor: Error reading humidity"));
lcd.setCursor(0, 1);
lcd.print("Error sensor C");
}
else {
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(event.relative_humidity);
lcd.print(" %");
}
}