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.
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.
/*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
Nenhum comentário:
Postar um comentário