Lezione 18: Sensore di pioggia con Arduino

Lezione 18: Sensore di pioggia con Arduino

In questa lezione vedremo come far stabilire ad Arduino se piove, se è umido oppure è asciutto.

arcobaleno

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.

$_57 (1)

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

FA23UV5HZLYROPV.LARGE

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…

ismanettoneblog