- Jak to funguje
- Požadované komponenty
- Schémata
- Kód Arduino Osclloscope
- Skript Pythonu (plotru)
- Arduino kód
- Arduino osciloskop v akci
Osciloskop je jedním z nejdůležitějších nástrojů, které najdete na pracovním stole každého elektronického inženýra nebo výrobce. Primárně se používá pro sledování průběhu a určování úrovní napětí, frekvence, šumu a dalších parametrů signálů aplikovaných na jeho vstupu, které se mohou v průběhu času měnit. Používají jej také vývojáři vestavěného softwaru pro ladění kódu a technici pro odstraňování problémů s elektronickými zařízeními během opravy. Tyto důvody činí osciloskop nezbytným nástrojem pro každého inženýra. Jediným problémem je, že mohou být velmi drahé, osciloskopy, které provádějí nejzákladnější funkce s nejnižší přesností, mohou být stejně drahé jako 45 až 100 dolarů, zatímco pokročilejší a efektivnější stojí více než 150 dolarů. Dnes budu demonstrovat, jak používat Arduinoa software, který bude vyvinut s mým oblíbeným programovacím jazykem Python, k vytvoření nízkonákladového čtyřkanálového osciloskopu Arduino schopného provádět úkoly, pro které jsou některé levné osciloskopy nasazeny, jako je zobrazení průběhů a stanovení úrovní napětí pro signály.
Jak to funguje
Tento projekt má dvě části;
- Převaděč dat
- Plotter
Osciloskopy obecně zahrnují vizuální znázornění analogového signálu aplikovaného na jeho vstupní kanál. Abychom toho dosáhli, musíme nejprve převést signál z analogového na digitální a poté vykreslit data. Pro převod budeme využívat ADC (analogově-digitální převodník) na mikrokontroléru atmega328p, který používá Arduino k převodu analogových dat na vstupu signálu na digitální signál. Po převodu je časová hodnota zaslána přes UART z Arduina do PC, kde software plotru, který bude vyvinut pomocí pythonu, převede příchozí proud dat do tvaru vlny vykreslením jednotlivých dat proti času.
Požadované komponenty
K sestavení tohoto projektu jsou vyžadovány následující komponenty;
- Arduino Uno (lze použít kteroukoli z dalších desek)
- Nepájivá deska
- 10k rezistor (1)
- LDR (1)
- Propojovací vodiče
Požadované programy
- Arduino IDE
- Krajta
- Knihovny Pythonu: Pyserial, Matplotlib, Drawnow
Schémata
Schéma osciloskopu Arduino je jednoduché. Jediné, co musíme udělat, je připojit zkoumaný signál ke specifikovanému analogovému pinu Arduina. Nicméně, budeme používat LDR v jednoduché nastavení děliče napětí pro generování signálu, které mají být zkoumány, aby generovaný průběh popisuje úroveň napětí, na základě intenzity světla kolem LDR.
Připojte komponenty, jak je znázorněno na níže uvedených schématech;
Po připojení by se nastavení mělo líbit jako na obrázku níže.
Po dokončení všech připojení můžeme pokračovat v psaní kódu.
Kód Arduino Osclloscope
Budeme psát kódy pro každou ze dvou částí. Pro Plotter, jak již bylo zmíněno dříve, budeme psát pythonovský skript, který přijímá data z Arduina přes UART a Plots, zatímco pro převaděč budeme psát Arduino skicu, která vezme data z ADC a převede je na úrovně napětí, které se odesílají do plotru.
Skript Pythonu (plotru)
Vzhledem k tomu, že kód pythonu je složitější, začneme s ním.
Budeme používat několik knihoven včetně; drawnow, Matplotlib a Pyserial s pythonovým skriptem, jak bylo uvedeno výše. Pyserial nám umožňuje vytvořit skript v pythonu, který může komunikovat přes sériový port, Matplotlib nám dává možnost generovat grafy z dat přijatých přes sériový port a drawnow nám poskytuje prostředky k aktualizaci grafu v reálném čase.
Existuje několik způsobů, jak nainstalovat tyto balíčky do vašeho PC, nejjednodušší je pomocí pipu . Pip lze nainstalovat pomocí příkazového řádku na počítači se systémem Windows nebo Linux. PIP je zabalen s python3, takže vám doporučím nainstalovat python3 a zaškrtnout políčko o přidání pythonu na cestu. Pokud máte problémy s instalací pipu, podívejte se na tento oficiální web pythonu, kde najdete tipy.
S nainstalovaným pipem můžeme nyní nainstalovat další knihovny, které potřebujeme.
Otevřete příkazový řádek pro uživatele systému Windows, terminál pro uživatele systému Linux a zadejte následující;
pip install pyserial
Po dokončení instalace nainstalujte matplotlib pomocí;
pip install matplotlib
Drawnow se někdy instaluje vedle matplotlib, ale pro jistotu spusťte;
pip install drawnow
Po dokončení instalace jsme nyní připraveni napsat skript pythonu.
Pythonový skript pro tento projekt je podobný tomu, který jsem napsal pro osciloskop založený na Raspberry Pi.
Začneme importem všech knihoven potřebných pro kód;
čas importu import matplotlib.pyplot jako plt z drawnow import * import pyserial
Dále vytvoříme a inicializujeme proměnné, které budou použity během kódu. Pole val se používá k ukládání dat přijatých ze sériového portu a cnt bude použit k počítání. Data na místě 0 budou smazána po každých 50 počítání dat. To se provádí, aby se data zobrazená na osciloskopu udržovala.
val = cnt = 0
Dále vytvoříme objekt sériového portu, přes který bude Arduino komunikovat s naším skriptem pythonu. Ujistěte se, že níže uvedený komunikační port je stejný komunikační port, přes který vaše deska Arduino komunikuje s IDE. Přenosová rychlost 115200 použitá výše byla použita k zajištění vysokorychlostní komunikace s Arduino. Aby se zabránilo chybám, musí být pro komunikaci s touto přenosovou rychlostí povolen také sériový port Arduino.
port = serial.Serial ('COM4', 115200, timeout = 0,5)
Dále provedeme graf interaktivní pomocí;
plt.ion ()
musíme vytvořit funkci pro vygenerování grafu z přijatých dat, vytvoření horní a minimální hranice, kterou očekáváme, což je v tomto případě 1023 na základě rozlišení ADC Arduina. Také jsme nastavili nadpis, označili každou osu a přidali legendu, abychom usnadnili identifikaci grafu.
#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 =' Channel 0 ') plt.legend (loc =' right right ')
Díky tomu jsme nyní připraveni napsat hlavní smyčku, která přebírá data ze sériového portu, pokud jsou k dispozici, a vykreslit je. Za účelem synchronizace s Arduinem jsou do Arduina odesílána handshake data skriptem pythonu, který indikuje jeho připravenost číst data. Když Arduino přijme data handshake, odpoví daty z ADC. Bez tohoto podání ruky nebudeme moci vykreslit data v reálném čase.
while (True): port.write (b's) #handshake s Arduino if (port.inWaiting ()): # pokud arduino odpovídá value = port.readline () # číst odpověď print (value) #print, abychom mohli monitor it number = int (value) #convert receive data to integer print ('Channel 0: {0}'. format (number)) # Sleep on half a second. time.sleep (0,01) val.append (int (number)) drawnow (makeFig) #update plot, aby odrážel nový vstup dat plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # udržujte graf v čerstvém stavu odstraněním dat na pozici 0
Kompletní python kód pro Arduino osciloskopu je uveden na konci tohoto článku je uvedeno níže.
Arduino kód
Druhým kódem je Arduino skica pro získání dat představujících signál z ADC, poté počkejte na příjem signálu handshake od softwaru plotru. Jakmile přijme signál handshake, odešle získaná data do softwaru plotru přes UART.
Začneme deklarováním kolíku analogového kolíku Arduina, na který bude aplikován signál.
int sensorpin = A0;
Dále inicializujeme a zahájíme sériovou komunikaci s přenosovou rychlostí 115200
void setup () { // inicializovat sériovou komunikaci rychlostí 115200 bitů za sekundu tak, aby odpovídala skriptu pythonu: Serial.begin (115200); }
A konečně funkce voidloop (), která zpracovává čtení dat a odesílá data sériově do plotru.
void loop () { // čtení vstupu na analogovém pinu 0: float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); zpoždění (10); // zpoždění mezi čteními pro stabilitu } }
Kompletní Arduino osciloskop kód je uveden níže, stejně jako na konci tohoto článku je uvedeno níže.
int sensorpin = A0; void setup () { // inicializovat sériovou komunikaci rychlostí 115200 bitů za sekundu tak, aby odpovídala skriptu pythonu: Serial.begin (115200); } void loop () { // čtení vstupu na analogovém pinu 0: ##################################### ###################### float sensorValue = analogRead (sensorpin); byte data = Serial.read (); if (data == 's') { Serial.println (sensorValue); zpoždění (10); // zpoždění mezi čteními pro stabilitu } }
Arduino osciloskop v akci
Nahrajte kód do nastavení Arduina a spusťte skript pythonu. Měli byste vidět, jak data začínají streamovat pomocí příkazového řádku pythonu a graf se mění s intenzitou světla, jak je znázorněno na obrázku níže.
Takto lze Arduino použít jako osciloskop, lze jej také vyrobit pomocí Raspberry pi, zde si přečtěte kompletní návod k osciloskopu založenému na Raspberry Pi.