Olá pessoal, neste post detalharemos o código implementado no projeto. Deverão ser incluídas as seguintes bibliotecas:
- Biblioteca do display OLED:
https://drive.google.com/open?id=1MaeiU1YsQ3tkMxyT1USZct4PfxdLDRvt
- Biblioteca do sensor DHT11
https://drive.google.com/open?id=1THBI9MKPokXgnx5_Jnd9vCjXYL5lf3oM
- Biblioteca FloattoString.
https://drive.google.com/open?id=1aC8H2M-vkNCZYfp745po6FRstfCYaEb-
Segue código:
#include <Arduino.h>
#include <U8g2lib.h> // Biblioteca do display OLED
#include <SPI.h>
#include <Wire.h>
#include <FloatToString.h> // Biblioteca para converter float para string
#include <dht11.h> //Biblioteca do sensor DHT11
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); //Inicializa variável u8g2 para manipular display OLED.
float calibration = 0.25; //alterar o valor para calibrar quando não conseguir no potenciômetro do sensor pH.
const int analogInPin = A0; //pino para leitura do pH.
int sensorValue = 0;
unsigned long int avgValue;
float b;
int buf[100],temp; //matriz buf com 100 elementos para armazenar os valores de tensão lidos.
char buffer[25]; // buffer utilizado para converter float para string
dht11 sensor; //objeto do tipo dht11
void setup() {
Serial.begin(9600);
Serial.println("CLEARDATA"); //CLEARDATA para utilização no PLX-DAQ
Serial.println("LABEL,Hora,Temp,pH"); //Cabeçalho dos dados para utilizar no PLX-DAQ
u8g2.begin(); //inicializa display OLED
}
void loop() {
int chk = sensor.read(2); // sensor faz a leitura no pino D2
//Loop para fazer a leitura de 100 valores de tensão no pino A0
for(int i=0;i<100;i++)
{
buf[i]=analogRead(analogInPin);
delay(10);
}
//Ordena os valores de tensão
for(int i=0;i<100;i++)
{
for(int j=i+1;j<100;j++)
{
if(buf[i]>buf[j])
{
temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
}
}
avgValue=0;
//Considera 96 valores e calcula a média da amostra
for(int i=2;i<97;i++)
avgValue+=buf[i];
//Calcula o valor médio de tensão do sensor pH
float pHVol=(float)avgValue*4.94/1024/96;
//Converte para string o valor float do phVol e deixa com somente dois dígitos
String spHVol = floatToString(buffer, pHVol, 2);
//Converte a string spHVol para float novamente mas agora somente com dois dígitos
float fpHVol = spHVol.toFloat();
//De posse do valor médio de tensão calcula-se o valor de pH acrescentando a calibração
float phValue = -5.70 * fpHVol + 21.34 + calibration;
if (phValue < 0){
phValue = 0;
}
// A série de prints abaixo vai escrever na Serial os valores separados por vírgula do pH e da temperatura para utilização no PLX-DAQ
Serial.print("DATA,TIME,");
Serial.print((float)sensor.temperature,0);
Serial.print(",");
Serial.println(phValue);
// Mostra os valores no display OLED
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_logisoso24_tr); // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
u8g2.setCursor(6,30); // write something to the internal memory
u8g2.print("pH:"); // write something to the internal memory
u8g2.setCursor(60,30); // write something to the internal memory
u8g2.print(phValue,2); // write something to the internal memory
u8g2.sendBuffer();
delay(2000);
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_logisoso18_tr); // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
u8g2.setCursor(6,30); // write something to the internal memory
u8g2.print("T:"); // write something to the internal memory
u8g2.setCursor(50,30); // write something to the internal memory
u8g2.print((float)sensor.temperature,0); // write something to the internal memory
u8g2.setCursor(75,30); // write something to the internal memory
u8g2.print("*C"); // write something to the internal memory
u8g2.sendBuffer();v
delay(1000);
}
Há alguns detalhes no código que precisam ficar atentos. O valor de tensão de alimentação do sensor deve ser medido com um multímetro e ser utilizado no cálculo da variável phVol (tensão do sensor que será utilizado no cálculo do pH). No caso do código acima o valor obtido foi 4.94 no VCC e GND do sensor pH.
Uma vez feito o upload do código vamos testar as leituras em soluções padrão de pH 7 inicialmente, calibrando o sensor através do potenciômetro mais próximo do conector BNC do módulo sensor pH ou através do código pela variável calibration. Se o potênciômetro não conseguir chegar no valor de pH 7, por exemplo chegando no valor 6.88 e não é mais possível ajustar pelo potenciômetro basta colocar o valor de 0.12 na variável calibration no código para ajustar o ph 7.
Em seguida, tomando os cuidados necessários para não contaminar os padrões (lavando o eletrodo com água destilada e enxugando a cada troca de padrão) fazer o teste com ph 4. A leitura não deve ficar com mais de 0.5 pH de diferença para mais ou para menos. Se houver uma diferença muito grande o problema pode estar no eletrodo. Em testes de laboratório verificamos que determinados eletrodos não respondiam em algumas soluções ácidas..
A grande vantagem de utilizarmos Arduino é que podemos automatizar alguns testes de laboratório deixando a cargo do Arduino enviar os dados para um PC ou até mesmo um smartphone e depois visualizar esses dados de forma gráfica.
No próximo post veremos como coletar os dados enviados pela Serial do Arduino ou através de Bluetooth para uma planilha utilizando um add-on do Excel chamado PLX-DAQ.
Até a próxima!
Nenhum comentário:
Postar um comentário