- Hvordan det fungerer
- Nødvendige komponenter
- Skjemaer
- Arduino osclloskopkode
- Python (Plotter) -skript
- Arduino-kode
- Arduino oscilloskop i aksjon
Oscilloskopet er et av de viktigste verktøyene du finner på arbeidsbenken til enhver elektronikkingeniør eller produsent. Den brukes primært til å se på bølgeform og bestemme spenningsnivåer, frekvens, støy og andre parametere for signaler som brukes på inngangen som kan endres over tid. Den brukes også av innebygde programvareutviklere for feilsøking av koder og teknikere for feilsøking av elektroniske enheter under reparasjon. Disse grunnene gjør oscilloskopet til et must-verktøy for enhver ingeniør. Det eneste problemet er at de kan være veldig dyre. Oscilloskoper som utfører de mest grunnleggende funksjonene med minst nøyaktighet, kan være så dyre som $ 45 til $ 100, mens de mer avanserte og effektive har kostet over $ 150. I dag skal jeg demonstrere hvordan du bruker Arduinoog en programvare, som vil bli utviklet med mitt favoritt programmeringsspråk Python, for å bygge et billig, 4-kanals Arduino-oscilloskop som er i stand til å utføre oppgavene som noe av det billige oscilloskopet brukes for som visning av bølgeformer og bestemmelse av spenningsnivåer for signaler.
Hvordan det fungerer
Det er to deler for dette prosjektet;
- Datakonverteren
- Plotteren
Oscilloskoper involverer generelt den visuelle representasjonen av et analogt signal som er påført inngangskanalen. For å oppnå dette må vi først konvertere signalet fra analogt til digitalt og deretter plotte dataene. For konvertering vil vi bruke ADC (Analog til Digital omformer) på atmega328p mikrokontrolleren som brukes av Arduino for å konvertere Analog data ved signalinngangen til et digitalt signal. Etter konvertering sendes verdien per gang via UART fra Arduino til PCen der plotterprogramvaren som skal utvikles ved hjelp av python, konverterer den innkommende datastrømmen til en bølgeform ved å plotte hver data mot tiden.
Nødvendige komponenter
Følgende komponenter kreves for å bygge dette prosjektet;
- Arduino Uno (Alle de andre kortene kan brukes)
- Brettbrett
- 10k motstand (1)
- LDR (1)
- Jumper ledninger
Nødvendige programvare
- Arduino IDE
- Python
- Python-biblioteker: Pyserial, Matplotlib, Drawnow
Skjemaer
Skjemaet for Arduino Oscilloscope er enkelt. Alt vi trenger å gjøre er å koble signalet som skal undersøkes, til den angitte analoge pinnen til Arduino. Imidlertid vil vi bruke LDR i et enkelt spenningsdeleroppsett for å generere signalet som skal undersøkes, slik at den genererte bølgeformen vil beskrive spenningsnivået, basert på lysintensiteten rundt LDR.
Koble til komponentene som vist i skjemaene nedenfor;
Etter tilkobling skal oppsettet like bildet nedenfor.
Når tilkoblingene er gjort, kan vi fortsette å skrive koden.
Arduino osclloskopkode
Vi skriver koder for hver av de to seksjonene. For plotteren som nevnt tidligere vil vi skrive et python-skript som aksepterer dataene fra Arduino via UART og Plots, mens vi for omformeren skriver en Arduino-skisse som tar inn dataene fra ADC og konverterer den til spenningsnivåer som sendes til plotteren.
Python (Plotter) -skript
Siden pythonkoden er mer kompleks, vil vi starte med den.
Vi bruker et par biblioteker inkludert; drawow, Matplotlib og Pyserial med python-skriptet som nevnt tidligere. Pyserial lar oss lage et python-skript som kan kommunisere over den serielle porten, Matplotlib gir oss muligheten til å generere plott fra dataene som mottas over den serielle porten, og drawow gir et middel for oss å oppdatere plottet i sanntid.
Det er flere måter å installere disse pakkene på PC-en din, den enkleste er via pip . Pip kan installeres via kommandolinje på en Windows- eller Linux-maskin. PIP er pakket med python3, så jeg vil råde deg til å installere python3 og kryss av i ruten for å legge til python i banen. Hvis du har problemer med å installere pip, kan du sjekke ut det offisielle python-nettstedet for tips.
Med pip installert kan vi nå installere de andre bibliotekene vi trenger.
Åpne ledeteksten for Windows-brukere, terminal for Linux-brukere og skriv inn følgende;
pip installere pyserial
Når dette er gjort, installerer du matplotlib ved hjelp av;
pip installere matplotlib
Drawnow er noen ganger installert ved siden av matplotlib, men bare for å være sikker, kjør;
pip installerte tegnet
Når installasjonen er fullført, er vi nå klare til å skrive python-skriptet.
Python-skriptet for dette prosjektet ligner det jeg skrev for Raspberry Pi Based Oscilloscope.
Vi starter med å importere alle biblioteker som trengs for koden;
importtid import matplotlib.pyplot som plt fra drawow import * import pyserial
Deretter oppretter og initialiserer vi variablene som skal brukes under koden. Matrisen val vil bli brukt til å lagre data mottatt fra den serielle porten og cnt vil bli brukt til å telle. Data på sted 0 vil bli slettet etter hver 50 datatelling. Dette gjøres for å beholde dataene som vises i oscilloskopet.
val = cnt = 0
Deretter oppretter vi det serielle portobjektet som Arduino vil kommunisere med pythonskriptet vårt. Forsikre deg om at porten som er spesifisert nedenfor, er den samme porten som Arduino-kortet ditt kommuniserer med IDE gjennom. 115200 baudrate brukt ovenfor ble brukt for å sikre kommunikasjon med høy hastighet med Arduino. For å forhindre feil, må Arduino-seriellporten også være aktivert for å kommunisere med denne baudfrekvensen.
port = serial.Serial ('COM4', 115200, timeout = 0.5)
Deretter gjør vi plottet interaktivt ved hjelp av;
plt.ion ()
vi trenger å lage en funksjon for å generere plottet fra mottatte data, og skape den øvre og minste grensen vi forventer, som i dette tilfellet er 1023 basert på oppløsningen til Arduinos ADC. Vi setter også tittelen, merker hver akse og legger til en forklaring for å gjøre det enkelt å identifisere 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 =' nede til høyre ')
Når dette er gjort, er vi nå klare til å skrive hovedsløyfen som tar dataene fra den serielle porten når den er tilgjengelig og plotter den. For å synkronisere med Arduino sendes et håndtryksdata til Arduino av python-skriptet for å indikere at det er villig til å lese data. Når Arduino mottar håndtrykkdataene, svarer den med data fra ADC. Uten dette håndtrykket vil vi ikke kunne plotte dataene i sanntid.
mens (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # if arduino replies value = port.readline () # read the reply print (value) #print so we can overvåke det nummer = int (verdi) # konvertere mottatte data til heltall utskrift ('Channel 0: {0}'. format (number)) # Sleep in half a second. time.sleep (0.01) val.append (int (number)) drawow (makeFig) #update plot to reflect new data input plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # hold tomten frisk ved å slette dataene på posisjon 0
Den komplette pytonekoden for arduino-oscilloskop er gitt på slutten av denne artikkelen vist nedenfor.
Arduino-kode
Den andre koden er Arduino-skissen for å skaffe dataene som representerer signalet fra ADC, og vent deretter med å motta håndtrykksignalet fra plotterprogramvaren. Så snart den mottar håndtrykksignalet, sender den innhentede data til plotterprogramvaren via UART.
Vi begynner med å erklære pinnen til den analoge pinnen til Arduino som signalet skal påføres.
int sensorpin = A0;
Deretter initialiserer vi og starter seriell kommunikasjon med en baudrate på 115200
ugyldig oppsett () { // initialiser seriell kommunikasjon med 115200 bits per sekund for å matche den for python-skriptet: Serial.begin (115200); }
Til slutt voidloop () -funksjonen som håndterer lesingen av dataene, og sender dataene serielt til plotteren.
void loop () { // les inngangen på analog pin 0: float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); forsinkelse (10); // forsinkelse mellom avlesninger for stabilitet } }
Den komplette Arduino Oscilloscope-koden er gitt nedenfor så vel som på slutten av denne artikkelen vist nedenfor.
int sensorpin = A0; ugyldig oppsett () { // initialiser seriell kommunikasjon med 115200 bits per sekund for å matche den for python-skriptet: Serial.begin (115200); } ugyldig sløyfe () { // les inngangen på analog pin 0: ############################################################# ###################### float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); forsinkelse (10); // forsinkelse mellom lesing for stabilitet } }
Arduino oscilloskop i aksjon
Last opp koden til Arduino-oppsettet og kjør python-skriptet. Du bør se at dataene begynner å strømme inn via python-kommandolinjen og plottet varierer med lysintensiteten som vist på bildet nedenfor.
Så dette er hvordan Arduino kan brukes som oscilloskop, det kan også lages med Raspberry pi, sjekk her den komplette opplæringen om Raspberry Pi-basert oscilloskop.