Sistema per la misurazione del pH con Arduino Uno

Introduzione

In questo post andremo a realizzare uno strumento indispensabile in molti settori, come per esempio in un sistema idroponico, in un acquario, in una piscina dove alcune caratteristiche fisiche  dell’acqua devono essere tenute sotto controllo per garantire, nel caso di un sistema idroponico, la salute delle piante  o dei pesci in un acquario.

Il sistema che andremo a realizzare, ci consentirà di  misurare il pH dell’acqua, in questo modo, possiamo  tenere sotto controllo il suo valore  per poi eseguire  la regolazione (automatica o manuale) nel in caso  cui il suo valore dovesse superare il limite massimo consentito per  la nostra applicazione.

Cos’è il pH

È un sistema che ci consente di misura l’alcalinità o l’acidità di una soluzione, più precisamente il pH misura la quantità di ioni d’idrogeno che contiene una determinata soluzione.

In effetti l’acronimo di pH  sta per potenziale di ioni  di idrogeno, poiché uno ione  e un atomo dotato di carica elettrica, ad esso è associato un  potenziale elettrico. Maggiore è il numero di ioni di idrogeno presenti nella soluzione e maggiore è  il potenziale elettrico della soluzione.

Infatti, lo strumento che andremo a realizzare deve misurare la d.d.p ( differenza di potenziale) tra una coppia di elettrodi, entrambi immersi in una soluzione con pH neutro, teoricamente d.d.p. tra i due elettrodi dovrebbe essere zero.

Quest’ultima affermazione, difficilmente può essere vera, poiché nella pratica possono esserci delle piccole  differenze  tra le due soluzioni  che inducono  uno sbilanciamento tra i due elettrodi e quindi si  genera una d.d.p. e per  questo motivo il sistema deve essere calibrato periodicamente,  come vedremo successivamente.

Per eseguire la misura, un solo elettrodo deve essere immerso nella soluzione da misurare,  in questo modo, tra i due elettrodi si genera una d.d.p.   proporzionale alla quantità di ioni di idrogeno presenti nella soluzione.

La scala del potenziale degli ioni idrogeno è numerata da 1 a 14, tra 1 e 6 la sostanza è  acida, con il valore 7  la soluzione è considerata neutra, per esempio l’acqua distillata è un elemento con un pH neutro, e da 8 a 14  la sostanza è alcalina.

La di misura del pH è di tipo logaritmico, in base 10,  questo significa che la differenza di un’unità tra due soluzioni corrisponde a una differenza di 10 volte maggiore.

Caratteristiche di un sistema per la misurazione del pH

Per migliorare la capacità di rilevazione degli ioni d’idrogeno, l’elettrodo  usato per misurare il pH è racchiuso in una speciale membrana di vetro che ha la capacità di  attrarre gli ioni di idrogeno  H+  sulla sua superfice.

Le cariche  degli ioni di idrogeno H+,  presenti sulla superficie della sonda, si trasferiscono nella soluzione, per induzione, e di conseguenza sull’elettrodo.  

La d.d.p. presente tra i due elettrodi è molto bassa dell’ordine di poche decine  mV, pertanto è indispensabile connettere tra il sensore e il microcontrollore un amplificatore.

Per questo progetto è stato utilizzato il dispositivo PH 4502C, prodotto dalla DIY MORE,  un sistema basso costo facilmente  reperibile e che di seguito riporto la foto con la descrizione della pin function (Figura 1).

Figura 1

Sul connettore BNC  si  connette il sensore per la lettura del pH della soluzione.

Figura 2

Regolazione dell’offset

La scheda indicata Figura 1, frapposta tra il sensore e il microcontrollore, oltre ad amplificare il segnale prodotto dal sensore,  ha un trimmer per la regolazione dell’offset dell’uscita.

Se si agisce sul trimmer, in prossimità del BNC (vedi Figura 3), possiamo regolare la tensione sull’ingresso dello stadio amplificatore che ha come conseguenza una variazione della tensione d’uscita.

Figura 3

Come  descritto nel paragrafo precedente, quando il pH della soluzione da misurare è neutro (7)  la d.d.p. presente tra i due elettrodi è all’incirca zero.

Per sfruttare in modo simmetrico  il range della tensione d’uscita,  possiamo regolare la tensione d’uscita ad un valore di 2,5 V quando il pH è neutro (7),  grazie al trimmer di off-set.

La tensione d’uscita, tra 2,5V e 5V, misuriamo il pH tra 0 e 7 (acido), mentre nel range tra 0 e 2,5V  misuriamo il pH tra 7 e 14 (alcalino).

In questo modo abbiamo lo stesso intervallo di tensione disponibile per le soluzioni acide e alcaline e quindi la stessa risoluzione.

Per regolare la tensione di offset,  quando il pH e’ neutro possiamo farlo in due modi diversi:

  • Cortocircuitare l’ingresso del connettore BNC del modulo amplificatore, in modo da simulare un pH neutro, poiché la d.d.p. è nulla.  Poi agire sul trimmer di regolazione  dell’offset fino a quando l’uscita è 2.5V
Figura 4
  • Procurarsi una soluzione con pH neutro , e in fase di calibrazione sarà necessario, e immergere il sensore nella soluzione regolare l’offset come descritto nel punto precedente.

Il secondo trimmer, presente sul modulo amplificatore, regola l’uscita DO per farla scattare ad un prescelto livello di pH , selezionabile regolando l’offset, questa funzione non sarà  approfondita in questo  articolo.  

Calibrazione del sensore

Procuratevi due soluzioni con pH diversi, nel mio caso ho una soluzione con pH 7 e l’altra 4, acquistate su Amazon.

Figura 5

A questo punto,  colleghiamo la scheda di amplificazione (PH 4502C) ad Arduino, come da schema riportato di seguito:

Figura 6 (https://forum.arduino.cc/t/problem-with-ph-4502c-sensor-calibration/687916/7)

Carichiamo il seguente codice  che stampa  sul terminale della seriale il valore letto, in tensione, dal convertitore ADC di Arduino.

#include <Arduino.h>
const int adcPin = A0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  int adcValue = analogRead(adcPin);
  float phVoltage = (float)adcValue * 5.0 / 1024;
  Serial.print("ADC = "); 
  Serial.print(adcValue);
  delay(1000);
}

Pulite il sensore ,  sciacquatelo in acqua distillata e asciugatelo e immergetelo nella seconda soluzione e anche in questo caso registrate il valore letto. 

Nel mio caso ho letto i seguenti valori:

  • pH 7                      lettura 2,56 V
  • pH 4                      lettura 3,05 V

A questo punto bisogna trovare l’equazione della retta che descrive il comportamento del sensore.

Dove y rappresenta il pH e x il valore di tensione, ricaviamo m da questa equazione:

Invece n:

Il risultato di questa equazione deve essere inserito nel nostro codice che vedremo nel paragrafo successivo.

Il codice

const int analogInPin = A0; 
int sensorValue = 0; 
unsigned long int avgValue; 
float b;
int buf[10],temp;
void setup() {
 Serial.begin(9600);
}
 
void loop() {
 for(int i=0;i<10;i++) 
 { 
  buf[i]=analogRead(analogInPin);
  delay(10);
 }
 for(int i=0;i<9;i++)
 {
  for(int j=i+1;j<10;j++)
  {
   if(buf[i]>buf[j])
   {
    temp=buf[i];
    buf[i]=buf[j];
    buf[j]=temp;
   }
  }
 }
 avgValue=0;
 for(int i=2;i<8;i++)
 avgValue+=buf[i];
 float pHVol=(float)avgValue*5.0/1024/6;
 float phValue = -5.04 * pHVol + 20;
 Serial.print("sensor = ");
 Serial.println(phValue);
 
 delay(20);
}

In questo ciclo For leggiamo per dieci volte il sensore ed i valori li memorizziamo in un array in modo crescente.

Prendiamo i solo sei valori letti e memorizzati nell’array che rappresentano i valori intermedi, e facciamo la media.

Il valore di tensione letto è convertito in un valore di pH , grazie alle relazione che abbiamo calcolato nel paragrafo precedente.

Per qualsiasi quesito, non esitate a contattarmi, nel FORM riportato di seguito.

4 commenti

  1. Buongiorno. Molto interessante e accurato. La calibrazione é da fare sempre manualmente e correggere il programma a mano o di può farlo anche automaticamente?

    • Buongiorno, la ringrazio per l’interesse al nostro sito. La calibrazione deve comunque essere eseguita con delle soluzioni che hanno un PH predefinito e stabile, l’automazione e’ comunque limitata poiche’ lei deve inserire il sensore nella soluzione di riferimento a meno che lei non voglia realizzare un sistema meccanico e elettronico che gestisca questa funzione, in questo caso il costo e la complessita’ aumentano ed e’ giustificabile solo per un sistema industriale. La frequenza di calibrazione e’ funzione del livello di precisione che lei vuole raggiungere ad ogni misurazione e dipende dalla temperatura, dalla frequenza della misura e se il sensore e’ sempre immerso nella soluzione da misurare. Normalmente per ottenere una buona precisione deve essere eseguita almeno una volta a settimana.
      Spero di aver risposto alla sua domanda, in caso contrario non esiti a scrivermi.
      Buone vacanze.

  2. Buongiorno, c’è sempre da imparare, ora sto iniziando a fare i primi esperimenti con arduino, e nel dettaglio, una serra totalmente automatizzata, visto il mio pollice verde inverso, e mi chiedevo, la sonda per la misurazione del ph, può rimanere fissa nel terreno, dando al sistema degli intervalli di tempo in cui controllare i valori? 1 volta ogni sette giorni per esser preciso, o la sonda in questione non va bene?

    • Ciao Antonio, il sensore utilizzato nell’articolo del mio blog è per coltivazioni idroponiche, cioè le radici delle piante sono immerse nell’acqua a cui sono stati aggiunti i nutrienti. Questo tipo di coltivazione ha il grosso vantaggio di avere una resa maggiore e in alcuni casi il gusto dei frutti e decisamente migliore rispetto alla coltivazione nel terreno. Fatto questo piccolo preambolo, il sensore in questione non può essere usato nel terreno ma solo nell’acqua. Per la tua applicazione devi usare un sensore diverso.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ti sei iscritto alla newsletter

There was an error while trying to send your request. Please try again.

Quattrodispositivi utilizzerà le informazioni fornite in questo modulo per restare in contatto con te e fornire aggiornamenti del sito