// accensione e spegnimento due rele in funzione della temperatura e umidita'
#include <Wire.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define TEMP 7 //originale
#define HUM 8 //originale
DHT dht(2, DHT22);
int Vala = 27;//temperatura minima rele attivo(25 circa)
int Valb = 30;//temperatura max rele disattivo(31 circa)
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <RTClib.h>
RTC_DS3231 rtc;
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(TEMP, OUTPUT); //originale
pinMode(HUM, OUTPUT); //originale
rtc.begin();
// Avvio sensore DHT22
dht.begin();
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
}
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
// Lettura umiditĂ e temperatura del sensore DHT22
int h = dht.readHumidity();
int t = dht.readTemperature();
// Misura la temperatura e se minore di tot gradi attiva relè per accendere il riscaldatore
if (t <= Vala) //impostare temperatura di partenza minore o uguale
digitalWrite(TEMP, HIGH); // Attiva Relè 1 temperatura
else if (t > Valb)
digitalWrite(TEMP, LOW); // Spegni Relè 1
// Misura umidita' e se minore di tot gradi attiva relè per accendere l'umidificatore
if (h <= 70) //imposta umidita minore o uguale
digitalWrite(HUM, HIGH); // Attiva Relè 2 umidita
else if (h > 90)
digitalWrite(HUM, LOW); // Spegni Relè 2
Serial.print("Temp: ");
Serial.print(t);
Serial.print("C, Umid: ");
Serial.print(h);
Serial.println("%");
// impostare cursore sulla quarta riga:
lcd.setCursor(3, 7);
lcd.print("TEMP: ");
lcd.print(t);
lcd.print("C");
// imposta cursore sulla terza riga:
lcd.setCursor(2, 2);
lcd.print(" Umid: ");
lcd.print(h);
lcd.print("%");
DateTime now = rtc.now();
printDateTime(now);
delay(1000);
}
void printDateTime(DateTime dt) {
char dateBuffer[] = " DD/MM/YYYY";
char timeBuffer[] = " hh:mm:ss";
lcd.setCursor(1, 1);
lcd.print(dt.toString(timeBuffer));
lcd.setCursor(0, 0);
lcd.print(dt.toString(dateBuffer));
}
salve volevo chiedere aiuto per questo programma.
questo programma funziona tutto per come' attiva e disattiva due rele' in funzione della temperatura e umidita' prendendo informazioni da un dht22 collegato sul pin 2 e comanda 2 rele' a 5v collegati ai pin 7 e 8 per l'orologio ho usato un ds3231 un display hd44780 20x4 collegato con modulo I2C collegato in parallelo sui pin sda e scl di arduino la scheda che utilizzo e' un arduino mega 2650.
Vorrei far attivare il rele' della temperatura con due fasce orarie diverse e parametri di temperatura diverse usando la referenza switch..case.
Es: voglio comandare il rele' 1 dalle ore 8:30 alle 20:00 con valori di temperatura compresi tra 21 e 25 gradi e dalle 20:01 alle 8:29 con valori di temperatura compresi tra i 27 e 31 gradi.
Non so' come prendere l'orario dall'rtc e creare la variabile da inserire nello switch
se utilizzassi
ES:
switch (variabile) //qui la variabile magica ![]()
case 1
if (t <= Vala) //impostare temperatura di partenza minore o uguale
digitalWrite(TEMP, HIGH); // Attiva Relè 1 temperatura
else if (t > Valb)
digitalWrite(TEMP, LOW); // Spegni Relè 1
break;
case 2
if (t <= Valc) //impostare temperatura di partenza minore o uguale
digitalWrite(TEMP, HIGH); // Attiva Relè 1 temperatura
else if (t > Vald)
digitalWrite(TEMP, LOW); // Spegni Relè 1
break;
creando altre due vatiabili
int Valc = 21;//temperatura minima rele attivo
int Vald = 25;//temperatura max rele disattivo
ma non so' come integrare le fasce orarie dall'RTC
se qualcuno mi puo' dare indicazione perche' ho cercato in lungo e in largo sul manuale arduino sul forum video vari ma niente non so proprio come muovermi
ringrazio anticipatamente per qualche dritta.