
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:
-
Acquisizione frame dalla camera USB
-
Pre-processing
-
Creazione maschere
-
Estrazione contorni
-
Analisi colore
-
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:
-
Maschera colori scuri (threshold su grayscale)
-
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:
-
Riflessi del LED che dividono una banda in due contorni
-
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