NodeMCU e Idroponica Parte 1 - AAA cercasi disperatamente pollici verdi

NodeMCU e Idroponica Parte 1 - AAA cercasi disperatamente pollici verdi

di Vincenzo Caputo

01 Aprile 2020

Coding

Vincenzo Caputo

Ritorniamo con questo nuovo articolo della serie dedicata al coding imparando ad utilizzare la classe Serial, molto utile per eseguire dei piccoli debug del programma, e successivamente effettueremo una lettura su un pin digitale.

Per questo tutorial utilizzeremo l'Igrometro per il Suolo della Sodial(R).

L'Igrometro per il Suolo della Sodial(R) misura il valore di tensione ai capi dei due elettrodi presenti permettendo due modalità di utilizzo e cioè sia di impostare, tramite giravite, un valore di soglia della tensione al di sopra della quale fornisce il valore Vcc e al di sotto invece 0V, sia di ottenere il valore istantaneo della tensione.

Noi utilizzeremo la prima modalità mentre la seconda sarà introdotta nel prossimo tutorial.

La classe Serial ci permetterà invece di visualizzare le condizioni di umidità del terreno sul Monitor Seriale dell'IDE di Arduino che potete trovare qui.

NodeMCU e Idroponica Parte 1 - AAA cercasi disperatamente pollici verdi

Partiamo.

Ingredienti necessari:

Preparazione:

Prendete dell'hardware e collegatelo così:

NodeMCU e Idroponica Parte 1 - AAA cercasi disperatamente pollici verdi

Prendete del software, cioè l'IDE di Arduino, e scrivete così:

const int MOISTURE_PIN = D0;
const int ALARM_PIN = D1;

void setup() {
  Serial.begin(115200);   //inizializzo la porta seriale

  pinMode(MOISTURE_PIN, INPUT);  //imposto il MOISTURE_PIN in modalita' INPUT
  pinMode(ALARM_PIN, OUTPUT);
}

void loop() {
  int moistureValue = digitalRead(MOISTURE_PIN);   //leggo dal pin il valore della tensione
  if(moistureValue == LOW) {
    Serial.println("Il terreno e' umido");  //invio la stringa al Monitor Seriale
  }
  else {
    digitalWrite(ALARM_PIN, HIGH);  
    Serial.println("Il terreno e' asciutto");  //invio la stringa al Monitor Seriale
  }

  delay(500);

  digitalWrite(ALARM_PIN, LOW);

  delay(500);
}

Questo è lo sketch che andremo a caricare.

Descrizione:

La classe Serial ci permette di aprire una porta seriale tra il NodeMCU e il computer utilizzando il convertitore integrato USB/UART quindi ci consente di comunicare, via cavo USB, con il NodeMCU.

La funzione statica begin() della classe Serial ci permette di impostare la velocità di trasmissione in baud. Il prototipo di questa funzione è:

void Serial::begin(const long speed);

Nel nostro esempio utilizziamo come velocità di trasmissione 115200baud che andremo ad impostare qui nel Monitor Seriale:

NodeMCU e Idroponica Parte 1 - AAA cercasi disperatamente pollici verdi

La funzione statica println() della classe Serial ci da la possibilità invece di stampare, sul Monitor Seriale dell'IDE di Arduino, la stringa che noi le passiamo come argomento aggiungendo a questa un ritorno a capo ("print" significa ovviamente stampa mentre "ln" dovrebbe significare new line). Il prototipo della funzione println() dovrebbe essere:

void Serial::println(const char* str);

La funzione digitalRead() permette di leggere il valore di tensione tra il pin digitale, che nel nostro caso è D1, e il GND. Il prototipo della funzione digitalRead() dovrebbe essere:

int digitalRead(const int pin);

Questa funzione ha come valori di ritorno:

  • HIGH
  • LOW

Per le schede Arduino alimentate a 5V il valore HIGH corrisponde ad una tensione tra il pin digitale e il GND superiore a 1.5V mentre per le schede come il NodeMCU alimentate a 3.3V il valore HIGH corrisponde ad una tensione superiore a 1.0V.

La funzione delay() permette di impostare un ritardo in millisecondi. Il prototipo è:

void delay(const unsigned long value);

Risultato:

 

Colleghiamo il NodeMCU al pc tramite il cavo USB in modo tale da alimentarlo tramite il pc.

 

Poichè l'acqua del terreno in presenza di minerali disciolti avrà una bassa resistività elettrica allora ai capi degli elettrodi del sensore si avrà una piccola caduta di potenziale quindi, il NodeMCU leggerà una tensione che tende a zero.

 

Carichiamo lo sketch e se l'umidità del terreno è al di sopra del valore di soglia impostato sull'igrometro tramite il giravite allora il valore restituito dalla funzione digitalRead() sarà LOW e sul Monitor Seriale sarà stampata la stringa "Il terreno è umido".

Quando l'umidità del terreno andrà al di sotto del valore di soglia impostato allora il valore restituito dalla funzione digitalRead() sarà HIGH, sul Monitor Seriale verrà stampata la stringa "Il terreno è asciutto" e il led rosso di allarme lampeggerà.

 

Se questo non avviene scrivetemi nei commenti e cercherò di aiutarvi il prima possibile.

 

Poichè l'Idroponica è da sempre una curiosità, non avendo io conoscenze in ambito agronomico, vi chiedo se qualcuno di voi possa darmi consigli e/o veri e propri aiuti nello sviluppare un sistema del genere.

 

Ogni vostro consiglio e/o aiuto sarà condiviso e verrà utilizzato per creare nuovi tutorial al fine di sviluppare un sistema idroponico completo ed efficiente.

 

Nel prossimo tutorial...

 

Nella parte 2 del tutorial introdurremo il Convertitore Analogico Digitale presente sul NodeMCU effettuando una serie di misurazioni del valore di umidità sfruttando ancora l'Igrometro per il Suolo della Sodial(R).

 

Se avete suggerimenti su nuovi tutorial attinenti il NodeMCU non esitate a scrivere nei commenti.

Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.

Vincenzo Caputo

Vincenzo Caputo

Nato a Matera, il 1° novembre 1977. Sono da sempre appassionato di tecnologia e ho un'esperienza lavorativa ventennale nel settore IT. Mi piace sperimentare e cercare sempre nuove soluzioni e soprattutto mi piace comunicare le mie esperienze agli altri.

Disqus loading...