O Sensor de pH Arduino é um dispositivo de medição utilizado em diversos setores, capaz de fazer a medição da acidez e da basicidade de um determinado líquido, mostrando através de uma escala fixa se o líquido está em condições de um elemento base, ou ácido, sendo 7 considerado um pH de elemento neutro, nem ácido, nem básico.
Saber o pH é uma informação importante que pode possibilitar diversas análises diferentes, uma das mais comuns está associada ao controle da água de piscinas, uma vez que dependendo do seu valor, a água deve ser tratada com diferentes agentes químicos.
Através deste projeto, iremos fazer a medição do pH de alguns líquidos, calibrar a leitura e entender um pouco mais sobre esta tecnologia que está sendo estudada e amplamente utilizada, tanto em sistemas para controlar o funcionamento correto da hidroponia, quanto em outros projetos que envolvem manter a água em condições favoráveis para uso.
O que é pH?
O pH é uma unidade de medida que identifica de forma quantitativa, a alcalinidade ou acidez de determinada solução, de forma mais teórica, o pH mede a quantia de íons de hidrogênio contida na solução, onde a faixa de pH pode apresentar variação entre valores de 0 a 14.
Um pH de valor igual a 7 é considerado um líquido neutro, uma vez que a água tende a um valor próximo a isto, já valores entre 1 e 6 são considerados líquidos ácidos e valores de pH entre 8 e 14 são considerados líquidos alcalinos, assim como podemos observar na imagem abaixo:
A sequência que a escala de pH tem é logarítmica, o que significa que a diferença entre uma unidade numérica e outra pode ser 10 vezes mais básica ou ácida dependendo do caso.
Sensor de pH Arduino
O sensor de pH é capaz de captar os índices de pH em líquidos e pode ser utilizado com diversos modelos de microcontroladores, porém é sempre importante estarmos cientes da sua estrutura antes mesmo de iniciarmos nossos projetos utilizando o mesmo.
Como funciona o Sensor de pH Arduino?
O sensor de pH Arduino funciona medindo valor do Ph de determinada solução, ele consegue definir sua alcalinidade ou acidez, sendo amplamente utilizado no monitoramento ambiental, na agricultura, além de ser usado no tratamento de águas residuais.
Como a placa apresenta regulador de tensão integrado, suporta o fornecimento de tensão entre 3.3 e 5.5VDC, valor compatível com diversos microcontroladores disponíveis no mercado, como o Arduino.
Basicamente, o sensor é constituído a partir de uma haste, a qual geralmente é feita em vidro, apresentando na “membrana”, sendo preenchido com uma solução para armazenagem, conhecida como tampão de pH. Este design proporciona um ambiente propício no qual íons H+ ficam armazenados em seu interior e possam ser utilizados como base para futuras leituras.
Quando o sensor é mergulhado na solução de teste, os íons de hidrogênio presentes nesse liquido iniciam uma troca com íons positivamente carregados na membrana de vidro, de forma a criar um tipo de potencial eletroquímico por meio da membrana, convertendo em sinais para leitura do módulo.
Como usar o Sensor de pH Arduino?
Por se tratar de um dispositivo que trabalha com valores relativamente baixos de variação, é importante para o sucesso de nossas leituras que a calibração seja feita no sensor. Como sabemos, as leituras da haste variam entre valores compatíveis com 0 e 14 e o sensor varia sua tensão entre valores de 0 a 5V.
A medição de pH é bastante rigorosa assim como usa utilização, sendo necessário alguns procedimentos para obter resultados precisos.
Para calibração do sensor iremos iniciar com a tensão de saída, colocando em curto o pino central no BNC com a parte externa do conector, o que fará com que ao conectarmos o módulo ao Arduino, este mostre o valor médio que convertido em tensão deve ser o mais próximo possível de 2,5V após regulagem.
Com o passo acima executado, iremos conectar o módulo ao Arduino e para isto, conectaremos o V+ com o 5V do Arduino, o G com o GND e o Po com o pino Analógico A0 do Arduino, assim como podemos ver na imagem abaixo:
Existem dois métodos para realizarmos a leitura dos 2,5V, através do Arduino, onde utilizamos o método demonstrado acima ou através de um multímetro, posicionando a ponta de prova no pino central e na carcaça de isolamento do BNC.
Como o intuito é realizarmos a leitura com o Arduino, faremos a leitura do sinal analógico recebido pelo Arduino e converteremos este valor em Volts através de um código específico, veja:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
int buf[10]; void setup() { Serial.begin(9600); Serial.println("Usinainfo"); delay(500); } void loop() { for (int i = 0; i < 10; i++) { // 11 amostras buf[i] = analogRead(A0); // Ler o sensor PH delay(10); } int valorMedio = 0; for (int i = 2; i < 8; i++) { // Realiza o valor médio utilizando 6 amostras valorMedio += buf[i]; } float tensao = (valorMedio * 5.0) / 1024.0 / 6; Serial.println(tensao); delay(250); } |
Este é um programa bastante simples, o seu objetivo é ler o pino analógico Po e através do Arduino, exibir a tensão no monitor serial. Para a compilação do código, certifique-se de que a placa Arduino está selecionada e também verifique se a porta de comunicação certa está selecionada.
Depois que o programa foi carregado, abra o monitor serial e observe os valores fornecidos.
Caso o valor apresentado no monitor serial esteja acima ou abaixo de 2.5, utilize o trimpot de “calibração de leitura” para chegar o mais próximo possível deste valor. Ex.: 2.61
Agora para calibração das medições utilizando a sonda, iremos usar duas soluções, conhecidas como tampões, que são soluções aquosas com níveis pH conhecidos.
Caso iremos medir soluções neutras e ácidas, precisamos dos tampões de pH 7 e 4.
Caso iremos medir neutras e alcalinas, precisamos dos tampões de pH 7 e 10.
Com elas em mãos, e a sonda BNC conectada ao sensor, mergulhamos na solução de pH 7, aguardamos um minuto até a tensão no monitor serial se estabilizar, e anotamos este valor.
Agora, limpando a ponta da sonda, utilizando água deionizada e secando-a, mergulhamos na outra solução escolhida (4 ou 10), aguardamos novamente um minuto e anotamos o valor do monitor serial.
Esquema de Ligação
Para complementar os trabalhos junto ao nosso Sensor de pH Arduino, iremos incrementar ao nosso projeto um display LCD que irá nos permitir analisar os valores sem a necessidade do monitor serial e a conexão direta com um computador.
Como vimos em projetos passados, uma das opções para reduzir a quantia de fios em nosso projeto, é a utilização de um display com adaptador I2C, que reduz os fios de comunicação em apenas dois. Veja abaixo o esquema de ligação completo:
Uma ligação teoricamente simples e de fácil execução, porém vale observar que neste projeto, não utilizamos o sensor de temperatura e assim, deixamos alguns pinos do nosso Sensor de pH Arduino fora de nosso circuito.
Programação do Sistema de Leitura
Agora que estamos com a nossa conexão pronta, o próximo passo é trabalharmos com o nosso código, que mesmo parcialmente complexo ainda é facilmente compreendido através dos comentários feitos em cada uma das etapas.
É um código um pouco mais complexo uma vez que conta com duas bibliotecas, porém são duas bibliotecas às quais já estamos habituados à utilizar, uma já é padrão do Arduino e outra é facilmente encontrada através do gerenciador de bibliotecas do mesmo.
Abaixo, veja o código completo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
/* Calibrando com tampão pH 7 e 4: - Insira o valor obtido coma sonda no tampão de pH 7 em "calibracao_ph7", utilize ponto para separação no ligar da vírgula. - Insira o valor obtido coma sonda no tampão de pH 4 em "calibracao_ph4", utilize ponto para separação no ligar da vírgula. - Pronto, basta utilizar o sensor em soluções neutras e acídas. Calibrando com tampão pH 7 e 10: - Insira o valor obtido coma sonda no tampão de pH 7 em "calibracao_ph7", utilize ponto para separação no ligar da vírgula. - Insira o valor obtido coma sonda no tampão de pH 10 em "calibracao_ph10", utilize ponto para separação no ligar da vírgula. - Mude o valor da variavel "UTILIZAR_PH_10" de "false" para "true". - Pronto, basta utilizar o sensor em soluções neutras e alcalinas. */ #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); float calibracao_ph7 = 0.0; // Tensão obtida em solução de calibração pH 7 float calibracao_ph4 = 0.0; // Tensão obtida em solução de calibração pH 4 float calibracao_ph10 = 0.0; // Tensão obtida em solução de calibração pH 10 #define UTILIZAR_PH_10 false // Habilita calibração entre pH 7 e 10, \ caso contrário utiliza pH 7 e 4. float m; float b; int buf[10]; void setup() { Serial.begin(9600); if (calibracao_ph7 == 0 && calibracao_ph4 == 0 && calibracao_ph10 == 0) { delay(500); Serial.println(); Serial.println("Erro - Necessário colocar os valores de calibração no código!"); while (1) ; } if (!UTILIZAR_PH_10 && calibracao_ph4 == 0 && calibracao_ph10 != 0 && calibracao_ph7 != 0) { delay(500); Serial.println(); Serial.println("Erro - Você não marcou a opção UTILIZAR_PH_10 como true para utilizar pH 7 e 10."); while (1) ; } lcd.init(); // Inicializa o display lcd.begin(16, 2); // Inicializa todos os caracteres lcd.backlight(); // Inicializa o backlight lcd.setCursor(0, 0); // Posiciona o cursor na posição lcd.print("USINAINFO"); // Escreve no monitor serial lcd.setCursor(0, 1); // Posiciona o cursor na posição lcd.print("Leitura de pH"); // Escreve no monitor serial delay(2000); lcd.clear(); // Limpa o conteúdo do display if (UTILIZAR_PH_10) { m = (7.0 - 10.0) / (calibracao_ph7 - calibracao_ph10); b = 10.0 - m * calibracao_ph10; } else { m = (4.0 - 7.0) / (calibracao_ph4 - calibracao_ph7); b = 7.0 - m * calibracao_ph7; } } void loop() { for (int i = 0; i < 10; i++) { // 11 amostras buf[i] = analogRead(A0); // Ler o sensor PH delay(10); } for (int i = 0; i < 9; i++) { // Ordena em ordem crescente for (int j = i + 1; j < 10; j++) { if (buf[i] > buf[j]) { int temp = buf[i]; buf[i] = buf[j]; buf[j] = temp; } } } int valorMedio = 0; for (int i = 2; i < 8; i++) { // Realiza o valor médio utilizando 6 amostras valorMedio += buf[i]; } float tensao = (valorMedio * 5.0) / 1024.0 / 6; // Realiza a média e \ transforma o valor \ analógico em volt float ph = m * tensao + b; // Converte para pH Serial.println(ph); lcd.setCursor(0, 0); // Posiciona o cursor no display lcd.print("Valor pH: "); // Escreve no display lcd.setCursor(11, 0); // Posiciona o cursor no display lcd.print(ph, 1); // Escreve o pH com uma casa decimal delay(1000); // Aguarda para próxima leitura } |
Após realizadas as conexões, inserimos os valores obtidos anteriormente nas variáveis de calibração.
O valor obtido na solução de pH 7, iremos colocar na variável “calibracao_ph7”, lembrando de utilizar ponto como separador da casa decimal (Exemplo 2.55).
Agora, se utilizamos a solução de pH 4, basta colocar o valor na variável “calibracao_ph4” e está finalizado a calibração para soluções ácidas.
Para a solução de pH 10 caso você tenha escolhido, vamos alterar o valor da variável “calibracao_ph10” e mudamos o valor da variável “UTILIZAR_PH_10” de “false” para “true”, está finalizado a calibração para soluções alcalinas.
Depois de carregar o programa, basta abrir o monitor Serial e verificar o valor do pH e está concluída a fase de calibração.
Cuidados especiais ao utilizar a sonda
Lembre-se que as medições de pH são sensíveis, então é necessário realizar a limpeza da sonda com água deionizada antes de trocarmos a sonda de solução. Também é necessário realizar a calibragem da sonda regularmente, e a temperatura ideal do ambiente é de 25°C para melhores resultados.
Caso fique um longo período de tempo sem utilizar a sonda, é necessário colocar ela mergulhada em solução KCl 3M por 8 horas para reativação da sonda, este líquido vem contido no recipiente na ponta da sonda para preservar ela ativa e umedecida, substitua quando necessário.
Em conclusão, o sensor necessita de cuidados especiais e uma regulagem prévia para o bom desempenho. Assim como o nosso código não contempla a utilização do sensor de temperatura para compensação dos valores de pH, aonde seria necessário adequar a calibração a cada variação de temperatura, conforme tabelas disponíveis na internet, assim obtendo resultados mais precisos independente da temperatura ambiente.
Entretanto, fica a sugestão para possíveis TCCs ou estudos, utilizar este sensor de ph Arduino, aprimorando e obtendo resultados ainda mais precisos com este sensor.
muy buen trabajo!
posso utiliza-lo com o esp32?
Boa tarde!
Infelizmente não sem um sensor de tensão, já que ele chega até 4,5V e o ESP32 apenas suporta até 3,3V para suas leituras.
Como seria esse cabo laranja que fica e volta d o BNC? Seria um jumper? E depois de enrolada no BNC a outra ponta fica dentro da sonda?
Bom dia Elves!
Sim isto mesmo! Seria um jumper cortado para realizar esta conexão ao redor do BNC e utilizando o pino do jumper para encostar no terminal central dele.
olá , estou há tempos apanhando para esse sensor , não consigo fazer com que ele de a mesma medida de um dia para o outro , percebo que esta diretamente ligado a mudança de temperatura , mas não tenho certeza . Alguém ja passou por isso?
meu professor falou que para isso seria necessário um sensor de temperatura em conjunto.
Ele possuí a saída do sensor de temperatura, porém para calibrar de forma adequada irá ainda ser necessário realizar o cálculo de compensação conforme uma tabela (encontrada na internet), e compensar baseado em cada “step”. É realmente bastante trabalhoso realizar isto, além que a cada uso é recomendado realizar a limpeza adequada ou a cada 15 dias caso em uso direto na solução.
Aqui em ambiente com temperatura controlada conseguimos obter a mesma leitura sem problemas em dias diferentes.
obrigado , Victor . Agora ja tenho um norte , valeu…
Encontrei a tabela de correção por temperatura na web e percebi que se trata de uma correção para segunda casa decimal , eu não preciso de tanta precisão assim . No sistema que montei o valor de ph de uma solução com ph 7 a 19C° se eu medir a mesma a 25C° da ph 10 . Se eu tocar no pote da solução o ph despenca , estou bem perdido. já queimei dois arduinos trocando de fonte , mudei o código umas 1000 vezes … Preciso de socorro se alguém estiver disposto a me ajudar , agradeço , se alguém presta consultoria nesta área me mande orçamento , gostaria muito de saber onde estou errando e finalizar esse projeto.