Arduino - Voltimetro

Projeto 06 - Voltimetro de 0V a 20V

Neste projeto estaremos utilizando 2 projetos anteriores :
• 1 - Analog Read Serial que lê o valor de uma porta analógica 08-Analog Read e SERIAL.html.
• 2 - Projeto LCD1602 que exibe mensagens no LCD 09-LCD 1602.html.

Com estes dois itens implementaremos um voltimetro de 0 a 20V que é básico para um carregador de baterias e outras montagens onde monitorar uma tensão e tomar uma atitude com o valor lido é fundamental.

A primeira coisa a fazer é calcular o divisor resistivo que converterá a tensão de entrada de 20V para 5V. Como a matemática nos indica, 5V é um quarto de 20V, portanto teremos um divisor resistivo que deverá cair V para o Arduino e 3V para o resistor atenuador. Supondo o resistor do arduino de 1K o outro resistor seria de 3K. Foi isso que fiz, 1K e 3K3 são os resistores dos atenuadores de entrada.
Contudo se você achar essa impedância baixa, pode trocar por 10K e 33K sem problemas. Só não recomendo acima de 100k porque a entrada começa a ficar sensível a ruídos, especialmente em ambiente automotivos.

Note que os resistores tem uma tolerância de 5% pelo menos e que o erro seria transmitido a leitura. Fiz um pequeno ajuste para que leitura ficasse mais próxima do real mas você pode ajustar de acordo com a sua leitura. Note que subindo a tensão 21V sobe a leitura e o contrário é verdadeiro.

Coloquei um diodo 1N4148 para proteger a entrada. No circuito que montei não coloquei esse diodo porque o carregador de bateria em aberto chegava a 18V no máximo e a bateria não passa dos 16V por pior que esteja.

Na primeira linha do LCD é exibida a mensagem 'Max. 20V'. É só um alerta.

Na segunda linha exibo na coluna 0 o valor lido da porta serial, de 0 a 1023. Exibi para fins didáticos, num projeto eu retiraria.
Na coluna 8 da segunda linha exibo o valor convertido de tensão.

Montei esse circuito na prática e funcionou muito bem. Pretendo colocar num projeto um 'flutuador' de bateria, ou seja, um circuito para ligar na bateria do seu carro e deixar ligado sempre. Ele fornece uma pequena corrente (perto de 60 mA) e mantém a bateria carregada por mais tempo que seu carro fique parado na garagem. Fiz o projeto com um Arduino porque queria que ele desligasse automaticamente a carga quando a bateria estivesse carregada.


Esquema :


Programa :

/*
Projeto 6 : Voltimetro de 0 a 20V.

Conexão do Arduino e o modo de LCD
    LCD        Arduino
    RS            D7
    Enable        D6
    D4            D5
    D5             D4
    D6            D3
    D7            D2
    R/W         GND-Terra
    VSS        GND-Terra
    VCC        Fonte +5V - Pode ser a do arduino
    
Nota : No pino 3 do LCD(VO) esta ligado a VCC
    mas tem LCDs que precisam de um trimpot de 10K
    Uma extremidade ligada a terra
    Outra extremidade ligada a 5V(VCC)
    O pino central ligado ao Pino 3 do LCD - VO
 
Conversão valor lido em AD0 versus tensão real
Sabemos de 1023 é lido quando temos uma tensão de 21V.
Quanto temos uma leitura de n teremos um tensão v...
por regra de 3 : v = n * 21 / 1023
Contudo ao medir o valor exibido sempre este acima do correto.
Fiz uma pequena correção para que o valor fosse o mais exato possível mudando os 21V

*/

#include <LiquidCrystal.h>    //biblioteca do display de LCD    

 LiquidCrystal lcd(7, 6, 5, 4, 3, 2);    // RS, E, D4,D5,D6,D7

float tensao;    //conversão da leitura da porta AD0 para tensão

void setup() {
   lcd.begin(16, 2);                                //setando o modo que o LCD opera -16 linhas, 2 colunas
   lcd.print("Max. 20 Volts");    //exibe esta mensagem na linha 0 coluna 0
}

void loop() {
    lcd.setCursor(0, 1);                                //Colocando o cursor na coluna 0 linha 1
    int sensorValue = analogRead(A0);     // le a entrada analógica do pino 0
    lcd.print(sensorValue);                            // exibindo o valor lido do sensor (0 a 1023)
    lcd.print(" ");                                        // limpando digitos antigos a direita

    lcd.setCursor(8, 1);                                //Colocando o cursor na coluna 0 linha 1
    tensao = sensorValue * 21.5 / 1023.0;            //convertendo da leitura de AD0 para tensão
    lcd.print(tensao);                                        // exibindo a tensão

  delay(100);                        // delay de 100 mili-segundos para o conversor AD
}


Funcionamento :

Se tiver dúvidas sobre o funcionamento veja os 2 projetos anteriores que foram base para este projeto :
• 1 - Analog Read Serial que lê o valor de uma porta analógica 08-Analog Read e SERIAL.html.
• 2 - Projeto LCD1602 que exibe mensagens no LCD 09-LCD 1602.html.