- Hogyan működik
- Szükséges alkatrészek
- Sémák
- Arduino Osclloscope Code
- Python (Plotter) szkript
- Arduino kód
- Arduino oszcilloszkóp működés közben
Az oszcilloszkóp az egyik legfontosabb eszköz, amelyet minden elektronikai mérnök vagy gyártó munkapadján talál. Elsősorban a hullámforma megtekintésére és a bemenetén alkalmazott jelek feszültségszintjének, frekvenciájának, zajának és egyéb paramétereinek meghatározására szolgál, amelyek idővel változhatnak. A beágyazott szoftverfejlesztők a kód hibakereséshez és a technikusok az elektronikus eszközök hibajavításához a javítás során is használják. Ezen okok miatt az oszcilloszkóp minden mérnök számára kötelező eszköz. Az egyetlen kérdés, hogy nagyon drágák lehetnek, az oszcilloszkópok, amelyek a legalapvetőbb funkciókat látják el a legkevesebb pontossággal, akár 45-100 dollárig is drágulhatnak, míg a fejlettebbek és hatékonyabbak 150 dollár fölött vannak. Ma bemutatom az Arduino használatátés egy szoftver, amelyet a kedvenc Python programozási nyelvemmel fejlesztenek ki, egy alacsony költségű, 4 csatornás Arduino oszcilloszkóp felépítésére, amely képes elvégezni azokat a feladatokat, amelyekre az olcsó oszcilloszkóp egy részét telepítik, például a hullámalak megjelenítésére és a feszültségszintek meghatározására. jelekre.
Hogyan működik
Ennek a projektnek két része van;
- Az Adatátalakító
- A plotter
Az oszcilloszkópok általában a bemeneti csatornájára alkalmazott analóg jel vizuális ábrázolását jelentik. Ennek eléréséhez először át kell alakítanunk a jelet analógról digitálisra, majd meg kell ábrázolnunk az adatokat. Az átalakításhoz az Arduino által használt atmega328p mikrokontroller ADC- jét (analóg-digitális átalakító) fogjuk kihasználni, hogy a jelbemeneti analóg adatokat digitális jellé konvertálja. Konvertálás után az időnkénti értéket az UART-on keresztül az Arduino elküldi a PC-re, ahol a python használatával kifejlesztett plotter szoftver a bejövő adatfolyamot hullámformává alakítja, minden adatot az idő függvényében rajzolva.
Szükséges alkatrészek
A projekt felépítéséhez a következő összetevőkre van szükség:
- Arduino Uno (bármelyik másik tábla használható)
- Kenyérlemez
- 10k ellenállás (1)
- LDR (1)
- Jumper huzalok
Szükséges szoftverek
- Arduino IDE
- Piton
- Python könyvtárak: Pyserial, Matplotlib, Drawnow
Sémák
Az Arduino oszcilloszkóp vázlata egyszerű. Csak annyit kell tennünk, hogy összekapcsoljuk a vizsgálandó jelet az Arduino meghatározott analóg tűjével. Azonban az LDR- t egy egyszerű feszültségosztó beállításban fogjuk felhasználni a vizsgálandó jel előállításához úgy, hogy a generált hullámforma leírja a feszültségszintet, az LDR körüli fényintenzitás alapján.
Csatlakoztassa az alkatrészeket az alábbi vázlatok szerint;
Csatlakozás után a beállításnak meg kell felelnie az alábbi képnek.
Ha az összes kapcsolat elkészült, folytathatjuk a kód megírását.
Arduino Osclloscope Code
A két szakaszhoz kódokat írunk. A Plotter számára, amint azt korábban említettük, egy Python szkriptet fogunk írni, amely az Arduino adatait fogadja el az UART és a Plots segítségével, míg az átalakító számára egy Arduino vázlatot írunk, amely átveszi az ADC adatait és átalakítja a plotternek küldött feszültségszintek.
Python (Plotter) szkript
Mivel a python kód összetettebb, ezzel kezdjük.
Néhány könyvtárat fogunk használni, köztük; drawow, Matplotlib és Pyserial a korábban említett python szkript segítségével. A Pyserial lehetővé teszi számunkra, hogy létrehozzunk egy python szkriptet, amely képes kommunikálni a soros porton keresztül, a Matplotlib lehetőséget ad arra, hogy a soros porton keresztül kapott adatokból ábrákat hozzunk létre, a drawow pedig lehetőséget nyújt a cselekmény valós idejű frissítésére.
Többféle módon telepítheti ezeket a csomagokat a számítógépére, a legegyszerűbb a pip segítségével . A Pip parancssoron keresztül telepíthető egy Windows vagy Linux gépre. A PIP a python3 csomaggal van ellátva, ezért azt tanácsolom, hogy telepítse a python3 szoftvert, és jelölje be a python hozzáadását az elérési útvonalhoz. Ha problémái vannak a pip telepítésével, nézze meg ezt a hivatalos python webhelyet tippekért.
A pip telepítésével most telepíthetjük a többi szükséges könyvtárat is.
Nyissa meg a parancssort a Windows felhasználók számára, a terminált a linux felhasználók számára, és írja be a következőket;
pip install pyserial
Ezzel elkészült a matplotlib telepítése a;
pip install matplotlib
A Drawnow- t néha a matplotlib mellé telepítik, de csak az biztos, hogy futtassa;
pip install húz
A telepítés befejezésével készen állunk a python szkript megírására.
A projekt python szkriptje hasonló ahhoz, amelyet a Raspberry Pi alapú oszcilloszkóphoz írtam.
Először a kódhoz szükséges összes könyvtár importálásával kezdjük;
importálás ideje import matplotlib.pyplot mint plt a húzott importból * import pyserial
Ezután létrehozzuk és inicializáljuk azokat a változókat, amelyeket a kód során használunk. A val tömböt a soros portról kapott adatok tárolására, a cnt- t pedig a számlálásra használják. A 0. helyen lévő adatok minden 50 adatszámlálás után törlődnek. Ez azért történik, hogy az adatok ne jelenjenek meg az oszcilloszkópon.
val = cnt = 0
Ezután létrehozzuk a soros port objektumot, amelyen keresztül az Arduino kommunikálni fog a python szkriptünkkel. Győződjön meg arról, hogy az alább megadott com port ugyanaz a com port, amelyen keresztül az Arduino táblája kommunikál az IDE-vel. A fent használt 115200 baud sebességet használták fel az Arduino-val való nagy sebességű kommunikáció biztosítására. A hibák elkerülése érdekében az Arduino soros portot is engedélyezni kell, hogy kommunikáljon ezzel az adatátviteli sebességgel.
port = soros. Sorozat ('COM4', 115200, időtúllépés = 0,5)
Ezután interaktívvá tesszük a cselekményt;
plt.ion ()
létre kell hoznunk egy függvényt, amely a kapott adatokból generálja a diagramot, megalkotva az elvárt felső és minimális határértéket, amely ebben az esetben az Arduino ADC felbontása alapján 1023. Beállítjuk a címet, felcímkézzük az egyes tengelyeket, és felírunk egy jelmagyarázatot, hogy megkönnyítsük a cselekmény azonosítását.
#create the fig function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputok') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' jobb alsó ')
Ezzel készen állunk arra, hogy megírjuk azt a fő ciklust , amely az adatokat a soros portról veszi, ha rendelkezésre állnak, és ábrázolja azokat. Az Arduinóval való szinkronizáláshoz egy kézfogási adatot küld a Arduino-nak a python szkript, hogy jelezze az adatok olvasási készségét. Amikor az Arduino megkapja a kézfogás adatait, válaszol az ADC adataival. E kézfogás nélkül nem tudjuk valós időben ábrázolni az adatokat.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # ha az arduino válaszol = value.port.readline () # olvassa el a válasz nyomtatását (value) #print, hogy meg tudjuk figyeli azt szám = int (érték) #konvertálja a kapott adatokat egész számra ('0. csatorna: {0}'. formátum (szám)) # Aludjon fél másodpercig. time.sleep (0.01) val.append (int (szám)) drawow (makeFig) #update plot, hogy tükrözze az új adatbevitelt plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # Tartsa frissen a diagramot az adatok törlésével a 0 pozícióban
Az arduino oszcilloszkóp teljes python kódja a cikk végén látható.
Arduino kód
A második kód az Arduino vázlata, amely megkapja az ADC-től érkező jelet ábrázoló adatokat, majd várja meg a kézfogási jel fogadását a plotter szoftvertől. Amint megkapja a kézfogás jelét, az UART-on keresztül elküldi a megszerzett adatokat a plotter szoftverhez.
Azzal kezdjük, hogy deklaráljuk az Arduino analóg csapjának a tűjét, amelyre a jelet alkalmazni fogjuk.
int érzékelőcsap = A0;
Ezután inicializáljuk és megkezdjük a soros kommunikációt 115200 adatátviteli sebességgel
void setup () { // inicializálja a soros kommunikációt 115200 bit / s sebességgel, hogy megfeleljen a python szkriptjének: Serial.begin (115200); }
Végül a voidloop () függvény, amely kezeli az adatok kiolvasását, és sorosan továbbítja az adatokat a plotterhez.
void loop () { // beolvassa a bemenetet a 0 analóg csapon: float sensorValue = analogRead (sensorpin); bájtadatok = Soros.olvasott (); if (adatok == 's') { Soros.println (érzékelőérték); késés (10); // késés az olvasások között a stabilitás érdekében } }
A teljes Arduino oszcilloszkópkód alább, valamint a cikk alább látható végén található.
int érzékelőcsap = A0; void setup () { // inicializálja a soros kommunikációt 115200 bit / s sebességgel, hogy megfeleljen a python szkriptjének: Serial.begin (115200); } void loop () { // beolvassa a bemenetet a 0 analóg csapon: ##################################### ######################## float sensorValue = analogRead (érzékelőcsap); bájtadatok = Soros.olvasott (); if (adatok == 's') { Soros.println (érzékelőérték); késés (10); // késés az olvasások között a stabilitás érdekében } }
Arduino oszcilloszkóp működés közben
Töltse fel a kódot az Arduino telepítőjébe, és futtassa a python parancsfájlt. Látnia kell, hogy az adatok elkezdődnek a python parancssoron keresztül, és a diagram a fényintenzitással változik, amint az az alábbi képen látható.
Tehát így használható az Arduino oszcilloszkópként, elkészíthető a Raspberry pi használatával is. Ellenőrizze itt a teljes oktatóanyagot a Raspberry Pi alapú oszcilloszkópról.