Como fazer medição do Ph da água com Arduino

A medição do potencial hidrogeniônico (pH) faz-se importante em diversos processos, principalmente os que envolvem ácidos e/ou bases. Existem diversas formas para realizar essa medição, sendo uma das mais utilizadas o eletrodo com membrana de vidro (mais informações sobre esse sensor aqui, nas partes 2 e 3).

Embora a saída desse sensor seja em volts, o valor é tão baixo que não é possível detectá-lo nem mesmo com multímetros convencionais, impossibilitando seu uso direto com o Arduino. Porém, existem circuitos destinados especialmente para realizar a conversão dessa leitura, sendo um deles o “pH Circuit” desenvolvido pela Atlas Scientific.

Este post tem como objetivo explicar como é feita a leitura do pH com o Arduino a partir desses instrumentos, assim como a calibração e ajuste do elemento sensor. Para tais fins, serão necessários os seguintes materiais:

  • Arduino
  • Eletrodo com membrana de vidro
  • pH Circuit
  • Conector BNC fêmea (disponível na Atlas Scientific)
  • Sensor de temperatura DS18B20
  • Soluções tampão (pH 4.0, 7.0 e 10.0
pHFigura 1 - Circuito de ligação do pH Circuit, conector BNC e Arduino.

Para se realizar a leitura de pH, basta montar o circuito apresentado na figura 1 e conectar o BNC macho do eletrodo no BNC fêmea do circuito. Deve-se utilizar o código disponibilizado pela Atlas Scientific. Esse código permite o envio de comandos através do monitor Serial. O comando para realizar leituras contínuas de pH é a letra “C” (maiúscula ou minúscula), seguido de “<CR>”.

#include <SoftwareSerial.h>      
#define rx 2                     
#define tx 3                
SoftwareSerial myserial(rx, tx);
char ph_data[20];                  
char computerdata[20];            
byte received_from_computer=0;   
byte received_from_sensor=0;       
byte arduino_only=0;               
byte startup=0;                   
float ph=0;                       
byte string_received=0;            

void setup(){
     Serial.begin(38400);        
     myserial.begin(38400);       
      }
 
void serialEvent(){               
        if(arduino_only!=1){       
           received_from_computer=Serial.readBytesUntil(13,computerdata,20); 
           computerdata[received_from_computer]=0; 
           myserial.print(computerdata);           
           myserial.print('\r              
          }    
        }
 
void loop(){ 
    if(myserial.available() > 0){       
     received_from_sensor=myserial.readBytesUntil(13,ph_data,20); 
     ph_data[received_from_sensor]=0;  
     string_received=1;               
     Serial.println(ph_data);         
     }    
  if(arduino_only==1){Arduino_Control();} 
  
 }   
  
void Arduino_Control(){
  if(startup==0){               
          myserial.print("e\r  
          delay(50);                
          myserial.print("e\r   
          delay(50);                
          startup=1;               
      }
    delay(800);                        
   myserial.print("R\r           
   if(string_received==1){          
     ph=atof(ph_data);               
     if(ph>=7.5){Serial.println("high\r");} 
     if(ph<7.5){Serial.println("low\r");}  
     string_received=0;}           
} 

void s_cal(){           
  myserial.print("s\r  

void f_cal(){               
  myserial.print("f\r 

void t_cal(){              
  myserial.print("t\r  

void phFactoryDefault(){    
  myserial.print("X\r  

void read_info(){           
    myserial.print("I\r
void phSetLEDs(byte enabled) 
{
  if(enabled)                
    myserial.print("L1\r  else                       
    myserial.print("L0\r
  }
ADVERTISEMENT
 
 
 
REPORT THIS AD

Já que o valor do pH de uma solução depende da sua agitação molecular, para realizar medições precisas dessa variável faz-se necessário compensar a temperatura. Para isso utilizou-se do sensor de temperatura DS18B20, mas qualquer forma de medição pode ser utilizada.

DS18B20 wiringFigura 2 - Circuito para a leitura de temperatura com o DS18B20.

Conhecendo o valor de temperatura (em graus Celsius), esse pode ser apenas digitado no monitor Serial e enviado como um comando (seguido de “<CR>”). O código da Atlas Scientific irá então fazer a compensação. No caso do experimento conduzido, essa temperatura era de 21 °C.

Temp (2)Figura 2 - Temperatura medida e comando enviado.

Feito isso, já estaremos obtendo leituras de pH. Mas será que elas são acuradas?

Para certificar-se disso podem-se utilizar soluções tampão. Essas soluções possuem o pH fixo em determinado valor e podem ser utilizadas para a calibração do sensor. São necessários no mínimo três pontos de medição. Usualmente utilizam-se tampões para os pH’s 4.0, 7.0 e 10.0.

No experimento conduzido, percebeu-se que — sob a temperatura ajustada de 21 °C — a leitura para a solução tampão de pH 4.0 era de 5.59. Para corrigir esse erro, utilizou-se do comando “F<CR>” que permite informar ao pH Circuit que a solução possui pH 4.0, e que o sensor deve ser ajustado para esse valor.

De forma similar, realizaram-se os ajustes para pH 7.0 e 10.0, sempre submergindo o eletrodo em água antes de mudá-lo de solução, de forma a minimizar a mistura entre os tampões. Os comandos de ajuste para esses pontos são, respectivamente, “S<CR>” e “T<CR>”.

TFigura 3 - Leituras de pH antes e depois do ajuste. Solução tampão de pH 10