- Kako radi
- Potrebne komponente
- Sheme
- Arduino Osclloscope Code
- Python (Ploter) skripta
- Arduino kôd
- Arduino osciloskop u akciji
Osciloskop je jedan od najvažnijih alata koji ćete pronaći na radnom stolu bilo kojeg elektroničkog inženjera ili proizvođača. Primarno se koristi za gledanje valnog oblika i određivanje razina napona, frekvencije, šuma i ostalih parametara signala primijenjenih na njegovom ulazu koji bi se s vremenom mogli mijenjati. Također ga koriste ugrađeni programeri za otklanjanje pogrešaka kodom i tehničari za rješavanje problema s elektroničkim uređajima tijekom popravka. Iz tih razloga osciloskop mora biti alat koji mora imati svaki inženjer. Jedino što mogu biti vrlo skupi, osciloskopi koji izvode najosnovnije funkcije s najmanje točnosti mogu biti skupi od 45 do 100 američkih dolara, dok napredniji i učinkovitiji koštaju više od 150 američkih dolara. Danas ću pokazati kako se koristi Arduinoi softver koji će se razviti s mojim omiljenim programskim jezikom Python za izgradnju jeftinog četverokanalnog Arduino osciloskopa sposobnog za izvršavanje zadataka za koje su raspoređeni neki od jeftinih osciloskopa poput prikaza valnih oblika i određivanja naponskih razina za signale.
Kako radi
Postoje dva dijela za ovaj projekt;
- Pretvarač podataka
- Plotter
Osciloskopi obično uključuju vizualni prikaz analognog signala primijenjenog na njegov ulazni kanal. Da bismo to postigli, prvo moramo signal pretvoriti iz analognog u digitalni, a zatim ucrtati podatke. Za pretvorbu ćemo se poslužiti ADC-om (analogno u digitalni pretvarač) na mikrokontroleru atmega328p koji koristi Arduino za pretvaranje analognih podataka na ulaznom signalu u digitalni signal. Nakon pretvorbe, vrijednost po vremenu šalje se putem UART-a s Arduina na računalo gdje će softver za crtanje koji će se razviti pomoću pythona pretvoriti dolazni tok podataka u valni oblik crtajući svaki podatak prema vremenu.
Potrebne komponente
Za izgradnju ovog projekta potrebne su sljedeće komponente;
- Arduino Uno (može se koristiti bilo koja druga ploča)
- Breadboard
- Otpornik 10k (1)
- LDR (1)
- Žice kratkospojnika
Potrebni softveri
- Arduino IDE
- Piton
- Python knjižnice: Pyserial, Matplotlib, Drawnow
Sheme
Shema Arduino osciloskopa je jednostavna. Sve što trebamo je spojiti signal koji se ispituje na navedeni analogni pin Arduina. Međutim, koristit ćemo LDR u jednostavnom postavljanju djelitelja napona za generiranje signala koji se ispituje, tako da generirani valni oblik opisuje razinu napona na temelju intenziteta svjetlosti oko LDR-a.
Spojite komponente kao što je prikazano u donjim shemama;

Nakon povezivanja, postavi bi se trebala svidjeti slika u nastavku.

Kad su sve veze gotove, možemo nastaviti s pisanjem koda.
Arduino Osclloscope Code
Pisat ćemo kodove za svaki od dva odjeljka. Za Plotter kao što je ranije spomenuto, napisat ćemo python skriptu koja prihvaća podatke iz Arduina putem UART-a i Plots-a, dok ćemo za pretvarač pisati Arduino skicu koja uzima podatke iz ADC-a i pretvara ih u razine napona koje se šalju u plotter.
Python (Ploter) skripta
Budući da je python kod složeniji, počet ćemo s njim.
Koristit ćemo nekoliko knjižnica, uključujući; drawnow, Matplotlib i Pyserial s python skriptom kao što je ranije spomenuto. Pyserial nam omogućuje stvaranje python skripte koja može komunicirati preko serijskog porta, Matplotlib nam daje mogućnost generiranja grafikona iz podataka primljenih preko serijskog porta, a drawnow pruža sredstvo za ažuriranje parcele u stvarnom vremenu.
Postoji nekoliko načina za instaliranje ovih paketa na računalo, a najlakši je putem pipa . Pip se može instalirati putem naredbenog retka na Windows ili Linux računalu. PIP je pakiran s python3, pa ću vam savjetovati da instalirate python3 i označite okvir za dodavanje pythona u stazu. Ako imate problema s instaliranjem pipa, savjete potražite na ovom službenom web mjestu pythona.
Ako je pip instaliran, sada možemo instalirati ostale knjižnice koje su nam potrebne.
Otvorite naredbeni redak za korisnike Windowsa, terminal za korisnike Linuxa i unesite sljedeće;
pip instalirati pyserial
Nakon toga instalirajte matplotlib koristeći;
pip instalirati matplotlib
Drawnow se ponekad instalira uz matplotlib, ali samo da bude siguran, pokrenite;
pip instalirati drawnow
Po završetku instalacije sada smo spremni za pisanje python skripte.
Python skripta za ovaj projekt slična je onoj koju sam napisao za osciloskop zasnovan na Raspberry Pi.
Počinjemo s uvozom svih knjižnica potrebnih za kôd;
vrijeme uvoza import matplotlib.pyplot as plt from drawnow import * import pyserial
Dalje, kreiramo i inicijaliziramo varijable koje će se koristiti tijekom koda. Polje val koristit će se za pohranu podataka primljenih sa serijskog porta, a cnt će se koristiti za brojanje. Podaci na lokaciji 0 izbrisat će se nakon svakih 50 brojanja podataka. To se radi kako bi se podaci prikazivali na osciloskopu.
val = cnt = 0
Dalje, kreiramo objekt serijskog porta putem kojeg će Arduino komunicirati s našom python skriptom. Provjerite je li dolje navedeni com port isti com port preko kojeg vaša Arduino ploča komunicira s IDE-om. Gore korištena brzina prijenosa 115200 korištena je za osiguravanje velike brzine komunikacije s Arduinom. Da bi se spriječile pogreške, serijski port Arduino također mora biti omogućen za komunikaciju s ovom brzinom prijenosa.
port = serial.Serial ('COM4', 115200, timeout = 0,5)
Dalje, radnju radimo interaktivno koristeći;
plt.ion ()
trebamo stvoriti funkciju za generiranje grafikona iz primljenih podataka, stvarajući gornju i minimalnu granicu koju očekujemo, što je u ovom slučaju 1023 na temelju rezolucije Arduinovog ADC-a. Također smo postavili naslov, označili svaku os i dodali legendu kako bismo olakšali prepoznavanje radnje.
#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 =' donji desni ')
Kad smo to učinili, sada smo spremni napisati glavnu petlju koja uzima podatke iz serijskog porta kad su dostupni i iscrtava ih. Da bi se sinkronizirao s Arduinom, Python skripta šalje Arduinu podatke rukovanja kako bi ukazao na spremnost za čitanje podataka. Kad Arduino primi podatke o rukovanju, odgovara s podacima iz ADC-a. Bez ovog rukovanja nećemo moći ucrtati podatke u stvarnom vremenu.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # ako arduino odgovori value = port.readline () # pročitajte odgovor print (value) #print kako bismo mogli nadgledajte ga broj = int (vrijednost) # pretvori primljene podatke u cjelobrojni ispis ('Kanal 0: {0}'. format (broj)) # Spavanje pola sekunde. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot za odražavanje novog unosa podataka plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # održavajte crtež svježim brisanjem podataka na položaju 0
Kompletan piton kod za Arduino osciloskop se daje na kraju ovog članka prikazano u nastavku.
Arduino kôd
Drugi kod je Arduino skica za dobivanje podataka koji predstavljaju signal iz ADC-a, a zatim pričekajte da primite signal rukovanja od softvera crtača. Čim primi signal rukovanja, preko UART-a šalje prikupljene podatke softveru za crtanje.
Mi početi proglašenje pin na analognom pin na Arduino na koje će se primjenjivati signal.
int osjetnik = A0;
Dalje, inicijaliziramo i započinjemo serijsku komunikaciju brzinom prijenosa od 115200
void setup () { // inicijalizira serijsku komunikaciju brzinom od 115200 bita u sekundi kako bi se podudarala s onom python skripte: Serial.begin (115200); }
I na kraju, funkcija voidloop () koja obrađuje čitanje podataka i šalje podatke serijski na crtač.
void loop () { // očitavanje ulaza na analognom pinu 0: float sensorValue = analogRead (sensorpin); bajtni podaci = Serial.read (); if (podaci == 's') { Serial.println (sensorValue); kašnjenje (10); // kašnjenje između čitanja radi stabilnosti } }
Kompletan Arduino osciloskop Kod je naveden u nastavku, kao i na kraju ovog članka prikazano u nastavku.
int osjetnik = A0; void setup () { // inicijalizira serijsku komunikaciju brzinom od 115200 bita u sekundi kako bi se podudarala s onom python skripte: Serial.begin (115200); } void loop () { // očitavanje ulaza na analognom pinu 0: ################################### ####################### float sensorValue = analogRead (sensorpin); bajtni podaci = Serial.read (); if (podaci == 's') { Serial.println (sensorValue); kašnjenje (10); // kašnjenje između čitanja radi stabilnosti } }
Arduino osciloskop u akciji
Prenesite kod u postavku Arduina i pokrenite python skriptu. Trebali biste vidjeti kako podaci počinju strujati putem naredbenog retka python, a zaplet se mijenja s intenzitetom svjetlosti, kao što je prikazano na donjoj slici.

Dakle, ovo je način na koji se Arduino može koristiti kao osciloskop, može se napraviti i pomoću Raspberry pi, ovdje provjerite cjelovitu lekciju o osciloskopu baziranom na Raspberry Pi.

