
DFRobot offre un kit per la misurazione del pH compatibile con le schede Arduino. Il prezzo interessante lo rende appetibile per ogni coltivatore idroponico di precisione. E’ un prodotto interessante? Proviamolo insieme.
di Leone Magliocchetti Lombi
Il pH esprime il grado di acidità di una sostanza come ad esempio la soluzione nutriente del nostro sistema idroponico. La scala di misura va da zero a 14, ove 7 è il cosiddetto pH neutro. Ai valori minori di 7 l’acidità aumenta fino allo zero, mentre aumentando verso 14 è la basicità ad aumentare. Conoscere l’acidità del mezzo in cui le nostre piante sviluppano le radici è importante perché influisce sull’effettiva messa a disposizione dei diversi nutrienti necessari. Ad esempio è comunemente accettato che le soluzioni nutritive debbano idealmente avere un pH debolmente acido intorno a pH 6, mentre a valori superiori a 7 iniziano a manifestarsi diverse deficienze nutritive.
Descrizione del prodotto
Il sensore DFRobot SEN0161 è costituito da un elettrodo dall’estremità immergibile in acqua. Il kit comprende anche una schedina con connettore BNC che ne semplifica la connessione ad Arduino ed è dotata di un led blu che ne indica lo stato di accensione. Questo sensore necessita di alimentazione a 5 volt, il che lo rende naturalmente alimentabile con una scheda Arduino/Genuino compatibile mentre non è utilizzabile direttamente con Raspberry Pi (segnale in uscita di soli 3.3 volt). In questo caso si rende necessaria un’ulteriore scheda di espansione.
Purtroppo non è presente un flaconcino di soluzione pH 9.14 per raffinare il processo di calibrazione iniziale, e per questo occorrerà dotarsene per conto proprio. In alternativa, se avete una soluzione buffer pH7, potrete usarla come riferimento. Tutto sommato in idroponica casalinga non abbiamo bisogno di valori di acidità inferiori a pH 6 e ci potremmo accontentare dell’approssimazione.
Come funziona
Il principio principio di funzionamento non è molto diverso da un comune sensore analogico di misurazione di umidità del suolo. La sonda presenta due estremità conduttrici separate; Immersa nel liquido di coltivazione la corrente a 5V transiterà tra le due estremità usando l'acqua come mezzo conduttore. Il materiale della sonda è tuttavia particolare ed è in grado di percepire la variazione della resistività elettrica del liquido nutriente in base ai differenti valori di pH.
Per quanto ci riguarda l’unica vera novità è che dovremo interpretare il segnale analogico (da 0 a 5 Volt) traducendolo in un valore di pH utilizzabile come tale (da 0 a 14). Vedremo come fare quando esamineremo il primo codice di esempio per Arduino.
Colleghiamolo
Come qualsiasi altro sensore analogico DFRobot il collegamento è semplice, connettendo i due poli positivo e negativo della per l’alimentazione, ed inviando ad un pin analogico il segnale di output.

Il codice per il primo test
Il codice fornito nella pagina wiki di DFRobot è tanto efficace per testare il prodotto quanto difficile da comprendere e modificare per adattarlo alle nostre esigenze. Per questa ragione, dopo averlo provato, o magari anche subito, vi consiglio di utilizzare gli esempi che ho sviluppato qui di seguito, organizzati come di consueto in una funzione che potrete richiamare in tutta semplicità.
Questo primo esempio è sviluppato per capire come tradurre il voltaggio misurato in un valore pH utilizzabile. Le premessa iniziali sono che:
- Il Pin analogico di Arduino “ascolta” il voltaggio in ingresso da 0 a 5mV con una risoluzione di 1023 punti, dove lo zero corrisponde a 0mV, e 1023 corrisponde a 5mV
- La scala del pH va da zero a 14
- Leggendo i dati tecnici (e qualche discussione sul forum di DFRobot) si scopre che l’elettrodo invia un segnale di output (dopo essere stato convertito dalla schedina BCD) che va da 0 a 4mV: a pH 7 misura circa 2 mV, a pH 14 circa 4mV, a pH 0 circa 0mV.
La logica che useremo è quindi:
- Eseguo una lettura sul pin analogico e ne ricavo il valore in Volt (moltiplicando il valore letto per 5/1023);
- Per ottenere il valore in pH mi basterà quindi moltiplicare i Volt letti per 3.5 (7/2 = 3,5);
- Infine, dato che ogni elettrodo si usura con il tempo, aggiungeremo (o sottrarremo) un coefficiente al valore del pH appena trovato per compensare gli errori di lettura.
Scriviamolo nella lingua di Arduino:
int pinPh = A1; //diamo un nome al pin a cui abbiamo collegato il SEN0161
float valore_pH; //la variabile che conserverà il valore del pH misurato
float correzione = 0; //il valore che useremo per correggere il la lettura finale
//NB. valore_pH è dichiarato float affinché conservi i valori decimali ad es. 6.20
void setup() {
Serial.begin(9600); // Inizializza la porta seriale per leggere i valori a schermo
}
void loop() {
valore_pH = misura_pH(); //richiamo alla funzione misura_pH spiegata piu in basso
Serial.print("il pH è: "); //leggiamo il valore dal serial monitor
Serial.println(valore_pH);
delay(3000); // pausa di 3 secondi prima di ricominciare il ciclo
}
float misura_pH (){ // funzione che traduce l'outuput del SEN0161 e restituisce un valore pH leggibile
int valoreAnalogPin = analogRead (pinPh); // leggi il valore sul pinPh di esempio
float volts = valoreAnalogPin*(5/1023); // traduci in volts il valore letto
float pH = (volts * 3.5) + correzione;
return pH;
}
Perfetto! se questo primo esempio è chiaro possiamo passare al prossimo codice in cui anziché prendere un valore alla volta prendiamo una serie di 40 letture ne facciamo la media grazie alla Funzione "smartAnalog" per stabilizzare i risultati di un sensore analogico con Arduino di ConnectedGardens.it