Serra

Nuova Serra Automatizzata con Arduino UNO e display Touch-Screen Nextion da 3,5″

Dopo qualche anno è arrivato finalmente il momento di revisionare uno dei progetti più belli che abbiamo finora realizzato, ossia la Serra Automatizzata con Arduino. Il progetto nasce in buona parte dai vostri consigli e pareri, come pure dalla voglia di migliorare un progetto nato dalla passione e dall’amore per questo settore. Come sempre il codice, come ogni altra cosa connessa alla serra, verrà rilasciato con licenza Open Source, per mettere a chiunque di apprendere e migliorare.

Progetto e Obiettivi

La Serra è un progetto per la coltivazione automatizzata di qualsiasi pianta ad uso domestico, che ha lo scopo, oggi come allora, di ridurre l’intervento umano e permettere quindi la coltivazione in casa anche a chi non ha molto tempo. Rispetto al precedente progetto abbiamo implementato alcune funzioni che permettono di modificare determinati valori, cosicché si possa adattare ad ogni tipologia di pianta, che va dalle piante più delicate a quelle che richiedono meno cura. Ciò sarà gestibile da un display touch-screen da cui non sarà solo possibile leggere i valori, ma appunto adattarli ai propri bisogni. Non ci dilungheremo su ulteriori dettagli qui, ma vi invitiamo lo stesso a rileggere il precedente articolo sul primo prototipo della nostra Serra.



Arduino e sensori

La gestione della nostra serra è affidata ad Arduino UNO, scelta differente rispetto al primo prototipo che adoperava un Arduino Mega. Ho scelto di utilizzare Arduino UNO perché molti di voi mi hanno chiesto se fosse possibile utilizzarlo, avendo particolari necessità. Sarà possibile però adoperare Arduino Mega senza troppi problemi.

Il comparto sensori rimane immutato nella teoria, ovvero ritroviamo:

  • Un Igrometro: servirà per rilevare l’umidità del suolo. Il sensore adoperato però è più resistente del precedente e sopporterà meglio l’ossidazione.
  • Un DHT11: sensore per rilevare temperatura e umidità dell’aria all’interno della serra
  • Un sensore di livello d’acqua: collocato nel serbatoio, ci dirà quando aggiungerla.
  • Un fotoresistore: controllerà la luminosità solare.

Per gestire, invece, le necessità della pianta, adoperiamo un modulo a 4 relè a cui collegheremo una lampadina a led a 220V, una pompa ad immersione a 12V, una ventola anch’essa a 12V. Tutti i cavi elettrici di questi dispositivi vanno collegati al NO (Normalmente Aperto) del relè. Tutti i valori che rileviamo saranno leggibili sul display Nextion da 3,5″ in tempo reale nella prima pagina, mentre nelle altre due pagine potremmo gestire autonomamente il relè della luce e della ventola oppure settare i valori più adatti alla pianta che andiamo a curare.

Ogni volta che modifichiamo un valore o attiviamo un relè da display, i valori rimarranno quelli selezionati fino allo spegnimento della serra. Aggiungiamo pure che per segnalare l’assenza dell’acqua nel serbatoio, adopereremo un LED rosso e un buzzer passivo come allarme.

Materiali

Oltre alla dev-board, sensori e attuatori su elencati ci serviranno altri materiali, come in primis la serra a cassone in policarbonato e struttura in alluminio, poi una scatola di derivazione 240x190x90 mm ed una pedana di legno che è possibile reperire gratuitamente anche nei supermercati o nei negozio di mobili o in alcune aziende che adoperano le pedane per trasportare oggetti pesanti. La pedana servirà da base alla serra e su di essa andiamo a collocare del prato sintetico per abbellirlo.

Ecco la lista dei materiali che potete ordinare su Amazon:

Arduino UNO: https://amzn.to/3hJxdg1
DC-DC 12V – 5V: https://amzn.to/2YvrWzP
Alimentatore 12V 10A: https://amzn.to/2sZk1yR
Resistenze: https://amzn.to/3lsTfWD
Sensore DHT11: https://amzn.to/2YCHvqz
Igrometro: https://amzn.to/32ttlsN
Fotoresistore: https://amzn.to/2sc9IXI
Sensore livello acqua: https://amzn.to/2ECnWHT
Display NEXTION da 3,5″: https://amzn.to/3jimaL2
Modulo 4 Relè: https://amzn.to/2t1A6Em
Bread Board Mini: https://amzn.to/36iAgW3
Led vari: https://amzn.to/2qGh0CY
Buzzer Passivo: https://amzn.to/2QoFv0H
Pompa acqua a immersione: https://amzn.to/2RCnmhA
Jumper: https://amzn.to/2t3O1tH
Serra in policarbonato: https://amzn.to/2Pvup96
Ventola 12V 80×80: https://amzn.to/3leGv5A



Le scatole di derivazione, i tubicini per l’irrigazione, canaline passacavi, viti, cavi elettrici, presa bipasso italiana e il prato sintetico potete acquistarlo presso negozi vari perché facilmente reperibili. Potete anche riciclare materiale elettrico dismesso come gli alimentatori da pc, ricavandone una ventola e parecchi cavetti elettrici da adoperare per collegare la pompa ad immersione  e la stessa ventola all’alimentatore da 12V. Non usateli ovviamente per collegarci la lampadina da 220V, ma acquistate degli appositi cavi elettrici per meno di 0,50 centesimi di euro. Un’altra idea di riciclo sarebbe utilizzare un cordone di alimentazione di un ferro da stiro rotto o di altri elettrodomestici per collegare l’alimentatore da 12V alla corrente della presa elettrica (ricordiamoci che questo alimentatore trasforma la corrente alternata a 220V in corrente continua a 12V). L’alimentatore a 12V va anche collegato ad un DC-DC da 12V in INPUT e 5V in OUTPUT per poter alimentare Arduino UNO e i vari sensori. Non è il caso di usare il pin da 5V di Arduino UNO poichè non fornirebbe i giusti Ampere.

Codice

Il codice non possiamo spiegarlo tutto, ma cercheremo di fornire le giuste linee guida per programmare correttamente la serra. Scaricate pure lo sketch da QUI, dove troverete il codice, il fritzing per i collegamenti e tutti i file utilizzati per la configurazione del display Nextion. Utilizzando un Nextion Display avremmo sempre la seriale occupata, quindi è bene ricordarci tre cose importanti:

  1. Quando carichiamo lo sketch scolleghiamo il display poiché esso utilizza il monitor seriale;
  2. Ricordatevi di caricare correttamente il file .HMI tramite una Micro-SD formattata in FAT32 e se non sapete come fare, ecco la GUIDA.
  3. Il display Nextion adopera una libreria apposita che va modificata se adoperiamo Arduino UNO. Abbiamo visto come fare in questo articolo.

Iniziamo come sempre includendo due librerie, una già accennata, ossia la libreria del display Nextion, l’altra quella del DHT11, definendo anche il tipo di DHT che adoperiamo ed il relativo pin digitale.


#include "Nextion.h"
#include "DHT.h"
#define DHTPIN 12 // Sensore collegato al PIN 12
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);

Nella parte successiva dichiariamo diverse variabili, gli oggetti che adopereremo sul display Nextion, come slider, caselle di testo e dual-state button.


NexSlider slider00 = NexSlider (1, 3, "flame");
NexSlider slider01 = NexSlider (1, 4, "water");
NexSlider slider02 = NexSlider (1, 5, "light");

NexNumber flame_slider = NexNumber (1, 9, "temp01");
NexNumber water_slider = NexNumber (1, 10, "umid01");
NexNumber light_slider = NexNumber (1, 11, "luce");

NexDSButton button00 = NexDSButton(2, 6, "fan");
NexDSButton button01 = NexDSButton(2, 7, "lamp");

NexTouch *nex_listen_list[] = {
&button00,
&button01,
&slider00,
&slider01,
&slider02,
NULL
};

char buffer[100] = {0};

int t, h, Lumen, lumin, water, igro, umdtrr, caldo_limite, igro_limite, luce_limite;
long caldo, acqua, luce;
String data = "";

Nel VOID SETUP inizializziamo il monitor seriale, il DHT11, il display Nextion e richiamiamo alcune funzioni che serviranno ad attivare e utilizzare gli slider e i dual-state button. Non spiegheremo il contenuto di queste funzioni, anche perché alcuni di queste sono state già spiegate in degli articoli precedenti. Infine, indichiamo la direzione dei pin a cui colleghiamo il modulo a 4 relè, il buzzer e il led.


Serial.begin(9600);

dht.begin();

nexInit();

button00.attachPop(fan, &button00);
button01.attachPop(lamp, &button01);
slider00.attachPop(SliderCaldo, &slider00);
slider01.attachPop(SliderAcqua, &slider01);
slider02.attachPop(SliderLuce, &slider02);

pinMode(3, OUTPUT); // PIN 3 al BUZZER
pinMode(9, OUTPUT); // PIN 9 al Relè - IN1
pinMode(10, OUTPUT);// PIN 10 al relè - IN2
pinMode(11, OUTPUT);// PIN 11 al relè - IN3
pinMode (13, OUTPUT);//PIN 13 al LED

Entrando nel VOID LOOP troviamo subito una funzione chiamata Dati(), che servirà per rilevare informazioni dai sensori collegati ad Arduino UNO.


// Fotoresistore
Lumen = analogRead (A0);
lumin = map ( Lumen, 1023, 0, 0, 100);

water = analogRead(A1);

// Igrometro
igro = analogRead(A3); // Legge il valore analogico
umdtrr = map (igro, 1023, 0, 0, 100);

// Lettura umidità e temperatura del sensore DHT11
h = dht.readHumidity();
t = dht.readTemperature();

Continuando nel VOID LOOP, richiamiamo la liste oggetti che avevamo creato nell’array creato all’inizio dello sketch e inviamo i valori rilevati al display tramite il monitor seriale.


nexLoop(nex_listen_list);

Serial.print("temp.val=");
Serial.print(t);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

Serial.print("umid.val=");
Serial.print(h);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

Serial.print("suolo.val=");
Serial.print(umdtrr);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

if (water >= 100) {

data = "acqua.txt=\"" + String("OK") + "\"";

Serial.print(data);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
else
{
alarm();
flash();
data = "acqua.txt=\"" + String("Basso") + "\"";

Serial.print(data);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}

Andiamo, infine, a vedere come sono state sviluppare alcune delle funzioni che gestiamo tramite gli slider. Prenderemo ad esempio lo funzione che gestisce lo slider della temperatura, tramite cui impostare i valori personali per gestire la pianta. Lo slider parte sempre con un valore di default, preimpostato e leggibile nella casella di testo accanto allo slider. Quando muoveremo lo slider, il nuovo valore apparirà nella casella di fianco e rimarrà fisso fino al riavvio della serra. Una volta che modifichiamo questo valore, Arduino UNO lo confronta con il valore rilevato dal sensore e agisce attivando o disattivando il relè delle ventola.


void SliderCaldo(void *ptr){
long caldo = 0;
slider00.getValue(&caldo);
flame_slider.setValue(caldo);

caldo_limite = (int)caldo;

if (t >= 30 || t >= caldo_limite ){
digitalWrite (10, HIGH); // Attiva Relè 2
}
else{
digitalWrite (10, LOW); // Spegni Relè 2
}

}

Funzionalità del Display

Dopo averle spiegate nel codice, andiamo a vedere come sono sistemati gli oggetti e le pagine nel display. Premettiamo che per ogni casella di testo o numerica, per ogni slider e ogni Dual-State button abbiamo impostato il valore di vscope su global: una volta aperto il Nextion Editor basta selezionare l’oggetto, andare a destra della pagina su Attribute, seleziona la voce vscope e spostare da “local” a “global“. Fanno eccezione i pulsanti che ci servono per muoverci tra le pagine. A tal proposito, abbiamo 3 pagine, chiamate page0, page1 e page2.



Su page0 troviamo i valori rilevati dal sensore di temperatura e umidità relativa, l’umidità del suolo e il livello dell’acqua nel serbatoio che varierà tra OK e BASSO. In basso troviamo due pulsanti, il primo che ci rimanda alla page1, mentre il secondo alla page2.

 

In page1 possiamo settare i livelli di sensibilità della pianta, regolando la temperatura, l’umidità del suolo e la luminosità. Mentre la temperatura è regolabile da un minimo di 0° C e un massimo di 50°C, gli altri due slider consentono uno spostamento di valori percentuali compresi tra 0 e 100. Se la nostra pianta ha bisogno di temperature basse, sposteremo lo slider verso sinistra e se la temperatura supera questa nuova soglia, si attiverà il relè della ventola.

Sulla page2 sono disposti i controller per accendere e spegnere la lampadina e la ventola. Premendo sui pulsanti a due stati cambia l’icona e si attiverà il relativo relè. Sia la page1 che la page2 sono dotati di un pulsante Home che riporta alla page0.

Tempi e costi

Come nella precedente serra i tempi di realizzazione del codice e relative prove hanno richiesto 1 o 2 settimane, mentre per la realizzazione del sistema serra ci si dovrebbe aggirare attorno ai 3 o 4 giorni di lavoro. Rispetto al progetto precedente però i costi sono maggiori, anche perché sappiamo che i display Nextion costano non poco. Se si acquista tutto il materiale su Amazon arriviamo a spendere quasi 300€, quindi il nostro consiglio è di riciclare più possibile materie prime e acquistare molte componenti su Aliexpress dove si può risparmiare anche la metà.

Conclusioni ed accorgimenti

Come detto per il precedente progetto, anche questa serra è un secondo prototipo e va considerato prima di tutto un progetto didattico. Sarà possibile in futuro che verrà rilasciato una nuova versione, ma fino ad allora, questo è il progetto più recente ed affidabile. Vi invitiamo, inoltre, a farvi aiutare nella realizzazione se le vostre competenza in materia sono insufficienti e che realizzare questa serra non è da considerarsi un progetto per “avvicinarsi”, ma piuttosto un progetto per affinare competenze che scontatamente si danno già acquisite. Ricordatevi, in ultimo, che il progetto è rilasciato sotto licenza GNU GPL V3; significa che potete modificare, utilizzare, ridistribuire e studiare il progetto ma non potete rivenderlo o dichiararne la paternità dell’opera che rimane sempre in capo all’autore della stessa e che ciò costituisce violazione del diritto d’autore.