Voltmetro digitale con Arduino da 0 a 30 V e display LCD
Costruiamo un voltmetro DC con Arduino Uno, partitore resistivo e display LCD 16×2, capace di misurare tensioni fino a 30 V e mostrarle direttamente sul display.
Perché serve un partitore di tensione
Gli ingressi analogici di Arduino Uno misurano una tensione rispetto a GND e il convertitore ADC trasforma questa tensione in un valore digitale. Per misurare una tensione superiore al campo ammesso dall’ingresso analogico dobbiamo prima ridurla.
Il partitore resistivo permette di ottenere una frazione della tensione in ingresso:
Con R1 = 100 kΩ e R2 = 10 kΩ, la tensione presente su A0 è circa un undicesimo della tensione applicata all’ingresso.
Esempio di voltmetro digitale realizzato con Arduino.
Materiale necessario
🧰 Kit Arduino consigliato
Un kit completo è utile per avere breadboard, cavetti, resistenze, display e molti componenti di base per sperimentare con Arduino.
👉 Guarda il kit Arduino consigliatoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.
👉 Scopri i miei libri su ArduinoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema con display LCD I2C
Schema con display LCD 16×2 dotato di interfaccia I2C.
Schema con display LCD 16×2 tradizionale
Schema alternativo con display LCD 16×2 collegato senza interfaccia I2C.
Simulazione Tinkercad
▶️ Apri la simulazione Tinkercad
Come calcola la tensione Arduino
Il convertitore analogico-digitale di Arduino Uno restituisce un valore compreso tra 0 e 1023. Il programma converte questo valore nella tensione realmente presente sul pin A0 e poi applica al contrario il rapporto del partitore.
Con resistenze nominali da 100 kΩ e 10 kΩ, una tensione di 30 V all’ingresso del partitore produce circa 2,73 V sul pin A0.
Codice Arduino commentato
/*
VOLTMETRO DC CON ARDUINO DA 0 A 30 V
Display LCD 16x2 I2C
Partitore:
R1 = 100 kΩ
R2 = 10 kΩ
Il nodo centrale del partitore va collegato ad A0.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Configurazione del display I2C usata nel progetto
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
const int analogInput = A0;
// Inserisci qui i valori REALI misurati delle resistenze
float R1 = 100000.0; // 100 kΩ
float R2 = 10000.0; // 10 kΩ
// Inserisci qui la tensione reale misurata tra 5V e GND di Arduino
float VREF = 5.0;
void setup() {
pinMode(analogInput, INPUT);
lcd.begin(16, 2);
lcd.print("VOLTMETRO DC");
Serial.begin(9600);
}
void loop() {
// Legge il convertitore ADC a 10 bit: 0...1023
int value = analogRead(analogInput);
// Converte il valore ADC nella tensione presente su A0
float vout = (value * VREF) / 1023.0;
// Ricostruisce la tensione applicata all'ingresso del partitore
float vin = vout / (R2 / (R1 + R2));
// Elimina piccole letture residue vicino allo zero
if (vin < 0.09) {
vin = 0.0;
}
lcd.setCursor(0, 1);
lcd.print("INPUT V= ");
lcd.print(vin, 2);
lcd.print(" ");
Serial.print("Tensione: ");
Serial.print(vin, 2);
Serial.println(" V");
delay(500);
}
Come funziona lo sketch
1. Lettura analogica
analogRead(A0) restituisce il valore digitale generato dall’ADC a partire dalla tensione presente sul nodo centrale del partitore.
2. Conversione in volt
Il valore ADC viene moltiplicato per la tensione di riferimento reale di Arduino e diviso per 1023.
3. Correzione del partitore
La formula usa R1 e R2 per ricostruire la tensione presente prima del partitore.
4. Visualizzazione
Il risultato viene mostrato sulla seconda riga del display LCD e contemporaneamente inviato al Monitor Seriale.
Calibrare il voltmetro
La precisione dipende soprattutto da tre fattori: valore reale delle resistenze, tensione di riferimento utilizzata dal convertitore ADC e tolleranza complessiva del circuito.
- misura con un multimetro R1 e R2;
- sostituisci nello sketch i valori nominali con quelli realmente misurati;
- misura la tensione tra il pin 5 V e GND di Arduino;
- sostituisci
VREF = 5.0con il valore reale misurato; - confronta la lettura del display con un multimetro affidabile.
Perché 30 V è una soglia prudente
Con il rapporto 100 kΩ / 10 kΩ il partitore riduce fortemente la tensione. Il circuito viene però proposto per misure fino a 30 V DC, lasciando un margine utile rispetto al limite dell’ingresso analogico e alle tolleranze dei componenti.
Libreria LCD
Per lo sketch I2C è disponibile la libreria newliquidcrystal_1.3.4 utilizzata con la configurazione del display presente nel codice.
⬇️ Scarica newliquidcrystal_1.3.4.zip
Scarica lo sketch
⬇️ Scarica arduino_voltometro_dc_0-30v.ino
Se il valore non coincide con il multimetro
- misura il valore reale di R1 e R2;
- misura la tensione reale del pin 5 V di Arduino;
- controlla la massa comune tra circuito misurato e Arduino;
- verifica che il nodo del partitore sia collegato correttamente ad A0;
- controlla che il display I2C utilizzi l’indirizzo previsto dallo sketch;
- utilizza resistenze a bassa tolleranza.
Varianti del progetto
- aggiungere una media di più letture per rendere il valore più stabile;
- visualizzare tensione minima e massima;
- aggiungere un allarme quando viene superata una soglia;
- registrare le misure su scheda SD;
- aggiungere un display OLED;
- misurare anche corrente e potenza con un sensore dedicato;
- utilizzare un riferimento di tensione più preciso per migliorare l’accuratezza.
Cosa devi ricordare
- Arduino misura la tensione sul pin A0.
- R1 = 100 kΩ e R2 = 10 kΩ formano il partitore.
- Il partitore riduce la tensione prima che raggiunga Arduino.
- Il programma ricostruisce matematicamente la tensione in ingresso.
- La calibrazione dei valori reali di resistenze e VREF migliora la precisione.
- Il progetto è destinato a tensioni continue fino a 30 V.
Domande frequenti
Perché Arduino non può misurare direttamente 30 V?
Perché l’ingresso analogico deve rimanere entro il campo di tensione ammesso dalla scheda. Il partitore riduce la tensione prima di inviarla ad A0.
Perché devo misurare le resistenze con il multimetro?
Il loro valore reale può differire da quello nominale. Inserire i valori misurati nello sketch riduce l’errore del calcolo del partitore.
Perché devo misurare anche il pin 5 V?
Perché il calcolo dello sketch usa quella tensione come riferimento. Se non è esattamente 5,00 V, correggere VREF può migliorare il risultato.
Posso misurare 230 V AC?
No. Questo circuito non è progettato né isolato per la tensione di rete. Va utilizzato soltanto nel campo di bassa tensione continua previsto.

