- Projektflow:
- Projektkrav
- Kredsløbsdiagram:
- Installer afhængigheder til Raspberry Pi Oscilloscope:
- Python-kode til Raspberry Pi-oscilloskop:
- Raspberry Pi Oscilloskop i aktion:
Hej gutter, velkommen til dagens indlæg. En af de mest fascinerende ting ved at være en maker er at vide, hvordan man udvikler provisoriske værktøjer, du vil aldrig sidde fast med at arbejde på noget projekt, når du har den slags alsidighed. Så i dag vil jeg dele, hvordan jeg bygger en Raspberry Pi- baseret provisorisk version af et af de vigtigste værktøjer inden for elektroteknik / elektronikteknik; Oscilloskopet.
Oscilloskopet er et elektronisk testinstrument, der muliggør visualisering og observation af varierende signalspændinger, normalt som et todimensionalt plot med et eller flere signaler tegnet mod tiden. Dagens projekt vil søge at replikere oscilloskopets signalvisualiseringsfunktioner ved hjælp af Raspberry Pi og et analogt til digitalt konverteringsmodul.
Projektflow:
Replikering af signalvisualisering af oscilloskopet ved hjælp af Raspberry Pi kræver følgende trin;
1. Udfør digital til analog konvertering af indgangssignalet
2. Forbered de resulterende data til repræsentation
3. Plot dataene på en live-tidsgraf
Et forenklet blokdiagram for dette projekt vil se ud som nedenstående diagram.
Projektkrav
Kravet til dette projekt kan klassificeres i to:
- Hardwarekrav
- Softwarekrav
Hardwarekrav
For at opbygge dette projekt kræves følgende komponenter / del;
- Hindbær pi 2 (eller enhver anden model)
- 8 eller 16 GB SD-kort
- LAN / Ethernet-kabel
- Strømforsyning eller USB-kabel
- ADS1115 ADC
- LDR (valgfri som beregnet til test)
- 10k eller 1k modstand
- Jumper ledninger
- Brødbræt
- Overvåg eller enhver anden måde at se pi's Desktop på (inklusive VNC)
Softwarekrav
Softwarekravene til dette projekt er dybest set de python-moduler ( matplotlib og drawow ), der skal bruges til datavisualisering, og Adafruit-modulet til grænseflade med ADS1115 ADC-chippen. Jeg vil vise, hvordan jeg installerer disse moduler på Raspberry Pi, når vi fortsætter.
Mens denne vejledning fungerer uanset det anvendte hindbær pi OS, bruger jeg Raspberry Pi stretch OS, og jeg antager, at du er fortrolig med at opsætte Raspberry Pi med Raspbian stretch OS, og du ved hvordan man SSH ind i hindbæret pi ved hjælp af en terminalsoftware som kitt. Hvis du har problemer med noget af dette, er der masser af Raspberry Pi-vejledninger på dette websted, der kan hjælpe.
Med alle hardwarekomponenterne på plads, lad os oprette skemaerne og forbinde komponenterne sammen.
Kredsløbsdiagram:
For at konvertere de analoge indgangssignaler til digitale signaler, som kan visualiseres med Raspberry Pi, bruger vi ADS1115 ADC-chippen. Denne chip bliver vigtig, fordi Raspberry Pi, i modsætning til Arduino og de fleste mikro-controllere, ikke har en indbygget analog til digital konverter (ADC). Selvom vi kunne have brugt en hvilken som helst raspberry pi-kompatibel ADC-chip, foretrækker jeg denne chip på grund af dens høje opløsning (16 bit) og dens veldokumenterede datablad og brugsanvisninger fra Adafruit. Du kan også tjekke vores Raspberry Pi ADC-tutorial for at lære mere om det.
ADC er en I2C-baseret enhed og skal tilsluttes Raspberry Pi som vist i skemaerne nedenfor.
For klarhedens skyld er stiftforbindelsen mellem de to komponenter også beskrevet nedenfor.
ADS1115 og Raspberry Pi-forbindelser:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
Når forbindelserne er færdige, skal du tænde for din pi og fortsætte med at installere de afhængigheder, der er nævnt nedenfor.
Installer afhængigheder til Raspberry Pi Oscilloscope:
Før vi begynder at skrive python-scriptet for at hente data fra ADC og plotte det på en live graf, er vi nødt til at aktivere I2C-kommunikationsgrænsefladen til hindbær pi og installere softwarekravene, der blev nævnt tidligere. Dette gøres i nedenstående trin, så det er let at følge:
Trin 1: Aktivér Raspberry Pi I2C-interface
For at aktivere I2C, kør fra terminalen;
sudo raspi-config
Når konfigurationspanelerne åbnes, skal du vælge interface-indstillinger, vælge I2C og klikke på aktiver.
Trin 2: Opdater Raspberry pi
Den første ting, jeg gør, inden jeg starter et projekt, er opdatering af Pi. Gennem dette er jeg sikker på, at alle ting på operativsystemet er opdaterede, og jeg vil ikke opleve kompatibilitetsproblemer med nogen nyeste software, jeg vælger at installere på Pi. For at gøre dette skal du køre under to kommandoer:
sudo apt-get opdater sudo apt-get upgrade
Trin 3: Installer Adafruit ADS1115-biblioteket til ADC
Når opdateringen er udført, er vi nu klar til at installere afhængighederne, der starter med Adafruit python-modulet til ADS115-chippen. Sørg for, at du er i Raspberry Pi-hjemmekataloget ved at køre;
cd ~
installer derefter build-essentials ved at køre;
sudo apt-get install build-essential python-dev python-smbus git
Derefter skal du klone Adafruit git-mappen til biblioteket ved at køre;
git-klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Skift til den klonede fils katalog og kør installationsfilen;
cd Adafruit_Python_ADS1x1z sudo python setup.py installation
Efter installationen skal din skærm se ud som billedet nedenfor.
Trin 4: Test biblioteket og 12C-kommunikationen.
Før vi fortsætter med resten af projektet, er det vigtigt at teste biblioteket og sikre, at ADC kan kommunikere med hindbær pi over I2C. For at gøre dette bruger vi et eksempel på et script, der følger med biblioteket.
Mens du stadig er i mappen Adafruit_Python_ADS1x15, skal du ændre biblioteket til eksempler-biblioteket ved at køre;
cd eksempler
Kør derefter eksemplet sampletest.py, der viser værdien af de fire kanaler på ADC i tabelform.
Kør eksemplet ved hjælp af:
python simpletest.py
Hvis I2C-modulet er aktiveret, og forbindelserne er gode, skal du se dataene som vist på billedet nedenfor.
Hvis der opstår en fejl, skal du kontrollere, om ADC er godt forbundet til PI, og I2C-kommunikation er aktiveret på Pi.
Trin 5: Installer Matplotlib
For at visualisere dataene skal vi installere matplotlib- modulet, der bruges til at plotte alle slags grafer i python. Dette kan gøres ved at køre;
sudo apt-get install python-matplotlib
Du skal se et resultat som billedet nedenfor.
Trin 6: Installer Drawnow python-modulet
Endelig skal vi installere det tegnede python-modul. Dette modul hjælper os med at levere liveopdateringer til dataplot.
Vi installerer drawow via python-pakkeinstallatøren; pip , så vi er nødt til at sikre, at den er installeret. Dette kan gøres ved at køre;
sudo apt-get install python-pip
Vi kan derefter bruge pip til at installere drawow- pakken ved at køre:
sudo pip installeret drawow
Du skal få et resultat som billedet nedenfor efter at have kørt det.
Med alle de afhængigheder, der er installeret, er vi nu klar til at skrive koden.
Python-kode til Raspberry Pi-oscilloskop:
Pythonkoden til dette Pi-oscilloskop er ret enkel, især hvis du er bekendt med python matplotlib- modulet. Før jeg viser os hele koden, vil jeg forsøge at dele den op og forklare, hvad hver del af koden laver, så du kan få nok viden til at udvide koden til at gøre flere ting.
På dette tidspunkt er det vigtigt at skifte til en skærm eller bruge VNC-fremviseren, alt, hvorigennem du kan se din Raspberry Pi's desktop, da grafen, der plottes, ikke vises på terminalen.
Med skærmen som grænseflade skal du åbne en ny python-fil. Du kan kalde det ethvert navn, du vil have, men jeg kalder det scope.py.
sudo nano scope.py
Med den oprettede fil er det første, vi gør, at importere de moduler, vi skal bruge;
importtid import matplotlib.pyplot som plt fra drawow import * import Adafruit_ADS1x15
Dernæst opretter vi en forekomst af ADS1x15-biblioteket, der specificerer ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Dernæst indstiller vi gevinsten for ADC. Der er forskellige forstærkningsområder og skal vælges ud fra den spænding, du forventer ved indgangen til ADC. Til denne vejledning estimerer vi en 0 - 4.09v, så vi bruger en forstærkning på 1. For mere information om gevinst kan du tjekke ADS1015 / ADS1115 databladet.
GAIN = 1
Dernæst er vi nødt til at oprette de arrayvariabler, der vil blive brugt til at gemme de data, der skal plottes, og en anden til at tjene som optælling.
Val = cnt = 0
Derefter kender vi vores intentioner om at gøre plottet interaktivt kendt for at gøre det muligt for os at plotte dataene live.
plt.ion ()
Dernæst starter vi kontinuerlig ADC-konvertering med angivelse af ADC-kanalen, i dette tilfælde kanal 0, og vi specificerer også forstærkningen.
Det skal bemærkes, at alle de fire ADC-kanaler på ADS1115 kan læses på samme tid, men 1 kanal er nok til denne demonstration.
adc.start_adc (0, gain = GAIN)
Dernæst opretter vi en funktion def makeFig , for at oprette og indstille attributterne til grafen, der holder vores live plot. Vi indstiller først y-aksens grænser ved hjælp af ylim , hvorefter vi indtaster plottets titel og etiketnavnet, før vi specificerer de data, der skal plottes, og dens plotstil og farve ved hjælp af plt.plot (). Vi kan også angive kanalen (som kanal 0 blev angivet), så vi kan identificere hvert signal, når ADC'ens fire kanaler bruges. plt.legend bruges til at specificere, hvor vi vil have oplysningerne om signalet (f.eks. kanal 0) vist på figuren.
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC-udgange') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'nederst til højre')
Dernæst skriver vi while- sløjfen, som konstant vil blive brugt til at læse data fra ADC og opdatere plottet i overensstemmelse hermed.
Den første ting, vi gør, er at læse ADC-konverteringsværdien
værdi = adc.get_last_result ()
Dernæst udskriver vi værdien på terminalen bare for at give os en anden måde at bekræfte de afbildede data på. Vi venter et par sekunder efter udskrivning, så tilføjer vi dataene til listen (val), der er oprettet for at gemme dataene for den kanal.
print ('Channel 0: {0}'. format (værdi)) time.sleep (0.5) val.append (int (værdi))
Vi kalder derefter drawow for at opdatere plottet.
drawow (makeFig)
For at sikre, at de nyeste data er, hvad der er tilgængeligt på plottet, sletter vi dataene ved indeks 0 efter hver 50 datatælling.
cnt = cnt + 1 hvis (cnt> 50): val.pop (0)
Det er alt!
Den komplette Python-kode gives i slutningen af denne vejledning.
Raspberry Pi Oscilloskop i aktion:
Kopier den komplette pythonkode og indsæt den python-fil, vi oprettede tidligere, husk at vi har brug for en skærm for at se plottet, så alt dette skal udføres af enten VNC eller med en tilsluttet skærm eller skærm.
Gem koden og kør ved hjælp af;
sudo python scope.py
Hvis du brugte et andet navn end scope.py, så glem ikke at ændre dette for at matche.
Efter et par minutter skal du se ADC-dataene blive udskrevet på terminalen. Lejlighedsvis kan du få en advarsel fra matplotlib (som vist på billedet nedenfor), som skal undertrykkes, men det påvirker alligevel ikke de data, der vises eller plottet. For at undertrykke advarslen kan følgende kodelinjer tilføjes efter importlinjerne i vores kode.
Importer advarsler import matplotlib.cbook warnings.filterwarnings ("ignorere", kategori = matplotlib.cbook.mplDeprecation)
Det er det til denne tutorial fyre, for fuldt ud at teste dit oscilloskop, kan du slutte en analog enhed som et potentiometer til en kanal på ADC'en, og du bør se dataændringen for hver drejning af potentiometeret. Eller du kan indtaste sinusbølge eller firkantbølge for at teste output.
Tak for læsningen. Hvis du har spørgsmål eller spørgsmål, som du vil have mig til at tilføje, skal du bare give mig en kommentar.
Indtil næste gang, fortsæt med at lave!