terça-feira, 4 de outubro de 2022

VOLTÍMETRO (DC) COM MICROCONTROLADOR ATMEGA 328P

 Este circuito mede tensões continua de forma automática, sem a necessidade de chaveamento como acontece na maioria dos multímetros.

Para determinar o valor máximo da tensão de entrada (tensão a ser medida), utiliza um sensor formado por um divisor de tensão (resistores).

Como o circuito utiliza um microcontrolador, a tensão máxima na porta de entrada é de 5V, deve ser respeitado este limite para não queimar o microcontrolador.

O cálculo do divisor de tensão deve ser para que na saída entre os resistores R1 e R2 (tensão de referência) enviada para o microcontrolador tenha 5V, quando a tensão máxima medida for na entrada do divisor de tensão.




Para fazer o calculo do divisor de tensão utiliza a seguinte equação:


Onde:

Vout = Tensão de saida
Vin = Tensão de entrada
R1=  Resistor 1
R2= Resistor 2

Exemplo:

Aplicando tensão máxima de 20V na entrada pino de R1 e o GND, termos na saída do divisor, junções de R1 e R2 em relação ao GND, tensão de 5V.


Utilizando a equação podemos encontrar o valor do resistor R1 com base no valor de R2 = 10k, assim teremos:

Vin= 20V
Vout= 5V
R1= ?
R2= 10k





O circuito elétrico do voltímetro consta como componente principal o microcontrolador que é o responsável por receber a tensão de referência que vem do divisor de tensão, bem como através do programa (código fonte)  que é compilado no microcontrolador, ser capaz de fazer os cálculos da tensão que esta na entrada do divisor de tensão  e apresentar no display de LCD o valor da tensão medida.


Esquema elétrico do voltímetro:


Aplicando o nível lógico zero (0) na entrada de D1, será apresentado no display a mensagem do MODO DE PROTEÇÃO ATIVADO.

Serve para ser utilizado quando deseja ter o aviso deste modo ativado , por exemplo em fonte de alimentação que tenha este modo de proteção em seu circuito.


CÓDIGO FONTE

/*PROJETO: VOLTÍMETRO (DC) COM MICROCONTROLADOR

  AUTOR: ROBERTO EDNEI BARBARA

  REB TECH

  DATA: 23/08/2022

  CANAL DIVERSÃO & TECNOLOGIA (YOUTUBE)

*/

 

#include <LiquidCrystal.h>                      // Inclui a biblioteca para o display de lcd

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);          // Informa a biblioteca quais pinos digitais são reservados para acionar o display

 

#define pin_div A1                              // Define o pino analógico A1 como entrada da tensão

#define sensor A4                               // Define o pino analógico A4 como entrada do sensor proteção

 

int estadosensor = 0;                           // variavel para ler o estado do sensor proteção

 

float R2 = 33000.0;                             // Valor do resistor R2 para o cálculo da tensão

float R3 = 10000.0;                             // Valor do resistor R3 para o cálculo da tensão

float v_cc[50];                                 // Declara v_cc como um vetor de 50 posições

 

 

void setup() {

 

  pinMode(pin_div, INPUT);                     // Configura a porta A1 como entrada analógica

  pinMode(sensor, INPUT);                      // Configura a porta A4 como entrada sensor

 

  lcd.begin(16, 2);                            // Inicia o display informando o tipo de display, 16x2

  lcd.clear();                                 // Limpa os dados em cache do display

  lcd.setCursor(0, 0);                         // setando texto na coluna (0) da linha (0)

  lcd.print("AGUARDE");                        // mensagem inicial

  delay(700);                                  // tempo espera

  lcd.setCursor(0, 1);                         // setando texto na coluna (0) da linha (1)

  lcd.print("INICIALIZANDO...");               // mensagem inicial

  delay(1100);                                 // tempo espera

  lcd.clear();                                 // limpando o display

  lcd.setCursor(1, 0);                         // setando texto na coluna (1) da linha (0)

  lcd.print("CANAL DIVERSAO");                 // intro do canal no YouTube

  delay(700);                                  // tempo espera

  lcd.setCursor(2, 1);                         // setando texto na coluna (2) da linha (1)

  lcd.print("& TECNOLOGIA");                   // intro do canal no YouTube

  delay(900);                                  // tempo espera

 

} // fim do setup

 

void loop() {

 

  float v_lido = 0;                            // Declara uma variável para leitura dos valores analógicos

  float v_medido = 0;                          // Variável que armazenará a média das amostras da tensão cc

 

  for (int i = 0; i < 50; i++)                 // Armaneza no vetor v_cc a tensão de entrada, em 50 espaços de memória

  {

    v_lido = analogRead(pin_div);              // Lê o valor analógico e armazena na variável v_lido

 

    v_cc[i] = (5 * v_lido * (R2 + R3)) / (R3 * 1023); // Faz o cálculo da tensão medida correspondente a leitura analógica

  } // fim laço for

  for (int i = 0; i < 50; i++)                 // Calcula a soma de todos os valores de tensão cc armazenados em v_cc

  {

    v_medido = v_medido + v_cc[i];             // Soma dos valores de tensão medidos

  } // fim laço for

 

  v_medido = (v_medido / 50);                  // Calcula a média de todos os valores de tensão

 

  lcd.clear();                                 // LIMPA O DISPLAY DO LCD

  lcd.setCursor(3, 0);                         // Posiciona o cursor para coluna 2, linha 1

  lcd.print("VOLTIMETRO");                     // Inprime no display Voltímetro

  lcd.setCursor(0, 1);                         // Posiciona o cursor na coluna 1, linha 2

  lcd.print("Tensao: ");                       // Inprime o texto Vcc =

  lcd.setCursor(9, 1);                         // Posiciona o cursor na coluna 7, linha 2

  lcd.print(v_medido);                         // Imprime o valor da tensão calculada, que corresponderá a tensão medida

  lcd.print("V ");

  delay(1000);                                 // Espera por 1 segundo

 

  {

    estadosensor = digitalRead(sensor);          // faz a leitura do valor do botao:

 

 

    if  (estadosensor == HIGH)                    // em caso positivo, estadobotao e HIGH:

    {

      lcd.clear();                                 // LIMPA O DISPLAY DO LCD

      lcd.setCursor(4, 0);                         // POSICIONA NA PRIMEIRA LINHA E PRIMEIRA COLUNA

      lcd.print("PROTECAO");                       // ESCREVE

      lcd.setCursor(4, 1);                         // POSICIONA NA PRIMEIRA LINHA E PRIMEIRA COLUNA

      lcd.print("ATIVADA");                        // ESCREVE

      delay(1000);                                 // Espera por 1 segundo

 

    }

 

  } // fim do loop

}


**********************************************

Vídeo no canal do YouTube




*****************************************************************************


E-mail Comercial proeletronicos@gmail.com




Canal YouTube


DIVERSÃO & TECNOLOGIA