- Ako to funguje
- Požadované komponenty
- Schémy
- Kód Arduino Osclloscope
- Skript v jazyku Python (plotter)
- Arduino kód
- Arduino osciloskop v akcii
Osciloskop je jedným z najdôležitejších nástrojov, ktoré nájdete na pracovnom stole každého elektronického inžiniera alebo výrobcu. Primárne sa používa na sledovanie tvaru vlny a určovanie úrovní napätia, frekvencie, šumu a ďalších parametrov signálov aplikovaných na jeho vstup, ktoré sa môžu časom meniť. Používajú ho tiež vývojári zabudovaného softvéru na ladenie kódu a technici na odstraňovanie problémov s elektronickými zariadeniami počas opravy. Z týchto dôvodov je osciloskop nevyhnutnosťou pre každého inžiniera. Jediným problémom je, že môžu byť veľmi drahé. Osciloskopy, ktoré vykonávajú najzákladnejšie funkcie s najmenšou presnosťou, môžu byť rovnako drahé ako 45 až 100 dolárov, zatiaľ čo tie pokročilejšie a efektívnejšie stoja viac ako 150 dolárov. Dnes budem demonštrovať, ako používať Arduinoa softvér, ktorý bude vyvinutý s mojím obľúbeným programovacím jazykom Python, na zostavenie lacného 4-kanálového osciloskopu Arduino schopného vykonávať úlohy, pre ktoré sú nasadené niektoré z lacných osciloskopov, ako je zobrazovanie priebehov a určovanie úrovní napätia pre signály.
Ako to funguje
Tento projekt má dve časti;
- Prevodník údajov
- Plotter
Osciloskopy všeobecne zahŕňajú vizuálne znázornenie analógového signálu privádzaného na jeho vstupný kanál. Aby sme to dosiahli, musíme najskôr previesť signál z analógového na digitálny a potom vykresliť údaje. Pri konverzii budeme využívať ADC (analógovo-digitálny prevodník) na mikrokontroléri atmega328p, ktorý používa Arduino na prevod analógových údajov na vstupe signálu na digitálny signál. Po konverzii je časová hodnota odoslaná cez UART z Arduina do PC, kde softvér plotru, ktorý bude vyvinutý pomocou pythonu, prevedie prichádzajúci prúd dát na priebeh tak, že vykreslí každé dáta proti času.
Požadované komponenty
Na zostavenie tohto projektu sú potrebné nasledujúce komponenty;
- Arduino Uno (je možné použiť ktorúkoľvek z ďalších dosiek)
- Nepál
- 10k rezistor (1)
- LDR (1)
- Prepojovacie vodiče
Požadované softvérové programy
- Arduino IDE
- Python
- Knižnice Pythonu: Pyserial, Matplotlib, Drawnow
Schémy
Schéma osciloskopu Arduino je jednoduchá. Všetko, čo musíme urobiť, je pripojiť testovaný signál k určenému analógovému kolíku Arduina. Avšak, budeme používať LDR v jednoduché nastavenie deliče napätia pre generovanie signálu, ktoré majú byť skúmané, aby generovaný priebeh opisuje úroveň napätia, na základe intenzity svetla okolo LDR.
Pripojte komponenty, ako je znázornené na nižšie uvedených schémach;
Po pripojení by sa nastavenie malo páčiť obrázku nižšie.
Keď sú všetky pripojenia hotové, môžeme pokračovať v písaní kódu.
Kód Arduino Osclloscope
Budeme písať kódy pre každú z týchto dvoch častí. Pre Plotter, ako už bolo spomenuté skôr, budeme písať skript v jazyku python, ktorý prijíma údaje z Arduina cez UART a Plots, zatiaľ čo pre prevodník budeme písať náčrt Arduina, ktorý prevezme údaje z ADC a prevedie ich na úrovne napätia, ktoré sa posielajú na plotter.
Skript v jazyku Python (plotter)
Pretože je pythonový kód zložitejší, začneme s ním.
Budeme používať niekoľko knižníc vrátane; drawnow, Matplotlib a Pyserial so skriptom python, ako už bolo spomenuté vyššie. Pyserial nám umožňuje vytvoriť pythonovský skript, ktorý dokáže komunikovať cez sériový port, Matplotlib nám dáva možnosť generovať grafy z údajov prijatých cez sériový port a drawnow nám poskytuje prostriedky na aktualizáciu grafu v reálnom čase.
Existuje niekoľko spôsobov, ako tieto balíčky nainštalovať do vášho PC, najjednoduchšie sú pomocou pipu . Pip je možné nainštalovať pomocou príkazového riadku na stroji so systémom Windows alebo Linux. PIP je zabalený s python3, takže vám poradím, aby ste si nainštalovali python3 a zaškrtli políčko o pridaní pythonu na cestu. Ak máte problémy s inštaláciou pipu, prečítajte si tipy na tejto oficiálnej webovej stránke pythonu.
S nainštalovaným pipom môžeme teraz inštalovať ďalšie knižnice, ktoré potrebujeme.
Otvorte príkazový riadok pre používateľov systému Windows, terminál pre používateľov systému linux a zadajte nasledujúce;
pip nainštalovať pyserial
Keď je toto hotové, nainštalujte matplotlib pomocou;
pip nainštalovať matplotlib
Drawnow sa niekedy inštaluje vedľa matplotlib, ale pre istotu spustite;
pip nainštalovať drawnow
Po dokončení inštalácie sme teraz pripravení na napísanie skriptu python.
Pythonový skript pre tento projekt je podobný tomu, ktorý som napísal pre Raspberry Pi Based Oscilloscope.
Začneme importom všetkých knižníc potrebných pre kód;
čas importu import matplotlib.pyplot ako plt z drawnow import * import pyserial
Ďalej vytvoríme a inicializujeme premenné, ktoré sa použijú počas kódu. Pole val sa používa na ukladanie dát prijatých zo sériového portu a cnt bude použitý na počítanie. Údaje na mieste 0 budú vymazané po každých 50 počítaniach údajov. Toto sa robí, aby sa údaje na osciloskope nepretržite zobrazovali.
val = cnt = 0
Ďalej vytvoríme objekt sériového portu, cez ktorý bude Arduino komunikovať s našim skriptom python. Uistite sa, že com port uvedený nižšie je rovnaký com port, cez ktorý komunikuje vaša doska Arduino s IDE. Vyššie použitá prenosová rýchlosť 115 200 sa použila na zabezpečenie vysokorýchlostnej komunikácie s Arduino. Aby sa zabránilo chybám, musí byť pre komunikáciu s touto prenosovou rýchlosťou povolený aj sériový port Arduino.
port = sériový. Sériový port („COM4“, 115200, časový limit = 0,5)
Ďalej urobíme graf interaktívnym pomocou;
plt.ion ()
musíme vytvoriť funkciu na vygenerovanie grafu z prijatých údajov, čím sa vytvorí horná a minimálna hranica, ktorú očakávame, čo je v tomto prípade 1023 na základe rozlíšenia ADC spoločnosti Arduino. Nastavíme tiež nadpis, označíme každú os a pridáme legendu, aby sme uľahčili identifikáciu pozemku.
#create the figure function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC výstupy') plt.plot (val, 'ro - ', label =' Kanál 0 ') plt.legend (loc =' vpravo dole ')
Keď je to hotové, sme teraz pripravení napísať hlavnú slučku, ktorá zoberie údaje zo sériového portu, ak sú k dispozícii, a vykreslí ich. Na synchronizáciu s Arduinom sú pythonovým skriptom odoslané údaje o podaní ruky do Arduina, ktoré indikujú jeho pripravenosť na čítanie údajov. Keď Arduino prijme údaje o podaní spojenia, odpovie dátami z ADC. Bez tohto podania ruky nebudeme schopní vykresliť údaje v reálnom čase.
while (True): port.write (b's) #handshake s Arduino if (port.inWaiting ()): # ak arduino odpovedá value = port.readline () # prečítať odpoveď print (hodnota) #print, aby sme mohli monitor it number = int (hodnota) # konvertovať prijaté dáta na celočíselnú tlač ('Kanál 0: {0}'. formát (číslo)) # Spať na pol sekundy. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot, aby odrážal nový vstup dát plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # udržiavajte graf čerstvý, odstránením údajov na pozícii 0
Kompletné python kód pre Arduino osciloskopu je uvedený na konci tohto článku je uvedené nižšie.
Arduino kód
Druhým kódom je skica Arduina, ktorá slúži na získanie údajov predstavujúcich signál z ADC. Potom počkajte, kým prijmete signál nadviazania spojenia od softvéru plotru. Hneď ako prijme signál podania ruky, odošle získané údaje do softvéru plotru cez UART.
Začneme vyhlásením kolíka analógového kolíka Arduina, na ktorý sa bude aplikovať signál.
int senzorpin = A0;
Ďalej inicializujeme a začneme sériovú komunikáciu s prenosovou rýchlosťou 115200
void setup () { // inicializovať sériovú komunikáciu rýchlosťou 115 200 bitov za sekundu tak, aby zodpovedala skriptu pythonu : Serial.begin (115200); }
Nakoniec funkcia voidloop (), ktorá spracováva čítanie údajov a odosiela ich sériovo do plotru.
void loop () { // načítanie vstupu na analógovom kolíku 0: float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); oneskorenie (10); // oneskorenie medzi načítaniami kvôli stabilite } }
Kompletné Arduino osciloskop kód je uvedený nižšie, rovnako ako na konci tohto článku je uvedené nižšie.
int senzorpin = A0; void setup () { // inicializovať sériovú komunikáciu rýchlosťou 115 200 bitov za sekundu tak, aby zodpovedala skriptu pythonu : Serial.begin (115200); } void loop () { // načítanie vstupu na analógovom kolíku 0: ##################################### ####################### float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); oneskorenie (10); // oneskorenie medzi načítaniami kvôli stabilite } }
Arduino osciloskop v akcii
Nahrajte kód do nastavenia Arduina a spustite skript pythonu. Mali by ste vidieť, ako sa dáta začnú streamovať cez príkazový riadok pythonu a graf sa mení podľa intenzity svetla, ako je to znázornené na obrázku nižšie.
Takto je možné Arduino použiť ako osciloskop, ale dá sa vyrobiť aj pomocou Raspberry pi, tu si pozrite kompletný návod o osciloskope založenom na Raspberry Pi.