- Tijek projekta:
- Zahtjevi projekta
- Kružni dijagram:
- Instalirajte ovisnosti za Raspberry Pi osciloskop:
- Python kod za Raspberry Pi osciloskop:
- Osciloskop Raspberry Pi u akciji:
Bok dečki, dobrodošli u današnji post. Jedna od najfascinantnijih stvari u proizvodnji je znati kako razviti improvizirane alate, nikada nećete zapeti radeći na bilo kojem projektu kada imate takvu svestranost. Dakle, danas ću podijeliti kako izraditi improviziranu verziju jednog od najvažnijih alata u elektrotehničkom / elektroničkom inženjerstvu na bazi Raspberry Pi; Osciloskop.
Osciloskop je elektronički ispitni instrument koji omogućuje vizualizaciju i promatranje različitih napona signala, obično kao dvodimenzionalnu grafiku s jednim ili više signala ucrtanih u odnosu na vrijeme. Današnji projekt nastojat će preslikati mogućnosti vizualizacije signala osciloskopa pomoću Raspberry Pi i modula analognog u digitalni pretvarač.
Tijek projekta:
Kopiranje vizualizacije signala osciloskopa pomoću Raspberry Pi zahtijevat će sljedeće korake;
1. Izvedite digitalnu u analognu pretvorbu ulaznog signala
2. Pripremite rezultirajuće podatke za prikaz
3. Zacrtajte podatke na grafikonu vremena uživo
Pojednostavljeni blok dijagram za ovaj projekt izgledao bi kao dijagram u nastavku.

Zahtjevi projekta
Zahtjevi za ovaj projekt mogu se podijeliti u dva:
- Zahtjevi za hardverom
- Zahtjevi softvera
Hardverski zahtjevi
Za izgradnju ovog projekta potrebne su sljedeće komponente / dio;
- Raspberry pi 2 (ili bilo koji drugi model)
- SD kartica od 8 ili 16 GB
- LAN / Ethernet kabel
- Napajanje ili USB kabel
- ADS1115 ADC
- LDR (nije obavezno kao što je namijenjeno testiranju)
- Otpornik 10k ili 1k
- Žice kratkospojnika
- Breadboard
- Monitor ili bilo koji drugi način gledanja radne površine pi-a (uključujući VNC)
Zahtjevi softvera
Softverski zahtjevi za ovaj projekt su u osnovi python moduli ( matplotlib i drawnow ) koji će se koristiti za vizualizaciju podataka i modul Adafruit za povezivanje s ADS1115 ADC čipom. Pokazat ću kako instalirati ove module na Raspberry Pi kako nastavljamo.
Iako će ovaj vodič raditi bez obzira na korišteni Raspberry Pi OS, ja ću koristiti Raspberry Pi stretch OS i pretpostavit ću da ste upoznati s postavljanjem Raspberry Pi s Raspbian stretch OS-om i da znate SSH u malinu pi pomoću terminalnog softvera poput kita. Ako imate problema s bilo čim od ovoga, na ovom web mjestu postoji mnoštvo tutorijala za Raspberry Pi koji vam mogu pomoći.
Sa svim hardverskim komponentama na mjestu, stvorimo sheme i spojimo komponente.
Kružni dijagram:
Za pretvaranje analognih ulaznih signala u digitalne signale koji se mogu vizualizirati s Raspberry Pi, koristit ćemo ADS1115 ADC čip. Ovaj čip postaje važan jer Raspberry Pi, za razliku od Arduina i većine mikrokontrolera, nema ugrađeni analogno-digitalni pretvarač (ADC). Iako smo mogli koristiti bilo koji ADC čip koji je kompatibilan s Raspberry Pi, ovaj čip mi je draži zbog visoke rezolucije (16 bita) i dobro dokumentiranog lista podataka i uputa za uporabu tvrtke Adafruit. Također možete provjeriti našu lekciju za Raspberry Pi ADC da biste saznali više o tome.
ADC je uređaj zasnovan na I2C i trebao bi biti povezan s Raspberry Pi kako je prikazano u donjim shemama.
Radi jasnoće, niže je opisana i pin veza između dviju komponenata.

ADS1115 i Raspberry Pi veze:
VDD - 3,3 v
GND - GND
SDA - SDA
SCL - SCL
Nakon što su sve veze gotove, uključite pi i nastavite instalirati dolje navedene ovisnosti.

Instalirajte ovisnosti za Raspberry Pi osciloskop:
Prije nego što započnemo pisati python skriptu za izvlačenje podataka iz ADC-a i njihovo iscrtavanje na grafikon uživo, moramo omogućiti I2C komunikacijsko sučelje Raspberry Pi i instalirati prethodno spomenute softverske zahtjeve. To će biti učinjeno u donjim koracima pa je lako slijediti:
Korak 1: Omogućite Raspberry Pi I2C sučelje
Da biste omogućili I2C, s terminala pokrenite;
sudo raspi-config
Kad se otvore konfiguracijske ploče, odaberite opcije sučelja, odaberite I2C i kliknite Omogući.
Korak 2: Ažurirajte Raspberry pi
Prvo što učinim prije započinjanja bilo kojeg projekta je ažuriranje Pi-ja. Kroz ovo, siguran sam da je svaka stvar na OS-u ažurna i da neću imati problema s kompatibilnošću niti s jednim najnovijim softverom koji odlučim instalirati na Pi. Da biste to učinili, pokrenite ispod dvije naredbe:
sudo apt-get ažuriranje sudo apt-get nadogradnja
Korak 3: Instalirajte Adafruit ADS1115 knjižnicu za ADC
Nakon obavljenog ažuriranja, sada smo spremni instalirati ovisnosti počevši od modula Adafruit python za čip ADS115. Uvjerite se da ste u matičnom direktoriju Raspberry Pi pokretanjem;
cd ~
zatim instaliranjem osnovnih instalacija izvođenjem;
sudo apt-get instalirati graditi-bitno python-dev python-smbus git
Zatim klonirajte mapu Adafruit git za knjižnicu pokretanjem;
git klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Promijenite se u direktorij klonirane datoteke i pokrenite instalacijsku datoteku;
cd Adafruit_Python_ADS1x1z sudo python setup.py instalacija
Nakon instalacije, vaš zaslon trebao bi izgledati poput donje slike.

Korak 4: Testirajte knjižnicu i komunikaciju 12C.
Prije nego što nastavimo s ostatkom projekta, važno je testirati knjižnicu i osigurati da ADC može komunicirati s Raspberry Pi preko I2C. Da bismo to učinili, poslužit ćemo se primjerom skripte koja dolazi s knjižnicom.
Dok ste još u mapi Adafruit_Python_ADS1x15, pokrenite direktorij u direktorij primjera;
cd primjeri
Zatim pokrenite primjer sampletest.py koji prikazuje vrijednost četiri kanala na ADC-u u tabličnom obliku.
Pokrenite primjer pomoću:
python simpletest.py
Ako je I2C modul omogućen, a veze dobre, trebali biste vidjeti podatke kao što je prikazano na donjoj slici.

Ako se dogodi pogreška, provjerite je li ADC dobro povezan s PI-om i je li komunikacija I2C omogućena na Pi-u.
Korak 5: Instalirajte Matplotlib
Da bismo vizualizirali podatke moramo instalirati matplotlib modul koji se koristi za crtanje svih vrsta grafova u pythonu. To se može učiniti trčanjem;
sudo apt-get instalirati python-matplotlib
Trebali biste vidjeti ishod poput slike ispod.

Korak 6: Instalirajte Drawnow python modul
Na kraju, moramo instalirati drawnow python modul. Ovaj nam modul pomaže u pružanju ažuriranja podataka u realnom vremenu.
Instalirat ćemo drawnow putem instalacijskog programa python; pip , pa moramo biti sigurni da je instaliran. To se može učiniti trčanjem;
sudo apt-get instalirati python-pip
Tada možemo koristiti pip za instalaciju drawnow paketa pokretanjem:
sudo pip instalirati drawnow
Nakon pokretanja trebali biste dobiti ishod poput slike dolje.

Sa svim instaliranim ovisnostima, sada smo spremni za pisanje koda.
Python kod za Raspberry Pi osciloskop:
Python kôd za ovaj Pi osciloskop prilično je jednostavan, pogotovo ako ste upoznati s python matplotlib modulom. Prije pokazivanja cijelog koda, pokušat ću ga podijeliti na dijelove i objasniti što svaki dio koda radi, tako da možete imati dovoljno znanja da proširite kôd na više stvari.
U ovoj je fazi važno prebaciti se na monitor ili upotrijebiti VNC preglednik, bilo što kroz što možete vidjeti radnu površinu vašeg Raspberry Pi, jer se graf koji se iscrtava neće prikazivati na terminalu.
S monitorom kao sučeljem otvorite novu python datoteku. Možete ga nazvati bilo kojim imenom, ali ja ću ga nazvati scope.py.
sudo nano opseg.py
Sa stvorenom datotekom, prvo što učinimo je uvoz modula koje ćemo koristiti;
vrijeme uvoza import matplotlib.pyplot as plt from drawnow import * import Adafruit_ADS1x15
Dalje, kreiramo instancu biblioteke ADS1x15 koja specificira ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Dalje, postavljamo dobitak ADC-a. Postoje različiti rasponi pojačanja i treba ih odabrati na temelju napona koji očekujete na ulazu ADC-a. Za ovaj tutorial procjenjujemo 0 - 4.09v, tako da ćemo koristiti dobitak od 1. Za više informacija o dobitku možete provjeriti tablicu podataka ADS1015 / ADS1115.
DOBIT = 1
Dalje, trebamo stvoriti varijable niza koje će se koristiti za pohranu podataka za crtanje, a drugu koja će služiti kao count.
Val = cnt = 0
Dalje, otkrivamo svoje namjere da radnju učinimo interaktivnom kako bi nam omogućili da podatke crtamo uživo.
plt.ion ()
Dalje, započinjemo kontinuiranu ADC konverziju specificirajući ADC kanal, u ovom slučaju, kanal 0, a također određujemo pojačanje.
Treba napomenuti da se sva četiri ADC kanala na ADS1115 mogu istodobno čitati, ali jedan kanal je dovoljan za ovu demonstraciju.
adc.start_adc (0, dobitak = DOBITAK)
Dalje kreiramo funkciju def makeFig , kako bismo stvorili i postavili atribute grafa koji će sadržavati našu live plotu. Prije svega postavljamo ograničenja osi y pomoću ylima , nakon čega unosimo naslov grafikona i naziv oznake prije nego što odredimo podatke koji će se iscrtati i njihov stil i boju grafike pomoću plt.plot (). Također možemo navesti kanal (kao što je naveden kanal 0) kako bismo mogli identificirati svaki signal kada se koriste četiri kanala ADC-a. plt.legend koristi se za određivanje mjesta na kojem želimo da se informacije o tom signalu (npr. Kanal 0) prikazuju na slici.
plt.ylim (-5000,5000) plt.title ('Osciloskop') plt.grid (True) plt.ylabel ('ADC izlazi') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'dolje desno')
Dalje napišemo while petlju koja će se koristiti za stalno čitanje podataka iz ADC-a i ažuriranje grafikona u skladu s tim.
Prvo što radimo je očitavanje vrijednosti pretvorbe ADC
vrijednost = adc.get_last_result ()
Dalje vrijednost ispisujemo na terminalu samo kako bismo dobili drugi način potvrde nacrtanih podataka. Čekamo nekoliko sekundi nakon ispisa, a zatim dodajemo podatke na popis (val) stvoren za pohranu podataka za taj kanal.
print ('Channel 0: {0}'. format (value)) time.sleep (0.5) val.append (int (value))
Zatim zovemo drawnow kako bismo ažurirali radnju.
drawnow (makeFig)
Da bismo osigurali da su najnoviji podaci dostupni na grafikonu, brišemo podatke s indeksom 0 nakon svakih 50 brojanja podataka.
cnt = cnt + 1 if (cnt> 50): val.pop (0)
To je sve!
Kompletan Python koda se daje na kraju ovog vodiča.
Osciloskop Raspberry Pi u akciji:
Kopirajte cijeli python kôd i zalijepite u python datoteku koju smo ranije kreirali, imajte na umu da će nam trebati monitor za prikaz parcele, pa bi sve to trebao raditi VNC ili povezani monitor ili zaslon.
Spremite kod i pokrenite pomoću;
sudo python doseg.py
Ako ste koristili drugo ime osim scope.py, ne zaboravite to promijeniti kako bi se podudaralo.
Nakon nekoliko minuta trebali biste vidjeti kako se ADC podaci ispisuju na terminalu. Povremeno od matplotlib-a možete dobiti upozorenje (kao što je prikazano na donjoj slici) koje bi trebalo potisnuti, ali ionako ne utječe na podatke koji se prikazuju ili na grafikon. Da bismo potisnuli upozorenje, nakon redaka za uvoz u našem kodu možemo dodati sljedeće retke koda.
Upozorenja o uvozu import matplotlib.cbook warnings.filterwarnings („zanemari“, kategorija = matplotlib.cbook.mplDeprecation)


To je to za sve momke iz ovog tutorijala, da biste u potpunosti testirali svoj osciloskop, analogni uređaj poput potenciometra možete povezati na kanal na ADC-u i trebali biste vidjeti promjene podataka pri svakom okretanju potenciometra. Ili možete unijeti sinusni val ili kvadratni val da biste testirali izlaz.
Hvala na čitanju, ako imate pitanja ili nešto što biste htjeli da dodam, samo mi ostavite komentar.
Do sljedećeg puta, nastavite izrađivati!
