Usare una sonda pH con Arduino

Usare una sonda pH con Arduino

Di sonde per misurare il pH ce ne sono molte ma sono tutte spesso molto care. Ecco una soluzione low-cost per misurare il pH sfruttando Arduino e una sonda a basso costo.

La sonda che utilizzeremo è quella prodotto dalla DFRobot venduta da robotics-3d, si può acquistare da questo link o da link Amazon qui sotto.

Il contenuto della confezione al momento dell'acquisto
Il contenuto della confezione al momento dell’acquisto

In ogni caso, se trovate altrove il prodotto, occorrerà:

  • La sonda pH ( con connettore BNC connector )
  • La scheda del sensore che converte il segnale proveniente dal connettore BNC ad analogico
  • Cavetti

Specifiche prodotto

  • Tensione di funzionamento: 5.00V
  • Range di pH misurato: 0-14
  • Temperatura di funzionamento: 0-60℃
  • Precisione: ± 0.1 (25 ℃)
  • Tempo di risposta: ≤ 1min
  • Sensore pH con connettore BNC
  • PH2.0 Interface
  • Potenziometro on board
  • Indicatore LED ON/OFF

Come procedere

Il procedimento è molto semplice, si devono collegare la sonda e la scheda con il connettore BNC. Il tutto avviene incastrando le due parti facendo in modo che il dente di una delle due entri nel solca dell’altra.

Punto di unione scheda e sonda
Punto di unione scheda e sonda

Una volta fatto questo dovrete connettere i cavetti alla scheda.

Scheda e cavi
Scheda e cavi

Il gioco è fatto.

Ora è il momento di usare la sonda e di calibrarla.

Come usare la sonda

Per utilizzare la sonda si può usare il codice che trovate sul sito del produttore e che vi copio nelle righe sottostanti:

/*
 # This sample code is used to test the pH meter V1.0.
 # Editor : YouYou
 # Ver    : 1.0
 # Product: analog pH meter
 # SKU    : SEN0161
*/
#define SensorPin A0            //pH meter Analog output to Arduino Analog Input 0
#define Offset 0.00            //deviation compensate
#define LED 13
#define samplingInterval 20
#define printInterval 800
#define ArrayLenth  40    //times of collection
int pHArray[ArrayLenth];   //Store the average value of the sensor feedback
int pHArrayIndex=0;    
void setup(void)
{
  pinMode(LED,OUTPUT);  
  Serial.begin(9600);  
  Serial.println("pH meter experiment!");    //Test the serial monitor
}
void loop(void)
{
  static unsigned long samplingTime = millis();
  static unsigned long printTime = millis();
  static float pHValue,voltage;
  if(millis()-samplingTime > samplingInterval)
  {
      pHArray[pHArrayIndex++]=analogRead(SensorPin);
      if(pHArrayIndex==ArrayLenth)pHArrayIndex=0;
      voltage = avergearray(pHArray, ArrayLenth)*5.0/1024;
      pHValue = 3.5*voltage+Offset;
      samplingTime=millis();
  }
  if(millis() - printTime > printInterval)   //Every 800 milliseconds, print a numerical, convert the state of the LED indicator
  {
    Serial.print("Voltage:");
        Serial.print(voltage,2);
        Serial.print("    pH value: ");
    Serial.println(pHValue,2);
        digitalWrite(LED,digitalRead(LED)^1);
        printTime=millis();
  }
}
double avergearray(int* arr, int number){
  int i;
  int max,min;
  double avg;
  long amount=0;
  if(number<=0){
    Serial.println("Error number for the array to avraging!/n");
    return 0;
  }
  if(number<5){   //less than 5, calculated directly statistics
    for(i=0;i<number;i++){
      amount+=arr[i];
    }
    avg = amount/number;
    return avg;
  }else{
    if(arr[0]<arr[1]){
      min = arr[0];max=arr[1];
    }
    else{
      min=arr[1];max=arr[0];
    }
    for(i=2;i<number;i++){
      if(arr[i]<min){
        amount+=min;        //arr<min
        min=arr[i];
      }else {
        if(arr[i]>max){
          amount+=max;    //arr>max
          max=arr[i];
        }else{
          amount+=arr[i]; //min<=arr<=max
        }
      }//if
    }//for
    avg = (double)amount/(number-2);
  }//if
  return avg;
}

Questo codice si può copiare e caricare in Arduino. Per far funzionare la sonda poi si deve collegare i cavi in questo modo:

  • + con il pin 5V
  • – con il pin GND
  • A con il pin A0

Come si può notare, alla riga 9, c’è la seguente scritta

#define Offset 0.00

L’utilità di questa riga sarà chiara quando parleremo della calibrazione della sonda.

Come calibrare la sonda (IMPORTANTE)

La calibrazione della sonda è necessaria per essere sicuri che essa misuri correttamente. Per calibrare la sonda useremo il potenziometro posto sulla scheda della sonda e delle soluzioni a pH noto.

Consiglio di usare almeno 2 o 3 soluzioni per calibrare la sonda.

Io ne ho usate 2:

  • una a pH 6,864
  • una a pH 4,003
Soluzioni usate per la calibrazione
Soluzioni usate per la calibrazione

la prima cosa da fare è togliere il tappo di protezione alla sonda pH

tappo di protezione della sonda
tappo di protezione della sonda

e la si deve immergere nella prima soluzione, io ho scelto quella a pH 4.

IMG_20160321_221038
Calibrazione

Una volta collegato Arduino al PC, controllare nel monitor Seriale il valore restituito del pH. Iniziamo a calibrare la sonda agendo sul potenziometro e variando il valore della variabile offset che abbiamo visto prima.

Una volta che il valore misurato dalla sonda è uguale (o quasi) al valore del pH noto della soluzione allora laviamo la sonda e passiamo alla seconda soluzione.

Lavare la sonda prima di immergerla nella seconda soluzione
Lavare la sonda prima di immergerla nella seconda soluzione

Continuiamo a variare offset e potenziometro e continuando a provare le varie soluzioni fino a che non otteniamo una situazione che ci soddisfa.

Siamo ora pronti ad usare la sonda pH.

Possibili usi

Io ho deciso di usarla nel mio acquario (leggi qui l’articolo) ma si potrebbe usare per molto altro, ad esempio un orto idroponico.

IMG_20160324_141132

Acquisti alternativi

Se si dispone già della scheda sulla quale connettere il connettore BNC e si vuole acquistare la sola sonda si potrebbe pensare a questo prodotto (per fare un esempio), magari anche solo come sostituzione in caso di rotture.

Share This:

14 responses to “Usare una sonda pH con Arduino”

  1. Salvatore ha detto:

    Una volta calibrata la sonda, per quanto tempo si può ritenere valida la sua misurazione?

  2. paolo anselmi ha detto:

    ciao scusa la domanda ma io ne capisco poco ma mi interessa l’articolo visto la passione per l’acquario , mio figlio ha fato diversi progetti con l’arduino ma ha avuto sempre problemi con il display , nel programma che hai scritto è gia compreso anche il funzionamento del display, oppure dammi un consiglio grazie mille

  3. davide ha detto:

    Ciao Simone !
    Cercavo proprio un progetto del genere , ti volevo chiedere ma nel programma che hai messo c’è anche compreso la programmazione del display?
    Grazie in anticipo

  4. Loris Marcuzzo ha detto:

    Salve Simone,
    ho acquitato una sonda pH per arduino e ho mess come codice quello del produttore, ma ho visto leggendo il tuo articolo che parli della riga 9.
    I valori da inserire che valori sono? li inerisco a caso o ce una prassi da seguire?
    Non è che potresti spiegarlo meglio questo concetto? o la modalità su come fare?

  5. Massimo Bertocci ha detto:

    Ciao, complimenti per il progetto!
    Devo fare un acentralina per l’idrofonica, e pensavo di modificare il tuo progetto di acquario con la misurazione del ph, ma qui vedo solo la versione senza il ph meter.

    • Simone ha detto:

      Ciao Massimo.
      Grazie.
      Effettivamente non è presente il progetto nella versione “Acquario con il PH”. Potrei metterlo in futuro. L’aggiunta non è complicata però, essendo che la sonda del PH usa pochi pin

  6. Valerio ha detto:

    Non mi pare una manovra corretta e tarare la sonda al valore pH 4,003 per poi stararla per ritirala – con la medesima vite (unico punto di taratura HW) – con al soluzione pH 6,864. La taratura a 2 punti si fa con sonde che hanno 2 punti di taratura. Questa ne ha una sola! Una volta tarata la sonda via HW, sun valore di pH intermedio (es. pH 7.0), puoi tener conto di una risposta non lineare, solo con una calibrazione differenziata a mezzo SW (non più HW). Purtroppo se hai bisogno di misurare valori di pH distanti tra loro e la risposta della sonda non è lineare non è sufficiente un unico coefficiente di calibrazione; occorre inserire una formula per una interpolazione non lineare!
    Ciao

    • Simone ha detto:

      Ciao Valerio,
      Grazie del commento.
      Sicuramente il metodo da te citato è più accurato e corretto. Quello da me riportato è però più alla portata di tutti.
      Chiaramente se si vuole qualcosa di più preciso meglio aggiungere altri controlli/metodi

Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.