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.
Partiamo.
Ingredienti necessari:
Preparazione:
Prendete dell'hardware e collegatelo così:
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:
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);
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à.
![]() |
|
![]() |