Project showcase
Educational Robotics Applied to Teaching Acid-Base Titration

Educational Robotics Applied to Teaching Acid-Base Titration © CC0

The focus of this study is to help students solve real-world problems using the automatic microcontrolled titrator by an Arduino

  • 1,308 views
  • 1 comment
  • 2 respects

Components and supplies

Apps and online services

About this project

VIRTUAL PRESENTATION OF THE EDUCATIONAL PRODUCT (Portuguese)

Arduino is an excellent educational tool to facilitate the learning of chemistry, both in Basic Education, as in undergraduate and graduate courses.

The focus should be on the process mediated by technology, as a low-cost and easily acquired research tool, in obtaining its results and not in the instrument itself.

Combining the Arduino with pH and temperature sensors and actuators such as a peristaltic valve and a magnetic stirring system, built with a reused fan from an obsolete computer, we can develop a low cost automated titrator.

Potentiometric titration is operated automatically, providing a titration curve directly to the Smartphone and the Microsoft Excel Spreadsheet. The titrant is added to the titrant, under agitation, at a constant rate of 100 µL every 6 seconds, by means of a peristaltic valve also microcontrolled.

The results were compared with the classic potentiometric titration, with no statistically significant differences with the application of the paired t-test with a 95% confidence level.

The acquisition of the experimental data was carried out via Bluetooth for Smartphone (Android 8) using the Virtuino App (Virtuino ver 4.2.2) and via USB cable directly to Microsoft Excel spreadsheet (Windows 10 32 bits), using PLX - DAQ (version 1 ).

Download the step-by-step description of how the Virtuino application is configured to connect to the Titrator.

In a scientific communication about the new educational technology carried out during a technical visit by Chemistry professors and students of the Colégio Militar Tiradentes da Polícia Militar de Minas Gerais (CTPM Manhuaçu - MG) to the Department of Chemistry at UFV, we seek to explore the critical and reflective development and the application of this technological alternative, in order to articulate theory and practice in the chemistry laboratory.

The potentiometric titration of captopril is presented as a research proposal in the teaching of Chemistry. Download our didactic proposal!

We suggest using Canvas as a pedagogical planning tool with the didactic sequence on "Absorption of drugs for the control of hypertension".

The experiments must be carried out with different objectives, such as demonstrating a phenomenon, illustrating a theoretical principle, collecting data, testing hypotheses, developing observation and measurement skills, becoming familiar with the device, among others.

The potentiometric determination of the captopril pKa value is based on the determination of pH changes with the addition of the titrant to obtain a titration curve. Once the end point has been determined, pKa is calculated using the Henderson-Hasselbalch equation. When the volume of the NaOH solution neutralizes half of the carboxylic groups of captopril, pH = pKa1 is considered, because log ([A-] / [HA]) = 0.

Procedure I - Standardization of NaOH

Procedure II - Standardization of HCl

Procedure III - Determination of the content (mg / tablet) and pKa value of captopril
  • OFFICIAL RECOGNITIONS OF THIS STUDY

The complete description of this project is available in the dissertation published on the official page of 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,765 views
  • 3 comments
  • 15 respects

Christmas LED Tree Decoration

Project showcase by henyte

  • 1,365 views
  • 0 comments
  • 4 respects

Telephone Activation Clock

Project showcase by eluyten

  • 833 views
  • 1 comment
  • 4 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

  • 3,886 views
  • 5 comments
  • 10 respects
Add projectSign up / Login