Project showcase
O titulador automático como ferramenta no ensino de química

O titulador automático como ferramenta no ensino de química © CC0

O foco principal deste estudo foi facilitar o aprendizado e o ensino de química através de um titulador automático microcontrolado

  • 384 views
  • 0 comments
  • 1 respect

Components and supplies

Apps and online services

About this project

O Arduino é uma excelente ferramenta educacional para facilitar o aprendizado e o ensino de química, tanto na Educação Básica, como em cursos de graduação e pós-graduação.

O foco está no processo mediado pela tecnologia, como ferramenta de investigação de baixo custo e fácil aquisição, no alcance de seus resultados e não no instrumento em si.

Combinando o Arduino com sensores de pH e temperatura e atuadores como um sistema de agitação magnética construído com um cooler reutilizado de um computador obsoleto e uma válvula peristáltica, podemos desenvolver um titulador automatizado de baixo custo.

A titulação potenciométrica é operada automaticamente fornecendo uma curva de titulação diretamente para o Smartphone e para a planilha do Microsoft Excel. O titulante é adicionado contra o titulado, sob agitação, a uma taxa constante de 100 µL a cada 6 segundos, por meio de uma válvula peristáltica também microcontrolada.

Os resultados foram comparados com a titulação potenciométrica clássica, não mostrando diferenças estatisticamente significativas com a aplicação do teste t pareado com um nível de confiança de 95%.

A titulação potenciométrica de captopril é apresentada como proposta de ensino por investigação. Baixe aqui a nossa proposta didática!

Um canva de planejamento foi desenvolvido com toda a sequência didática sugerida para o projeto "Absorção de fármacos para o controle da hipertensão".

Os experimentos devem ser realizados com objetivos diferentes, como demonstrar um fenômeno, ilustrar um princípio teórico, coletar dados, testar hipóteses, desenvolver habilidades de observação ou medição, familiarizar-se com o aparelho, entre outros.

A determinação potenciométrica do valor de pKa do captopril baseia-se na determinação das mudanças do pH com a adição do titulante para se obter uma curva de titulação. Uma vez determinado o ponto final, calcula-se o pKa pela equação deHenderson-Hasselbalch. Quando o volume da solução de NaOH neutraliza a metade dos grupos carboxílicos do captopril, considera-se que pH = pKa1, pois log ([A-] / [HA]) = 0 .

A aquisição dos dados experimentais foi realizada via integração Bluetooth através do Smartphone, usando o Virtuino App (biblioteca Virtuino 1.7.0) e via cabo USB diretamente para a planilha do Microsoft Excel, utilizando o software PLX-DAQ.

Faça o download da descrição passo-a-passo de como é feita a configuração do Virtuino App para a conexão com o Titulador.

Em comunicação científica acerca da nova tecnologia educacional realizada em visita técnica de professores de química e alunos do ColégioTiradentes da Polícia Militar de Minas Gerais (CTPM Manhuaçu - MG) ao Departamento de Química da UFV, buscou-se explorar de modo crítico e reflexivo o desenvolvimento e aplicação dessa tecnologia alternativa, de forma a articular teoria e prática no laboratório didático de química

Os professores envolvidos destacaram a importância do papel mediador do profissional docente em diferentes situações de ensino e aprendizagem com o uso dessa ferramenta de ensino. Enfatizando também a possibilidade de desenvolver novas habilidades para o professor de química, tais como: eletrônica básica, linguagem e lógica de programação.

A descrição completa desse projeto está disponível em dissertação publicada na página oficial do PROFQUI UFV.

Code

TAMAB_1.0.inoArduino
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*
                                       UNIVERSIDADE FEDERAL DE VICOSA                                        
                                 CENTRO DE CIENCIAS EXATAS E TECNOLOGICAS                                   
                                          DEPARTAMENTO DE QUIMICA                                           
                        PROGRAMA DE MESTRADO PROFISSIONAL EM QUIMICA - PROFQUI 2017                     
                                                                                                        
                                   MESTRANDO: ITERLANDES MACHADO JUNIOR                                    
                                     ORIENTADOR: EFRAIM LAZARO REIS
                                       COORIENTADOR: CESAR REIS                                        
                                                                                                        
                         TAMAB - TITULADOR AUTOMATICO MICROCONTROLADO POR ARDUINO 
                                  COM AQUISIO DE DADOS VIA BLUETOOTH
                                         Verso 1.0 (21/02/2019)
*/
/*---------------------------------------------------( Importar bibliotecas necessarias )----------------------------------------------------------------------------------------------*/
#include <Wire.h>                 // Biblioteca para interface TWI/I2C entre dispositivos e sensores 
#include <LiquidCrystal_I2C.h>    // Biblioteca para controlar displays de cristal liquido (LCD)
#include <SoftwareSerial.h>       // Biblioteca para comunicacao serial usando pinos digitais
#include <VirtuinoBluetooth.h>    // Biblioteca para comunicacao serial do modulo Bluetooth
#include <OneWire.h>              // Biblioteca para comunicacao serial do sensor de temperatura DS18B20
#include <DallasTemperature.h>    // Biblioteca para comunicacao serial do sensor de temperatura DS18B20

/*---------------------------------------------------( Definir )-----------------------------------------------------------------------------------------------------------------------*/
#define ONE_WIRE_BUS   4      // Porta digital do sensor de temperatura DS18B20
#define agitador       7      // Porta PWM do agitador
#define motorPin       8      // pino que liga a valvula peristaltica
#define pHpin          A0     // pino que envia sinais para o medidor de pH
#define pinLEDVerm     12     // Porta digital do LED vermelho
#define blinkPin       13     // Porta digital do LED verde

/*----------------------------------------------------( Declarar objetos )-------------------------------------------------------------------------------------------------------------*/
// define o endereco do LCD para 0x20 para 20 caracteres e exibicao de 4 linhas
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE); 

SoftwareSerial bluetoothSerial =  SoftwareSerial(10,11); // RX, TX

/* Define uma instancia do oneWire para comunicacao com qualquer dispositivo OneWire
     (nao apenas ICs de temperatura Maxim / Dallas)*/
OneWire oneWire(ONE_WIRE_BUS);
// Decodifica referencia oneWire para Dallas Temperature
DallasTemperature sensors(&oneWire);

/*-------------------------------------------( Declarar Variaveis Globais )------------------------------------------------------------------------------------------------------------*/

float pHvalue;                // le o valor de pH
float E;                      // le a tenso direta da sonda de pH
float volume;                 // instancia valor inicial do volume
int pHavg[10];                // matriz para encontrar um pH medio de leituras de 10 medicoes
int temp;                     // espaco temporario usado para classificar a ordem de pequeno a grande
int estadoValvula;            // indica estado da valvula peristaltica
int pH0 = 0;                  // instancia limite inferior da escala de pH
int pH14 = 14;                // instancia limite superior da escala de pH
int aliquota = 0;             // instancia valor inicial da aliquota

unsigned long int avgValue;   // armazena o valor medio de pH das 6 leituras da ordem central

unsigned long tempoAnterior = 0; // cria uma variavel que guarde o tempo anterior 
const long intervalo = 3000;     // indica o intervalo de tempo em milissegundos pretendido para que  
                                 // o sensor faca a leitura de 0,1 mL da aliquota e guarde o valor.
                                   
VirtuinoBluetooth virtuino(bluetoothSerial,9600); // Define a taxa de transmissao do SoftwareSerial.

void setup()   /*-----------------------------------------------(CONFIGURACAO: EXECUCAO UMA VEZ)-----------------------------------------------------------------------------------*/
{
  Serial.begin(9600);               // inicializa a comunicacao serial

  Serial.println("CLEARDATA");                                // Reset da comunicacao serial
  Serial.println("LABEL, Data, Hora, volume(mL), pHvalue");   // Nomeia as colunas
 
  virtuino.DEBUG=true;              // define este valor TRUE para habilitar o status do monitor serial
  
  {
  lcd.begin(20,4);                  // inicializa o display (20 colunas x 4 linhas)                    
  lcd.setBacklight(HIGH); 
  }
  
  pinMode(agitador, OUTPUT);        // configura pino 7 como saida do agitador
  pinMode(motorPin, OUTPUT);        // configura pino 8 como saida da valvula peristaltica
  pinMode(pinLEDVerm, OUTPUT);      // configura pino 12 como saida do LED vermelho
  pinMode(blinkPin, OUTPUT);        // configura pino 13 como saida do LED verde
  
  digitalWrite (agitador, HIGH);    // fora desligamento do agitador com o valor analogico lido (0-1024)
  digitalWrite (pinLEDVerm, HIGH);  // liga o LED vermelho
  digitalWrite (blinkPin, LOW);     // fora desligamento de LED verde

  // Enche a linha de injeo
  digitalWrite(motorPin, LOW);           
  delay(4000);                      // Tempo de 4000 ms para injecao de 2,0 mL da solucao diluida
  digitalWrite(motorPin, HIGH);
  delay(2000);                      // Espera 2000 ms antes do inicio da titulacao 

  estadoValvula = 1;

  // Apresenta o projeto de pesquisa no modulo LCD:
  
  lcd.setCursor(4,0);
  lcd.print("PROFQUI 2017");
  lcd.setCursor(9,2);
  lcd.print("UFV");
  delay(3500);
  lcd.clear();
  
  lcd.setCursor(4,0);
  lcd.print("BEM VINDO AO");
  lcd.setCursor(6,2);
  lcd.print("TAMAB 1.0");
  delay(3500);
  lcd.clear();

  lcd.setCursor(5,0);
  lcd.print("INICIANDO");
  lcd.setCursor(5,2);
  lcd.print("TITULADOR"); 

  //Blink  
  lcd.noDisplay();  
    delay(750);   
  lcd.display();   
    delay(750); 
  lcd.noDisplay(); 
   delay(750);  
  lcd.display();   
   delay(750);
  lcd.noDisplay();    
    delay(750);
  lcd.display();   
    delay(750);    
  lcd.clear(); 

}

void loop()   /*---------------------------------------------------( LOOP: FUNCIONA CONSTANTAMENTE )-----------------------------------------------------------------------------------*/
{   
       
    float Volume = aliquota * 0.1;
    float pH = pHvalue * 1;
    
    int linha = 0; // variavel que se refere as linhas do excel

    // Envia os dados das variaveis tempo e X para a porta serial, que podem ser visualizados na planilha do PLX-DAQ.
  
  
    linha++; // incrementa a linha do excel para que a leitura pule de linha em linha
    
    Serial.print("DATA,DATE, TIME,"); // inicia a impressao de dados, sempre iniciando
       
    Serial.print(Volume);
    Serial.print(","); 
    
    Serial.println(pH);
    Serial.print(",");
      
    Serial.println(linha);
    
    if (linha > 100) //laco para limitar a quantidade de dados
    {
    linha = 0;
    Serial.println("ROW,SET,2");      // alimentacao das linhas com os dados sempre iniciando
    }
    
    virtuino.run();                   // comando necessario para se comunicar com o aplicativo android Virtuino
    
    /* Fonte: Arduino Thermometer With DS18B20. Arduino - Project Hub. 2016.
    Disponivel em: <https://goo.gl/4Ed9ag>. Salvo em: 22 de jul. 2018 */

    // Envia o comando para obter leituras de temperatura:
 
    sensors.requestTemperatures();

    float temperature1=sensors.getTempCByIndex(0);

    // RECURSO PARA DEPURAO (DEBUG) VIA MODULO LCD E MONITOR SERIAL

    // Mostra dados no LCD:
    lcd.setCursor(0,0);
      lcd.print("TEMP.:       ");
    //Simbolo grau
      lcd.write(223);
      lcd.print("C");
    lcd.setCursor(7,0);
      lcd.print(temperature1);
    lcd.setCursor(0,1);
    
    //Mostra dados no monitor serial:
      Serial.print("TEMP.: "); 
      Serial.print(temperature1);
      Serial.print(""); 
      
    /* Fonte: How to use a pH sensor with Arduino. Scidle - Science and technology. 2017. 
    Disponivel em: <https://goo.gl/uhc9m1>. Salvo em: 22 de jul. 2018 */
      
    // Mede tenso eletrica e converte para a faixa de pH 0-14:
    
    /*O comando for:
    permite executar, repetidamente, um conjunto de comandos de acordo com uma condicao*/

    /* Forma geral:
    for (valor inicial; condicao; incremento){
        conjunto de comandos
       } */

    // Extrai valores centrais do sensor (0-1024) e converte na tensao media (pHVol: 0-5v)                       
  
     for(int i=0; i<10; i++)                // obtem 10 valores de amostra do sensor para suavizar o valor
    {
      pHavg[i] = analogRead(pHpin);         // obter leitura do sensor de pH e colocar em ordem
      delay(10);                            // pequeno atraso entre leituras
    }
    
  for(int i=0; i<9; i++)                    // organiza os valores analogicos em odem crescente
    {
      for(int j=i+1; j<10; j++)             
        {
          if(pHavg[i] > pHavg[j])           // se o valor "i" do array for maior que o valor "j"
            {
              temp = pHavg[i];              // atribui "i" a variavel temporaria
              pHavg[i] = pHavg[j];          // alterna "j" para a localizacao "i"
              pHavg[j] = temp;              // muda de "i" para "j"
            }
        }
    }
  avgValue = 0;
  for(int i=2; i<8; i++)                    // pega o valor total das 6 amostras centrais 
    {
      avgValue += pHavg[i];                 // obter total
    }
 
    E =(float)avgValue*4.92*1000/1023/6/6;          // mapeia o conversor analgico (0-1024) em volt (0~5) e faz a media simples

   /* Avaliao da sensibilidade de resposta do eletrodo de vidro: slope = 59.16mv/pH (Ideal)
      STEP 1 pH=4 => E = 510 mV OFFSET pH=7 => E = 412 mV
      
      SlopeMedido = dE/dpH = 32.67 mV/pH (Experimental)
      
      Nvel de tenso gerado pelo eletrodo comparado com o ideal
      
      <80%  => Ruim (<47.30 mV/pH)
      80% < Ganho < 90% => Bom  (47.30 mV/pH < Ganho < 53.20 mV/pH)
      >90%  => timo (>53.20 mV/pH) */ 

      pHvalue = (float) 7 + ((412-E)/32.67);
    
   // RECURSO PARA DEPURACAO (DEBUG) VIA MODULO LCD E MONITOR SERIAL 
            
    //Mostra dados no LCD:    
      lcd.print("                    pH:");
      lcd.setCursor(7,3);
      lcd.print(pHvalue, 2);
      lcd.setCursor(8,3);
    
    //Mostra dados no monitor serial:
      Serial.print("   E: ");
      Serial.print(E);
      Serial.print("");
      Serial.print("   pH: ");
      Serial.println(pHvalue, 2);
      Serial.print("");
   
          
    // Controle do estado do agitador
       digitalWrite (agitador, LOW);

    // Controle do estado da valvula

    byte estadoValvula;
    
    if ((pHvalue > pH0) && (pHvalue < pH14)) {
      estadoValvula = 2;
    } else {
      estadoValvula = 1;
    }
   
    //Transforma variaveis de estado em situacoes diferentes
  
     if (estadoValvula == 1) {
      
     //Comando 1: Sem adio do titulante
       digitalWrite (pinLEDVerm, HIGH);         // liga LED vermelho
       digitalWrite (blinkPin, LOW);            // fora desligamento de LED verde 
    }

    if (estadoValvula == 2) {
                                                // comando 2: Adicao de 2,0 mL/min. do titulante em alquotas de 0,1 mL
        digitalWrite (pinLEDVerm, LOW);         // fora desligamento de LED 
        digitalWrite (blinkPin, HIGH);          // liga LED verde

        digitalWrite(motorPin, LOW);           
        delay(95);                              // tempo de 95 ms correspondente a injecao de 0,1 mL 
        digitalWrite(motorPin, HIGH);
        delay(950);                             // espera 950 ms antes da nova titulacao e leitura        
    }

    // Contador de aliquotas
    if (millis() - tempoAnterior >= intervalo) { // calcula-se o tempo desde a ultima execucao e usa-se esse valor para o calculo de vazao.
        aliquota++;
       }

    float volume = 0.1*aliquota;

     
    // RECURSO PARA DEPURAO (DEBUG) VIA SMARTPHONE

    //Envia dados via Bluetooth

     virtuino.vMemoryWrite(0,pHvalue);         // escreve o pH no pino virtual V0. No painel Virtuino, adicione um display de valor ou um instrumento analogico para fixar V0
     
     virtuino.vMemoryWrite(1,E);               // escreve o potencial E no pino virtual V1. No painel Virtuino, adicione um display de valor ou um instrumento analogico para fixar V1
     
     virtuino.vMemoryWrite(2,temperature1);    // escreve a temperatura 1 no pino virtual V2. No painel Virtuino, adicione um display de valor ou um instrumento analogico para fixar V2    
         
     virtuino.vMemoryWrite(3,Volume);          // escreve o volume no pino virtual V3. No painel Virtuino, adicione um display de valor ou um instrumento analogico para fixar V3    
   
    // ------ evite usar a funcao delay () no seu codigo. Use o comando virtuino.vDelay () em vez de delay ()
      
    virtuino.vDelay(1000);                     // Adicione um atraso de pelo menos 1 segundo de duracao.

    delay (4000);

}

/* ------------------------------------------------------------------------------( FIM )------------------------------------------------------------------------------------------------- */

Schematics

Protoboard Fritzing
tamab_v_1_0_yjTm1cXcBF.fzz
Imagem extraída de Protoboard Fritzing
Tamab v 1 0 josvt9ffn4

Comments

Similar projects you might like

PIR Automated Intelligent Zebra Crossing

Project showcase by Adersh B

  • 5,933 views
  • 3 comments
  • 15 respects

Christmas LED Tree Decoration

Project showcase by henyte

  • 1,453 views
  • 0 comments
  • 4 respects

Telephone Activation Clock

Project showcase by eluyten

  • 1,154 views
  • 1 comment
  • 5 respects

Smart Door with Face Unlock

Project tutorial by Divins Mathew

  • 18,345 views
  • 5 comments
  • 31 respects

The TrafficLight

Project showcase by Advaith Jagathesan

  • 17,915 views
  • 1 comment
  • 26 respects

Ask the Magic 8 Ball!

Project tutorial by Team College Bound

  • 4,021 views
  • 5 comments
  • 10 respects
Add projectSign up / Login