⚡ Arduino • Voltmetro • LCD I2C

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.

Ingresso0–30 V DC
MisuraA0
DisplayLCD 16×2 / I2C
In poche parole: Arduino non misura direttamente i 30 V. Un partitore formato da una resistenza da 100 kΩ e una da 10 kΩ riduce la tensione prima che raggiunga l’ingresso analogico A0. Lo sketch ricostruisce poi matematicamente il valore reale e lo mostra 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:

Vout = Vin × R2 / (R1 + R2)
Con R1 = 100 kΩ e R2 = 10 kΩ, la tensione presente su A0 è circa un undicesimo della tensione applicata all’ingresso.
Voltmetro digitale Arduino

Esempio di voltmetro digitale realizzato con Arduino.

Materiale necessario

🔌 Arduino Uno
🖥️ Display LCD 16×2 I2C
Ω Resistenza da 100 kΩ
Ω Resistenza da 10 kΩ
🔗 Cavetti di collegamento
🧩 Breadboard
📏 Multimetro per la calibrazione

🧰 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 consigliato

Link 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 Arduino

Link 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 voltmetro Arduino display I2C

Schema con display LCD 16×2 dotato di interfaccia I2C.

Schema con display LCD 16×2 tradizionale

Schema voltmetro Arduino LCD 16x2

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.

Vin = Vout / [R2 / (R1 + R2)]

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 0–30 V con LCD I2C
/*
  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.

  1. misura con un multimetro R1 e R2;
  2. sostituisci nello sketch i valori nominali con quelli realmente misurati;
  3. misura la tensione tra il pin 5 V e GND di Arduino;
  4. sostituisci VREF = 5.0 con il valore reale misurato;
  5. confronta la lettura del display con un multimetro affidabile.
Consiglio: per ottenere misure più coerenti utilizza resistenze con tolleranza dell’1% e inserisci nello sketch i loro valori effettivi.

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.

Attenzione: non applicare direttamente una tensione superiore al limite ammesso al pin A0. Il progetto è pensato per misurare bassa tensione continua fino a 30 V DC. Non utilizzarlo per misurare direttamente la rete elettrica a 230 V AC.

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.