- Cum functioneaza
- Componente necesare
- Scheme
- Codul osciloscopului Arduino
- Script Python (Plotter)
- Cod Arduino
- Osciloscop Arduino în acțiune
Osciloscopul este unul dintre cele mai importante instrumente pe care le veți găsi pe bancul de lucru al oricărui inginer sau producător de electronică. Este utilizat în principal pentru vizualizarea formei de undă și determinarea nivelurilor de tensiune, a frecvenței, a zgomotului și a altor parametri ai semnalelor aplicate la intrarea sa care s-ar putea schimba în timp. De asemenea, este utilizat de dezvoltatorii de software încorporat pentru depanarea codului și de tehnicieni pentru depanarea dispozitivelor electronice în timpul reparației. Aceste motive fac din osciloscop un instrument obligatoriu pentru orice inginer. Singura problemă este că pot fi foarte scumpe, osciloscoapele care îndeplinesc cele mai elementare funcții cu cea mai mică precizie pot fi la fel de scumpe ca 45 până la 100 USD, în timp ce cei mai avansați și eficienți au costat peste 150 USD. Astăzi voi demonstra cum să folosesc Arduinoși un software, care va fi dezvoltat cu limbajul meu de programare preferat Python, pentru a construi un osciloscop Arduino cu 4 canale cu cost redus, capabil să îndeplinească sarcinile pentru care sunt desfășurate unele dintre osciloscopurile ieftine, cum ar fi afișarea formelor de undă și determinarea nivelurilor de tensiune pentru semnale.
Cum functioneaza
Există două părți pentru acest proiect;
- Convertorul de date
- Plotterul
Osciloscoapele implică în general reprezentarea vizuală a unui semnal analogic aplicat canalului său de intrare. Pentru a realiza acest lucru, trebuie mai întâi să convertim semnalul de la analog la digital și apoi să trasăm datele. Pentru conversie, vom folosi pachetul ADC (convertor analogic digital) de pe microcontrolerul atmega328p utilizat de Arduino pentru a converti datele analogice la intrarea semnalului într-un semnal digital. După conversie, valoarea pe timp este trimisă prin UART de la Arduino la computer, unde software-ul de plotter care va fi dezvoltat folosind python va converti fluxul de date intrat într-o formă de undă, trasând fiecare dată în funcție de timp.
Componente necesare
Următoarele componente sunt necesare pentru a construi acest proiect;
- Arduino Uno (Oricare dintre celelalte placi pot fi utilizate)
- Breadboard
- Rezistor 10k (1)
- LDR (1)
- Sârme de jumper
Software-uri necesare
- IDE Arduino
- Piton
- Biblioteci Python: Pyserial, Matplotlib, Drawnow
Scheme
Schema pentru osciloscopul Arduino este simplă. Tot ce trebuie să facem este să conectăm semnalul care urmează să fie examinat la pinul analogic specificat al Arduino. Cu toate acestea, vom folosi LDR într-o configurare simplă a divizorului de tensiune pentru a genera semnalul care urmează să fie examinat, astfel încât forma de undă generată să descrie nivelul de tensiune, pe baza intensității luminii din jurul LDR.
Conectați componentele așa cum se arată în schemele de mai jos;
După conectare, setarea ar trebui ca imaginea de mai jos.
Cu toate conexiunile făcute, putem continua să scriem codul.
Codul osciloscopului Arduino
Vom scrie coduri pentru fiecare dintre cele două secțiuni. Pentru Plotter așa cum am menționat mai devreme, vom scrie un script python care acceptă datele de la Arduino prin UART și Plots, în timp ce pentru convertor, vom scrie o schiță Arduino care preia datele de la ADC și le convertește în nivelurile de tensiune care sunt trimise către plotter.
Script Python (Plotter)
Deoarece codul python este mai complex, vom începe cu el.
Vom folosi câteva biblioteci, inclusiv; drawow, Matplotlib și Pyserial cu scriptul python așa cum am menționat mai devreme. Pyserial ne permite să creăm un script python care poate comunica prin portul serial, Matplotlib ne oferă posibilitatea de a genera parcele din datele primite prin portul serial și drawow ne oferă un mijloc pentru a actualiza parcela în timp real.
Există mai multe moduri de a instala aceste pachete pe computerul dvs., cel mai simplu fiind prin pip . Pip poate fi instalat prin linia de comandă pe o mașină Windows sau Linux. PIP este ambalat cu python3, așa că vă sfătuiesc să instalați python3 și să bifați caseta despre adăugarea python la cale. Dacă aveți probleme cu instalarea pip, consultați acest site web oficial Python pentru sfaturi.
Cu pip instalat, putem instala acum celelalte biblioteci de care avem nevoie.
Deschideți promptul de comandă pentru utilizatorii de Windows, terminalul pentru utilizatorii de Linux și introduceți următoarele;
pip instala pyserial
După ce ați terminat, instalați matplotlib folosind;
pip instalează matplotlib
Drawnow este uneori instalat alături de matplotlib, dar doar pentru a fi sigur, rulați;
pip instalare drawow
După finalizarea instalării, suntem acum gata să scriem scriptul Python.
Scriptul python pentru acest proiect este similar cu cel pe care l-am scris pentru osciloscopul bazat pe Raspberry Pi.
Începem prin importarea tuturor bibliotecilor necesare codului;
timp de import import matplotlib.pyplot ca plt din drawow import * import pyserial
Apoi, creăm și inițializăm variabilele care vor fi utilizate în timpul codului. Matricea val va fi utilizată pentru a stoca datele primite de la portul serial și cnt va fi folosit pentru a număra. Datele de la locația 0 vor fi șterse după fiecare 50 de date. Acest lucru se face pentru a menține datele afișate pe osciloscop.
val = cnt = 0
Apoi, creăm obiectul port serial prin care Arduino va comunica cu scriptul nostru python. Asigurați-vă că portul de comunicare specificat mai jos este același port de comunicare prin care placa Arduino comunică cu IDE. Rata de 115200 baud utilizată mai sus a fost utilizată pentru a asigura o comunicare de mare viteză cu Arduino. Pentru a preveni erorile, portul serial Arduino trebuie activat și pentru a comunica cu această rată de transmisie.
port = serial.Serial („COM4”, 115200, timeout = 0,5)
Apoi, facem complotul interactiv folosind;
plt.ion ()
trebuie să creăm o funcție pentru a genera graficul din datele primite, creând limita superioară și minimă pe care o așteptăm, care în acest caz este 1023 pe baza rezoluției ADC-ului Arduino. De asemenea, setăm titlul, etichetăm fiecare axă și adăugăm o legendă pentru a ușura identificarea parcelei.
#create the figure function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro - ', label =' Canal 0 ') plt.legend (loc =' dreapta jos ')
După ce am făcut acest lucru, suntem acum gata să scriem bucla principală care preia datele de la portul serial atunci când sunt disponibile și le trasează. Pentru a sincroniza cu Arduino, o dată de strângere de mână este trimisă către Arduino de către scriptul python pentru a indica disponibilitatea de a citi datele. Când Arduino primește datele de strângere de mână, acesta răspunde cu date de la ADC. Fără această strângere de mână, nu vom putea să trasăm datele în timp real.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # if arduino răspunde value = port.readline () # citește răspunsul print (value) #print astfel încât să putem monitorizați-l numărul = int (valoare) # convertiți datele primite în tipărire întreagă („Canal 0: {0}”. format (număr)) # Adormiți o jumătate de secundă. time.sleep (0.01) val.append (int (număr)) drawow (makeFig) # actualizare grafic pentru a reflecta noile date introduse plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # mențineți graficul proaspăt ștergând datele din poziția 0
Codul complet Python pentru osciloscopul arduino este dat la sfârșitul acestui articol prezentat mai jos.
Cod Arduino
Al doilea cod este schița Arduino pentru a obține datele care reprezintă semnalul de la ADC, apoi așteptați să primiți semnalul de strângere de mână de la software-ul plotter. De îndată ce primește semnalul de strângere de mână, trimite datele achiziționate către software-ul plotter prin UART.
Începem prin a declara pinul pinului analogic al Arduino la care va fi aplicat semnalul.
int sensorpin = A0;
Apoi, inițializăm și începem comunicarea serială cu o rată de transmisie de 115200
void setup () { // inițializați comunicarea serială la 115200 biți pe secundă pentru a se potrivi cu cea a scriptului python: Serial.begin (115200); }
În cele din urmă, funcția voidloop () care se ocupă de citirea datelor și trimite datele prin serial către plotter.
void loop () { // citiți intrarea pe pinul analogic 0: float sensorValue = analogRead (sensorpin); octet date = Serial.read (); if (data == 's') { Serial.println (sensorValue); întârziere (10); // întârziere între citiri pentru stabilitate } }
Complet Arduino Cod Osciloscopul este prezentată mai jos, precum și la sfârșitul acestui articol este prezentat mai jos.
int sensorpin = A0; void setup () { // inițializați comunicarea serială la 115200 biți pe secundă pentru a se potrivi cu cea a scriptului python: Serial.begin (115200); } bucla nulă () { // citiți intrarea pe pinul analogic 0: ##################################### ####################### float sensorValue = analogRead (sensorpin); octet date = Serial.read (); if (data == 's') { Serial.println (sensorValue); întârziere (10); // întârziere între citiri pentru stabilitate } }
Osciloscop Arduino în acțiune
Încărcați codul în configurarea Arduino și rulați scriptul python. Ar trebui să vedeți datele începând să ruleze prin linia de comandă python și graficul variază în funcție de intensitatea luminii, așa cum se arată în imaginea de mai jos.
Deci, astfel Arduino poate fi folosit ca osciloscop, poate fi realizat și folosind Raspberry pi, consultați aici tutorialul complet despre osciloscopul bazat pe Raspberry Pi.