- Kako deluje
- Zahtevane komponente
- Sheme
- Koda Arduino Osclloscope
- Python (Plotter) skript
- Koda Arduino
- Arduino osciloskop v akciji
Osciloskop je eno najpomembnejših orodij, ki ga boste našli na delovnem mestu katerega koli elektronskega inženirja ali proizvajalca. Uporablja se predvsem za gledanje valovne oblike in določanje ravni napetosti, frekvence, šuma in drugih parametrov signalov, ki se uporabljajo na njegovem vhodu in se sčasoma lahko spremenijo. Uporabljajo ga tudi razviti razvijalci programske opreme za odpravljanje napak kode in tehniki za odpravljanje težav z elektronskimi napravami med popravilom. Zaradi teh razlogov je osciloskop nujno orodje za vsakega inženirja. Edina težava je, da so lahko zelo dragi, osciloskopi, ki opravljajo najosnovnejše funkcije z najmanj natančnostjo, so lahko dragi od 45 do 100 dolarjev, bolj napredni in učinkoviti pa stanejo več kot 150 dolarjev. Danes bom predstavil, kako uporabljati Arduinoin programsko opremo, ki bo razvita z mojim najljubšim programskim jezikom Python, za izdelavo nizkocenovnega 4-kanalnega osciloskopa Arduino, ki bo sposoben opravljati naloge, za katere je nameščenih nekaj poceni osciloskopov, kot so prikaz valovnih oblik in določanje napetostnih ravni za signale.
Kako deluje
Ta projekt ima dva dela;
- Pretvornik podatkov
- Plotter
Osciloskopi običajno vključujejo vizualno predstavitev analognega signala, ki se nanaša na njegov vhodni kanal. Da bi to dosegli, moramo signal najprej pretvoriti iz analognega v digitalni in nato narisati podatke. Za pretvorbo bomo uporabili ADC (analogni v digitalni pretvornik) na mikrokrmilniku atmega328p, ki ga uporablja Arduino za pretvorbo analognih podatkov na vhodnem signalu v digitalni signal. Po pretvorbi se vrednost na čas pošlje preko UART iz Arduina v osebni računalnik, kjer bo programska oprema za risanje, ki bo razvita s pomočjo pythona, pretvorila dohodni tok podatkov v valovno obliko, tako da bo vse podatke narisala glede na čas.
Zahtevane komponente
Za gradnjo tega projekta so potrebne naslednje komponente;
- Arduino Uno (Uporabite lahko katero koli drugo ploščo)
- Breadboard
- 10k upor (1)
- LDR (1)
- Jumper žice
Zahtevana programska oprema
- Arduino IDE
- Python
- Pythonove knjižnice: Pyserial, Matplotlib, Drawnow
Sheme
Shema osciloskopa Arduino je preprosta. Vse, kar moramo storiti, je povezati signal, ki ga želimo pregledati, na določen analogni pin Arduina. Vendar bomo LDR uporabili v enostavni nastavitvi delilnika napetosti, da bomo ustvarili signal, ki ga bomo preučevali, tako da bo generirana valovna oblika opisovala raven napetosti glede na jakost svetlobe okoli LDR.
Priključite komponente, kot je prikazano na spodnji shemi;
Po povezavi mora biti namestitvi všeč spodnja slika.
Z vsemi opravljenimi povezavami lahko nadaljujemo s pisanjem kode.
Koda Arduino Osclloscope
Za vsak odsek bomo pisali kode. Za Plotter, kot smo že omenili, bomo pisali python skript, ki sprejema podatke iz Arduina prek UART in Plots, medtem ko bomo za pretvornik pisali skico Arduino, ki zajema podatke iz ADC in jih pretvori v ravni napetosti, ki se pošljejo v risalnik.
Python (Plotter) skript
Ker je koda pythona bolj zapletena, bomo začeli z njo.
Uporabili bomo nekaj knjižnic, vključno z; drawnow, Matplotlib in Pyserial s skriptom python, kot smo že omenili. Pyserial nam omogoča, da ustvarimo python skript, ki lahko komunicira prek serijskih vrat, Matplotlib nam omogoča, da generiramo ploskve iz podatkov, ki jih dobimo preko serijskih vrat, in drawnow nam omogoča, da posodabljamo ploskev v realnem času.
Obstaja več načinov namestitve teh paketov v računalnik, najlažji pa je prek pipa . Pip lahko namestite prek ukazne vrstice v sistem Windows ali Linux. PIP je pakiran s python3, zato vam svetujem, da namestite python3 in potrdite polje za dodajanje pythona na pot. Če imate težave z namestitvijo pipa, za nasvete obiščite to uradno spletno mesto python.
Z nameščeno pipo lahko zdaj namestimo druge knjižnice, ki jih potrebujemo.
Odprite ukazni poziv za uporabnike sistema Windows, terminal za uporabnike sistema Linux in vnesite naslednje;
pip namestite
Ko končate, namestite matplotlib z uporabo;
pip namestite matplotlib
Drawnow je včasih nameščen skupaj z matplotlib, a samo zato, da se prepričate, zaženite;
pip namestite drawnow
Po končani namestitvi smo zdaj pripravljeni napisati skript python.
Skript python za ta projekt je podoben tistemu, ki sem ga napisal za osciloskop Raspberry Pi.
Začnemo z uvozom vseh knjižnic, potrebnih za kodo;
uvozi čas uvozi matplotlib.pyplot kot plt iz drawnow import * import pyserial
Nato ustvarimo in inicializiramo spremenljivke, ki bodo uporabljene med kodo. Polje val bo uporabljeno za shranjevanje podatkov, prejetih iz serijskih vrat, cnt pa za štetje. Podatki na lokaciji 0 bodo izbrisani po vsakih 50 štetjih podatkov. To se naredi, da se podatki prikazujejo na osciloskopu.
val = cnt = 0
Nato ustvarimo objekt serijskih vrat, prek katerega bo Arduino komuniciral z našim skriptom python. Prepričajte se, da so spodaj navedena com vrata enaka com vrata, prek katerih vaša plošča Arduino komunicira z IDE. Zgoraj uporabljena hitrost prenosa 115200 je bila uporabljena za zagotavljanje visoke hitrosti komunikacije z Arduinom. Da bi preprečili napake, mora biti serijskim vratom Arduino omogočena tudi komunikacija s to hitrostjo prenosa.
port = serial.Serial ('COM4', 115200, timeout = 0,5)
Nato naredimo ploskev interaktivno z uporabo;
plt.ion ()
ustvariti moramo funkcijo za generiranje ploskve iz prejetih podatkov, s čimer ustvarimo zgornjo in najnižjo mejo, ki jo pričakujemo, ki je v tem primeru 1023 na podlagi ločljivosti Arduinovega ADC. Za lažje prepoznavanje ploskve nastavimo tudi naslov, označimo vsako os in dodamo legendo.
#create figura function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' spodaj desno ')
Ko smo to storili, smo zdaj pripravljeni napisati glavno zanko, ki zajema podatke iz serijskih vrat, ko so na voljo, in jih izrisuje. Za sinhronizacijo z Arduinom pitonski skript Arduinu pošlje podatke o rokovanju, ki označujejo njegovo pripravljenost za branje podatkov. Ko Arduino prejme podatke o rokovanju, odgovori s podatki iz ADC. Brez tega stiskanja podatkov ne bomo mogli načrtovati podatkov v realnem času.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # če arduino odgovori value = port.readline () # preberi odgovor print (value) #print, da bomo lahko monitor it number = int (value) # pretvori prejete podatke v celoštevilčni izpis ('Channel 0: {0}'. format (number)) # Spanje pol sekunde. time.sleep (0,01) val.append (int (število)) drawnow (makeFig) #update ploskev, ki odraža vnos novih podatkov plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # ploskev ohranite sveže, tako da izbrišete podatke na položaju 0
Popolna python koda za Arduino osciloskopa je podan na koncu tega članka je prikazano spodaj.
Koda Arduino
Druga koda je skica Arduino za pridobitev podatkov, ki predstavljajo signal iz ADC, nato pa počakajte, da prejmete signal rokovanja iz programske opreme ploterja. Takoj ko prejme signal za rokovanje, pridobljene podatke pošlje programski opremi za risanje prek UART.
Smo začeli z razglasitvijo pin analogno pin za Arduino, na katerega se bo uporabljal signal.
int senzor = A0;
Nato inicializiramo in začnemo serijsko komunikacijo s hitrostjo prenosa 115200
void setup () { // inicializiramo serijsko komunikacijo s hitrostjo 115200 bitov na sekundo, da se ujema s skriptom python: Serial.begin (115200); }
Nazadnje, funkcija voidloop (), ki skrbi za branje podatkov in podatke pošlje v risalnik po seriji.
void loop () { // branje vhoda na analognem zatiču 0: float sensorValue = analogRead (sensorpin); bajtni podatki = Serial.read (); if (data == 's') { Serial.println (sensorValue); zamuda (10); // zamuda med branjem zaradi stabilnosti } }
Popolna Arduino osciloskop koda je navedeno v nadaljevanju, kot tudi na koncu tega članka je prikazano spodaj.
int senzor = A0; void setup () { // inicializiramo serijsko komunikacijo s hitrostjo 115200 bitov na sekundo, da se ujema s skriptom python: Serial.begin (115200); } void loop () { // preberite vhod na analognem zatiču 0: ################################### ####################### float sensorValue = analogRead (sensorpin); bajtni podatki = Serial.read (); if (data == 's') { Serial.println (sensorValue); zamuda (10); // zamuda med branjem zaradi stabilnosti } }
Arduino osciloskop v akciji
Naložite kodo v namestitev Arduino in zaženite skript python. Videti bi morali, kako se podatki začnejo pretakati prek ukazne vrstice python, ploskev pa se spreminja glede na jakost svetlobe, kot je prikazano na spodnji sliki.
Tako lahko Arduino uporabljamo kot osciloskop, lahko ga naredimo tudi z uporabo Raspberry pi, tukaj si oglejte celotno vadnico o osciloskopu, ki temelji na Raspberry Pi.