Arduino UNO Q ordina resistori con OpenCV

Arduino UNO Q

Chi lavora con Arduino e con l’elettronica da banco conosce bene il problema: al termine di un progetto, sul tavolo rimangono resistenze sparse ovunque. Alcune finiscono sul pavimento, altre in una scatola “temporanea” che, di fatto, diventa definitiva. Dopo qualche mese, quel contenitore si trasforma in un miscuglio indistinto di componenti impossibili da identificare a colpo d’occhio. L’articolo pubblicato dal team Arduino e l’approfondimento tecnico su DigiKey mostrano una soluzione elegante e, come spesso accade nel mondo maker, volutamente “over-engineered”: utilizzare la nuova Arduino UNO Q per riconoscere automaticamente il valore delle resistenze analizzando le bande di colore tramite visione artificiale con OpenCV.

In questo articolo analizziamo nel dettaglio l’architettura del sistema, le scelte progettuali, le tecniche di elaborazione delle immagini utilizzate e le possibili estensioni future, con uno sguardo tecnico adatto al pubblico di Moreware.

Il problema reale: riconoscere le bande colore grazie ad Arduino UNO Q

Le resistenze assiali utilizzano un codice colore standardizzato per indicare:

  • valore nominale

  • moltiplicatore

  • tolleranza

Il metodo tradizionale per identificarle è:

  • leggere le bande a vista

  • consultare una tabella

  • oppure usare un multimetro

Strumenti come il calcolatore di codice colori di DigiKey
https://www.digikey.com/en/resources/conversion-calculators/conversion-calculator-resistor-color-code
rendono il processo più semplice, ma restano comunque lenti se si devono classificare centinaia di componenti.

Nei commenti al progetto originale emerge chiaramente un punto condiviso da molti maker: non è la difficoltà tecnica a bloccare la classificazione, ma il tempo richiesto. Se identificare una resistenza richiede 15–20 secondi, moltiplicando per centinaia di pezzi il lavoro diventa proibitivo.

Da qui nasce l’idea: automatizzare.

Perché Arduino UNO Q è la piattaforma giusta

La nuova Arduino UNO Q introduce un cambiamento sostanziale rispetto alla classica UNO:

  • Microcontrollore per I/O real-time

  • Microprocessore capace di eseguire Linux

  • Supporto USB-C con Power Delivery

  • Possibilità di collegare periferiche USB (camera, mouse, tastiera, monitor)

Questa architettura ibrida permette di:

  • eseguire Python

  • utilizzare librerie come OpenCV

  • elaborare immagini in tempo reale

  • interfacciarsi contemporaneamente con hardware esterno

In altre parole, si tratta di un sistema embedded Linux con capacità MCU integrate, il che lo rende ideale per applicazioni di visione artificiale leggera.

Dall’idea all’implementazione: AI o Computer Vision classica?

Inizialmente il progetto ha tentato l’approccio Machine Learning, utilizzando un esempio di object detection disponibile nell’App Lab di Arduino. Il sistema riconosceva correttamente persone e oggetti comuni, ma non era addestrato per riconoscere resistenze.

Addestrare un modello AI per riconoscere bande colore si è rivelato più complesso del previsto. Questo aspetto è stato evidenziato anche nei commenti: l’uso dell’AI per un problema strutturato e ad alto contrasto come quello delle bande resistive può essere eccessivo.

Le bande colore:

  • sono regolari

  • hanno posizione prevedibile

  • presentano alto contrasto

  • non richiedono riconoscimento semantico complesso

Quindi la scelta è ricaduta su OpenCV, libreria di computer vision classica molto più adatta a questo tipo di problema deterministico.

Architettura hardware del sistema

La configurazione utilizzata comprende:

  • Arduino UNO Q

  • Hub USB-C Power Delivery

  • Microscopio USB a basso ingrandimento

  • Mouse, tastiera e monitor (in fase di sviluppo)

Il passaggio dal semplice webcam a un microscopio USB è stato determinante. Il livello di dettaglio richiesto per distinguere correttamente le bande colore è elevato, soprattutto considerando:

  • resistenze di piccole dimensioni

  • riflessi dei LED integrati nel microscopio

  • variazioni di luminosità

Un aspetto interessante è l’uso di uno sfondo viola (post-it) per migliorare il contrasto e ridurre interferenze cromatiche. Questa è una soluzione semplice ma estremamente efficace in visione artificiale.

Pipeline di elaborazione immagini con OpenCV

La pipeline segue una struttura ben definita:

  1. Acquisizione frame dalla camera USB

  2. Pre-processing

  3. Creazione maschere

  4. Estrazione contorni

  5. Analisi colore

  6. Conversione in valore resistivo

Vediamo ogni fase.

Pre-processing

Le operazioni iniziali sono:

  • Gaussian Blur
    Riduce rumore e texture superficiali.

  • Conversione in scala di grigi
    Utile per isolare bande scure basate sulla luminosità.

  • Conversione RGB → HSV
    Fondamentale per separare colore e luminosità.

Lo spazio HSV è particolarmente adatto perché:

  • Hue = tonalità

  • Saturation = intensità colore

  • Value = luminosità

Questo permette di distinguere facilmente colori vividi da bianchi o argenti, che hanno saturazione molto bassa.

Creazione delle maschere

Vengono generate due maschere distinte:

  1. Maschera colori scuri (threshold su grayscale)

  2. Maschera colori chiari (range su HSV)

Il problema principale è stato isolare le bande bianche e argento, che non emergono bene con soglie basate solo sulla luminosità.

La soluzione è stata:

  • abbassare il valore massimo di saturazione

  • accettare l’intero range di Hue

  • filtrare tramite HSV

Le due maschere vengono poi combinate con un’operazione bitwise OR.

Estrazione e filtraggio dei contorni

Una volta ottenuta la maschera binaria, OpenCV individua i contorni.

Qui emergono due problemi pratici:

  1. Riflessi del LED che dividono una banda in due contorni

  2. Contorni indesiderati sui terminali metallici

Le soluzioni adottate:

  • Ordinamento contorni per area

  • Filtro per aspect ratio (rapporto larghezza/altezza)

  • Fusione di contorni vicini lungo l’asse X

  • Eliminazione dei contorni troppo larghi

Questa fase è puramente matematica, senza AI, e dimostra quanto la computer vision classica sia potente se il problema è ben definito.

Conversione delle bande in valore numerico

Una volta identificati:

  • numero di bande

  • posizione

  • valori HSV medi all’interno dei bounding box

Si applica la logica standard del codice colori:

Esempi verificati nel test:

  • Rosso – Viola – Giallo → 270 kΩ

  • Marrone – Nero – Blu → 10 MΩ

  • Marrone – Nero – Rosso → 1 kΩ

  • Giallo – Viola – Nero → 47 Ω

Il sistema ha dimostrato identificazione corretta e quasi istantanea, con frame rate sufficiente a riconoscere il componente prima che sia completamente inquadrato.

Prestazioni e considerazioni tecniche

Punti di forza:

  • Nessuna rete neurale

  • Nessun dataset di training

  • Latenza molto bassa

  • Alta ripetibilità

Limiti:

  • Dipendenza dall’illuminazione

  • Sensibilità ai riflessi

  • Necessità di calibrazione soglie

Un possibile miglioramento sarebbe l’introduzione di:

  • illuminazione diffusa

  • polarizzatore ottico

  • calibrazione automatica HSV

Estensioni future: automazione fisica

L’aspetto più interessante riguarda l’integrazione tra microprocessore Linux e microcontrollore.

Essendo presente una MCU integrata, si possono pilotare:

  • servo motori

  • attuatori lineari

  • sistemi di smistamento automatico

Si potrebbe quindi realizzare un vero classificatore automatico di resistenze, con contenitori multipli e deviazione meccanica controllata via GPIO.

Nei commenti al progetto originale emergono suggerimenti interessanti, tra cui:

  • estensione alla classificazione di viti per diametro e lunghezza

  • utilizzo di visione 2D per misure geometriche

  • integrazione con database componenti

Questi spunti dimostrano che il progetto non è solo una curiosità, ma una piattaforma didattica eccellente.

Repository e risorse

Il codice completo è disponibile su GitHub:

https://github.com/bytesizedengineering/automatic-component-analyzer

Questo rende il progetto replicabile e modificabile, favorendo sperimentazione e miglioramento collaborativo.

Conclusione

Il progetto di classificazione automatica delle resistenze con Arduino UNO Q rappresenta un perfetto esempio di:

  • approccio maker evoluto

  • uso consapevole della computer vision

  • scelta tecnica adeguata al problema

La decisione di abbandonare il Machine Learning in favore di OpenCV dimostra maturità progettuale. Non sempre l’AI è la soluzione migliore: quando il problema è strutturato e deterministico, la visione artificiale classica è più efficiente, più leggera e più controllabile.

Dal punto di vista educativo, questo progetto è straordinario perché combina:

  • elettronica

  • Linux embedded

  • Python

  • elaborazione immagini

  • progettazione hardware

E soprattutto affronta un problema reale e condiviso da moltissimi maker.

Se Arduino UNO Q continuerà a essere supportata con esempi di questo livello, potrebbe diventare una piattaforma di riferimento per applicazioni edge AI e computer vision embedded nel mondo maker e semi-professionale.

Iscriviti ai nostri gruppi Telegram

Link utili

Seguici per non perdere le prossime novità!

Simone Candido è un ragazzo appassionato del mondo tech nella sua totalità. Simone ama immedesimarsi in nuove esperienze, la sua filosofia si basa sulla irrefrenabile voglia di ampliare a 360° le sue conoscenze abbracciando tutti i campi del sapere, in quanto ritiene che il sapere umano sia il connubio perfetto tra cultura umanistica e scientifica.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.