- Projektflöde:
- Projektkrav
- Kretsschema:
- Installera Beroenden för Raspberry Pi Oscilloskop:
- Python-kod för Raspberry Pi-oscilloskop:
- Raspberry Pi Oscilloskop i aktion:
Hej killar, välkommen till dagens inlägg. En av de mest fascinerande sakerna med att vara tillverkare är att veta hur man utvecklar provisoriska verktyg, du kommer aldrig fastna i arbetet med något projekt när du har den typen av mångsidighet. Så idag kommer jag att dela hur jag bygger en Raspberry Pi- baserad provisorisk version av ett av de viktigaste verktygen inom elektroteknik; Oscilloskopet.
Oscilloskopet är ett elektroniskt testinstrument som möjliggör visualisering och observation av varierande signalspänningar, vanligtvis som ett tvådimensionellt diagram med en eller flera signaler ritade mot tiden. Dagens projekt kommer att försöka kopiera oscilloskopets signalvisualiseringsfunktioner med Raspberry Pi och en analog till digital omvandlarmodul.
Projektflöde:
Replikering av signalvisualisering av oscilloskopet med Raspberry Pi kräver följande steg;
1. Utför digital till analog konvertering av insignalen
2. Förbered de resulterande uppgifterna för representation
3. Plotta informationen i en levande tidtabell
Ett förenklat blockschema för detta projekt skulle se ut som diagrammet nedan.
Projektkrav
Kravet för detta projekt kan delas in i två:
- Hårdvarukrav
- Programvarukrav
Hårdvarukrav
För att bygga detta projekt krävs följande komponenter / del;
- Hallon pi 2 (eller någon annan modell)
- 8 eller 16 GB SD-kort
- LAN / Ethernet-kabel
- Strömförsörjning eller USB-kabel
- ADS1115 ADC
- LDR (valfritt som testet)
- 10k eller 1k motstånd
- Bygeltrådar
- Bakbord
- Övervaka eller något annat sätt att se pis Desktop (inklusive VNC)
Programvarukrav
Mjukvarukraven för detta projekt är i grunden pythonmodulerna ( matplotlib och drawow ) som kommer att användas för datavisualisering och Adafruit-modulen för gränssnitt med ADS1115 ADC-chipet. Jag kommer att visa hur man installerar dessa moduler på Raspberry Pi när vi fortsätter.
Medan denna handledning fungerar oavsett hallon pi OS som används, kommer jag att använda Raspberry Pi stretch OS och jag antar att du är bekant med att ställa in Raspberry Pi med Raspbian stretch OS, och du vet hur man SSH i hallon pi med hjälp av en terminalprogramvara som kitt. Om du har problem med något av detta finns det massor av Raspberry Pi-handledning på den här webbplatsen som kan hjälpa till.
Med alla hårdvarukomponenter på plats, låt oss skapa schemat och koppla ihop komponenterna.
Kretsschema:
För att konvertera de analoga insignalerna till digitala signaler som kan visualiseras med Raspberry Pi kommer vi att använda ADS1115 ADC-chipet. Detta chip blir viktigt eftersom Raspberry Pi, till skillnad från Arduino och de flesta mikrokontroller, inte har en inbyggd analog till digital omvandlare (ADC). Även om vi kunde ha använt vilket som helst hallon-pi-kompatibelt ADC-chip, föredrar jag detta chip på grund av dess höga upplösning (16 bitar) och dess väldokumenterade datablad och användningsinstruktioner från Adafruit. Du kan också kolla vår Raspberry Pi ADC-handledning för att lära dig mer om det.
ADC är en I2C-baserad enhet och ska anslutas till Raspberry Pi som visas i schemat nedan.
För tydlighetens skull beskrivs också stiftanslutningen mellan de två komponenterna nedan.
ADS1115 och Raspberry Pi-anslutningar:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
När alla anslutningar är klara, starta din pi och fortsätt att installera beroenden som nämns nedan.
Installera Beroenden för Raspberry Pi Oscilloskop:
Innan vi börjar skriva python-skriptet för att hämta data från ADC och plotta det i en live-graf, måste vi aktivera I2C-kommunikationsgränssnittet för hallon pi och installera de programvarukrav som nämnts tidigare. Detta kommer att göras i nedanstående steg så det är lätt att följa:
Steg 1: Aktivera Raspberry Pi I2C-gränssnitt
För att aktivera I2C, kör från terminalen;
sudo raspi-config
När konfigurationspanelerna öppnas väljer du gränssnittsalternativ, väljer I2C och klickar på aktivera.
Steg 2: Uppdatera Raspberry pi
Det första jag gör innan jag startar något projekt är att uppdatera Pi. Genom detta är jag säker på att alla saker på operativsystemet är uppdaterade och jag kommer inte att uppleva kompatibilitetsproblem med den senaste programvaran jag väljer att installera på Pi. För att göra detta, kör under två kommandon:
sudo apt-get uppdatering sudo apt-get upgrade
Steg 3: Installera Adafruit ADS1115-biblioteket för ADC
När uppdateringen är klar är vi nu redo att installera beroenden som börjar med Adafruit python-modulen för ADS115-chipet. Se till att du är i Raspberry Pi-hemkatalogen genom att köra;
cd ~
installera sedan build-essentials genom att köra;
sudo apt-get install build-essential python-dev python-smbus git
Klona sedan Adafruit git-mappen för biblioteket genom att köra;
git-klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Byt till den klonade filens katalog och kör installationsfilen;
cd Adafruit_Python_ADS1x1z sudo python setup.py installation
Efter installationen ska din skärm se ut som bilden nedan.
Steg 4: Testa biblioteket och 12C-kommunikationen.
Innan vi fortsätter med resten av projektet är det viktigt att testa biblioteket och se till att ADC kan kommunicera med hallon pi över I2C. För att göra detta använder vi ett exempelskript som medföljer biblioteket.
Medan du fortfarande är i mappen Adafruit_Python_ADS1x15, byt katalog till exempelkatalogen genom att köra;
cd-exempel
Kör sedan exemplet sampletest.py som visar värdet på de fyra kanalerna på ADC i tabellform.
Kör exemplet med:
python simpletest.py
Om I2C-modulen är aktiverad och anslutningarna är bra, bör du se data som visas i bilden nedan.
Om ett fel uppstår, kontrollera att ADC är väl ansluten till PI och att I2C-kommunikation är aktiverad på Pi.
Steg 5: Installera Matplotlib
För att visualisera data måste vi installera matplotlib- modulen som används för att plotta alla slags grafer i python. Detta kan göras genom att köra;
sudo apt-get install python-matplotlib
Du borde se ett resultat som bilden nedan.
Steg 6: Installera drawNow python-modulen
Slutligen måste vi installera den ritade pythonmodulen . Den här modulen hjälper oss att tillhandahålla liveuppdateringar till dataplanen.
Vi kommer att installera drawow via installationsprogrammet för python; pip , så vi måste se till att den är installerad. Detta kan göras genom att köra;
sudo apt-get install python-pip
Vi kan sedan använda pip för att installera drawow- paketet genom att köra:
sudo pip install Drawow
Du bör få ett resultat som bilden nedan efter att ha kört den.
Med alla beroenden installerade är vi nu redo att skriva koden.
Python-kod för Raspberry Pi-oscilloskop:
Pythonkoden för detta Pi-oscilloskop är ganska enkel, särskilt om du känner till python- matplotlib- modulen. Innan jag visar hela koden kommer jag att försöka dela upp den och förklara vad varje del av koden gör så att du kan ha tillräckligt med kunskap för att utöka koden för att göra fler saker.
I detta skede är det viktigt att byta till en bildskärm eller använda VNC-visaren, allt genom vilket du kan se din Raspberry Pi-skrivbord, eftersom grafen som ritas inte visas på terminalen.
Med skärmen som gränssnitt öppnar du en ny pythonfil. Du kan kalla det vilket namn du vill, men jag kommer att kalla det scope.py.
sudo nano scope.py
Med den skapade filen är det första vi gör att importera modulerna vi ska använda;
import tid import matplotlib.pyplot som plt från drawNow import * import Adafruit_ADS1x15
Därefter skapar vi en instans av ADS1x15-biblioteket som anger ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Därefter ställer vi in förstärkningen av ADC. Det finns olika förstärkningsintervall och bör väljas baserat på den spänning du förväntar dig vid ingången till ADC. För denna handledning uppskattar vi en 0 - 4.09v så att vi kommer att använda en förstärkning på 1. För mer information om vinst kan du kontrollera databladet ADS1015 / ADS1115.
VINST = 1
Därefter måste vi skapa arrayvariablerna som kommer att användas för att lagra data som ska plottas och en annan för att fungera som räkning.
Val = cnt = 0
Därefter känner vi till våra avsikter att göra tomten interaktiv så att vi kan plotta informationen live.
plt.ion ()
Därefter startar vi kontinuerlig ADC-konvertering som anger ADC-kanalen, i det här fallet kanal 0 och vi anger också förstärkningen.
Det bör noteras att alla de fyra ADC-kanalerna på ADS1115 kan läsas samtidigt, men en kanal räcker för denna demonstration.
adc.start_adc (0, gain = GAIN)
Därefter skapar vi en funktion def makeFig , för att skapa och ställa in attributen för grafen som kommer att hålla vår live-plot. Först och främst ställer vi in y-axelns gränser med hjälp av ylim , varefter vi matar in titeln på plottet och etikettnamnet innan vi specificerar de data som ska plottas och dess plotstil och färg med plt.plot (). Vi kan också ange kanalen (som kanal 0 angavs) så att vi kan identifiera varje signal när ADC: s fyra kanaler används. plt.legend används för att ange var vi vill att informationen om den signalen (t.ex. kanal 0) ska visas på figuren.
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC-utgångar') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'nedre högra')
Därefter skriver vi while- slingan som kommer att användas ständigt läsa data från ADC och uppdatera diagrammet därefter.
Det första vi gör är att läsa ADC-omvandlingsvärdet
värde = adc.get_last_result ()
Därefter skriver vi ut värdet på terminalen bara för att ge oss ett annat sätt att bekräfta de plottade uppgifterna. Vi väntar några sekunder efter utskrift och sedan lägger vi till data i listan (val) som skapats för att lagra data för den kanalen.
skriv ut ('Channel 0: {0}'. format (värde)) time.sleep (0.5) val.append (int (value))
Vi kallar sedan drawow för att uppdatera handlingen.
drawow (makeFig)
För att säkerställa att de senaste uppgifterna är tillgängliga på plottet, tar vi bort data vid index 0 efter var 50: e dataräkning.
cnt = cnt + 1 om (cnt> 50): val.pop (0)
Det är allt!
Den fullständiga Python-koden ges i slutet av denna handledning.
Raspberry Pi Oscilloskop i aktion:
Kopiera hela python-koden och klistra in i python-filen som vi skapade tidigare, kom ihåg att vi behöver en bildskärm för att visa plottet så allt detta ska göras antingen av VNC eller med en ansluten bildskärm eller skärm.
Spara koden och kör med;
sudo python scope.py
Om du använde ett annat namn än scope.py, glöm inte att ändra det så att det matchar.
Efter några minuter bör du se ADC-data skrivs ut på terminalen. Ibland kan du få en varning från matplotlib (som visas i bilden nedan) som ska undertryckas men det påverkar inte data som visas eller plot i alla fall. För att undertrycka varningen kan följande rader med kod läggas till efter importraderna i vår kod.
Importera varningar importera matplotlib.cbook warnings.filterwarnings ("ignorera", kategori = matplotlib.cbook.mplDeprecation)
Det är det för den här handledningens killar, för att testa ditt oscilloskop fullständigt kan du ansluta en analog enhet som en potentiometer till en kanal på ADC och du bör se dataändringen för varje varv av potentiometern. Eller så kan du mata in sinusvåg eller fyrkantvåg för att testa utdata.
Tack för att du läste, om du har några frågor eller något du vill att jag ska lägga till, lämna bara en kommentar till mig.
Till nästa gång, fortsätt göra!