Come trasformare Arduino in un oscilloscopio

L’oscilloscopio è uno degli strumenti più importanti che si trovano sul banco di lavoro di qualsiasi ingegnere elettronico o produttore. Varie ragioni rendono l’oscilloscopio uno strumento indispensabile per qualsiasi tecnico. L’unico problema è che possono essere molto costosi. L’oscilloscopio realizzato con Arduino che illustriamo nel presente articolo è perfetto se hai bisogno di un oscilloscopio fino a 2 kHz, ma tutto ciò che hai è una scheda Arduino. Infatti, tutto quello di cui hai bisogno per realizzare uno strumento del genere è una scheda Arduino, di cavetti per la misurazione e di poche righe di codice.

L’oscilloscopio viene utilizzato principalmente per visualizzare la forma d’onda e determinare i livelli di tensione, la frequenza, il rumore e altri parametri dei segnali applicati al suo ingresso che potrebbero cambiare nel tempo. Un oscilloscopio si rivela utile, fra l’altro, anche per misurare in modo appropriato la tensione prodotta da un PWM, che oscilla costantemente fra Vcc e 0 (per cui non è misurabile usando un normale sketch di Arduino per la lettura di tensioni dall’ingresso analogico).

Gli oscilloscopi sono uno strumento essenziale per gli hobbisti e professionisti dell’elettronica per verificare che i loro progetti funzionino come previsto. Gli oscilloscopi basati su PC hanno il vantaggio, rispetto agli oscilloscopi stand-alone delle loro dimensioni compatte, del basso costo e della capacità di eseguire analisi offline. Qui descriviamo come è possibile realizzare il proprio oscilloscopio a un costo molto basso usando il PC e una scheda Arduino come hardware per l’acquisizione del segnale.

È possibile utilizzare questo oscilloscopio per acquisire segnali di frequenza fino a 2 kHz. La scheda Arduino è costituita dal microcontrollore AVR di Atmel, che può essere a 8, 16 o 32 bit in base al tipo di scheda. Per questo progetto è possibile utilizzare qualsiasi variante di Arduino come hardware. Il microcontrollore di Arduino ha un ADC integrato. Nel progetto utilizziamo il pin A0 (ovvero il primo pin di ingresso analogico) per catturare il segnale di ingresso, che deve essere compreso fra 0 e 5V.

Un oscilloscopio fai-da-te realizzato con Arduino.

La scheda Arduino, il cuore dell’oscilloscopio, legge i valori dal convertitore analogico-digitale (ADC) integrato e li invia al PC tramite la porta USB. Qui forniamo uno sketch Arduino che puoi compilare e caricare direttamente sulla tua scheda Arduino. È inoltre necessario, o meglio conveniente, installare un file eseguibile o un’applicazione nel PC Windows. Questa applicazione funziona come front-end per tracciare segnali di input come forme d’onda sullo schermo del tuo computer.

Ci sono dunque due parti per questo progetto: il convertitore di dati e il plotter. Gli oscilloscopi generalmente implicano la rappresentazione visiva di un segnale analogico applicato al suo canale di ingresso. Per raggiungere questo obiettivo, dobbiamo prima convertire il segnale da analogico a digitale e quindi tracciare i dati. Per la conversione da analogico a digitale, faremo leva sull’ADC (convertitore analogico-digitale) presente sul microcontrollore utilizzato da Arduino.

Innanzitutto, carica il codice dell’oscilloscopio su Arduino. Infatti, è necessario un codice per leggere il valore analogico dal pin di ingresso analogico A0, che fungerà da ingresso del segnale per il tuo oscilloscopio Arduino. Puoi realizzarlo facilmente usando la funzione analogRead (). Dopodiché devi inviare questo valore sul tuo computer usando la porta seriale. Ci sono molti modi per farlo. Nel seguente codice, il valore in questione viene inviato come due byte con un byte 0xff in mezzo:

In pratica, carica il seguente codice sul tuo Arduino:

Puoi scaricare il codice per Arduino da qui.

Questo è davvero tutto ciò che serve sul lato Arduino per realizzare un oscilloscopio Arduino. Ma per visualizzare i valori, hai bisogno di un po’ di codice anche sul tuo computer. Hai bisogno di qualcosa sul tuo computer per ricevere i valori che vengono inviati da Arduino e per visualizzarli correttamente. Il software gratuito Processing è un semplice ambiente di programmazione per farlo. Scarica quindi gratuitamente tale programma dal loro sito web https://processing.org/ e installalo sul tuo PC.

A questo punto, sei pronto per eseguire il codice di Processing. Copia ed esegui il seguente codice in Processing per ottenere una bella interfaccia per oscilloscopio sul tuo computer:

Puoi scaricare il codice completo da qui.

Il risultato finale: il tracciato sul nostro oscilloscopio Arduino.

Se non vuoi usare Processing, puoi utilizzare direttamente il Plotter Seriale di Arduino, selezionabile dal menù Strumenti. Esso riceve i dati da una porta seriale e traccia ogni numero che vede. Ciò significa che per creare un oscilloscopio è sufficiente scrivere un codice che stampi il valore di tensione da un ingresso analogico e il plotter di Arduino si prenderà cura di tutto il resto. È sufficiente invece usare solo le poche seguenti linee di codice, da copiare in Arduino, per visualizzare i valori analogici acquisiti:

Puoi scaricare il codice completo da qui.

Esempio di valori analogici di un PWM letti da Arduino e mostrati con il Plotter seriale.

Anche il software MATLAB può essere utilizzato per tracciare i segnali. Il software utilizzato nell’esempio qui sotto per interfacciare la scheda al PC è Matlab R2012a. In pratica, il segnale viene innanzitutto inviato alla scheda Arduino in cui il segnale analogico viene convertito in un segnale digitale dall’ADC, che viene quindi trasmesso in modo seriale al PC e letto dal software MATLAB tramite le porte COM.

Puoi scaricare il codice completo da qui.

Il codice per Matlab (in alto) ed i 4 plot ottenibili (in basso).

Ricorda che l’ingresso analogico di Arduino può accettare solo fino a 5V. Assicurati di non superare questo limite in quanto potresti danneggiare la tua scheda Arduino. Se è necessario misurare un segnale a tensione superiore, è possibile utilizzare un partitore di tensione, che si compone tipicamente di due resistenze collocate in un opportuno circuito: ad esempio, per dimezzare una tensione di 10V e avere max 5V all’ingresso di Arduino, si possono usare due resistenze da 10 kohm.

Quindi è consigliabile aggiungere un piccolo circuito di protezione per limitare la tensione di ingresso a 5V e bloccare la tensione negativa. Per proteggere il pin di ingresso è possibile usare un diodo a commutazione rapida a bassa potenza come l’1N4148. Collegate una resistenza da 10 kohm in serie con l’ingresso. Funzionerà come limitatore di corrente nel caso in cui l’input superi i 5V. Ulteriori partitori di tensione possono essere usati nel caso in cui sia necessario misurare tensioni superiori a 5V.

Il circuito di protezione all’ingresso di Arduino illustrato nel testo.

Vi è poi il problema della frequenza di misurazione. Ho scelto la velocità di trasmissione di 115200. Questo è il numero di bit al secondo. Per inviare un carattere tramite la porta seriale, solitamente sono necessari 10 bit (8 bit per il carattere oltre a un bit di inizio e un bit di stop). Quindi, mi dà una velocità di 11520 caratteri al secondo. I numeri da tracciare sono scritti nel testo. Quindi, il numero 800 viene inviato come “8”, quindi “0”, quindi “0”. Sono in tutto tre caratteri.

Semplifichiamo e diciamo che tutti i numeri sono compresi tra 100 e 999. Quindi, il numero massimo di misurazioni che questo oscilloscopio può eseguire al secondo è 11520 diviso per 3, che è 3840. Questa è la frequenza di campionamento. È possibile misurare solo le frequenze (presenti nel segnale) fino alla metà della frequenza di campionamento. La metà di 3840 è 1920. Ciò significa che è possibile misurare le frequenze fino a circa 1,9 kHz con questo semplice oscilloscopio Arduino.

La frequenza di campionamento di questa applicazione per PC è quindi limitata dalla velocità con cui i dati vengono inviati al PC. La velocità di trasmissione di 115000 fornisce un intervallo di tempo di circa 85 μs. È importante ottenere i segnali ADC molto prima di questo tempo per ottenere un tracciamento affidabile dei dati. Lo sketch legge il pin A0 della scheda e invia a UART a 115200 come baud rate. A questa velocità, i byte di input vengono spinti ad intervalli di tempo di circa 85μs.

Quindi qui l’ADC è configurato con linee aggiuntive di codice per ottenere campionamenti più veloci. Un altro problema con questo oscilloscopio è che per le misure che danno un numero inferiore a 100 o superiore a 999, si hanno meno o più di 3 caratteri da inviare. Ciò farà aumentare o diminuire la velocità di campionamento e rovinerà il segnale nel Plotter seriale. Puoi risolvere questo problema assicurandoti di inviare sempre 4 caratteri: ad es. “0013” invece di “13”, “0390” invece di “390”.

Un possibile circuito per testare l’oscilloscopio con un LDR.

A questo punto, non ti rimane che provare il tuo oscilloscopio. Collega due cavi jumper al tuo Arduino: uno alla terra e uno, con il segnale da mostrare sull’oscilloscopio, all’ingresso analogico A0. In pratica, possiamo usare una fotoresistenza o “Light Dependent Resistor” (LDR) in una semplice configurazione del partitore di tensione per generare il segnale da esaminare, in modo tale che la forma d’onda generata descriva il livello di tensione, in base all’intensità della luce (ad es. lampeggiante) presente attorno all’LDR.