- Hvordan det virker
- Nødvendige komponenter
- Skemaer
- Arduino Osclloscope-kode
- Python (Plotter) script
- Arduino-kode
- Arduino Oscilloskop i aktion
Oscilloskopet er et af de vigtigste værktøjer, du finder på arbejdsbænken hos enhver elektronikingeniør eller producent. Det bruges primært til visning af bølgeform og bestemmelse af spændingsniveauer, frekvens, støj og andre parametre for signaler, der anvendes på dens indgang, der kan ændre sig over tid. Det bruges også af indlejrede softwareudviklere til fejlfinding af kode og teknikere til fejlfinding af elektroniske enheder under reparation. Disse grunde gør oscilloskopet til et must have værktøj for enhver ingeniør. Det eneste problem er, at de kan være meget dyre. Oscilloskoper, der udfører de mest basale funktioner med mindst nøjagtighed, kan være så dyre som $ 45 til $ 100, mens de mere avancerede og effektive har kostet over $ 150. I dag vil jeg demonstrere, hvordan man bruger Arduinoog en software, der vil blive udviklet med mit foretrukne programmeringssprog Python, til at opbygge et billigt 4-kanals Arduino-oscilloskop, der er i stand til at udføre de opgaver, som nogle af de billige oscilloskoper er anvendt til som visning af bølgeformer og bestemmelse af spændingsniveauer for signaler.
Hvordan det virker
Der er to dele til dette projekt;
- Datakonverteren
- Plotteren
Oscilloskoper involverer generelt den visuelle repræsentation af et analogt signal, der påføres dets indgangskanal. For at opnå dette skal vi først konvertere signalet fra analog til digital og derefter plotte dataene. Til konvertering vil vi udnytte ADC (Analog til Digital konverter) på atmega328p mikrocontroller, der bruges af Arduino til at konvertere de analoge data ved signalindgangen til et digitalt signal. Efter konvertering sendes værdien pr. Gang via UART fra Arduino til pc'en, hvor plottersoftwaren, der udvikles ved hjælp af python, konverterer den indgående strøm af data til en bølgeform ved at plotte hver data mod tiden.
Nødvendige komponenter
Følgende komponenter er nødvendige for at opbygge dette projekt;
- Arduino Uno (En hvilken som helst af de andre tavler kan bruges)
- Brødbræt
- 10k modstand (1)
- LDR (1)
- Jumper ledninger
Nødvendige software
- Arduino IDE
- Python
- Python-biblioteker: Pyserial, Matplotlib, Drawnow
Skemaer
Skematisk for Arduino Oscilloscope er enkel. Alt hvad vi skal gøre er at forbinde signalet, der skal undersøges, til den specificerede analoge pin på Arduino. Imidlertid vil vi bruge LDR på simpel spændingsdeler setup at generere signalet, der skal undersøges, således at den genererede bølgeform vil beskrive spændingsniveauet, baseret på intensiteten af lys omkring LDR.
Forbind komponenterne som vist i skemaerne nedenfor;
Efter tilslutning skal installationen kunne lide billedet nedenfor.
Når forbindelserne er færdige, kan vi fortsætte med at skrive koden.
Arduino Osclloscope-kode
Vi skriver koder for hver af de to sektioner. For plotteren, som tidligere nævnt, skriver vi et python-script, der accepterer data fra Arduino via UART og Plots, mens vi til konverteren skriver en Arduino-skitse, der tager dataene fra ADC ind og konverterer den til spændingsniveauer, der sendes til plotteren.
Python (Plotter) script
Da pythonkoden er mere kompleks, starter vi med den.
Vi bruger et par biblioteker inklusive; drawow, Matplotlib og Pyserial med python-scriptet som nævnt tidligere. Pyserial giver os mulighed for at oprette et python-script, der kan kommunikere over den serielle port, Matplotlib giver os muligheden for at generere plots fra de data, der modtages over den serielle port, og drawow giver os et middel til at opdatere plottet i realtid.
Der er flere måder at installere disse pakker på din pc, den nemmeste er via pip . Pip kan installeres via kommandolinjen på en Windows- eller Linux-maskine. PIP er pakket med python3, så jeg vil råde dig til at installere python3 og markere afkrydsningsfeltet om at tilføje python til stien. Hvis du har problemer med installation af pip, skal du tjekke dette på det officielle python-websted for tip.
Med pip installeret kan vi nu installere de andre biblioteker, vi har brug for.
Åbn kommandoprompten til Windows-brugere, terminal til Linux-brugere, og indtast følgende;
pip installer pyserial
Når dette er gjort, skal du installere matplotlib ved hjælp af;
pip installere matplotlib
Drawnow er undertiden installeret sammen med matplotlib, men bare for at være sikker, kør;
pip installeret tegnet
Når installationen er gennemført, er vi nu klar til at skrive python-scriptet.
Python-scriptet til dette projekt svarer til det, jeg skrev til Raspberry Pi Based Oscilloscope.
Vi starter med at importere alle de biblioteker, der er nødvendige for koden;
importtid import matplotlib.pyplot som plt fra drawow import * import pyserial
Dernæst opretter og initialiserer vi de variabler, der vil blive brugt under koden. Array- valget vil blive brugt til at gemme de data, der modtages fra den serielle port, og cnt vil blive brugt til at tælle. Data på sted 0 slettes efter hver 50 datatælling. Dette gøres for at holde dataene vist på oscilloskopet.
val = cnt = 0
Dernæst opretter vi det serielle portobjekt, hvorigennem Arduino kommunikerer med vores python-script. Sørg for, at nedenstående com-port er den samme comport, hvorigennem dit Arduino-kort kommunikerer med IDE. Den anvendte 115200 baudrate blev brugt til at sikre højhastighedskommunikation med Arduino. For at forhindre fejl skal Arduino seriel port også være aktiveret til at kommunikere med denne baudrate.
port = seriel.Serie ('COM4', 115200, timeout = 0,5)
Dernæst gør vi plottet interaktivt ved hjælp af;
plt.ion ()
vi er nødt til at oprette en funktion til at generere plottet ud fra de modtagne data og skabe den øvre og mindste grænse, vi forventer, som i dette tilfælde er 1023 baseret på opløsningen af Arduinos ADC. Vi indstiller også titlen, mærker hver akse og tilføjer en forklaring for at gøre det let at identificere plottet.
#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 =' Channel 0 ') plt.legend (loc =' nederst til højre ')
Når dette er gjort, er vi nu klar til at skrive hovedsløjfen, der tager dataene fra den serielle port, når den er tilgængelig, og plotter dem. For at synkronisere med Arduino sendes et håndtryksdata til Arduino ved hjælp af python-scriptet for at indikere dets beredskab til at læse data. Når Arduino modtager håndtryksdataene, svarer den med data fra ADC. Uden dette håndtryk kan vi ikke plotte dataene i realtid.
mens (True): port.write (b's ') #handshake med Arduino hvis (port.inWaiting ()): # hvis arduinoen svarer værdi = port.readline () # læs svarudskrivningen (værdi) #print, så vi kan overvåg det antal = int (værdi) #konverter modtagne data til heltal udskrivning ('Kanal 0: {0}'. format (nummer)) # Sov i et halvt sekund. time.sleep (0.01) val.append (int (number)) Drawow (makeFig) #update plot for at afspejle nyt data input plt.pause (.000001) cnt = cnt + 1 hvis (cnt> 50): val.pop (0) # hold plottet nyt ved at slette dataene på position 0
Den komplette pythonkode til arduino-oscilloskop er givet i slutningen af denne artikel vist nedenfor.
Arduino-kode
Den anden kode er Arduino-skitsen for at hente dataene, der repræsenterer signalet fra ADC, og vent derefter på at modtage håndtrykssignalet fra plottersoftwaren. Så snart det modtager håndtrykssignalet, sender det de erhvervede data til plottersoftwaren via UART.
Vi starter med at erklære stiften på den analoge stift på Arduino, som signalet vil blive anvendt til.
int sensorpin = A0;
Dernæst initialiserer vi og starter seriel kommunikation med en baudrate på 115200
ugyldig opsætning () { // initialiser seriel kommunikation med 115200 bits pr. sekund for at matche den for python-scriptet: Serial.begin (115200); }
Endelig fungerer voidloop () -funktionen, som håndterer aflæsningen af dataene og sender dataene serielt til plotteren.
void loop () { // læs input på analog pin 0: float sensorValue = analogRead (sensorpin); byte data = Serial.read (); hvis (data == 's') { Serial.println (sensorValue); forsinkelse (10); // forsinkelse mellem læsninger for stabilitet } }
Den komplette Arduino Oscilloscope-kode er angivet nedenfor såvel som i slutningen af denne artikel vist nedenfor.
int sensorpin = A0; ugyldig opsætning () { // initialiser seriel kommunikation med 115200 bits pr. sekund for at matche den for python-scriptet: Serial.begin (115200); } ugyldig sløjfe () { // læs input på analog pin 0: ##################################################### ######################## float sensorValue = analogRead (sensorpin); byte data = Serial.read (); hvis (data == 's') { Serial.println (sensorValue); forsinkelse (10); // forsinkelse mellem læsninger for stabilitet } }
Arduino Oscilloskop i aktion
Upload koden til Arduino-opsætningen, og kør python-scriptet. Du bør se dataene begynde at streame ind via python-kommandolinjen og plottet varierer med lysintensiteten som vist på billedet nedenfor.
Så det er sådan, Arduino kan bruges som oscilloskop, det kan også laves ved hjælp af Raspberry pi, se her den komplette vejledning om Raspberry Pi-baseret oscilloskop.