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.
/*
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
}
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.