- Projectstroom:
- Projectvereisten
- Schakelschema:
- Afhankelijkheden installeren voor Raspberry Pi-oscilloscoop:
- Python-code voor Raspberry Pi-oscilloscoop:
- Raspberry Pi-oscilloscoop in actie:
Hallo allemaal, welkom bij het bericht van vandaag. Een van de meest fascinerende dingen aan het maken van een maker is weten hoe je geïmproviseerde gereedschappen moet ontwikkelen, je zult nooit vast komen te zitten aan een project als je over die veelzijdigheid beschikt. Dus vandaag zal ik delen hoe ik een op Raspberry Pi gebaseerde geïmproviseerde versie kan bouwen van een van de belangrijkste tools in elektrische / elektronische engineering; De oscilloscoop.
De oscilloscoop is een elektronisch testinstrument dat de visualisatie en observatie van variërende signaalspanningen mogelijk maakt, meestal als een tweedimensionale grafiek met een of meer signalen uitgezet tegen de tijd. Het project van vandaag zal proberen de signaalvisualisatiemogelijkheden van de oscilloscoop te repliceren met behulp van de Raspberry Pi en een analoog-naar-digitaal-omzettermodule.
Projectstroom:
Voor het repliceren van de signaalvisualisatie van de oscilloscoop met de Raspberry Pi zijn de volgende stappen nodig;
1. Voer een digitaal naar analoog conversie van het ingangssignaal uit
2. Bereid de resulterende gegevens voor voor weergave
3. Teken de gegevens in een live-tijdgrafiek
Een vereenvoudigd blokschema voor dit project zou eruitzien als het onderstaande diagram.
Projectvereisten
De vereiste voor dit project kan in twee worden ingedeeld:
- Hardwarevereisten
- Softwarevereisten
Hardware vereisten
Om dit project te bouwen zijn de volgende componenten / onderdelen nodig;
- Raspberry pi 2 (of een ander model)
- 8 of 16 GB SD-kaart
- LAN / Ethernet-kabel
- Voeding of USB-kabel
- ADS1115 ADC
- LDR (optioneel omdat het bedoeld is voor test)
- 10k of 1k weerstand
- Doorverbindingsdraden
- Breadboard
- Monitor of een andere manier om het bureaublad van de pi te zien (inclusief VNC)
Softwarevereisten
De softwarevereisten voor dit project zijn in feite de python-modules ( matplotlib en drawnow ) die zullen worden gebruikt voor datavisualisatie en de Adafruit-module voor koppeling met de ADS1115 ADC-chip. Ik zal laten zien hoe je deze modules op de Raspberry Pi installeert terwijl we verder gaan.
Hoewel deze tutorial zal werken ongeacht het Raspberry Pi OS dat wordt gebruikt, zal ik het Raspberry Pi stretch OS gebruiken en ik neem aan dat je bekend bent met het instellen van de Raspberry Pi met het Raspbian stretch OS, en je weet hoe je SSH in de framboos pi met behulp van terminal-software zoals stopverf. Als je hier problemen mee hebt, zijn er talloze Raspberry Pi-zelfstudies op deze website die kunnen helpen.
Laten we, met alle hardwarecomponenten op hun plaats, de schema's maken en de componenten met elkaar verbinden.
Schakelschema:
Om de analoge ingangssignalen om te zetten naar digitale signalen die kunnen worden gevisualiseerd met de Raspberry Pi, zullen we de ADS1115 ADC-chip gebruiken. Deze chip wordt belangrijk omdat de Raspberry Pi, in tegenstelling tot Arduino en de meeste microcontrollers, geen ingebouwde analoog-naar-digitaal-omzetter (ADC) heeft. Hoewel we elke Raspberry Pi-compatibele ADC-chip hadden kunnen gebruiken, geef ik de voorkeur aan deze chip vanwege de hoge resolutie (16 bits) en de goed gedocumenteerde datasheet en gebruiksinstructies van Adafruit. Je kunt ook onze Raspberry Pi ADC-tutorial bekijken voor meer informatie.
De ADC is een op I2C gebaseerd apparaat en moet worden aangesloten op de Raspberry Pi, zoals weergegeven in het onderstaande schema.
Voor de duidelijkheid wordt hieronder ook de pinverbinding tussen de twee componenten beschreven.
ADS1115- en Raspberry Pi-verbindingen:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
Nadat alle verbindingen zijn gemaakt, start u uw pi op en gaat u verder met het installeren van de onderstaande afhankelijkheden.
Afhankelijkheden installeren voor Raspberry Pi-oscilloscoop:
Voordat we beginnen met het schrijven van het python-script om gegevens uit de ADC te halen en deze in een live-grafiek te plotten, moeten we de I2C-communicatie-interface van de raspberry pi inschakelen en de softwarevereisten installeren die eerder werden genoemd. Dit gebeurt in onderstaande stappen, zodat het gemakkelijk te volgen is:
Stap 1: Schakel de Raspberry Pi I2C-interface in
Om de I2C in te schakelen, voer je vanuit de terminal uit;
sudo raspi-config
Wanneer de configuratiepanelen openen, selecteert u interface-opties, selecteert u I2C en klikt u op inschakelen.
Stap 2: Update de Raspberry pi
Het eerste dat ik doe voordat ik een project start, is de Pi bijwerken. Hierdoor weet ik zeker dat alles op het besturingssysteem up-to-date is en ik zal geen compatibiliteitsproblemen ervaren met de nieuwste software die ik op de Pi wil installeren. Om dit te doen, voert u onderstaande twee opdrachten uit:
sudo apt-get update sudo apt-get upgrade
Stap 3: Installeer de Adafruit ADS1115-bibliotheek voor ADC
Nu de update is voltooid, zijn we nu klaar om de afhankelijkheden te installeren, te beginnen met de Adafruit python-module voor de ADS115-chip. Zorg ervoor dat u zich in de Raspberry Pi-homedirectory bevindt door te starten;
cd ~
installeer vervolgens de build-essentials door uit te voeren;
sudo apt-get install build-essential python-dev python-smbus git
Kloon vervolgens de Adafruit git-map voor de bibliotheek door uit te voeren;
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Ga naar de directory van het gekloonde bestand en voer het setup-bestand uit;
cd Adafruit_Python_ADS1x1z sudo python setup.py installeren
Na installatie zou uw scherm eruit moeten zien als de onderstaande afbeelding.
Stap 4: Test de bibliotheek en 12C-communicatie.
Voordat we verder gaan met de rest van het project, is het belangrijk om de bibliotheek te testen en ervoor te zorgen dat de ADC kan communiceren met de Raspberry Pi via I2C. Om dit te doen zullen we een voorbeeldscript gebruiken dat bij de bibliotheek wordt geleverd.
Verander, terwijl je nog in de Adafruit_Python_ADS1x15 map bent, de map naar de voorbeeldenmap door;
cd voorbeelden
Voer vervolgens het voorbeeld sampletest.py uit dat de waarde van de vier kanalen op de ADC in tabelvorm weergeeft.
Voer het voorbeeld uit met:
python simpletest.py
Als de I2C-module is ingeschakeld en de verbindingen goed zijn, zou u de gegevens moeten zien zoals weergegeven in de onderstaande afbeelding.
Als er een fout optreedt, controleer dan of de ADC goed is aangesloten op de PI en de I2C-communicatie is ingeschakeld op de Pi.
Stap 5: Installeer Matplotlib
Om de gegevens te visualiseren, moeten we de matplotlib- module installeren die wordt gebruikt om allerlei grafieken in python te plotten. Dit kan gedaan worden door te rennen;
sudo apt-get install python-matplotlib
U zou een resultaat moeten zien zoals in de onderstaande afbeelding.
Stap 6: Installeer de Drawnow python-module
Ten slotte moeten we de drawnow python-module installeren. Deze module helpt ons om live updates te geven aan de dataplot.
We zullen drawow installeren via het installatieprogramma van het python-pakket; pip , dus we moeten ervoor zorgen dat het is geïnstalleerd. Dit kan gedaan worden door te rennen;
sudo apt-get install python-pip
We kunnen dan pip gebruiken om het drawnow- pakket te installeren door het volgende uit te voeren:
sudo pip install drawnow
U zou een resultaat moeten krijgen zoals de afbeelding hieronder nadat u het hebt uitgevoerd.
Nu alle afhankelijkheden zijn geïnstalleerd, zijn we nu klaar om de code te schrijven.
Python-code voor Raspberry Pi-oscilloscoop:
De python-code voor deze Pi-oscilloscoop is vrij eenvoudig, vooral als u bekend bent met de python- matplotlib- module. Voordat ik ons de hele code laat zien, zal ik proberen deze in delen op te splitsen en uit te leggen wat elk deel van de code doet, zodat je genoeg kennis hebt om de code uit te breiden om meer dingen te doen.
In dit stadium is het belangrijk om over te schakelen naar een monitor of de VNC-viewer te gebruiken, alles waarmee u het bureaublad van uw Raspberry Pi kunt zien, omdat de grafiek die wordt geplot niet op de terminal wordt weergegeven.
Open met de monitor als interface een nieuw python-bestand. Je kunt het elke naam noemen die je wilt, maar ik noem het scope.py.
sudo nano scope.py
Als het bestand is gemaakt, importeren we eerst de modules die we gaan gebruiken;
importeer tijd import matplotlib.pyplot als plt uit drawnow import * import Adafruit_ADS1x15
Vervolgens maken we een instantie van de ADS1x15-bibliotheek met de ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Vervolgens stellen we de versterking van de ADC in. Er zijn verschillende versterkingsbereiken en deze moeten worden gekozen op basis van de spanning die u verwacht aan de ingang van de ADC. Voor deze tutorial schatten we een 0 - 4,09v, dus gebruiken we een gain van 1. Voor meer informatie over gain kun je de ADS1015 / ADS1115 datasheet raadplegen.
GAIN = 1
Vervolgens moeten we de matrixvariabelen maken die zullen worden gebruikt om de te plotten gegevens op te slaan en een andere om als telling te dienen.
Val = cnt = 0
Vervolgens maken we onze intenties bekend om de plot interactief te maken, zodat we de gegevens live kunnen plotten.
plt.ion ()
Vervolgens beginnen we met continue ADC-conversie waarbij we het ADC-kanaal specificeren, in dit geval kanaal 0, en we specificeren ook de versterking.
Opgemerkt moet worden dat alle vier de ADC-kanalen op de ADS1115 tegelijkertijd kunnen worden uitgelezen, maar 1 kanaal is voldoende voor deze demonstratie.
adc.start_adc (0, gain = GAIN)
Vervolgens maken we een functie def makeFig , om de attributen van de grafiek te creëren en in te stellen die onze live plot zullen bevatten. We stellen allereerst de limieten van de y-as in met ylim , waarna we de titel van de plot en de labelnaam invoeren voordat we de gegevens specificeren die worden geplot en de plotstijl en kleur ervan met plt.plot (). We kunnen ook het kanaal aangeven (zoals kanaal 0 werd vermeld), zodat we elk signaal kunnen identificeren wanneer de vier kanalen van de ADC worden gebruikt. plt.legend wordt gebruikt om aan te geven waar we de informatie over dat signaal (bijv. Kanaal 0) in de figuur willen weergeven.
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC-uitgangen') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'rechtsonder')
Vervolgens schrijven we de while- lus die constant wordt gebruikt om gegevens van de ADC te lezen en de plot dienovereenkomstig bij te werken.
Het eerste dat we doen, is de ADC-conversiewaarde lezen
waarde = adc.get_last_result ()
Vervolgens drukken we de waarde op de terminal af om ons een andere manier te geven om de geplotte gegevens te bevestigen. We wachten een paar seconden na het afdrukken en voegen de gegevens toe aan de lijst (val) die is gemaakt om de gegevens voor dat kanaal op te slaan.
print ('Kanaal 0: {0}'. format (waarde)) time.sleep (0,5) val.append (int (waarde))
We bellen dan drawnow om de plot bij te werken.
drawow (makeFig)
Om er zeker van te zijn dat de laatste gegevens beschikbaar zijn op de plot, verwijderen we de gegevens op index 0 na elke 50 datatellingen.
cnt = cnt + 1 if (cnt> 50): val.pop (0)
Dat is alles!
De volledige Python-code wordt aan het einde van deze tutorial gegeven.
Raspberry Pi-oscilloscoop in actie:
Kopieer de volledige python-code en plak in het python-bestand dat we eerder hebben gemaakt, onthoud dat we een monitor nodig hebben om de plot te bekijken, dus dit moet allemaal worden gedaan door VNC of met een aangesloten monitor of scherm.
Sla de code op en voer uit met;
sudo python scope.py
Als je een andere naam hebt gebruikt dan scope.py, vergeet dan niet om deze aan te passen.
Na een paar minuten ziet u dat de ADC-gegevens op de terminal worden afgedrukt. Af en toe kunt u een waarschuwing krijgen van matplotlib (zoals weergegeven in de afbeelding hieronder) die moet worden onderdrukt, maar dit heeft geen invloed op de weergegeven gegevens of de plot. Om de waarschuwing echter te onderdrukken, kunnen de volgende regels code worden toegevoegd na de importregels in onze code.
Waarschuwingen importeren import matplotlib.cbook warnings.filterwarnings ("negeren", categorie = matplotlib.cbook.mplDeprecation)
Dat is het voor deze tutorial jongens, om je oscilloscoop volledig te testen, je kunt een analoog apparaat zoals een potentiometer aansluiten op een kanaal op de ADC en je zou de gegevens moeten zien veranderen bij elke draai aan de potentiometer. Of u kunt een sinusgolf of blokgolf invoeren om de output te testen.
Bedankt voor het lezen, als je nog vragen hebt of iets waarvan je wilt dat ik het toevoeg, laat dan gewoon een reactie achter.
Tot de volgende keer, blijf maken!