MEDIDOR DE TENSÃO DE PILHAS COM O ARDUINO!
Vídeo deste Projeto no nosso canal do YouTube:
O multímetro… Talvez um dos equipamentos que consideramos como um “must have” para qualquer entusiasta de eletrónica. Seja para deteção de curto circuitos, medição da intensidade da corrente num circuito, medir a resistência de um componente, testar semicondutores, e até, em alguns casos, medir a temperatura de algum objeto. O multímetro, na sua função de voltímetro, pode também ser bastante útil para sabermos o estado das pilhas que utilizamos em comandos de televisão, comandos de garagem, relógios, brinquedos, etc. Para quem (ainda) não tem um multímetro (ao que podem clicar aqui para consultarem a nossa gama de multímetros), vamos, neste projeto, desenvolver um pequeno voltímetro para testar pilhas até 12V, suficiente para 99,9% das pilhas do mercado.
- Material Necessário
Para este projeto, vamos precisar dos seguintes materiais:
| Imagem | Produto | Comprar |
|---|---|---|
![]() |
Arduino Nano V3 | |
![]() |
Breadboard 830 Pinos | |
![]() |
Display LCD 20×4 | |
![]() |
4 Resistências 1K | |
![]() |
1 Resistência 1,2K | |
![]() |
1 Resistência 2,2K | |
![]() |
Botão de Pressão | |
![]() |
Jumpers Macho-Fêmea | |
![]() |
Jumpers Macho-Macho |
- Montagem do Circuito
Seguindo o seguinte esquema, vamos conectar os botões de pressão em configuração pull-up resistor, e vamos ligar o LCD à comunicação I2C. Para a medição do valor da tensão das pilhas, iremos dividir em dois circuitos separados, para, não danificando o ADC da placa, conseguir efetuar medições de valores de tensão até 12V com precisão; assim:
-
- Circuito 1: Constituído por uma resistência de 1K, para pilhas com tensão máxima de 5V
- Circuito 2: Constituído por um divisor de tensão, para pilhas com tensão máxima compreendida entre 5V e 12V

Os nossos leitores mais atentos podem estar a pensar: “Porque não utilizar o circuito 2 para medir o valor da tensão em todas as pilhas?” A resposta a essa pergunta é, simplesmente, precisão!
A utilização de um divisor de tensão ajustado a valores de tensão mais elevados leva a um erro de medição maior em valores de tensão mais baixos e, tratando-se de valores onde 0,2V podem fazer a diferença na interpretação do estado da pilha, optamos por utilizar dois circuitos complementares.
- Código Arduino IDE
Com o circuito montado, vamos abrir o Arduino IDE e carregar para a nossa placa o seguinte programa:
/*Código para o Projeto: Voltímetro Testador de Pilhas
- Material necessário:
-> Placa Arduino
-> Breadboard
-> LCD I2C 20x4
-> 4 Botões de Pressão com 4 Resistências de 1K em configuração Pull-Up Resistor
-> Resistência de 1K
-> Resistência de 1.2K e 2.2K
-> Jumpers Macho-Fêmea
-> Jumpers Macho-Macho
Todo o material pode ser adquirido a partir do artigo do nosso blog deste projeto!
*****************************************************LIGAÇÕES******************************************************
-> Vamos utilizar a comunicação I2C entre o LCD e a placa Arduino.
-> Montamos os botões de pressão em configuração pull-up resistor, ligando-os ao Arduino de forma organizada, assim, do botão da esquerda para a
direita: ligamos aos pinos 4, 5 e 6.
-> Vamos ligar entre o terminal A3 e o GND uma resistência de 1K, e, utilizando um jumper macho-macho, ligamos ao barramento da entrada analógica
do Arduino, permitindo assim a medição do valor de tensão até 5V.
-> Para pilhas até 12V, vamos utilizar um divisor de tensão com as resistências de 2.2K e 1.2K. O valor de referência irá ligar ao pino A2 do Arduino.
Desse mesmo pino também será necessário ligar um jumper macho-macho.
*******************************************************************************************************************
Para mais informações sobre o projeto:
MEDIDOR DE TENSÃO DE PILHAS COM O ARDUINO!
Electrofun@2022 ---> www.electrofun.pt
*/
//Definição dos pinos
#define pinoPilhas69e12V A2 //Analógicos
#define pinoPilhas15Ve3V A3
#define pinoBotaoEsq 4 //Digitais
#define pinoBotaoMeio 5
#define pinoBotaoDir 6
//Incluir livraria do LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); //Declaração do objeto lcd
//Declaração de Variáveis
int leituraPinoPilhas15Ve3V, leituraPinoPilhas69e12V, leituraPinoBotaoEsq, leituraPinoBotaoMeio, leituraPinoBotaoDir;
int debouce = 200;
float offsetTensaoPinoPilhas15Ve3V = 0.20;
float tensaoPinoPilhas15Ve3V, tensaoPinoPilhas69e12V;
bool modoPilhas15Ve3V, modoPilhas69e12V;
void setup() {
//Serial.begin(9600);
pinMode(pinoPilhas69e12V, INPUT);
pinMode(pinoPilhas15Ve3V, INPUT);
pinMode(pinoBotaoEsq, INPUT);
pinMode(pinoBotaoMeio, INPUT);
pinMode(pinoBotaoDir, INPUT);
lcd.init();
lcd.backlight();
selecionarTipoPilha();
}
void loop() {
leituraPinoBotaoMeio = digitalRead(pinoBotaoMeio);
if (leituraPinoBotaoMeio) {
delay(debouce);
selecionarTipoPilha();
}
if (modoPilhas15Ve3V) {
leituraPinoPilhas15Ve3V = analogRead(pinoPilhas15Ve3V);
tensaoPinoPilhas15Ve3V = leituraPinoPilhas15Ve3V * (5.0 / 1023) - offsetTensaoPinoPilhas15Ve3V;
if (tensaoPinoPilhas15Ve3V < 0.5) {
tensaoPinoPilhas15Ve3V = 0.00;
}
lcd.setCursor(7, 0);
lcd.print(tensaoPinoPilhas15Ve3V);
lcd.print("V");
} else if (modoPilhas69e12V) {
leituraPinoPilhas69e12V = analogRead(pinoPilhas69e12V);
tensaoPinoPilhas69e12V = leituraPinoPilhas69e12V * (12.33 / 1023);
if (tensaoPinoPilhas69e12V < 6) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(3, 2);
lcd.print("UTILIZAR PILHA");
lcd.setCursor(8, 3);
lcd.print("<=5V");
} else {
lcd.setCursor(7, 0);
lcd.print(tensaoPinoPilhas69e12V);
lcd.print("V");
lcd.setCursor(3, 2);
lcd.print(" ");
lcd.setCursor(8, 3);
lcd.print(" ");
}
}
delay(300);
}
void selecionarTipoPilha() {
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Selecionar Pilha");
lcd.setCursor(1, 2);
lcd.print("<=5V"); lcd.setCursor(16, 2); lcd.print(">5V");
do {
leituraPinoBotaoEsq = digitalRead(pinoBotaoEsq);
leituraPinoBotaoDir = digitalRead(pinoBotaoDir);
}
while (leituraPinoBotaoEsq == 0 && leituraPinoBotaoDir == 0);
if (leituraPinoBotaoEsq == 1) {
delay(debouce);
modoPilhas15Ve3V = true;
modoPilhas69e12V = false;
} else if (leituraPinoBotaoDir == 1) {
delay(debouce);
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("ATENCAO!");
lcd.setCursor(1, 2);
lcd.print("TENSAO MAXIMA: 12V");
modoPilhas15Ve3V = false;
modoPilhas69e12V = true;
do {
leituraPinoBotaoMeio = digitalRead(pinoBotaoMeio);
} while (leituraPinoBotaoMeio == 0);
}
delay(debouce);
lcd.clear();
}
- Funcionamento do Programa
Uma vez carregado o programa, somos presentados com um menu para escolhermos qual o modo de medição a utilizar: com pilhas de tensão máxima inferior ou igual a 5V; ou pilhas com tensão máxima superior a 5V MAS SEMPRE INFERIOR A 12V. A MEDIÇÃO DE PILHAS DE VALOR SUPERIOR RESULTARÁ NA DESTRUIÇÃO DA PLACA ARDUINO!
Para selecionarmos, basta utilizar o botão da esquerda ou da direita, respetivamente. No caso de escolhermos o modo de medição para pilhas com tensão superior a 5V, somos presenteados com um aviso, ao qual precisamos de pressionar o botão central para confirmar.
Já no menu de medição, basta apenas colocar o terminal positivo da pilha junto do jumper ligado à entrada analógica pretendida, e o terminal negativo ao barramento negativo da breadboard ou Arduino.

Não se esqueçam de ver o nosso vídeo sobre este artigo no nosso canal do YouTube:
Para mais projetos, percorram o nosso blog, onde podem encontrar vários artigos interessantes relacionados com eletrónica, robótica e muito mais! Visitem também o nosso site, onde encontram tudo para eletrónica e robótica!







