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.