Ohmmetro con Arduino: misurare resistenze con display LCD
Realizziamo un semplice misuratore di resistenze con Arduino Uno, una resistenza nota da 1 kΩ e un display LCD 16×2, sfruttando un partitore di tensione e l’ingresso analogico A0.
Ohmmetro Arduino con visualizzazione della resistenza sul display. L’immagine mantiene una larghezza massima di 335 px.
Come funziona la misura
Il circuito utilizza il principio del partitore di tensione. Una resistenza di valore noto, indicata come R1, viene collegata insieme alla resistenza incognita R2. Arduino misura la tensione del nodo intermedio tramite A0.
Conoscendo la tensione di alimentazione e R1 possiamo ricavare R2 con la relazione utilizzata dallo schema:
Nel progetto R1 vale nominalmente 1 kΩ. Per aumentare l’accuratezza conviene misurarla con un multimetro e inserire nello sketch il suo valore reale.
Materiale necessario
🧰 Kit Arduino consigliato
Un kit completo è utile per avere breadboard, cavetti, resistenze 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 I2C. L’immagine mantiene una larghezza massima di 759 px.
Schema con display LCD 16×2 tradizionale
Schema alternativo con display LCD collegato in parallelo.
Codice Arduino con display I2C
/*
OHMMETRO CON ARDUINO E DISPLAY LCD 16x2 I2C
Il circuito usa un partitore di tensione formato da:
- R1 = resistenza nota da 1 kΩ
- R2 = resistenza da misurare
Il nodo centrale del partitore è collegato ad A0.
Per ottenere misure migliori:
- inserisci il valore REALE della resistenza R1;
- misura la tensione reale del pin 5 V di Arduino
e riportala nella costante VREF.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Configurazione del display usata nel progetto
LiquidCrystal_I2C lcd(
0x27,
2, 1, 0,
4, 5, 6, 7,
3, POSITIVE
);
const int ANALOG_PIN = A0;
// Resistenza nota del partitore
const float R1 = 1000.0; // 1 kΩ
// Tensione reale di riferimento.
// Se possibile misurala con un multimetro.
const float VREF = 5.0;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("OHM METER");
}
void loop() {
// Legge il convertitore ADC a 10 bit
int raw = analogRead(ANALOG_PIN);
// Evita divisioni non valide ai limiti della scala
if (raw <= 0 || raw >= 1023) {
lcd.setCursor(0, 1);
lcd.print("Fuori scala ");
delay(500);
return;
}
// Converte il valore ADC nella tensione misurata
float vout = raw * (VREF / 1023.0);
// Formula del partitore usato nello schema:
// R2 = R1 * [(Vin / Vout) - 1]
float R2 = R1 * ((VREF / vout) - 1.0);
// Monitor Seriale
Serial.print("Vout: ");
Serial.print(vout, 3);
Serial.print(" V - R2: ");
Serial.print(R2, 1);
Serial.println(" ohm");
// Display LCD
lcd.setCursor(0, 0);
lcd.print("OHM METER ");
lcd.setCursor(0, 1);
// Visualizzazione più leggibile per valori sopra 1000 Ω
if (R2 >= 1000.0) {
lcd.print("R: ");
lcd.print(R2 / 1000.0, 2);
lcd.print(" kOhm ");
} else {
lcd.print("R: ");
lcd.print(R2, 0);
lcd.print(" Ohm ");
}
delay(500);
}
Come funziona lo sketch
1. Lettura di A0
analogRead(A0) restituisce un valore compreso tra 0 e 1023, proporzionale alla tensione presente sul nodo del partitore.
2. Conversione in tensione
Il valore ADC viene convertito in volt usando VREF. Per una misura più precisa puoi sostituire 5.0 con la tensione realmente misurata tra 5 V e GND.
3. Calcolo della resistenza
Il programma applica la formula del partitore per ricavare R2 a partire da R1 e dalla tensione misurata.
4. Visualizzazione
Per rendere la lettura più comoda, i valori inferiori a 1000 Ω vengono mostrati in ohm, mentre quelli superiori vengono convertiti automaticamente in kΩ.
Perché il valore della resistenza nota è importante
Se R1 è nominalmente da 1 kΩ ma in realtà misura, per esempio, 987 Ω, usare nel programma il valore 1000 Ω introduce direttamente un errore nel risultato.
1000.0 con il valore effettivo. Misura anche la tensione del pin 5 V e aggiorna VREF.Campo di misura e precisione
Un singolo valore di resistenza di riferimento non è ideale per misurare con la stessa precisione qualsiasi resistenza. Con R1 = 1 kΩ il circuito lavora meglio con valori della stessa grandezza.
Quando R2 è molto più piccola o molto più grande di R1, la tensione sul nodo si avvicina a uno degli estremi della scala ADC e la risoluzione utile diminuisce.
Libreria LCD I2C
Per la versione con interfaccia I2C è disponibile la libreria newliquidcrystal_1.3.4.
⬇️ Scarica newliquidcrystal_1.3.4.zip
Versione con LCD 16×2 tradizionale
/*
OHMMETRO CON ARDUINO E DISPLAY LCD 16x2 TRADIZIONALE
LCD:
RS -> D12
E -> D11
D4 -> D5
D5 -> D4
D6 -> D3
D7 -> D2
Partitore:
R1 = 1 kΩ nota
R2 = resistenza da misurare
Nodo centrale -> A0
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int ANALOG_PIN = A0;
const float R1 = 1000.0;
const float VREF = 5.0;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
lcd.print("OHM METER");
}
void loop() {
int raw = analogRead(ANALOG_PIN);
if (raw <= 0 || raw >= 1023) {
lcd.setCursor(0, 1);
lcd.print("Fuori scala ");
delay(500);
return;
}
float vout = raw * (VREF / 1023.0);
float R2 = R1 * ((VREF / vout) - 1.0);
Serial.print("R2: ");
Serial.print(R2, 1);
Serial.println(" ohm");
lcd.setCursor(0, 0);
lcd.print("OHM METER ");
lcd.setCursor(0, 1);
if (R2 >= 1000.0) {
lcd.print("R: ");
lcd.print(R2 / 1000.0, 2);
lcd.print(" kOhm ");
} else {
lcd.print("R: ");
lcd.print(R2, 0);
lcd.print(" Ohm ");
}
delay(500);
}
Scarica gli sketch
⬇️ Sketch display I2C ⬇️ Sketch display 16×2
Attenzione: misura solo componenti non alimentati
Debug rapido
- controlla che il nodo del partitore sia collegato ad A0;
- verifica il valore reale della resistenza da 1 kΩ;
- misura la tensione reale del pin 5 V;
- se il display I2C resta vuoto, verifica indirizzo e libreria;
- se compare “Fuori scala”, controlla collegamenti e valore della resistenza;
- confronta il risultato con un multimetro per calibrare il circuito.
Varianti del progetto
- aggiungere più portate con diverse resistenze di riferimento;
- selezionare automaticamente la portata tramite relè o multiplexer analogici;
- calcolare e mostrare direttamente Ω, kΩ e MΩ;
- aggiungere una media di più letture ADC;
- utilizzare un riferimento di tensione più preciso;
- mostrare anche la tensione del partitore sul display.
Cosa devi ricordare
- La resistenza da misurare viene ricavata tramite un partitore di tensione.
- Arduino legge il nodo del partitore su A0.
- La resistenza nota del progetto è da 1 kΩ.
- Il valore reale di R1 e VREF influenzano la precisione.
- Sono disponibili sia LCD I2C sia LCD 16×2 tradizionale.
- Non misurare componenti inseriti in circuiti alimentati.
Domande frequenti
Posso usare una resistenza nota diversa da 1 kΩ?
Sì. Devi inserire nello sketch il valore effettivo della nuova R1. La scelta di R1 determina anche il campo in cui la misura è più sensibile.
Perché il valore non coincide perfettamente con il multimetro?
Le cause principali sono tolleranza della resistenza nota, tensione VREF non esattamente pari a 5 V, risoluzione dell’ADC e contatti della breadboard.
Posso misurare resistenze molto grandi?
È possibile entro certi limiti, ma con una sola R1 da 1 kΩ la precisione peggiora molto per valori lontani dalla resistenza di riferimento. Conviene utilizzare più portate.
Posso misurare una resistenza mentre il circuito è acceso?
No. Questa configurazione deve essere usata su una resistenza isolata da alimentazioni esterne.

