🔢 Arduino • KY-032 • LCD I2C

Contatore di oggetti con Arduino e sensore ostacoli KY-032

Realizziamo un contatore automatico che rileva il passaggio degli oggetti con il sensore infrarosso KY-032 e mostra il numero sul Monitor Seriale o su un display LCD 16×2 I2C.

DifficoltàPrincipiante / Intermedia
SensoreKY-032
IngressoD8
In poche parole: il KY-032 rileva la presenza di un ostacolo tramite luce infrarossa riflessa. Arduino controlla l’uscita digitale del modulo e incrementa il contatore una sola volta quando rileva un nuovo passaggio.

Come funziona il contatore

Il modulo KY-032 integra un LED trasmettitore a infrarossi e un ricevitore. La radiazione IR emessa viene riflessa da un oggetto posto davanti al sensore e raggiunge il ricevitore, permettendo al modulo di cambiare lo stato della propria uscita digitale.

Il sensore dispone di regolazioni che permettono di adattare il rilevamento alla distanza e alle condizioni di utilizzo. La portata effettiva dipende dalla regolazione, dalla superficie dell’oggetto, dal colore, dalla luce ambientale e dall’orientamento del modulo.

Arduino contatore di oggetti

Esempio di contatore di oggetti realizzato con Arduino.

Il modulo KY-032

Il KY-032 fornisce un’uscita digitale che può essere letta direttamente da Arduino. Nella configurazione utilizzata qui, l’uscita è normalmente HIGH quando non viene rilevato un ostacolo e passa a LOW quando il sensore rileva un oggetto.

Modulo sensore ostacoli infrarosso KY-032

Modulo KY-032 con trasmettitore e ricevitore infrarossi e regolazione della sensibilità.

Alimentazione: per il modulo utilizzato in questo progetto viene indicata un’alimentazione a 3,3 V. Prima di collegare un KY-032 diverso, controlla comunque le indicazioni riportate sul tuo modulo.

Materiale necessario

🔌 Arduino Uno
📡 Modulo avoid KY-032
🖥️ Display LCD 16×2 I2C
🔗 Cavetti jumper
🧩 Breadboard

🧰 Kit Arduino consigliato

Un kit completo è utile per avere a disposizione breadboard, cavetti, resistenze, sensori e molti dei componenti utilizzati nei progetti 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?

Nei miei libri dedicati ad Arduino trovi spiegazioni progressive, schemi e progetti pratici pensati anche 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.

Simulazione del circuito

Puoi utilizzare anche la simulazione Tinkercad per osservare il comportamento del contatore e verificare la logica prima del montaggio.

▶️ Apri la simulazione Tinkercad

Schema con display LCD I2C

Schema Arduino contatore oggetti KY-032 con display I2C

Schema del contatore con modulo KY-032 e display LCD I2C.

Schema con display LCD 16×2

Simulazione Arduino contatore oggetti con display LCD 16x2

Configurazione del contatore con display LCD 16×2.

Collegamenti principali

ComponenteArduinoFunzione
KY-032 OUTD8Rilevamento ostacolo
KY-032 alimentazione3,3 V / GNDAlimentazione modulo
LCD I2C SDASDADati I2C
LCD I2C SCLSCLClock I2C
LCD5 V / GNDAlimentazione display

Perché non basta contare ogni lettura?

Se Arduino incrementasse il contatore durante tutto il tempo in cui l’oggetto rimane davanti al sensore, lo stesso oggetto verrebbe contato centinaia o migliaia di volte. Dobbiamo invece riconoscere il cambiamento di stato: un nuovo oggetto deve produrre un solo incremento.

Concetto chiave: confrontiamo lo stato attuale del sensore con quello precedente. Il contatore aumenta soltanto quando viene riconosciuto l’inizio di un nuovo rilevamento.

Libreria per il display I2C

Per il display è necessaria una libreria compatibile con il modulo I2C utilizzato. Il file disponibile con il progetto può essere importato dall’Arduino IDE tramite la funzione per aggiungere una libreria da file ZIP.

⬇️ Scarica NewLiquidCrystal 1.3.4

Codice Arduino commentato

Contatore KY-032 + LCD I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Configurazione del display I2C
LiquidCrystal_I2C lcd(
  0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE
);

// Uscita digitale del sensore KY-032
const int sensorePin = 8;

// Stato attuale e precedente del sensore
int statoSensore = HIGH;
int statoPrecedente = HIGH;

// Numero di oggetti rilevati
unsigned long conteggio = 0;

void setup() {

  // Inizializza LCD 16x2
  lcd.begin(16, 2);

  // Avvia il Monitor Seriale
  Serial.begin(9600);

  // Imposta D8 come ingresso
  pinMode(sensorePin, INPUT);

  // Legge lo stato iniziale
  statoSensore = digitalRead(sensorePin);
  statoPrecedente = statoSensore;

  lcd.setCursor(0, 0);
  lcd.print("Num. Oggetti:");

  lcd.setCursor(0, 1);
  lcd.print(conteggio);
}

void loop() {

  // Legge continuamente il KY-032
  statoSensore = digitalRead(sensorePin);

  // Il KY-032 utilizzato è active LOW:
  // LOW = ostacolo rilevato.
  // Incrementiamo soltanto nel passaggio HIGH -> LOW.
  if (statoSensore == LOW && statoPrecedente == HIGH) {

    conteggio++;

    Serial.println(conteggio);

    // Pulisce la seconda riga per evitare
    // residui quando cambia il numero di cifre
    lcd.setCursor(0, 1);
    lcd.print("                ");

    lcd.setCursor(0, 1);
    lcd.print(conteggio);

    // Breve filtro contro commutazioni troppo ravvicinate
    delay(100);
  }

  // Memorizza lo stato per il ciclo successivo
  statoPrecedente = statoSensore;
}

Come funziona il codice

1. Lettura del sensore

digitalRead(sensorePin) legge l’uscita digitale del KY-032 collegata al pin D8.

2. Rilevamento del nuovo oggetto

Il controllo statoSensore == LOW && statoPrecedente == HIGH riconosce il momento in cui il sensore passa dalla condizione libera alla presenza di un ostacolo.

3. Incremento del contatore

La variabile conteggio viene aumentata di uno per ogni nuovo passaggio e il valore viene inviato sia al Monitor Seriale sia al display LCD.

4. Memoria dello stato precedente

Alla fine di ogni ciclo Arduino salva la lettura corrente in statoPrecedente. In questo modo può distinguere un nuovo oggetto da uno che si trova ancora davanti al sensore.

Perché questa versione è più robusta: la lettura viene effettuata prima del controllo e il fronte considerato è coerente con un sensore active LOW: HIGH → LOW quando compare l’ostacolo.

Immagine dello sketch

Sketch Arduino sensore KY-032 contatore oggetti

Esempio del codice per il contatore di oggetti.

Regolare correttamente il KY-032

Prima di usare il contatore in modo stabile, posiziona il sensore alla distanza prevista e regola gradualmente i potenziometri. L’obiettivo è ottenere una commutazione netta quando passa l’oggetto, senza falsi rilevamenti quando il percorso è libero.

  • prova con l’oggetto reale che dovrà essere contato;
  • mantieni il sensore fermo e ben orientato;
  • evita, quando possibile, luce infrarossa intensa direttamente sul ricevitore;
  • controlla il LED di stato del modulo durante la regolazione;
  • verifica il risultato anche dal Monitor Seriale.

Limiti del sistema

Un sensore riflettente come il KY-032 non crea una vera barriera tra trasmettitore e ricevitore posti sui lati opposti. Il rilevamento dipende dalla quantità di infrarosso che l’oggetto riesce a riflettere. Superfici molto scure, inclinate, lucide o poste troppo lontano possono quindi essere rilevate in modo diverso.

Per conteggi molto veloci: il delay(100) limita volutamente eventi ravvicinati. Se gli oggetti passano rapidamente, bisogna ridurre o eliminare il delay e utilizzare un filtro temporale non bloccante con millis().

Scarica lo sketch

⬇️ Scarica lo sketch Arduino

Debug rapido

  • controlla che OUT del KY-032 sia collegato a D8;
  • verifica se il tuo modulo è active LOW oppure active HIGH;
  • regola la sensibilità prima di modificare il codice;
  • usa il Monitor Seriale per verificare il conteggio;
  • se l’LCD resta vuoto, controlla indirizzo I2C, SDA, SCL e contrasto;
  • se lo stesso oggetto viene contato più volte, aumenta il filtraggio o migliora il posizionamento del sensore;
  • se alcuni oggetti non vengono rilevati, riduci la distanza e regola nuovamente il modulo.

Varianti del progetto

  • aggiungere un pulsante per azzerare il conteggio;
  • salvare il totale nella EEPROM;
  • aggiungere un buzzer a ogni passaggio;
  • attivare un relè al raggiungimento di una quantità prestabilita;
  • mostrare conteggio totale e velocità di passaggio;
  • usare due sensori per determinare la direzione;
  • inviare il conteggio via Wi-Fi con ESP32.

Cosa devi ricordare

  • Il KY-032 utilizza infrarossi riflessi per rilevare un ostacolo.
  • L’uscita del sensore è collegata a D8.
  • Il contatore deve reagire al cambio di stato, non alla semplice presenza dell’oggetto.
  • Il valore può essere visualizzato sul Monitor Seriale e su LCD I2C.
  • La regolazione del sensore è fondamentale per evitare conteggi errati.

Domande frequenti

Perché il contatore aumenta più volte con un solo oggetto?

Il segnale può commutare più volte oppure l’oggetto può muoversi nella zona limite di rilevamento. Migliora la regolazione e il posizionamento e, se necessario, aggiungi un filtro temporale.

Perché alcuni oggetti scuri non vengono rilevati bene?

Il KY-032 lavora con luce infrarossa riflessa. Materiali e colori diversi riflettono quantità differenti di IR, quindi la distanza utile può cambiare.

Posso contare oggetti senza display?

Sì. Il display non è indispensabile: puoi visualizzare il conteggio esclusivamente sul Monitor Seriale.

Posso sapere anche in quale direzione passa l’oggetto?

Sì, usando due sensori distanziati e controllando quale dei due viene attivato per primo.