- Kā tas strādā
- Nepieciešamās sastāvdaļas
- Shēmas
- Arduino oskloskopu kods
- Python (Plotter) skripts
- Arduino kods
- Arduino osciloskops darbībā
Osciloskops ir viens no vissvarīgākajiem rīkiem, ko atradīsit jebkura elektronikas inženiera vai ražotāja darbagaldā. To galvenokārt izmanto, lai skatītu viļņu formu un noteiktu sprieguma līmeņus, frekvenci, troksni un citus signāla parametrus, kas tiek izmantoti tā ieejā un kas laika gaitā var mainīties. To izmanto arī iegultās programmatūras izstrādātāji kodu atkļūdošanai un tehniķi elektronisko ierīču problēmu novēršanai remonta laikā. Šie iemesli padara osciloskopu par obligātu instrumentu jebkuram inženierim. Vienīgais jautājums ir tas, ka tie var būt ļoti dārgi, jo osciloskopi, kas veic visvienkāršākās funkcijas ar vismazāko precizitāti, var būt pat dārgi no 45 līdz 100 ASV dolāriem, savukārt progresīvākie un efektīvākie maksā vairāk nekā 150 ASV dolārus. Šodien es demonstrēšu, kā lietot Arduinoun programmatūru, kas tiks izstrādāta ar manu iecienītāko programmēšanas valodu Python, lai izveidotu zemu izmaksu četrkanālu Arduino osciloskopu, kas spēj izpildīt uzdevumus, kuriem tiek izmantoti daži no lētajiem osciloskopiem, piemēram, viļņu formu parādīšana un sprieguma līmeņu noteikšana signāliem.
Kā tas strādā
Šim projektam ir divas daļas;
- Datu pārveidotājs
- Ploters
Osciloskopi parasti ietver vizuālu attēlojumu analogam signālam, kas tiek ievadīts tā ieejas kanālā. Lai to panāktu, mums vispirms jāpārvērš signāls no analogā uz ciparu un pēc tam dati jāplāno. Konvertēšanai mēs izmantosim ADC (pārveidotāju no analogā uz ciparu) atmega328p mikrokontrollerī, ko Arduino izmanto, lai pārveidotu analogos datus pie signāla ieejas ciparu signālā. Pēc konvertēšanas laika vērtība tiek nosūtīta caur UART no Arduino uz datoru, kur plotera programmatūra, kas tiks izstrādāta, izmantojot pitonu, pārveidos ienākošo datu plūsmu viļņu formā, uzrādot katru datu pret laiku.
Nepieciešamās sastāvdaļas
Lai izveidotu šo projektu, ir nepieciešami šādi komponenti;
- Arduino Uno (var izmantot jebkuru no pārējiem dēļiem)
- Maizes dēlis
- 10k pretestība (1)
- LDR (1)
- Džemperu vadi
Nepieciešamās programmatūras
- Arduino IDE
- Python
- Python bibliotēkas: Pyserial, Matplotlib, Drawnow
Shēmas
Arduino osciloskopa shēma ir vienkārša. Viss, kas mums jādara, ir savienot pārbaudāmo signālu ar norādīto Arduino analogo tapu. Tomēr mēs izmantosim LDR vienkāršā sprieguma dalītāja iestatījumā, lai ģenerētu pārbaudāmo signālu tā, lai ģenerētā viļņu forma aprakstītu sprieguma līmeni, pamatojoties uz gaismas intensitāti ap LDR.
Pievienojiet komponentus, kā parādīts zemāk esošajās shēmās;
Pēc savienojuma iestatīšanai vajadzētu patikt zemāk redzamajam attēlam.
Kad savienojumi ir pabeigti, mēs varam turpināt rakstīt kodu.
Arduino oskloskopu kods
Mēs rakstīsim kodus katrai no divām sadaļām. Plotteram, kā minēts iepriekš, mēs rakstīsim pitona skriptu, kas pieņem datus no Arduino, izmantojot UART un Plots, savukārt pārveidotājam mēs rakstīsim Arduino skici, kas ņem datus no ADC un pārveido tos par sprieguma līmeņi, kas tiek nosūtīti ploterim.
Python (Plotter) skripts
Tā kā pitona kods ir sarežģītāks, mēs sāksim ar to.
Mēs izmantosim dažas bibliotēkas, tostarp; drawow, Matplotlib un Pyserial ar pitona skriptu, kā minēts iepriekš. Pyserial ļauj mums izveidot pitona skriptu, kas var sazināties, izmantojot seriālo portu, Matplotlib dod mums iespēju ģenerēt diagrammas no datiem, kas saņemti, izmantojot seriālo portu, un vilkšana nodrošina mums iespēju atjaunināt grafiku reāllaikā.
Ir vairāki veidi, kā instalēt šīs paketes datorā, visvieglāk izmantojot pip . Pip var instalēt, izmantojot komandrindu Windows vai Linux mašīnā. PIP ir iepakots kopā ar python3, tāpēc es iesaku jums instalēt python3 un atzīmēt izvēles rūtiņu par python pievienošanu ceļam. Ja rodas problēmas ar pip instalēšanu, padomus skatiet šajā oficiālajā pitona vietnē.
Kad ir instalēts pip, mēs tagad varam instalēt citas nepieciešamās bibliotēkas.
Atveriet komandu uzvedni Windows lietotājiem, terminālu Linux lietotājiem un ievadiet šo;
pip instalēt pyserial
Pēc tam instalējiet matplotlib, izmantojot;
pip instalēt matplotlib
Dažreiz Drawnow tiek uzstādīts līdzās matplotlib, taču, lai pārliecinātos, palaidiet;
pip instalēt vilktu
Kad instalēšana ir pabeigta, mēs esam gatavi rakstīt pitona skriptu.
Šī projekta pitona skripts ir līdzīgs tam, ko es uzrakstīju Raspberry Pi balstītam osciloskopam.
Mēs sākam ar visu kodam nepieciešamo bibliotēku importēšanu;
importēšanas laiks importa matplotlib.pyplot kā plt no izvelkamā importa * import pyserial
Pēc tam mēs izveidojam un inicializējam mainīgos, kas tiks izmantoti koda laikā. Masīvs val tiks izmantots no seriālā porta saņemto datu glabāšanai, un cnt tiks izmantots skaitīšanai. Dati vietā 0 tiks izdzēsti pēc katriem 50 datu saskaitīšanas. Tas tiek darīts, lai dati tiktu rādīti osciloskopā.
val = cnt = 0
Pēc tam mēs izveidojam sērijas porta objektu, caur kuru Arduino sazināsies ar mūsu pitona skriptu. Pārliecinieties, ka zemāk norādītais com ports ir tas pats com ports, caur kuru jūsu Arduino dēlis sazinās ar IDE. Iepriekš izmantotais 115200 bitu pārraides ātrums tika izmantots, lai nodrošinātu ātrdarbīgu saziņu ar Arduino. Lai novērstu kļūdas, ir jāiespējo arī Arduino sērijas ports, lai sazinātos ar šo datu pārraides ātrumu.
ports = seriāls. Sērija ('COM4', 115200, taimauts = 0,5)
Tālāk mēs izveidojam sižetu interaktīvu, izmantojot;
plt.ion ()
mums ir jāizveido funkcija, lai no saņemtajiem datiem ģenerētu diagrammu, izveidojot sagaidāmo augšējo un minimālo robežu, kas šajā gadījumā ir 1023, pamatojoties uz Arduino ADC izšķirtspēju. Mēs arī iestatām nosaukumu, iezīmējam katru asi un pievienojam leģendu, lai būtu viegli noteikt sižetu.
# izveidojiet figūras funkciju def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC izejas') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' apakšējā labajā pusē ')
Kad tas ir izdarīts, mēs tagad esam gatavi rakstīt galveno cilpu, kas ņem datus no seriālā porta, kad tie ir pieejami, un tos uzzīmē. Lai sinhronizētu ar Arduino, python skripts uz Arduino nosūta rokasspiediena datus, lai norādītu uz tā gatavību lasīt datus. Kad Arduino saņem rokasspiediena datus, tas atbild ar datiem no ADC. Bez šīs rokasspiediena mēs nevarēsim attēlot datus reāllaikā.
while (True): port.write (b's ') # rokasspiediens ar Arduino if (port.inWaiting ()): # ja arduino atbild vērtība = port.readline () # lasiet atbildes druku (vērtību) #print, lai mēs monitor to number = int (vērtība) #konvertēt saņemtos datus uz veselu skaitļu druku ('0 kanāls: {0}'. formāts (skaitlis)) # Miega režīms pusi sekundes. time.sleep (0.01) val.append (int (number)) drawow (makeFig) #update plot, lai atspoguļotu jaunu datu ievadi plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # saglabāt diagrammu svaigu, dzēšot datus pozīcijā 0
Pilnīga python kodu Arduino osciloskopa tiek dota beigās šo rakstu redzams zemāk.
Arduino kods
Otrais kods ir Arduino skice, lai iegūtu datus, kas attēlo signālu no ADC, un tad pagaidiet, līdz saņemat rokasspiediena signālu no plotera programmatūras. Tiklīdz tā saņem rokasspiediena signālu, tā ar UART starpniecību nosūta iegūtos datus plotera programmatūrai.
Mēs vispirms paziņojam Arduino analogās tapas tapu, kurai tiks piemērots signāls.
int sensora tapa = A0;
Pēc tam mēs inicializējam un sākam sērijveida saziņu ar 115200 datu pārraides ātrumu
void setup () { // inicializējiet sērijveida sakarus ar ātrumu 115200 biti sekundē, lai tie atbilstu pitona skripta datiem: Serial.begin (115200); }
Visbeidzot, funkcija voidloop (), kas apstrādā datu nolasīšanu un datus sērijveidā nosūta ploterim.
void loop () { // nolasiet ievadi analogajā tapā 0: float sensorValue = analogRead (sensora tapa); baitu dati = Serial.read (); if (dati == 's') { Sērijas.println (sensora vērtība); kavēšanās (10); // kavēšanās starp lasījumiem, lai nodrošinātu stabilitāti } }
Pilnīga Arduino osciloskopa kodekss ir norādīts zemāk, kā arī beigās šo rakstu redzams zemāk.
int sensora tapa = A0; void setup () { // inicializējiet sērijveida sakarus ar ātrumu 115200 biti sekundē, lai tie atbilstu pitona skripta datiem: Serial.begin (115200); } void loop () { // nolasiet ievadi 0 analogajā tapā: ####################################### ######################## float sensorValue = analogRead (sensora tapa); baitu dati = Serial.read (); if (dati == 's') { Sērijas.println (sensora vērtība); kavēšanās (10); // kavēšanās starp lasījumiem, lai nodrošinātu stabilitāti } }
Arduino osciloskops darbībā
Augšupielādējiet kodu Arduino iestatījumos un palaidiet python skriptu. Jums vajadzētu redzēt, kā dati tiek straumēti, izmantojot python komandrindu, un diagramma mainās atkarībā no gaismas intensitātes, kā parādīts zemāk esošajā attēlā.
Tātad šādi Arduino var izmantot kā osciloskopu, to var izgatavot arī, izmantojot Raspberry pi, šeit pārbaudiet visu Raspberry Pi balstītā osciloskopa apmācību.