- Come funziona
- Componenti richiesti
- Schematico
- Codice Osclloscopio Arduino
- Script Python (plotter)
- Codice Arduino
- Oscilloscopio Arduino in azione
L'oscilloscopio è uno degli strumenti più importanti che troverai sul banco di lavoro di qualsiasi ingegnere o produttore elettronico. Viene utilizzato principalmente per visualizzare la forma d'onda e determinare i livelli di tensione, frequenza, rumore e altri parametri dei segnali applicati al suo ingresso che potrebbero cambiare nel tempo. Viene anche utilizzato dagli sviluppatori di software integrato per il debug del codice e dai tecnici per la risoluzione dei problemi dei dispositivi elettronici durante la riparazione. Questi motivi rendono l'oscilloscopio uno strumento indispensabile per qualsiasi ingegnere. L'unico problema è che possono essere molto costosi, gli oscilloscopi che eseguono le funzioni più elementari con la minima precisione possono costare dai 45 ai 100 dollari, mentre i più avanzati ed efficienti costano oltre 150 dollari. Oggi dimostrerò come utilizzare Arduinoe un software, che sarà sviluppato con il mio linguaggio di programmazione preferito Python, per costruire un oscilloscopio Arduino a 4 canali a basso costo in grado di eseguire i compiti per i quali sono utilizzati alcuni degli oscilloscopi economici come la visualizzazione delle forme d'onda e la determinazione dei livelli di tensione per i segnali.
Come funziona
Ci sono due parti per questo progetto;
- Il convertitore di dati
- Il plotter
Gli oscilloscopi generalmente comportano la rappresentazione visiva di un segnale analogico applicato al suo canale di ingresso. Per ottenere ciò, dobbiamo prima convertire il segnale da analogico a digitale e quindi tracciare i dati. Per la conversione, faremo leva sull'ADC (convertitore da analogico a digitale) sul microcontrollore atmega328p utilizzato da Arduino per convertire i dati analogici all'ingresso del segnale in un segnale digitale. Dopo la conversione, il valore per tempo viene inviato tramite UART da Arduino al PC dove il software del plotter che verrà sviluppato utilizzando python convertirà il flusso di dati in arrivo in una forma d'onda tracciando ogni dato contro il tempo.
Componenti richiesti
I seguenti componenti sono necessari per costruire questo progetto;
- Arduino Uno (è possibile utilizzare qualsiasi altra scheda)
- Breadboard
- Resistore 10k (1)
- LDR (1)
- Cavi jumper
Software richiesti
- IDE Arduino
- Pitone
- Librerie Python: Pyserial, Matplotlib, Drawnow
Schematico
Lo schema dell'oscilloscopio Arduino è semplice. Tutto quello che dobbiamo fare è collegare il segnale da esaminare al pin analogico specificato di Arduino. Tuttavia, utilizzeremo l'LDR in una semplice configurazione di 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 attorno all'LDR.
Collegare i componenti come mostrato negli schemi seguenti;
Dopo la connessione, la configurazione dovrebbe essere simile all'immagine sottostante.
Terminate le connessioni, possiamo procedere alla scrittura del codice.
Codice Osclloscopio Arduino
Scriveremo codici per ciascuna delle due sezioni. Per il plotter come accennato in precedenza, scriveremo uno script python che accetta i dati da Arduino tramite UART e Plots, mentre per il convertitore, scriveremo uno schizzo di Arduino che preleva i dati dall'ADC e li converte in livelli di tensione che vengono inviati al plotter.
Script Python (plotter)
Poiché il codice Python è più complesso, inizieremo con esso.
Useremo un paio di librerie tra cui; drawnow, Matplotlib e Pyserial con lo script python come accennato in precedenza. Pyserial ci permette di creare uno script python in grado di comunicare sulla porta seriale, Matplotlib ci dà la possibilità di generare grafici dai dati ricevuti sulla porta seriale e drawnow ci fornisce un mezzo per aggiornare il grafico in tempo reale.
Esistono diversi modi per installare questi pacchetti sul tuo PC, il più semplice dei quali tramite pip . Pip può essere installato tramite riga di comando su una macchina Windows o Linux. PIP è confezionato con python3, quindi ti consiglierò di installare python3 e selezionare la casella sull'aggiunta di python al percorso. Se hai problemi con l'installazione di pip, controlla questo sito Web ufficiale di Python per suggerimenti.
Con pip installato, ora possiamo installare le altre librerie di cui abbiamo bisogno.
Apri il prompt dei comandi per gli utenti Windows, il terminale per gli utenti Linux e inserisci quanto segue;
pip installa pyserial
Fatto ciò, installa matplotlib usando;
pip installa matplotlib
Drawnow a volte è installato insieme a matplotlib ma per sicurezza, esegui;
pip installa drawnow
Con l'installazione completa, ora siamo pronti per scrivere lo script python.
Lo script Python per questo progetto è simile a quello che ho scritto per l'oscilloscopio basato su Raspberry Pi.
Iniziamo importando tutte le librerie necessarie per il codice;
import time importa matplotlib.pyplot come plt da drawnow import * import pyserial
Successivamente, creiamo e inizializziamo le variabili che verranno utilizzate durante il codice. L'array val verrà utilizzato per memorizzare i dati ricevuti dalla porta seriale e cnt verrà utilizzato per il conteggio. I dati nella posizione 0 verranno eliminati ogni 50 conteggi di dati. Questo viene fatto per mantenere i dati visualizzati sull'oscilloscopio.
val = cnt = 0
Successivamente, creiamo l'oggetto porta seriale attraverso il quale Arduino comunicherà con il nostro script python. Assicurati che la porta com specificata di seguito sia la stessa porta com attraverso la quale la tua scheda Arduino comunica con l'IDE. Il baud rate 115200 usato sopra è stato utilizzato per garantire una comunicazione ad alta velocità con Arduino. Per evitare errori, anche la porta seriale di Arduino deve essere abilitata per comunicare con questo baud rate.
porta = seriale Seriale ('COM4', 115200, timeout = 0,5)
Successivamente, rendiamo la trama interattiva utilizzando;
plt.ion ()
dobbiamo creare una funzione per generare il grafico dai dati ricevuti, creando il limite superiore e minimo che ci aspettiamo, che in questo caso è 1023 in base alla risoluzione dell'ADC di Arduino. Impostiamo anche il titolo, etichettiamo ogni asse e aggiungiamo una legenda per facilitare l'identificazione del grafico.
#crea la funzione figure def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscopio') plt.grid (True) plt.ylabel ('uscite ADC') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' lower right ')
Fatto ciò, siamo ora pronti per scrivere il ciclo principale che preleva i dati dalla porta seriale quando disponibili e li traccia. Per sincronizzarsi con Arduino, un dato di handshake viene inviato ad Arduino dallo script python per indicare la sua disponibilità a leggere i dati. Quando Arduino riceve i dati dell'handshake, risponde con i dati dell'ADC. Senza questa stretta di mano, non saremo in grado di tracciare i dati in tempo reale.
while (Vero): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # se arduino risponde value = port.readline () # leggi la risposta print (value) #print così possiamo monitoralo numero = int (valore) # converte i dati ricevuti in numeri interi print ('Canale 0: {0}'. format (numero)) # Sospendi per mezzo secondo. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot per riflettere i nuovi dati inseriti plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) #Mantieni il grafico aggiornato eliminando i dati nella posizione 0
Il codice Python completo per l'oscilloscopio Arduino è fornito alla fine di questo articolo mostrato di seguito.
Codice Arduino
Il secondo codice è lo sketch di Arduino per ottenere i dati che rappresentano il segnale dall'ADC, quindi attendere di ricevere il segnale di handshake dal software del plotter. Non appena riceve il segnale di handshake, invia i dati acquisiti al software del plotter tramite UART.
Iniziamo dichiarando il pin del pin Analogico di Arduino a cui verrà applicato il segnale.
int sensorpin = A0;
Successivamente, inizializziamo e iniziamo la comunicazione seriale con una velocità di trasmissione di 115200
void setup () { // inizializza la comunicazione seriale a 115200 bit al secondo in modo che corrisponda a quella dello script python: Serial.begin (115200); }
Infine la funzione voidloop () che gestisce la lettura dei dati, e li invia via seriale al plotter.
void loop () { // legge l'ingresso sul pin analogico 0: float sensorValue = analogRead (sensorpin); dati byte = Serial.read (); if (data == 's') { Serial.println (sensorValue); ritardo (10); // ritardo tra le letture per la stabilità } }
Il codice completo dell'oscilloscopio Arduino è fornito di seguito e alla fine di questo articolo mostrato di seguito.
int sensorpin = A0; void setup () { // inizializza la comunicazione seriale a 115200 bit al secondo in modo che corrisponda a quella dello script python: Serial.begin (115200); } void loop () { // legge l'input sul pin analogico 0: ################################# ###################### float SensorValue = analogRead (sensorpin); dati byte = Serial.read (); if (data == 's') { Serial.println (sensorValue); ritardo (10); // ritardo tra le letture per la stabilità } }
Oscilloscopio Arduino in azione
Carica il codice nella configurazione di Arduino ed esegui lo script python. Dovresti vedere i dati iniziare lo streaming tramite la riga di comando python e la trama che varia con l'intensità della luce come mostrato nell'immagine sotto.
Quindi è così che Arduino può essere utilizzato come oscilloscopio, può anche essere realizzato utilizzando Raspberry pi, controlla qui il tutorial completo sull'oscilloscopio basato su Raspberry Pi.