Grazie ad Arduino ed alle sue estensioni le applicazioni elettroniche più evolute sono sempre più alla portata di tutti. Con questo articolo vedremo come acquisire immagini da una telecamera analogica tramite Arduino aprendo la strada ad innumerevoli prospettive.
Acquisire una immagine da un flusso di dati analogico è il primo passo per realizzare un sistema in grado di interagire con la realtà che ci circonda. Tale obbiettivo è molto ambizioso poichè richiede solitamente hardware e software altamente specializzati in grado di effettuare complesse operazioni molto rapidamente. Grazie alla shield per Arduino (PCB da collegare ad Arduino) Video Experimenter, mostrata in figura sotto, possiamo però usare Arduino per compiere questo piccolo miracolo.
Vediamo subito quali sono i principali problemi per questo tipo di operazione:
- limiti di memoria di Arduino, poichè il processing in tempo reale di un flusso di dati richiede una quantità di memoria decisamente superiore a quella offerta dal buon Arduino
- velocità del ATmega usato da Arduino, poichè quando si tratta di fare processing di immagini servono calcolatori potenti, se le immagini arrivano con un flusso cotinuo di dati analogico allora servono ancora più risorse di calcolo, quindi si deve sacrificare la qualità delle immagini per far tutto con Arduino
Da cui seguono i seguenti limiti nel risultato finale:
- le immagini acquisite avranno risoluzione limitata e saranno in bianco e nero
- la profondità di colore, cioè il numero di bit disponibili per ogni pixel (punto) della matrice che forma l'immagine acquisita è limitato, poichè più bit vogliamo più tempo richiederà la procedura di acquisizione dati e più il soggetto dovrà stare fermo per acquisire una immagine accettabile.
Alla fine dell'articolo si potrà scaricare il codice per acquisire immagini con 3 bit di profondità (8 livelli, cioè 2 elevato 3) ed il codice LabVIEW per la gestione lato computer.
In pratica vogliamo acquisire un livello dell'immagine per volta, sempre per i limiti di memoria imposti da Arduino, e mandare un livello per volta appena acquisito al computer che sovrapponendo i vari livelli ricostruirà l'immagine desiderata. Quindi sarà necessario settare opportunamento i vari livelli per l'acquisizione dell'immagine in automatico. Il programma per Arduino aspetterà il segnale per iniziare l'acquisizione, ricevuto il segnale salverà temporaneamente l'immagine per poi inviarla al computer ripetendo l'operazione per i vari livelli. Il computer aspetta di ricevere i vari livelli per ricostruire l'immagine. Il risultato finale è mostrato nelle figure sottostanti
come si può notare la qualità non è neppure comparabile a quella ottenibile con una fotocamera digitale o con un cellulare di ultima generazione ma la differenza hardware in questo contesto si fa sentire inevitabilmente.
Passiamo quindi alla lista della spesa...
- Arduino
- il modulo Video Experimenter, che con molto tempo a disposizione potremmo anche realizzare, solo che il livello di complessità è piuttosto elevato
- delle resistenze con tolleranza 1% (marrone), il valore di resistenza non conta, 82k Ohm va bene, ciò che conta è la tolleranza poichè saranno usate in un convertitore DAC con rete a scala ed abbiamo bisogno di una buona precisione
- un potenziometro
In figura sottostante è riportato lo schematico della rete a scala per il convertitore DAC da collegare ad Arduino per settare i livelli per l'acquisizione dell'immagine.
Il codice per Arduino e LabVIEW è scaricabile.
Con l'attuale versione del codice viene acquisito un livello dell'immagine per secondo, quindi per ogni immagine sevono 8 secondi, ciò è dovuto al modo di trasmettere i dati sulla connessione seriale, infatti al momento viene trasmesso un bit per volta invece di sfruttare gli 8 bit disponibili per ogni pacchetto.
In conclusione non è la soluzione definitiva per acquisire immagini tramite Arduino ma sicuramente un ottimo punto di partenza per chi volesse lanciarsi in questa attività. Il codice e lo schema proposto hanno ampi margini di miglioramento ma sono una base solida da cui partire. Le possibili estensione sono molteplici, filtrare le immagini, riconoscere oggetti, salvare direttamente i dati su SD o creare un sistema di tracking automatico degli oggetti.
La scheda Arduino disponibile da Farnell


Sembra ormai Arduino sia diventata la droga preferità di chiunque ci capisca un po di elettronica, dall’hobbista al professionista, dall’architetto al meccanico.
E questa probabilmente è la sua forza. Inoltre vorrei sottolineare che piu viene copiato e piu si rafforza (non credo questo concetto sia ben chiaro alle case costruttrici di microcontrollori, diverse da Atmel ovviamente)
Si trova ormai praticamente di tutto con Arduino anche se a livello professionale i progetti lasciano un pò a desiderare, non è questo il punto! Il punto è che si trova di tutto e questo tutto può andar bene all’hobbista ed essere un ottimo punto di partenza per il professionista. E questo è sicuramente un bene 🙂
Hola! Carlos,
benvenuto sull’Elettronica Open Source.
Complimenti per l’idea che hai avuto di applicazione per Arduino ed in generale per il tuo blog.
P.S.
Citiamo sempre gli autori dei progetti che presentiamo, infatti proprio all’inizio dell’articolo 🙂 abbiamo messo il link al tuo blog, sulla frase:
“Acquisire una immagine da un flusso di dati analogico”
Ciao Carlos,
ti ringrazio per la partecipazione e per gli aggiornamenti
relativi al tuo progetto.
Complimenti per il tuo blog! 🙂
Solitamente mettiamo il link alle fonti all’inizio del blog,
come in questo caso sulla frase:
“Acquisire una immagine da un flusso di dati analogico”
Cordiali saluti,
Berni
———————— ENGLISH VERSION ————————
Hi Carlos,
thank you very much for your participation and for the updates
about your project.
Congratulations for you blog! 🙂
We usually put the link to the original project at the beginning
of the blog, like in this case on the sentence:
“Acquisire una immagine da un flusso di dati analogico”
Best regards,
Berni