- Hur det fungerar
- Nödvändiga komponenter
- Scheman
- Arduino Osclloskopkod
- Python (Plotter) -skript
- Arduino-kod
- Arduino Oscilloskop i aktion
Oscilloskopet är ett av de viktigaste verktygen du hittar på arbetsbänken för alla elektronikingenjörer eller tillverkare. Den används främst för visning av vågform och för att bestämma spänningsnivåer, frekvens, brus och andra parametrar för signaler som appliceras vid dess ingång som kan förändras över tiden. Den används också av inbäddade programutvecklare för kodfelsökning och tekniker för felsökning av elektroniska enheter under reparation. Dessa skäl gör oscilloskopet till ett måste för alla ingenjörer. Det enda problemet är att de kan vara mycket dyra, Oscilloskop som utför de mest grundläggande funktionerna med minst noggrannhet kan vara så dyra som $ 45 till $ 100 medan de mer avancerade och effektiva har kostat över $ 150. Idag kommer jag att demonstrera hur man använder Arduinooch en programvara, som kommer att utvecklas med mitt favoritprogrammeringsspråk Python, för att bygga ett billigt 4-kanals Arduino-oscilloskop som kan utföra de uppgifter för vilka en del av det billiga oscilloskopet används som visning av vågformer och bestämning av spänningsnivåer för signaler.
Hur det fungerar
Det finns två delar för detta projekt;
- Datakonverteraren
- Plottaren
Oscilloskop involverar vanligtvis den visuella representationen av en analog signal applicerad på dess ingångskanal. För att uppnå detta måste vi först konvertera signalen från analog till digital och sedan plotta informationen. För konverteringen kommer vi att använda ADC (Analog till Digital-omvandlare) på atmega328p-mikrokontrollern som används av Arduino för att konvertera Analoga data vid signalingången till en digital signal. Efter konvertering skickas värdet per tid via UART från Arduino till PC där plotterprogramvaran som kommer att utvecklas med hjälp av python kommer att konvertera den inkommande dataströmmen till en vågform genom att plotta varje data mot tiden.
Nödvändiga komponenter
Följande komponenter krävs för att bygga detta projekt;
- Arduino Uno (någon av de andra brädorna kan användas)
- Bakbord
- 10k motstånd (1)
- LDR (1)
- Bygeltrådar
Nödvändiga programvaror
- Arduino IDE
- Pytonorm
- Python-bibliotek: Pyserial, Matplotlib, Drawnow
Scheman
Schemat för Arduino Oscilloskop är enkelt. Allt vi behöver göra är att ansluta signalen som ska undersökas till den angivna analoga stiftet på Arduino. Emellertid kommer vi att använda LDR på ett enkelt spänningsdelare installation för att generera den signal som skall undersökas, så att den genererade vågformen kommer att beskriva spänningsnivån, baserat på intensiteten av ljus runt LDR.
Anslut komponenterna som visas i schemat nedan;
Efter anslutning bör installationen gilla bilden nedan.
Med alla anslutningar klar kan vi fortsätta att skriva koden.
Arduino Osclloskopkod
Vi kommer att skriva koder för var och en av de två sektionerna. För Plotter som nämnts tidigare kommer vi att skriva ett python-skript som accepterar data från Arduino via UART och Plots, medan vi för omvandlaren skriver en Arduino-skiss som tar in data från ADC och konverterar den till spänningsnivåer som skickas till plottaren.
Python (Plotter) -skript
Eftersom pythonkoden är mer komplex börjar vi med den.
Vi kommer att använda ett par bibliotek inklusive; drawnow, Matplotlib och Pyserial med pythonscript som nämnts tidigare. Pyserial tillåter oss att skapa ett python-skript som kan kommunicera över den seriella porten, Matplotlib ger oss möjlighet att generera tomter från den data som mottas över den seriella porten och drawow ger oss möjlighet att uppdatera plottet i realtid.
Det finns flera sätt att installera dessa paket på din dator, det enklaste är via pip . Pip kan installeras via kommandoraden på en Windows- eller Linux-maskin. PIP är förpackat med python3 så jag rekommenderar att du installerar python3 och markerar rutan för att lägga till python i sökvägen. Om du har problem med att installera pip, kolla in den här den officiella pythonsidan för tips.
Med pip installerad kan vi nu installera de andra biblioteken vi behöver.
Öppna kommandotolken för Windows-användare, terminal för Linux-användare och ange följande;
pip installera pyserial
Med detta gjort installerar du matplotlib med;
pip installera matplotlib
Drawnow installeras ibland tillsammans med matplotlib men bara för att vara säker, kör;
pip install Drawnow
När installationen är klar är vi nu redo att skriva python-skriptet.
Pythonscriptet för detta projekt liknar det jag skrev för Raspberry Pi Based Oscilloscope.
Vi börjar med att importera alla bibliotek som behövs för koden.
importtid import matplotlib.pyplot som plt från drawow import * import pyserial
Därefter skapar och initialiserar vi de variabler som kommer att användas under koden. Array val kommer att användas för att lagra data som tas emot från den seriella porten och cnt kommer att användas för att räkna. Data på plats 0 raderas efter var 50: e dataräkning. Detta görs för att hålla data som visas i oscilloskopet.
val = cnt = 0
Därefter skapar vi det seriella portobjektet genom vilket Arduino kommer att kommunicera med vårt python-skript. Se till att den nedan angivna porten är samma port genom vilken ditt Arduino-kort kommunicerar med IDE. 115200 baudhastigheten som användes ovan användes för att säkerställa höghastighetskommunikation med Arduino. För att förhindra fel måste Arduino serieport också vara aktiverad för att kommunicera med denna överföringshastighet.
port = serial.Serial ('COM4', 115200, timeout = 0,5)
Därefter gör vi handlingen interaktiv med;
plt.ion ()
Vi måste skapa en funktion för att generera plot från den mottagna data, skapa den övre och minsta gräns som vi förväntar oss, som i detta fall är 1023 baserat på upplösningen av Arduinos ADC. Vi ställer också in titeln, märker varje axel och lägger till en legend för att göra det enkelt att identifiera plot.
#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 =' lower right ')
Med detta gjort är vi nu redo att skriva huvudslingan som tar data från den seriella porten när den är tillgänglig och plottar den. För att synkronisera med Arduino skickas en handskakningsdata till Arduino av python-skriptet för att indikera att det är berett att läsa data. När Arduino tar emot handskakningsdata, svarar den med data från ADC. Utan detta handskakning kommer vi inte att kunna plotta informationen i realtid.
medan (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # om arduino svarar värde = port.readline () # läs svarstrycket (värde) #print så att vi kan övervaka det antal = int (värde) # konvertera mottagen data till heltal utskrift ('Kanal 0: {0}'. format (nummer)) # Sov i en halv sekund. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot to reflect new data input plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # håll tomten ny genom att radera data på position 0
Den kompletta pytonkoden för arduino-oscilloskop ges i slutet av den här artikeln som visas nedan.
Arduino-kod
Den andra koden är Arduino-skissen för att erhålla data som representerar signalen från ADC, vänta sedan med att ta emot handskakningssignalen från plotterprogramvaran. Så snart den tar emot handskakningssignalen skickar den inhämtad data till plotterprogramvaran via UART.
Vi börjar med att deklarera stiftet till den analoga stiftet på Arduino som signalen kommer att appliceras på.
int sensorpin = A0;
Därefter initialiserar vi och startar seriekommunikation med en baudhastighet på 115200
void setup () { // initiera seriell kommunikation med 115200 bitar per sekund för att matcha den för python-skriptet: Serial.begin (115200); }
Slutligen, voidloop () -funktionen som hanterar avläsningen av data och skickar data över serie till plotter.
void loop () { // läs ingången på den analoga stift 0: float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); fördröjning (10); // fördröjning mellan läsningar för stabilitet } }
Den kompletta Arduino Oscilloskopkoden ges nedan och i slutet av den här artikeln som visas nedan.
int sensorpin = A0; void setup () { // initiera seriell kommunikation med 115200 bitar per sekund för att matcha den för python-skriptet: Serial.begin (115200); } ogiltig slinga () { // läs ingången på analog stift 0: ###################################################### ####################### float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); fördröjning (10); // fördröjning mellan läsningar för stabilitet } }
Arduino Oscilloskop i aktion
Ladda upp koden till Arduino-installationen och kör python-skriptet. Du bör se att data börjar strömma in via python-kommandoraden och plottet varierar med ljusintensiteten som visas i bilden nedan.
Så detta är hur Arduino kan användas som oscilloskop, det kan också göras med hjälp av Raspberry pi, kolla här den fullständiga handledningen om Raspberry Pi-baserat Oscilloskop.