In questa lezione vedremo come far stabilire ad Arduino se piove, se è umido oppure è asciutto.
Requisiti hardware
- Arduino Uno
- Sensore pioggia (acquistabili su Ebay per qualche Euro)
- Cavi
- Ethernet Shield (opzionale per progetti più avanzati)
Requisiti software
- Programmi presenti in questa pagina
- Librerie aggiuntive per progetti più avanzati
Il sensore di pioggia non è altro che una resistenza variabile, che cambia il valore in base alla quantità d’acqua presente.
Per tanto è possibile sfruttare l’ADC di Arduino per leggere i valori d’uscita del sensore, che variano tra 0 a 1023. Valori bassi, indicano presenza d’acqua, valori alti asciutto.
I collegamenti sono veramente semplici e sono riportanti in questa immagine (presa da Instructables):
Il sensore, in realtà può essere usato con l’uscita digitale, ma in questo caso avremmo una condizione piove o non piove (0 oppure 1), mentre in realtà ci sono condizioni in mezzo, come ad esempio piove poco, è tanto umido etc…
Dunque il consiglio è quello di usare l’uscita analogica del sensore pioggia, per sfruttare l’ADC di Arduino ed avere quindi una risoluzione migliore.
Una volta effettuati i collegamenti, possiamo mandare in esecuzione su Arduino il programma:
/* Questo programma sfrutta il sensore FR-04 per determinare se piove o no. In questo codice si sfrutta l'uscita analogica del sensore e ci sono 3 stati: 1) Non piove 2) è molto umido e sta per piovere 3) sta piovendo Il rilevamento del caso, viene affidato alla funzione map, che permette di "mappare" l'uscita analogica (da 0-1023) in 3 intervalli uguali Autore Giacomo Bellazzi Versione 1.0 */ #define N_OUTPUTS 3 void setup() { Serial.begin(9600); } void loop() { int sensorReading = analogRead(A0); int range = map(sensorReading, 0, 1023, 0, N_OUTPUTS); switch (range) { case 0: Serial.println("Sta piovendo"); break; case 1: Serial.println("E' molto umido, c'è una buona probabilita' che piovera' a breve"); break; case 2: Serial.println("Non sta piovendo"); break; } delay(10000); // Tempo di campionamento }
La funzione più importante che viene usata è map, già presente nelle librerie di Arduino:
long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
Questa funzione restituisce valori 0,1,2 a seconda dal valore analogico che proviene dal sensore di pioggia.
Ulteriori programmi che sfruttano questo sensore di pioggia, saranno pubblicati a breve…