- Prosjektflyt:
- Prosjektkrav
- Kretsdiagram:
- Installer avhengigheter for Raspberry Pi Oscilloscope:
- Python-kode for Raspberry Pi-oscilloskop:
- Raspberry Pi Oscilloscope in Action:
Hei gutter, velkommen til dagens innlegg. Noe av det mest fascinerende med å være produsent er å vite hvordan man kan utvikle provisoriske verktøy, du vil aldri bli sittende fast på å jobbe med noe prosjekt når du har den slags allsidighet. Så i dag vil jeg dele hvordan jeg bygger en Raspberry Pi- basert midlertidig versjon av et av de viktigste verktøyene innen elektroteknikk; Oscilloskopet.
Oscilloskopet er et elektronisk testinstrument som tillater visualisering og observasjon av varierende signalspenninger, vanligvis som et todimensjonalt plot med ett eller flere signaler tegnet mot tiden. Dagens prosjekt vil forsøke å replikere oscilloskopets signalvisualiseringsfunksjoner ved hjelp av Raspberry Pi og en analog til digital omformermodul.
Prosjektflyt:
Å replikere signalvisualiseringen av oscilloskopet ved hjelp av Raspberry Pi vil kreve følgende trinn;
1. Utfør digital til analog konvertering av inngangssignalet
2. Forbered de resulterende dataene for representasjon
3. Plott dataene i en live-tidsgraf
Et forenklet blokkdiagram for dette prosjektet vil se ut som diagrammet nedenfor.
Prosjektkrav
Kravet til dette prosjektet kan klassifiseres i to:
- Maskinvarekrav
- Programvarekrav
Maskinvarekrav
For å bygge dette prosjektet kreves følgende komponenter / del;
- Raspberry pi 2 (eller en hvilken som helst annen modell)
- 8 eller 16 GB SD-kort
- LAN / Ethernet-kabel
- Strømforsyning eller USB-kabel
- ADS1115 ADC
- LDR (valgfritt som ment for test)
- 10k eller 1k motstand
- Jumper ledninger
- Brettbrett
- Skjerm eller annen måte å se pis Desktop (inkludert VNC)
Programvarekrav
Programvarekravene for dette prosjektet er i utgangspunktet pythonmodulene ( matplotlib og drawow ) som skal brukes til datavisualisering og Adafruit-modulen for grensesnitt med ADS1115 ADC-brikken. Jeg vil vise hvordan du installerer disse modulene på Raspberry Pi når vi fortsetter.
Selv om denne opplæringen vil fungere uavhengig av raspberry pi OS som brukes, vil jeg bruke Raspberry Pi stretch OS, og jeg antar at du er kjent med å sette opp Raspberry Pi med Raspbian stretch OS, og du vet hvordan du SSH i bringebær pi ved hjelp av en terminalprogramvare som kitt. Hvis du har problemer med noe av dette, er det mange Raspberry Pi-veiledninger på dette nettstedet som kan hjelpe.
Med alle maskinvarekomponentene på plass, la oss lage skjemaene og koble komponentene sammen.
Kretsdiagram:
For å konvertere de analoge inngangssignalene til digitale signaler som kan visualiseres med Raspberry Pi, bruker vi ADS1115 ADC-brikken. Denne brikken blir viktig fordi Raspberry Pi, i motsetning til Arduino og de fleste mikrokontrollere, ikke har en innebygd analog til digital omformer (ADC). Selv om vi kunne ha brukt en hvilken som helst bringebær-pi-kompatibel ADC-brikke, foretrekker jeg denne brikken på grunn av den høye oppløsningen (16 biter) og det veldokumenterte databladet og bruksanvisningen fra Adafruit. Du kan også sjekke vår Raspberry Pi ADC-opplæring for å lære mer om det.
ADC er en I2C-basert enhet og skal kobles til Raspberry Pi som vist i skjemaene nedenfor.
For klarhetens skyld er pinneforbindelsen mellom de to komponentene også beskrevet nedenfor.
ADS1115 og Raspberry Pi-tilkoblinger:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
Når tilkoblingene er gjort, må du slå på pi-en og fortsette å installere avhengighetene nevnt nedenfor.
Installer avhengigheter for Raspberry Pi Oscilloscope:
Før vi begynner å skrive python-skriptet for å hente data fra ADC og plotte det på en live graf, må vi aktivere I2C-kommunikasjonsgrensesnittet til bringebær-pi og installere programvarekravene som ble nevnt tidligere. Dette gjøres i trinnene nedenfor, så det er enkelt å følge:
Trinn 1: Aktiver Raspberry Pi I2C-grensesnitt
For å aktivere I2C, kjør fra terminalen;
sudo raspi-config
Når konfigurasjonspanelene åpnes, velger du grensesnittalternativer, velger I2C og klikker på aktiver.
Trinn 2: Oppdater Raspberry pi
Det første jeg gjør før jeg starter et prosjekt, er å oppdatere Pi. Gjennom dette er jeg sikker på at alle ting på operativsystemet er oppdatert, og jeg vil ikke oppleve kompatibilitetsproblemer med den nyeste programvaren jeg velger å installere på Pi. For å gjøre dette, kjør under to kommandoer:
sudo apt-get update sudo apt-get upgrade
Trinn 3: Installer Adafruit ADS1115-biblioteket for ADC
Når oppdateringen er gjort, er vi nå klare til å installere avhengighetene som starter med Adafruit python-modulen for ADS115-brikken. Forsikre deg om at du er i Raspberry Pi-hjemmekatalogen ved å kjøre;
cd ~
installer deretter build-essentials ved å kjøre;
sudo apt-get install build-essential python-dev python-smbus git
Klon deretter Adafruit git-mappen for biblioteket ved å kjøre;
git klone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Bytt til den klonede filens katalog og kjør installasjonsfilen;
cd Adafruit_Python_ADS1x1z sudo python setup.py install
Etter installasjonen skal skjermen se ut som bildet nedenfor.
Trinn 4: Test biblioteket og 12C-kommunikasjonen.
Før vi fortsetter med resten av prosjektet, er det viktig å teste biblioteket og sikre at ADC kan kommunisere med bringebær-pi over I2C. For å gjøre dette vil vi bruke et eksempel på skript som følger med biblioteket.
Mens du fremdeles er i Adafruit_Python_ADS1x15-mappen, bytter du katalog til eksempler-katalogen ved å kjøre;
cd eksempler
Kjør deretter sampletest.py-eksemplet som viser verdien av de fire kanalene på ADC i tabellform.
Kjør eksemplet ved å bruke:
python simpletest.py
Hvis I2C-modulen er aktivert og tilkoblingene er gode, bør du se dataene som vist på bildet nedenfor.
Hvis det oppstår en feil, må du kontrollere at ADC er godt koblet til PI og at I2C-kommunikasjon er aktivert på Pi.
Trinn 5: Installer Matplotlib
For å visualisere dataene må vi installere matplotlib- modulen som brukes til å plotte alle slags grafer i python. Dette kan gjøres ved å løpe;
sudo apt-get install python-matplotlib
Du bør se et utfall som bildet nedenfor.
Trinn 6: Installer Drawnow python-modulen
Til slutt må vi installere Drawow Python-modulen. Denne modulen hjelper oss med å tilby liveoppdateringer til dataplanen.
Vi installerer drawow via installasjonsprogrammet for python-pakken; pip , så vi må sørge for at den er installert. Dette kan gjøres ved å løpe;
sudo apt-get install python-pip
Vi kan deretter bruke pip for å installere drawow- pakken ved å kjøre:
sudo pip installerte tegnet
Du bør få et utfall som bildet nedenfor etter å ha kjørt det.
Med alle avhengighetene installert, er vi nå klare til å skrive koden.
Python-kode for Raspberry Pi-oscilloskop:
Pythonkoden for dette Pi-oscilloskopet er ganske enkel, spesielt hvis du er kjent med python- matplotlib- modulen. Før jeg viser oss hele koden, vil jeg prøve å dele den opp og forklare hva hver del av koden gjør, slik at du kan ha nok kunnskap til å utvide koden til å gjøre flere ting.
På dette stadiet er det viktig å bytte til en skjerm eller bruke VNC-visningsprogrammet, alt du kan se Raspberry Pi-skrivebordet gjennom, ettersom grafen som er tegnet ikke vises på terminalen.
Åpne en ny python-fil med skjermen som grensesnitt. Du kan kalle det hvilket som helst navn du vil, men jeg vil kalle det scope.py.
sudo nano scope.py
Når filen er opprettet, er det første vi gjør å importere modulene vi skal bruke;
importtid importerer matplotlib.pyplot som plt fra drawow import * import Adafruit_ADS1x15
Deretter oppretter vi en forekomst av ADS1x15-biblioteket som spesifiserer ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Deretter setter vi gevinsten til ADC. Det er forskjellige forsterkningsområder og bør velges basert på spenningen du forventer ved inngangen til ADC. For denne veiledningen estimerer vi en 0 - 4.09v, så vi vil bruke en forsterkning på 1. For mer informasjon om gevinst, kan du sjekke ADS1015 / ADS1115 databladet.
GAIN = 1
Deretter må vi lage matrixvariablene som skal brukes til å lagre dataene som skal plottes, og en annen som skal tjene som telling.
Val = cnt = 0
Deretter gjør vi kjent med intensjonene våre om å gjøre plottet interaktivt kjent for å gjøre det mulig for oss å plotte dataene live.
plt.ion ()
Deretter starter vi kontinuerlig ADC-konvertering som spesifiserer ADC-kanalen, i dette tilfellet kanal 0, og vi spesifiserer også forsterkningen.
Det skal bemerkes at alle de fire ADC-kanalene på ADS1115 kan leses samtidig, men 1 kanal er nok for denne demonstrasjonen.
adc.start_adc (0, gain = GAIN)
Deretter oppretter vi en funksjon def makeFig , for å lage og sette attributtene til grafen som vil holde vårt live plot. Vi setter først grenser for y-aksen ved hjelp av ylim , hvoretter vi skriver inn tittelen på plottet, og etikettnavnet før vi spesifiserer dataene som skal plottes, og dens plottestil og farge ved hjelp av plt.plot (). Vi kan også oppgi kanalen (som kanal 0 ble oppgitt) slik at vi kan identifisere hvert signal når de fire kanalene til ADC blir brukt. plt.legend brukes til å spesifisere hvor vi vil at informasjonen om signalet (f.eks. kanal 0) skal vises på figuren.
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'nede til høyre')
Deretter skriver vi mens sløyfen som vil bli brukt hele tiden lese data fra ADC og oppdatere plottet deretter.
Det første vi gjør er å lese ADC-konverteringsverdien
verdi = adc.get_last_result ()
Deretter skriver vi ut verdien på terminalen bare for å gi oss en annen måte å bekrefte de plottede dataene på. Vi venter noen sekunder etter utskrift, så legger vi dataene til listen (val) som er opprettet for å lagre dataene for den kanalen.
skriv ut ('Channel 0: {0}'. format (verdi)) time.sleep (0.5) val.append (int (value))
Vi kaller deretter drawow for å oppdatere plottet.
drawow (makeFig)
For å sikre at de nyeste dataene er tilgjengelige på plottet, sletter vi dataene ved indeks 0 etter hver 50 datatelling.
cnt = cnt + 1 hvis (cnt> 50): val.pop (0)
Det er alt!
Den komplette Python-koden er gitt på slutten av denne veiledningen.
Raspberry Pi Oscilloscope in Action:
Kopier den komplette pythonkoden og lim inn i pythonfilen vi opprettet tidligere, husk at vi trenger en skjerm for å se plottet, så alt dette skal gjøres av enten VNC eller med en tilkoblet skjerm eller skjerm.
Lagre koden og kjør med;
sudo python scope.py
Hvis du brukte et annet navn enn scope.py, ikke glem å endre dette for å matche.
Etter noen minutter bør du se ADC-dataene skrives ut på terminalen. Noen ganger kan du få en advarsel fra matplotlib (som vist på bildet nedenfor) som skal undertrykkes, men det påvirker uansett ikke dataene som vises eller plottet. For å undertrykke advarselen kan følgende kodelinjer legges til etter importlinjene i koden vår.
Importer advarsler importer matplotlib.cbook warnings.filterwarnings ("ignorere", kategori = matplotlib.cbook.mplDeprecation)
Det er det for denne opplæringen gutta, for å teste oscilloskopet ditt fullt ut, kan du koble en analog enhet som et potensiometer til en kanal på ADC, og du bør se dataendringen for hver sving av potensiometeret. Eller du kan legge inn sinbølge eller firkantbølge for å teste utdataene.
Takk for at du leser. Hvis du har spørsmål eller spørsmål du vil at jeg skal legge til, er det bare å gi meg en kommentar.
Til neste gang, fortsett å lage!