- Fluxul proiectului:
- Cerințe de proiect
- Diagrama circuitului:
- Instalați dependențe pentru osciloscopul Raspberry Pi:
- Cod Python pentru osciloscopul Raspberry Pi:
- Osciloscopul Raspberry Pi în acțiune:
Bună băieți, bine ați venit la postarea de astăzi. Unul dintre cele mai fascinante lucruri despre a fi un producător este să știi cum să dezvolți instrumente improvizate, nu vei rămâne niciodată blocat lucrând la vreun proiect atunci când ai acest tip de versatilitate. Deci, astăzi, voi împărtăși cum să construiesc o versiune improvizată bazată pe Raspberry Pi a unuia dintre cele mai importante instrumente din ingineria electrică / electronică; Osciloscopul.
Osciloscopul este un instrument electronic de testare care permite vizualizarea și observarea diferitelor tensiuni ale semnalului, de obicei ca un grafic bidimensional cu unul sau mai multe semnale reprezentate în funcție de timp. Proiectul de astăzi va căuta să reproducă capacitățile de vizualizare a semnalului osciloscopului folosind Raspberry Pi și un modul convertor analogic digital.
Fluxul proiectului:
Replicarea vizualizării semnalului osciloscopului folosind Raspberry Pi va necesita următorii pași;
1. Efectuați conversia digitală în analogică a semnalului de intrare
2. Pregătiți datele rezultate pentru reprezentare
3. Plasați datele pe un grafic în timp real
O diagramă bloc simplificată pentru acest proiect ar arăta ca diagrama de mai jos.
Cerințe de proiect
Cerința pentru acest proiect poate fi clasificată în două:
- Cerințe hardware
- Cerințe software
Cerințe hardware
Pentru a construi acest proiect, sunt necesare următoarele componente / piesă;
- Raspberry pi 2 (sau orice alt model)
- Card SD de 8 sau 16 GB
- Cablu LAN / Ethernet
- Alimentare sau cablu USB
- ADS1115 ADC
- LDR (opțional, deoarece este destinat testului)
- Rezistor de 10k sau 1k
- Sârme de jumper
- Breadboard
- Monitor sau orice alt mod de a vedea desktop-ul pi (inclusiv VNC)
Cerințe software
Cerințele software pentru acest proiect sunt în esență modulele python ( matplotlib și drawow ) care vor fi utilizate pentru vizualizarea datelor și modulul Adafruit pentru interfața cu cipul ADS1115 ADC. Vă voi arăta cum să instalați aceste module pe Raspberry Pi pe măsură ce continuăm.
În timp ce acest tutorial va funcționa indiferent de sistemul de operare raspberry pi folosit, voi folosi sistemul de operare stretch Raspberry Pi și voi presupune că sunteți familiarizat cu configurarea Raspberry Pi cu sistemul de operare stretch Raspbian și știți cum să SSH în zmeură pi folosind un software terminal precum chit. Dacă aveți probleme cu oricare dintre acestea, există o mulțime de tutoriale Raspberry Pi pe acest site web care vă pot ajuta.
Cu toate componentele hardware la locul lor, să creăm schemele și să conectăm componentele împreună.
Diagrama circuitului:
Pentru a converti semnalele de intrare analogice în semnale digitale care pot fi vizualizate cu Raspberry Pi, vom folosi cipul ADS1115 ADC. Acest cip devine important deoarece Raspberry Pi, spre deosebire de Arduino și de majoritatea microcontrolerelor, nu are un convertor analog-digital la bord (ADC). În timp ce am fi putut folosi orice cip ADC compatibil cu zmeură pi, prefer acest cip datorită rezoluției sale ridicate (16 biți) și a fișei sale de date bine documentate și a instrucțiunilor de utilizare de la Adafruit. Puteți consulta, de asemenea, tutorialul nostru Raspberry Pi ADC pentru a afla mai multe despre acesta.
ADC este un dispozitiv bazat pe I2C și ar trebui să fie conectat la Raspberry Pi așa cum se arată în schemele de mai jos.
Pentru claritate, conexiunea pin între cele două componente este, de asemenea, descrisă mai jos.
Conexiuni ADS1115 și Raspberry Pi:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
Cu toate conexiunile terminate, porniți-vă pi-ul și continuați să instalați dependențele menționate mai jos.
Instalați dependențe pentru osciloscopul Raspberry Pi:
Înainte de a începe să scriem scriptul python pentru a extrage date din ADC și a le grafica pe un grafic live, trebuie să activăm interfața de comunicare I2C a raspberry pi și să instalăm cerințele software menționate anterior. Acest lucru se va face în pașii de mai jos, astfel încât să fie ușor de urmat:
Pasul 1: activați interfața Raspberry Pi I2C
Pentru a activa I2C, de la terminal, executați;
sudo raspi-config
Când panourile de configurare se deschid, selectați opțiunile interfeței, selectați I2C și faceți clic pe activare.
Pasul 2: Actualizați Raspberry pi
Primul lucru pe care îl fac înainte de a începe orice proiect este actualizarea Pi. Prin aceasta, sunt sigur că fiecare lucru de pe sistemul de operare este actualizat și nu voi experimenta probleme de compatibilitate cu niciun software recent pe care aleg să îl instalez pe Pi. Pentru a face acest lucru, rulați sub două comenzi:
sudo apt-get update sudo apt-get upgrade
Pasul 3: Instalați biblioteca Adafruit ADS1115 pentru ADC
Odată cu actualizarea făcută, suntem acum gata să instalăm dependențele începând cu modulul python Adafruit pentru cipul ADS115. Asigurați-vă că vă aflați în directorul principal Raspberry Pi executând;
cd ~
apoi instalați esențialele de construire rulând;
sudo apt-get install build-essential python-dev python-smbus git
Apoi, clonați folderul Adafruit git pentru bibliotecă rulând;
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Treceți în directorul fișierului clonat și rulați fișierul de configurare;
cd Adafruit_Python_ADS1x1z sudo python setup.py install
După instalare, ecranul dvs. ar trebui să arate ca imaginea de mai jos.
Pasul 4: Testați biblioteca și comunicarea 12C.
Înainte de a continua cu restul proiectului, este important să testăm biblioteca și să ne asigurăm că ADC poate comunica cu zmeura pi peste I2C. Pentru a face acest lucru, vom folosi un exemplu de script care vine cu biblioteca.
În timp ce vă aflați încă în folderul Adafruit_Python_ADS1x15, schimbați directorul în directorul de exemple executând;
exemple cd
Apoi, rulați exemplul sampletest.py care afișează valoarea celor patru canale de pe ADC într-o formă tabelară.
Rulați exemplul folosind:
python simpletest.py
Dacă modulul I2C este activat și conexiunile sunt bune, ar trebui să vedeți datele așa cum se arată în imaginea de mai jos.
Dacă apare o eroare, verificați dacă ADC este bine conectat la PI și comunicația I2C este activată pe Pi.
Pasul 5: Instalați Matplotlib
Pentru a vizualiza datele, trebuie să instalăm modulul matplotlib care este utilizat pentru a trasa tot felul de grafice în python. Acest lucru se poate face rulând;
sudo apt-get install python-matplotlib
Ar trebui să vedeți un rezultat precum imaginea de mai jos.
Pasul 6: Instalați modulul Python Drawnow
În cele din urmă, trebuie să instalăm modulul python drawow . Acest modul ne ajută să furnizăm actualizări în timp real pentru graficul de date.
Vom instala drawow prin intermediul programului de instalare a pachetelor python; pip , deci trebuie să ne asigurăm că este instalat. Acest lucru se poate face rulând;
sudo apt-get install python-pip
Putem apoi folosi pip pentru a instala pachetul drawow executând:
sudo pip instala drawow
Ar trebui să obțineți un rezultat precum imaginea de mai jos după ce ați rulat-o.
Cu toate dependențele instalate, suntem acum gata să scriem codul.
Cod Python pentru osciloscopul Raspberry Pi:
Codul python pentru acest osciloscop Pi este destul de simplu, mai ales dacă sunteți familiarizați cu modulul python matplotlib . Înainte de a ne arăta întregul cod, voi încerca să îl împărțesc în parte și să explic ce face fiecare parte a codului, astfel încât să puteți avea suficiente cunoștințe pentru a extinde codul pentru a face mai multe lucruri.
În această etapă, este important să treceți la un monitor sau să utilizați vizualizatorul VNC, orice lucru prin care puteți vedea desktopul Raspberry Pi, deoarece graficul reprezentat nu va fi afișat pe terminal.
Cu monitorul ca interfață, deschideți un nou fișier python. Îi poți numi orice nume dorești, dar eu îl voi numi scope.py.
sudo nano scope.py
Odată cu fișierul creat, primul lucru pe care îl facem este să importăm modulele pe care le vom folosi;
timp de import import matplotlib.pyplot ca plt din drawow import * import Adafruit_ADS1x15
Apoi, creăm o instanță a bibliotecii ADS1x15 care specifică ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Apoi, stabilim câștigul ADC. Există diferite intervale de câștig și trebuie alese în funcție de tensiunea pe care o așteptați la intrarea ADC. Pentru acest tutorial, estimăm 0 - 4.09v, așa că vom folosi un câștig de 1. Pentru mai multe informații despre câștig, puteți consulta fișa tehnică ADS1015 / ADS1115.
CÂȘTIGARE = 1
Apoi, trebuie să creăm variabilele matrice care vor fi folosite pentru a stoca datele care urmează a fi trasate și alta pentru a servi ca număr.
Val = cnt = 0
Apoi, ne facem cunoscute intențiile de a face cunoscut complotul interactiv, astfel încât să ne permită graficarea datelor în direct.
plt.ion ()
Apoi, începem conversia continuă ADC specificând canalul ADC, în acest caz, canalul 0 și specificăm și câștigul.
Trebuie remarcat faptul că toate cele patru canale ADC de pe ADS1115 pot fi citite în același timp, dar 1 canal este suficient pentru această demonstrație.
adc.start_adc (0, gain = GAIN)
Apoi creăm o funcție def makeFig , pentru a crea și seta atributele graficului care vor ține parcela noastră live. Mai întâi stabilim limitele axei y folosind ylim , după care introducem titlul graficului și numele etichetei înainte de a specifica datele care vor fi reprezentate grafic și stilul și culoarea graficului acesteia folosind plt.plot (). Putem, de asemenea, să precizăm canalul (așa cum a fost menționat canalul 0), astfel încât să putem identifica fiecare semnal atunci când sunt utilizate cele patru canale ale ADC. plt.legend este folosit pentru a specifica unde dorim ca informațiile despre acel semnal (de ex. Canalul 0) să fie afișate în figură.
plt.ylim (-5000.5000) plt.title („Osciloscop”) plt.grid (Adevărat) plt.ylabel („ieșiri ADC”) plt.plot (val, „ro-”, etichetă = „lux”) plt.legend (loc = 'dreapta jos')
Apoi scriem bucla while , care va fi utilizată în mod constant, citim datele din ADC și actualizăm graficul în consecință.
Primul lucru pe care îl facem este să citim valoarea de conversie ADC
value = adc.get_last_result ()
Apoi imprimăm valoarea pe terminal doar pentru a ne oferi un alt mod de a confirma datele reprezentate. Așteptăm câteva secunde după tipărire, apoi adăugăm datele la lista (val) creată pentru a stoca datele pentru canalul respectiv.
print („Canal 0: {0}”. format (valoare)) time.sleep (0,5) val.append (int (valoare))
Apoi Noi numim drawnow pentru a actualiza complot.
drawow (makeFig)
Pentru a ne asigura că cele mai recente date sunt disponibile în complot, ștergem datele de la indexul 0 după fiecare 50 de date.
cnt = cnt + 1 if (cnt> 50): val.pop (0)
Asta e tot!
Codul complet Python este dat la sfârșitul acestui tutorial.
Osciloscopul Raspberry Pi în acțiune:
Copiați codul complet Python și lipiți-l în fișierul Python pe care l-am creat mai devreme. Amintiți-vă că vom avea nevoie de un monitor pentru a vizualiza complotul, astfel încât toate acestea să fie făcute fie de VNC, fie cu un monitor sau ecran conectat.
Salvați codul și rulați folosind;
sudo python scope.py
Dacă ați folosit un nume diferit de scope.py, nu uitați să schimbați acest lucru pentru a se potrivi.
După câteva minute, ar trebui să vedeți datele ADC tipărite pe terminal. Ocazional, puteți primi un avertisment de la matplotlib (așa cum se arată în imaginea de mai jos), care ar trebui suprimat, dar nu afectează datele afișate sau complotul oricum. Pentru a suprima avertismentul, cu toate acestea, următoarele linii de cod pot fi adăugate după liniile de import din codul nostru.
Import avertismente import matplotlib.cbook warnings.filterwarnings („ignorați”, categoria = matplotlib.cbook.mplDeprecation)
Asta e tot pentru acest tutorial băieți, pentru a vă testa complet osciloscopul, puteți conecta un dispozitiv analog ca un potențiometru la un canal de pe ADC și ar trebui să vedeți schimbarea datelor la fiecare rotație a potențiometrului. Sau puteți introduce undă sinusoidală sau undă pătrată pentru a testa ieșirea.
Vă mulțumim că ați citit, dacă aveți întrebări sau ceva pe care doriți să îl adaug, lăsați-mi doar un comentariu.
Până data viitoare, continuă să faci!