Ciao,
premesso che di serre non ci capisco proprio niente, cercherò di buttare lì qualche idea da un punto di vista strettamente di programmazione:
samu934:
- Accensione di una lampada mediante Rele 4 che faccia 16H Accesa e 8H Spenta
Concordo con zef che la soluzione migliore sia quella di includere un modulo RTC.
Però l'impostazione di data/ora nell'RTC comporta un surplus di programmazione (e se non ho capito male non sei un esperto); inoltre mi pare di aver capito che la serra dovrebbe agire in modo autonomo solo per brevi periodi di alcuni giorni. Allora io ti consiglierei di incominciare usando il timer interno di arduino, che non è così malvagio: sbaglia di qualche secondo al giorno*, non di più. Per un orologio sarebbe pessimo ma nel tuo caso lo direi accettabile. Sempre passibile di perfezionamento in seguito!
*Se non ricordo male anche i Patriot in Iraq avevano questo problema.
samu934:
- Monitoraggio a monitor della temperatura e umidità
Questa è sicuramente la parte più semplice, e ti consiglio caldamente di incominciare da qui. Non solo ti permette di verificare il funzionamento dei sensori, ma ti dà anche la soddisfazione di aver fatto un monitor della serra (che può comunque servirti per decidere quando innaffiare o ventilare o quello che si fa in una serra
samu934:
- Controllo Temperatura e Umidità (La parte complessa):
- Accendere il Rele 1 quando la temperatura è sopra alla soglia dei 26°
- Accendere il Rele 2 quando la Temperatura è sotto ala soglia dei 23°
- Accendere il Rele 1 quando l'umidità supera la soglia del 60%
- Accendere il Rele 3 quando l'umidità è al di sotto del 50%
Giustamente questa è la parte difficile. Innanzitutto non hai specificato quando i relè dovrebbero spegnersi! detta così dopo poco li avresti tutti accesi fissi!
Era una battuta, ma non così scontata.
Considera che i controlli possono essere fondamentalmente di due tipi: on/off (o è acceso o è spento e bon) oppure PID (diciamo proporzionali, ma il discorso è abbastanza complicato, la sto facendo semplice).
Nel primo caso (ON/OFF) definisci una soglia: nel tuo caso, per la temperatura, è di 26 gradi. Temperatura massima, oltre la quale devi accendere un raffrescatore. Parliamo solo di questo: il codice è semplicissimo:
if(temp)>26 digitalWrite(1,HIGH) else digitalWrite(1,LOW)
(era questo else che mancava nella tua descrizione. Giustamente dal tuo punto di vista lo davi per scontato, ma la programmazione è fatta così: devi proprio specificare tutto!).
Però tu hai anche indicato un secondo requisito di temperatura minima: 23 gradi. Beh, un altra parte di codice potrebbe fare la stessa cosa ma al contrario:
if(temp)<23 digitalWrite(2,HIGH) else digitalWrite(2,LOW)
Queste due non entrano in conflitto perché gli intervalli non si sovrappongono quindi sembrerebbe ok. ma c'è un problema: cosa succede se ad esempio batte il sole e la temperatura si innalza? ad un certo punto il sensore legge 26.1, si innesca la prima parte di codice e parte il ventolone... dopo pochi secondi il sensore legge 26 e il ventolone si spegne... dopo pochi altri secondi il sensore dice 26.1 e voilà: abbiamo stabilizzato la serra a 26 gradi precisi
Stesso discorso per la temperatura minima.
Non mi sembra un bel lavorare, no? Però c'è una soluzione semplice ed efficace che si chiama isteresi (e qui capirai perché prima ho insistito quasi offensivamente sulla mancanza di specificare lo spegnimento dei relè).
In pratica si tratta di assegnare due valori diversi alle temperature di accensione e spegnimento dei relè: per il riscaldatore potremmo fare che se la temperatura è inferiore a 23 gradi si accende, ma si spegne solo quando supera i 24; allo stesso modo il raffrescatore parte sopra i 26 e si spegne sotto i 25. In questo modo avremo una zona di riposo compresa tra 24 e 25 gradi. (tieni presente che quando un riscaldatore si spegne la temperatura continua ad aumentare per un po', e questo dipende da un sacco di fattori: la potenza del riscaldatore, la sua inerzia termica, la posizione del sensore, la stessa inerzia termica del sensore e via dicendo... in breve è complicatissimo fare questi calcoli a tavolino; è molto più semplice, e magari anche divertente, fare delle prove sul campo).
Il secondo caso (PID) prevede invece una modulazione dell'intervento degli attuatori: il riscaldatore quindi non è che o scalda a manetta o niente, ma può scaldare un pochetto o molto o niente, a seconda delle necessità. Però qua il discorso si fa complicatino e forse non ne vale la pena.
Io, nei tuoi panni, dovendo partire da zero, inizierei (dopo aver messo a punto i sensori) con un semplice controllo ON/OFF con isteresi su un solo canale (arrivando l'estate direi la ventola per rinfrescare).
Ancora più complesso è il discorso di integrare la misura dell'umidità con la temperatura. Ma questo mio post è già fin troppo lungo. Se vuoi ne parliamo più avanti.