segunda-feira, 15 de abril de 2019

Medidor de pH - enviando os valores de pH e temperatura para planilha em Excel.

Olá pessoal, neste post veremos como enviar os dados de pH e temperatura para uma planilha em Excel utilizando o add-on PLX-DAQ.
Temos duas maneiras de enviar dados para o PC:

1) Através de cabo USB serial conectando o Arduino ao PC:

Basta conectar o cabo USB Serial do Arduino ao PC. Se o módulo Bluetooth estiver conectado à protoboard desconecte-o. Os valores podem ser visualizados pela Serial Monitor da IDE Arduino ou através de um software de comunicação serial como o Putty.  No Putty basta iniciar uma sessão Serial e informar a porta e a velocidade da porta COM utilizada pela USB Serial.




Para testar basta instalar o Putty e escolher a porta COM e a velocidade:





No caso a porta serial USB do Arduino ficou na COM4. Você pode verificar qual porta COM no Gerenciador de Dispositivos.

Há também a possibilidade no Putty de gravar os dados recebidos pela conexão serial em um arquivo. Basta ir em Session, Logging e escolher Printable Output e escolher qual o arquivo será criado para armazenar os dados coletados. Clique em Open para realizar a conexão.




 
2) Através do módulo Bluetooth.

Basta o módulo Bluetooth HC-06 estar conectado à protoboard e realizar o pareamento com o PC. O pin padrão do módulo é 1234. Uma vez pareado você pode utilizar o Putty e basta iniciar uma sessão Serial e informar a porta e a velocidade da porta COM utilizada pela USB Serial.
Para fazer a conexão do módulo bluetooth HC-06 com o PC é necessário fazer o pareamento.  

a) Uma vez instalado o dispositivo Bluetooth no PC clique no ícone Bluetooth:


 b) Clique na opção Adicionar um Dispositivo Bluetooth:



c) Será aberta uma janela de configurações. Escolha Adicionar Bluetooth ou outro dispositivo. Provavelmente o dispositivo será listado como Dispositivo Desconhecido. Clique nele e faça a conexão. Será solicitado o pin do dispositivo. Insira 1234.




d) Com o dispositivo Bluetooth pareado vá em Mais opções de Bluetooth para verificar qual porta COM está sendo utilizada para a conexão.




e) Vá na aba Portas COM. A porta COM a ser utilizada é a porta com direção de Saída (no meu caso aqui foi a COM4).








f) Utilize o Putty da mesma forma mostrada acima para testar a conexão Bluetooth e configurando a conexão para a porta COM da conexão Bluetooth (que no caso aqui foi a COM4).  Ao dar Open o terminal Putty deverá mostrar os dados coletados:









Uma vez sendo realizada a leitura dos dados pela serial ou Bluetooth devemos utilizar o add-on PLX-DAQ no Excel.
Siga as instruções de instalação do PLX-DAQ:

https://medium.com/@islamnegm/quick-start-to-simple-daq-system-using-plx-daq-excel-arduino-d2457773384b

Segue abaixo vídeo da coleta de dados sendo realizada através de Bluetooth:






Pessoal, assim finalizamos esse projeto. Quaisquer dúvidas entrem em contato.

Até a próxima!


Medidor de pH - código e testes com padrões

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!

Medidor de pH - conexão dos componentes e detalhes de implementação

pH significa “potencial hidrogeniônico”, uma escala utilizada para medir acidez, neutralidade ou alcalinidade de uma determinada solução. Tamanha é sua importância, que a determinação do pH é realizada em laboratórios de controle de qualidade em diversas indústrias, como a indústria química, de alimentos, bebidas, de cosméticos, farmacêutica, análises clínicas e até no controle da preservação do meio ambiente.

Neste post veremos um novo projeto desenvolvido no meu local de trabalho (campus da UNESP Sorocaba - Instituto de Ciências e Tecnologia de Sorocaba) para atender uma demanda de construção de um medidor de pH utilizando Arduino, com base neste projeto:

https://pubs.acs.org/doi/abs/10.1021/acs.jchemed.7b00479

Fizemos adaptações no projeto para utilizar o módulo de leitura pH PH-4502C e o eletrodo que vem junto com ele :

https://www.usinainfo.com.br/outros-sensores-arduino/sensor-de-ph-arduino-modulo-de-leitura-5316.html




Os demais componentes utilizados são:

- Arduino Nano



- Sensor de temperatura DHT11




- Display OLED 0.91




- Módulo Bluetooth HC-06:


- Protoboard 830 pontos:




- Conector P4 fêmea com borne para fonte de alimentação externa:





- Fonte de alimentação externa 9V:





- Jumpers Dupont macho-macho e macho-fêmea:





A figura abaixo mostra os componentes conectados:



Detalhes da implementação:

1) Alimentação externa: para fornecer tensão constante próxima dos 5V necessários para o sensor foi utilizada fonte de alimentação externa de 9V, ligando o positivo do conector P4 na entrada Vin do Arduino e o negativo no pino GND. O interessante é que também é possível conectar uma bateria de 9V usando um jack apropriado. É importante salientar que não é recomendado utilizar alimentação pela USB do Arduino por apresentar geralmente valores bem abaixo dos 5V necessários.
2) Foi utilizado um display OLED 0.91 para visualizar os valores de pH e temperatura. A alimentação do display é de 3.3V e o VCC do display é conectado ao pino 3V3 do Arduino.
3) DHT11: ligar normalmente o sensor DHT11 (não esquecendo do resistor de 10K entre o pino de DATA e o VCC). O pino de DATA está conectado na porta D2 do Arduino.
4) Módulo Bluetooth: o módulo Bluetooth está utilizando os pinos TX e RX do Arduino. Optamos por utilizar os mesmos pinos da comunicação serial padrão do Arduino para simplificar. Para fazer o upload do código através do cabo USB serial do Arduino basta desplugar o módulo da protoboard.
5) Sensor pH: o sensor é alimentado com 5V, a leitura de pH se dá pelo pino Po do módulo pH e este é conectado no pino A0 do Arduino. Os dois pinos de terra (alimentação e do eletrodo) são ligados no  GND do Arduino.

A imagem abaixo mostra o projeto como ficou:

 


No próximo post veremos o código do projeto e seus detalhes. Até a próxima!