Ω Arduino • Ohmmetro • LCD

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.

MisuraResistenza
IngressoA0
Riferimento1 kΩ
In poche parole: una resistenza nota e quella da misurare formano un partitore. Arduino legge la tensione sul nodo centrale e, conoscendo il valore della resistenza di riferimento, calcola il valore della resistenza incognita.
Ohmmetro Arduino con display LCD

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:

R2 = R1 × [(Vin / Vout) − 1]

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

🔌 Arduino Uno
🖥️ Display LCD 16×2 I2C oppure tradizionale
Ω 1 resistenza nota da 1 kΩ
Ω Resistenze da misurare
🔗 Cavetti di collegamento
🧩 Breadboard

🧰 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 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 ohmmetro Arduino 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 ohmmetro Arduino display LCD 16x2

Schema alternativo con display LCD collegato in parallelo.

Codice Arduino con display I2C

Ohmmetro Arduino – LCD 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.

Calibrazione consigliata: misura R1 con un multimetro e sostituisci 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.

Per ampliare il campo: un ohmmetro più evoluto può selezionare automaticamente più resistenze di riferimento, creando diverse portate come avviene nei multimetri.

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

Importante: non utilizzare questo circuito per misurare una resistenza mentre è collegata a un circuito alimentato. La tensione esterna altererebbe la misura e potrebbe danneggiare Arduino.

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.