- Flusso del progetto:
- Requisiti del progetto
- Schema elettrico:
- Installa le dipendenze per l'oscilloscopio Raspberry Pi:
- Codice Python per oscilloscopio Raspberry Pi:
- Oscilloscopio Raspberry Pi in azione:
Ciao ragazzi, benvenuti nel post di oggi. Una delle cose più affascinanti dell'essere un maker è sapere come sviluppare strumenti improvvisati, non rimarrai mai bloccato a lavorare su nessun progetto quando avrai quel tipo di versatilità. Quindi oggi condividerò come costruire una versione improvvisata basata su Raspberry Pi di uno degli strumenti più importanti nell'ingegneria elettrica / elettronica; L'oscilloscopio.
L'oscilloscopio è uno strumento di test elettronico che consente la visualizzazione e l'osservazione di tensioni di segnale variabili, solitamente come un grafico bidimensionale con uno o più segnali tracciati nel tempo. Il progetto di oggi cercherà di replicare le capacità di visualizzazione del segnale dell'oscilloscopio utilizzando il Raspberry Pi e un modulo convertitore da analogico a digitale.
Flusso del progetto:
La replica della visualizzazione del segnale dell'oscilloscopio utilizzando il Raspberry Pi richiederà i seguenti passaggi;
1. Eseguire la conversione da digitale ad analogico del segnale di ingresso
2. Preparare i dati risultanti per la rappresentazione
3. Tracciare i dati su un grafico in tempo reale
Uno schema a blocchi semplificato per questo progetto sarebbe simile allo schema seguente.
Requisiti del progetto
Il requisito per questo progetto può essere classificato in due:
- Requisiti hardware
- Requisiti software
Requisiti hardware
Per costruire questo progetto, sono necessari i seguenti componenti / parti;
- Raspberry pi 2 (o qualsiasi altro modello)
- Scheda SD da 8 o 16 GB
- Cavo LAN / Ethernet
- Alimentazione o cavo USB
- ADS1115 ADC
- LDR (Opzionale in quanto pensato per il test)
- Resistenza da 10k o 1k
- Cavi jumper
- Breadboard
- Monitor o qualsiasi altro modo di vedere il desktop del pi (incluso VNC)
Requisiti software
I requisiti software per questo progetto sono fondamentalmente i moduli python ( matplotlib e drawnow ) che verranno utilizzati per la visualizzazione dei dati e il modulo Adafruit per l'interfacciamento con il chip ADC ADS1115. Mostrerò come installare questi moduli sul Raspberry Pi mentre procediamo.
Mentre questo tutorial funzionerà indipendentemente dal sistema operativo raspberry pi utilizzato, userò il sistema operativo stretch Raspberry Pi e presumo che tu abbia familiarità con la configurazione del Raspberry Pi con il sistema operativo stretch Raspbian e che tu sappia come SSH nel lampone pi utilizzando un software terminale come putty. Se hai problemi con uno di questi, ci sono tonnellate di tutorial su Raspberry Pi su questo sito Web che possono aiutarti.
Con tutti i componenti hardware in posizione, creiamo gli schemi e colleghiamo i componenti insieme.
Schema elettrico:
Per convertire i segnali di ingresso analogico in segnali digitali che possono essere visualizzati con il Raspberry Pi, utilizzeremo il chip ADC ADS1115. Questo chip diventa importante perché il Raspberry Pi, a differenza di Arduino e della maggior parte dei microcontrollori, non dispone di un convertitore analogico-digitale (ADC) integrato. Anche se avremmo potuto utilizzare qualsiasi chip ADC compatibile con raspberry pi, preferisco questo chip per la sua alta risoluzione (16 bit) e la sua scheda tecnica ben documentata e le istruzioni per l'uso di Adafruit. Puoi anche controllare il nostro tutorial ADC Raspberry Pi per saperne di più.
L'ADC è un dispositivo basato su I2C e dovrebbe essere collegato al Raspberry Pi come mostrato negli schemi seguenti.
Per chiarezza, di seguito viene descritta anche la connessione dei pin tra i due componenti.
Connessioni ADS1115 e Raspberry Pi:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
Terminate le connessioni, accendi il pi e procedi con l'installazione delle dipendenze menzionate di seguito.
Installa le dipendenze per l'oscilloscopio Raspberry Pi:
Prima di iniziare a scrivere lo script python per estrarre i dati dall'ADC e tracciarli su un grafico in tempo reale, dobbiamo abilitare l'interfaccia di comunicazione I2C del raspberry pi e installare i requisiti software menzionati in precedenza. Questo verrà fatto nei passaggi seguenti, quindi è facile da seguire:
Passaggio 1: abilitare l'interfaccia Raspberry Pi I2C
Per abilitare l'I2C, dal terminale, esegui;
sudo raspi-config
Quando si aprono i pannelli di configurazione, selezionare le opzioni dell'interfaccia, selezionare I2C e fare clic su abilita.
Passaggio 2: aggiorna il Raspberry pi
La prima cosa che faccio prima di iniziare qualsiasi progetto è aggiornare il Pi. In questo modo, sono sicuro che ogni cosa sul sistema operativo sia aggiornata e non avrò problemi di compatibilità con nessun software più recente che scelgo di installare sul Pi. Per fare ciò, esegui sotto due comandi:
sudo apt-get update sudo apt-get upgrade
Passaggio 3: installa la libreria Adafruit ADS1115 per ADC
Terminato l'aggiornamento, siamo ora pronti per installare le dipendenze a partire dal modulo python Adafruit per il chip ADS115. Assicurati di essere nella home directory di Raspberry Pi eseguendo;
cd ~
quindi installa i build-essentials eseguendo;
sudo apt-get install build-essential python-dev python-smbus git
Successivamente, clona la cartella git di Adafruit per la libreria eseguendo;
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Passa alla directory del file clonato ed esegui il file di installazione;
cd Adafruit_Python_ADS1x1z sudo python setup.py install
Dopo l'installazione, lo schermo dovrebbe assomigliare all'immagine qui sotto.
Passaggio 4: testare la libreria e la comunicazione 12C.
Prima di procedere con il resto del progetto, è importante testare la libreria e assicurarsi che l'ADC possa comunicare con il raspberry pi tramite I2C. Per fare ciò useremo uno script di esempio fornito con la libreria.
Mentre sei ancora nella cartella Adafruit_Python_ADS1x15, cambia la directory nella directory degli esempi eseguendo;
esempi di cd
Successivamente, esegui l'esempio sampletest.py che visualizza il valore dei quattro canali sull'ADC in forma tabulare.
Esegui l'esempio utilizzando:
python simpletest.py
Se il modulo I2C è abilitato e le connessioni sono buone, dovresti vedere i dati come mostrato nell'immagine sotto.
Se si verifica un errore, verificare che l'ADC sia ben collegato al PI e che la comunicazione I2C sia abilitata sul Pi.
Passaggio 5: installa Matplotlib
Per visualizzare i dati dobbiamo installare il modulo matplotlib che viene utilizzato per tracciare tutti i tipi di grafici in Python. Questo può essere fatto eseguendo;
sudo apt-get install python-matplotlib
Dovresti vedere un risultato come l'immagine qui sotto.
Step6: installa il modulo Drawnow python
Infine, dobbiamo installare il modulo drawnow python. Questo modulo ci aiuta a fornire aggiornamenti in tempo reale al grafico dei dati.
Ci sarà l'installazione drawNow tramite l'installatore di pacchetti pitone; pip , quindi dobbiamo assicurarci che sia installato. Questo può essere fatto eseguendo;
sudo apt-get install python-pip
Possiamo quindi usare pip per installare il pacchetto drawnow eseguendo:
sudo pip install drawnow
Dovresti ottenere un risultato come l'immagine qui sotto dopo averlo eseguito.
Con tutte le dipendenze installate, ora siamo pronti per scrivere il codice.
Codice Python per oscilloscopio Raspberry Pi:
Il codice python per questo oscilloscopio Pi è abbastanza semplice, specialmente se hai familiarità con il modulo matplotlib python. Prima di mostrarci l'intero codice, cercherò di scomporlo in parte e spiegherò cosa sta facendo ogni parte del codice in modo che tu possa avere conoscenze sufficienti per estendere il codice per fare più cose.
In questa fase è importante passare a un monitor o utilizzare il visualizzatore VNC, qualsiasi cosa attraverso la quale puoi vedere il desktop del tuo Raspberry Pi, poiché il grafico che viene tracciato non verrà visualizzato sul terminale.
Con il monitor come interfaccia, apri un nuovo file python. Puoi chiamarlo con il nome che desideri, ma lo chiamerò scope.py.
sudo nano scope.py
Con il file creato, la prima cosa che facciamo è importare i moduli che useremo;
import time importa matplotlib.pyplot come plt da drawnow import * importa Adafruit_ADS1x15
Successivamente, creiamo un'istanza della libreria ADS1x15 specificando l'ADC ADS1115
adc = Adafruit_ADS1x15.ADS1115 ()
Successivamente, impostiamo il guadagno dell'ADC. Esistono diverse gamme di guadagno e devono essere scelte in base alla tensione che ci si aspetta all'ingresso dell'ADC. Per questo tutorial, stiamo stimando uno 0 - 4.09v, quindi useremo un guadagno di 1. Per maggiori informazioni sul guadagno puoi controllare la scheda tecnica ADS1015 / ADS1115.
GUADAGNO = 1
Successivamente, è necessario creare le variabili di matrice che verranno utilizzate per memorizzare i dati da tracciare e un'altra che funga da conteggio.
Val = cnt = 0
Successivamente, facciamo conoscere le nostre intenzioni di rendere nota la trama interattiva in modo da consentirci di tracciare i dati in tempo reale.
plt.ion ()
Successivamente, iniziamo la conversione ADC continua specificando il canale ADC, in questo caso, il canale 0 e specifichiamo anche il guadagno.
Va notato che tutti i quattro canali ADC sull'ADS1115 possono essere letti contemporaneamente, ma 1 canale è sufficiente per questa dimostrazione.
adc.start_adc (0, guadagno = GAIN)
Successivamente creiamo una funzione def makeFig , per creare e impostare gli attributi del grafico che manterrà il nostro grafico in tempo reale. Per prima cosa impostiamo i limiti dell'asse y usando ylim , dopodiché inseriamo il titolo del grafico e il nome dell'etichetta prima di specificare i dati che verranno stampati e il suo stile di stampa e colore usando plt.plot (). Possiamo anche indicare il canale (come è stato affermato il canale 0) in modo da poter identificare ogni segnale quando vengono utilizzati i quattro canali dell'ADC. plt.legend è usato per specificare dove vogliamo che le informazioni su quel segnale (es. Canale 0) siano visualizzate nella figura.
plt.ylim (-5000,5000) plt.title ('Osciloscopio') plt.grid (True) plt.ylabel ('uscite ADC') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'in basso a destra')
Successivamente scriviamo il ciclo while che verrà utilizzato per leggere costantemente i dati dall'ADC e aggiornare il grafico di conseguenza.
La prima cosa che facciamo è leggere il valore di conversione dell'ADC
valore = adc.get_last_result ()
Successivamente stampiamo il valore sul terminale solo per darci un altro modo di confermare i dati tracciati. Aspettiamo alcuni secondi dopo la stampa quindi aggiungiamo i dati alla lista (val) creata per memorizzare i dati per quel canale.
print ('Canale 0: {0}'. format (value)) time.sleep (0.5) val.append (int (value))
Chiamiamo quindi drawnow per aggiornare la trama.
drawnow (makeFig)
Per garantire che i dati più recenti siano ciò che è disponibile nel grafico, eliminiamo i dati all'indice 0 ogni 50 conteggi di dati.
cnt = cnt + 1 se (cnt> 50): val.pop (0)
È tutto!
Il codice Python completo viene fornito alla fine di questo tutorial.
Oscilloscopio Raspberry Pi in azione:
Copia il codice Python completo e incolla il file Python che abbiamo creato in precedenza, ricorda che avremo bisogno di un monitor per visualizzare la trama, quindi tutto questo dovrebbe essere fatto da VNC o con un monitor o uno schermo collegato.
Salva il codice ed esegui usando;
sudo python scope.py
Se hai usato un nome diverso da scope.py, non dimenticare di cambiarlo in modo che corrisponda.
Dopo alcuni minuti, dovresti vedere i dati ADC in fase di stampa sul terminale. Occasionalmente potresti ricevere un avviso da matplotlib (come mostrato nell'immagine sotto) che dovrebbe essere soppresso ma non influisce in alcun modo sui dati visualizzati o sul grafico. Per sopprimere l'avviso, tuttavia, le seguenti righe di codice possono essere aggiunte dopo le righe di importazione nel nostro codice.
Importa avvisi importa matplotlib.cbook warnings.filterwarnings ("ignore", category = matplotlib.cbook.mplDeprecation)
Questo è tutto per questo tutorial ragazzi, per testare completamente il tuo oscilloscopio, puoi collegare un dispositivo analogico come un potenziometro a un canale sull'ADC e dovresti vedere i dati cambiare ad ogni giro del potenziometro. Oppure puoi inserire un'onda sinusoidale o quadra per testare l'uscita.
Grazie per aver letto, se hai qualche domanda o qualcosa che vorresti che aggiungessi, lasciami un commento.
Alla prossima volta, continua a fare!