- Kuinka se toimii
- Vaaditut komponentit
- Kaaviot
- Arduino-oskilloskooppikoodi
- Python (piirturi) -skripti
- Arduino-koodi
- Arduino-oskilloskooppi toiminnassa
Oskilloskooppi on yksi tärkeimmistä työkaluista, jotka löydät minkä tahansa elektroniikkasuunnittelijan tai valmistajan työpöydältä. Sitä käytetään ensisijaisesti aaltomuodon tarkasteluun ja sen tuloon syötettyjen signaalien jännitetasojen, taajuuden, melun ja muiden parametrien määrittämiseen, jotka saattavat muuttua ajan myötä. Sitä käyttävät myös sulautetut ohjelmistokehittäjät koodien virheenkorjauksessa ja teknikot vianetsintään elektronisten laitteiden korjauksen aikana. Nämä syyt tekevät oskilloskoopista välttämättömän työkalun kaikille insinööreille. Ainoa asia on, että ne voivat olla erittäin kalliita, alkeellisimpia toimintoja pienimmällä tarkkuudella suorittavat oskilloskoopit voivat olla jopa 45–100 dollaria, kun taas edistyneemmät ja tehokkaammat ovat maksaneet yli 150 dollaria. Tänään esittelen kuinka käyttää Arduinoaja ohjelmisto, joka kehitetään suosikkini ohjelmointikielelläni Python, rakentamaan edullinen, 4-kanavainen Arduino-oskilloskooppi, joka kykenee suorittamaan tehtävät, joita varten käytetään joitain halpoja oskilloskooppeja, kuten aaltomuotojen näyttö ja jännitetasojen määrittäminen signaaleille.
Kuinka se toimii
Tässä projektissa on kaksi osaa;
- Data Converter
- Piirturi
Oskilloskoopit sisältävät yleensä sen tulokanavaan syötetyn analogisen signaalin visuaalisen esityksen. Tämän saavuttamiseksi meidän on ensin muunnettava signaali analogisesta digitaaliseksi ja sitten piirrettävä data. Muunnosta varten hyödynnämme ADC: tä (analoginen digitaalimuunnin) atmega328p-mikrokontrollerissa, jota Arduino käyttää muuntamaan signaalitulossa olevat analogiset tiedot digitaaliseksi signaaliksi. Muunnoksen jälkeen ajankohtainen arvo lähetetään UART: n kautta Arduinosta tietokoneelle, jossa pythonilla kehitettävä piirturiohjelmisto muuntaa saapuvan tietovirran aaltomuodoksi piirtämällä jokainen data ajan suhteen.
Vaaditut komponentit
Seuraavat komponentit vaaditaan tämän projektin rakentamiseen;
- Arduino Uno (mitä tahansa muuta levyä voidaan käyttää)
- Leipälauta
- 10k vastus (1)
- LDR (1)
- Hyppääjän johdot
Vaaditut ohjelmistot
- Arduino IDE
- Python
- Python-kirjastot: Pyserial, Matplotlib, Drawnow
Kaaviot
Arduino-oskilloskoopin kaavio on yksinkertainen. Meidän tarvitsee vain liittää tutkittava signaali määritettyyn Arduinon analogiseen nastaan. Kuitenkin, käytämme LDR yksinkertaisella jännitteen jakaja asennus tuottaa signaalin tutkittava, sellainen, että syntyvän aaltomuodon kuvataan jännitteen tason, joka perustuu valon intensiteetti noin LDR.
Liitä komponentit alla olevien kaavioiden mukaisesti;
Yhteyden muodostamisen jälkeen asennuksen tulisi pitää alla olevasta kuvasta.
Kun kaikki yhteydet on tehty, voimme jatkaa koodin kirjoittamista.
Arduino-oskilloskooppikoodi
Kirjoitamme koodit molemmille osille. Piirturille, kuten aiemmin mainittiin, kirjoitamme python-komentosarjan, joka hyväksyy Arduinon tiedot UART: n ja Plotsin kautta, kun taas muuntimelle kirjoitamme Arduino-luonnoksen, joka ottaa datan ADC: ltä ja muuntaa sen piirturille lähetetyt jännitetasot.
Python (piirturi) -skripti
Koska python-koodi on monimutkaisempi, aloitamme siitä.
Käytämme pari kirjastoa, mukaan lukien; drawow, Matplotlib ja Pyserial python-komentosarjalla, kuten aiemmin mainittiin. Pyserial antaa meille mahdollisuuden luoda python-komentosarja, joka voi kommunikoida sarjaportin kautta, Matplotlib antaa meille mahdollisuuden tuottaa juonia sarjaportin kautta vastaanotetuista tiedoista ja drawow tarjoaa meille keinon päivittää juoni reaaliajassa.
On olemassa useita tapoja asentaa nämä paketit tietokoneellesi, helpoin on pipin kautta. Pip voidaan asentaa komentorivin kautta Windows- tai Linux-koneeseen. PIP on pakattu python3: n kanssa, joten suosittelen, että asennat python3: n ja valitset valintaruudun pythonin lisäämisestä polkuun. Jos sinulla on ongelmia pipin asennuksessa, tutustu tähän viralliseen python-verkkosivustoon.
Kun pip on asennettu, voimme nyt asentaa muut tarvitsemamme kirjastot.
Avaa komentokehote Windows-käyttäjille, pääte Linux-käyttäjille ja kirjoita seuraava;
pip asenna pyserial
Kun tämä on tehty, asenna matplotlib käyttämällä;
pip asenna matplotlib
Drawnow asennetaan joskus matplotlibin viereen, mutta ajaaksesi;
pip asenna vetolaite
Kun asennus on valmis, olemme nyt valmiita kirjoittamaan python-komentosarjan.
Tämän projektin python-komentosarja on samanlainen kuin kirjoitin Raspberry Pi -pohjaiseen oskilloskooppiin.
Aloitamme tuomalla kaikki koodiin tarvittavat kirjastot;
tuontiaika tuonti matplotlib.pyplot plt-muodossa vetotuonnista * tuonti pyserial
Seuraavaksi luomme ja alustamme muuttujat, joita käytetään koodin aikana. Array Val käytetään tietojen tallentamiseen saadut sarjaportti ja snt käytetään laskea. Kohdassa 0 olevat tiedot poistetaan jokaisen 50 datan laskemisen jälkeen. Tämä tehdään, jotta tiedot näkyvät oskilloskoopilla.
val = cnt = 0
Seuraavaksi luomme sarjaporttiobjektin, jonka kautta Arduino kommunikoi python-komentosarjamme kanssa. Varmista, että alla määritetty com-portti on sama com-portti, jonka kautta Arduino-korttisi kommunikoi IDE: n kanssa. Edellä käytettyä 115200 baudinopeutta käytettiin varmistamaan nopea tiedonsiirto Arduinon kanssa. Virheiden estämiseksi myös Arduino-sarjaportin on oltava käytössä kommunikoimaan tämän siirtonopeuden kanssa.
portti = sarja. sarja ('COM4', 115200, aikakatkaisu = 0,5)
Seuraavaksi teemme juonesta interaktiivisen;
plt.ion ()
meidän on luotava toiminto, jolla generoidaan juoni vastaanotetuista tiedoista, luoden odotettu ylä- ja minimiraja, joka tässä tapauksessa on 1023 Arduinon ADC: n resoluution perusteella. Asetamme myös otsikon, merkitsemme jokaisen akselin ja lisätään selite, jotta juoni on helppo tunnistaa.
#luo kuvafunktio def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC-lähdöt') plt.plot (val, 'ro - ', label =' Kanava 0 ') plt.legend (loc =' oikeassa alakulmassa ')
Kun tämä on tehty, olemme nyt valmiita kirjoittamaan pääsilmukka, joka ottaa tiedot sarjaportista, kun se on käytettävissä, ja piirtää sen. Synkronoitavaksi Arduinon kanssa python-komentosarja lähettää kättelydatan Arduinolle osoittamaan sen valmiutta lukea tietoja. Kun Arduino vastaanottaa kättelytiedot, se vastaa ADC: n tiedoilla. Ilman tätä kädenpuristusta emme pysty piirtämään tietoja reaaliajassa.
while (True): port.write (b's ') #handshake Arduinon kanssa if (port.inWaiting ()): # jos arduino vastaa value = port.readline () # lue vastauksen tulostus (arvo) #print jotta voimme tarkkaile sitä numero = int (arvo) # muunna vastaanotetut tiedot kokonaislukutulokseksi ('Channel 0: {0}'. format (number)) # Lepotila puoli sekuntia time.sleep (0.01) val.append (int (number)) drawow (makeFig) #update plot to new data input plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # pidä kaavio tuoreena poistamalla tiedot sijainnista 0
Täydellinen python koodi arduino oskilloskooppi annetaan lopussa tämän artikkelin alla.
Arduino-koodi
Toinen koodi on Arduino-luonnos, jolla saadaan signaali, joka edustaa signaalia ADC: ltä, ja odota sitten kättelysignaalin vastaanottamista piirturiohjelmistosta. Heti saatuaan kättelysignaalin, se lähettää saadut tiedot plotter-ohjelmistoon UART: n kautta.
Aloitamme ilmoittamalla Arduinon analogisen nastan tappi, johon signaalia käytetään.
int-antenninapa = A0;
Seuraavaksi aloitamme ja aloitamme sarjaliikenteen tiedonsiirtonopeudella 115200
void setup () { // alusta sarjaliikenne nopeudella 115200 bittiä sekunnissa vastaamaan python-komentosarjaa: Serial.begin (115200); }
Lopuksi voidloop () -toiminto, joka käsittelee datan lukemista ja lähettää tiedot sarjakuvaajana piirturille.
void loop () { // lue analogisen nastan 0 tulo: float sensorValue = analogRead (sensorpin); tavutiedot = Serial.read (); if (data == 's') { Sarja.println (sensorValue); viive (10); // viive lukujen välillä vakauden takaamiseksi } }
Täydellinen Arduino Oskilloskooppien koodi on annettu alla sekä lopussa tämän artikkelin alla.
int-antenninapa = A0; void setup () { // alusta sarjaliikenne nopeudella 115200 bittiä sekunnissa vastaamaan python-komentosarjaa: Serial.begin (115200); } void loop () { // lukee analogisen nastan 0 tulon: ###################################### ######################## float sensorValue = analogRead (anturitappi); tavutiedot = Serial.read (); if (data == 's') { Sarja.println (sensorValue); viive (10); // viive lukujen välillä vakauden takaamiseksi } }
Arduino-oskilloskooppi toiminnassa
Lataa koodi Arduino-asennusohjelmaan ja suorita python-komentosarja. Sinun pitäisi nähdä, että tiedot alkavat suoratoistaa python-komentorivin kautta ja juoni vaihtelee valon voimakkuuden mukaan alla olevan kuvan mukaisesti.
Joten Arduinoa voidaan käyttää oskilloskooppina, se voidaan valmistaa myös Raspberry pi: llä, tarkista täältä Raspberry Pi -pohjaisen oskilloskoopin täydellinen opetusohjelma.