Aiuto per Progetto Serra Automatizzata

Buongiorno, sono nuovo del forum e del mondo di arduino, sono appassionato di elettronica e computer, sono perito elettrotecnico e quindi qualcosa a livello elettrico lo conosco..
Tornando a noi ed al progetto che avevo in mente, purtroppo per lavoro sono spesso fuori casa e non ho nessuno che possa curare alcune piante di peperoncino (Habanero e Carolina Reaper) a cui tengo molto, quindi leggendo qua e la su vari forum avevo pensato di automatizzare la mia piccola serra con arduino.. Fino al momento di realizzare la parte di funzionamento non ci sono stati problemi, il problema più grosso per me rimane la programmazione, ora vi spiegherò a cosa pensavo e poi magari se avete voglia di darmi un piccolo aiuto per inoltrarmi in un mondo nuovo, ne sarei molto grato :slight_smile:

Microcontrollore: Arduino Uno R3
Sensore Temp: DHT11
Display: LCD 1602A
Rele: Modulo Rele a 8 o 4 Uscite (Dipende da quante uscite servono per realizzare il programma)

Configurazione Rele:

  • Rele 1: Ventola per uscita aria
  • Rele 2: Tappeto Riscaldante
  • Rele 3: Umidificatore
  • Rele 4: Luce

Processo di funzionamento:

(Premetto che vorrei lavorare con il modulo relè a 8 o 4 uscite, cosi da poter gestire i carichi in maniera più semplice senza uccidere il piccolo arduino)

  • Accensione di una lampada mediante Rele 4 che faccia 16H Accesa e 8H Spenta

  • Monitoraggio a monitor della temperatura e umidità

  • 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%
    Vorrei anche capire se c'e la possibilità di dire ad arduino che se il Rele 1 è gia attivato per causa della temperatura, non deve intervenire se l'umidità supera il 60%, quando la temperatura è scesa al limite consentito, allora si che se l'umidita è sopra al 60% puo ripartire la ventola, Stessa cosa se sale prima l'umidita rispetto alla temperatura

Ringrazio anticipatamente chiunque mi aiuti :slight_smile:

Spero di non essere in una sezione sbagliata, chiedo cortesemente ai moderatori di verificare ciò e se necessario spostare il topic nella sezione adeguata
Buona giornata!!

Ciò che chiedi è relativamente semplice da realizzare con arduino, leggere temperatura e umidità e accendere/spegnere dei relé è semplicissimo, al tuo progetto dovresti però -secondo me- aggiungere anche un modulo RTC in modo da avere dei tempi più precisi rispetto al solo arduino. Per il sensore DHT11 c'è un'apposita libreria dove riesci a leggere temperatura e umidità in meno di 5 minuti per quanto è semplice da usare e per la quantità di tutorial che ci sono in rete. Per il resto devi iniziare tu a scrivere il programma avendo le idee chiare su quello che vuoi ottenere e farlo un passo alla volta e il forum ti darà senz'altro una mano a risolvere i problemi che incontri strada faceno.

Grazie -zef-, sei stato molto gentile, infatti mi sto bombardando di tutorial video e guide scritte a mano, con calma inizierò a capire qualcosa ahahah..
Tornando a noi, hai detto che mi consiglieresti un RTC, dici per la gestione della lampada? diciamo che se quella è una rottura di scatole, perchè magari ha una programmazione più complessa, gli piazzo il vecchio timer analogico che ho utilizzato fino ad ora, diciamo che la luce è stato un surplus che ho voluto aggiungere tanto che c'ero, ma quella mi preoccupa poco

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 :slight_smile:

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! :slight_smile:
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 :frowning:
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.

pippettiello:
Ciao,
premesso che di serre non ci capisco proprio niente, cercherò di buttare lì qualche idea da un punto di vista strettamente di programmazione:

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);
...
...

Intanto ti ringrazio per la risposta molto più che esauriente su vari dettagli che mi sono sfuggiti quali accensione e relativo spegnimento dei relè, comunque facciamo che la luce la lascio al vecchio timer analogico che non mi ha mai abbandonato in questi ultimi anni ahaha, cosi ci tiriamo via il problema di dover aggiungere un RTC e ci semplifichiamo la vita..

Passando al fattore temperatura, hai fatto un ragionamento più che egregio, in effetti pensandoci, ora ha molto più senso su come hai sviluppato l'idea utilizzando l'isteresi, ed effettivamente ha una logica più che valida, quindi opterei per quella evitando cosi, come mi hai detto tu, "l'attacca e stacca" continuo del relè..

Aprendo una piccola parentesi sull'umidità, dato che abbiamo eliminato la luce, quindi ho ancora a disposizione il relè 4 io ci collego un altra ventola, cosi possiamo lavorare sulla stessa base della temperatura, ma con l'umidità e la sua isteresi, cosi anche in quel caso il relè non mi odierà ahaha

Riepilogo dei Rele:

  • Rele 1: Ventola per abbassare temp
  • Rele 2: Tappeto Riscaldante
  • Rele 3: Umidificatore
  • Rele 4: Ventola per abbassare umidità

Processo di funzionamento:

(Premetto che utilizzerò la scheda Rele 4 uscite, cosi da poter gestire i carichi in maniera più semplice senza uccidere il piccolo arduino)

  • Monitoraggio a monitor della temperatura e umidità

  • Controllo Temperatura e Umidità (La parte complessa):

  • Attivare il Rele 1 quando la temperatura è sopra alla soglia dei 27° fino a che non raggiunge i 26° per
    poi Disattivare il Rele1

  • Attivare il Rele 2 quando la Temperatura è sotto ala soglia dei 22° fino a che non raggiunge i 23° per poi
    Disattivare il Rele 2

  • Attivare il Rele 4 quando l'umidità supera la soglia del 65% fino a che non raggiunge il 60/63% per poi
    Disattivare il Rele 4

  • Attivare il Rele 3 quando l'umidità è al di sotto del 45% fino a che non raggiunge la soglia del 50% per
    poi Disattivare il Rele 3

Come potrai ben notare ho rivisto il controllo della temperatura ed umidità utilizzando il tuo consiglio sull' isteresi e anche la disattivazione dei relè..
Le temperature le possiamo variare di qualche grado cosi per avere un po' piu di margine..

Ringrazio Ancora per il tempo dedicato!

>samu934: NON è necessario ogni volta quotare tutto un intero post ... basta fare riferiemnto ad esso o quotare le frasi che si vogliono commentare. Ho tagliato io il quote nel tuo post.

Guglielmo

gpb01:
>samu934: NON è necessario ogni volta quotare tutto un intero post ... basta fare riferiemnto ad esso o quotare le frasi che si vogliono commentare. Ho tagliato io il quote nel tuo post.

Guglielmo

Grazie per la correzione e mi scusi per l'inadeguato utilizzo del forum.
Auguro a tutti un buon weekend, saluti..