- Kaip tai veikia
- Reikalingi komponentai
- Schemos
- „Arduino“ oskloskopo kodas
- „Python“ (braižytuvo) scenarijus
- „Arduino“ kodas
- „Arduino“ osciloskopas veikia
Osciloskopas yra vienas iš svarbiausių įrankių, kurį rasite bet kurio elektronikos inžinieriaus ar gamintojo darbastalyje. Jis pirmiausia naudojamas bangų formai peržiūrėti ir įtampos lygiams, dažniui, triukšmui ir kitiems jo įėjime taikomų signalų parametrams nustatyti, kurie laikui bėgant gali keistis. Jį taip pat naudoja įterptosios programinės įrangos kūrėjai kodų derinimui ir technikai, šalinantys elektroninius prietaisus remonto metu. Dėl šių priežasčių osciloskopas yra būtinas įrankis bet kuriam inžinieriui. Vienintelis klausimas yra tai, kad jie gali būti labai brangūs, o osciloskopai, atliekantys pagrindines funkcijas su mažiausiu tikslumu, gali kainuoti nuo 45 iki 100 USD, o pažangesni ir efektyvesni - daugiau nei 150 USD. Šiandien aš pademonstruosiu, kaip naudotis „ Arduino“ir programinę įrangą, kuri bus sukurta naudojant mano mėgstamą programavimo kalbą „Python“, siekiant sukurti pigų, 4 kanalų „Arduino“ osciloskopą, galintį atlikti užduotis, kurioms atlikti naudojami kai kurie pigūs osciloskopai, pvz., bangos formų rodymas ir įtampos lygių nustatymas. signalams.
Kaip tai veikia
Yra dvi šio projekto dalys;
- Duomenų keitiklis
- Ploteris
Osciloskopai paprastai apima vizualų analoginio signalo, įvesto jo įvesties kanale, vaizdą. Norėdami tai pasiekti, pirmiausia turime konvertuoti signalą iš analoginio į skaitmeninį, o tada duomenis braižyti. Norėdami konvertuoti, mes naudosime ADC (konverterį iš analoginio į skaitmeninį) ant mikroprocesoriaus atmega328p, kurį „Arduino“ naudoja analoginiams duomenims konvertuoti įvestyje į skaitmeninį signalą. Po konvertavimo laiko vertė per UART siunčiama iš „Arduino“ į kompiuterį, kuriame braižytuvo programinė įranga, kuri bus sukurta naudojant „python“, konvertuos gaunamą duomenų srautą į bangos formą, braižydama kiekvieną duomenis pagal laiką.
Reikalingi komponentai
Norint sukurti šį projektą, reikalingi šie komponentai;
- „Arduino Uno“ (galima naudoti bet kurią kitą lentą)
- Bandomoji Lenta
- 10k rezistorius (1)
- LDR (1)
- Džemperių laidai
Reikalingos programinės įrangos
- „Arduino IDE“
- „Python“
- „Python“ bibliotekos: „Pyserial“, „Matplotlib“, „Drawnow“
Schemos
„ Arduino“ osciloskopo schema yra paprasta. Viskas, ką turime padaryti, tai prijungti tiriamą signalą prie nurodyto „Arduino“ analoginio kaiščio. Tačiau mes naudosime LDR paprastoje įtampos daliklio sąrankoje, kad generuotume tiriamą signalą taip, kad sukurta bangos forma apibūdintų įtampos lygį, atsižvelgiant į šviesos intensyvumą aplink LDR.
Prijunkite komponentus, kaip parodyta toliau pateiktose schemose;
Po prijungimo sąrankai turėtų patikti toliau pateiktas vaizdas.
Atlikę visus sujungimus, galime rašyti kodą.
„Arduino“ oskloskopo kodas
Kiekvienam iš dviejų skyrių rašysime kodus. Plotteriui, kaip minėta anksčiau, rašysime pitono scenarijų, kuris priims duomenis iš „Arduino“ per „UART“ ir „Plots“, o keitikliui - „Arduino“ eskizą, kuris perims duomenis iš ADC ir pavers juos įtampos lygiai, kurie siunčiami braižytuvui.
„Python“ (braižytuvo) scenarijus
Kadangi pitono kodas yra sudėtingesnis, pradėsime nuo jo.
Mes naudosimės keliomis bibliotekomis, įskaitant; „drawow“, „Matplotlib“ ir „ Pyserial“ su pitono scenarijumi, kaip minėta anksčiau. „Pyserial“ leidžia mums sukurti pitono scenarijų, kuris galėtų bendrauti per nuoseklųjį prievadą, „ Matplotlib“ suteikia mums galimybę generuoti siužetus iš duomenų, gautų per nuoseklųjį prievadą, o „ drawow“ suteikia mums galimybę atnaujinti siužetą realiu laiku.
Yra keli būdai, kaip įdiegti šiuos paketus į savo kompiuterį, lengviausia naudojant „ pip“ . „Pip“ galima įdiegti per komandų eilutę „Windows“ arba „Linux“ įrenginyje. PIP yra supakuotas su python3, todėl patarsiu įdiegti python3 ir pažymėti langelį apie python pridėjimą prie kelio. Jei kyla problemų diegiant „pip“, patarimų rasite šioje oficialioje „Python“ svetainėje.
Įdiegę „pip“, dabar galime įdiegti kitas mums reikalingas bibliotekas.
Atidarykite komandų eilutę „Windows“ vartotojams, terminalą „Linux“ vartotojams ir įveskite šiuos duomenis:
pip įdiegti pyserial
Tai atlikę įdiekite matplotlib naudodami;
pip įdiegti matplotlib
„Drawnow “ kartais įrengiamas kartu su „matplotlib“, bet kad būtumėte tikri, paleiskite;
pip montuoti traukinį
Baigę diegimą, mes esame pasirengę rašyti python scenarijų.
Šio projekto pitono scenarijus yra panašus į tą, kurį parašiau „Raspberry Pi“ pagrindu sukurtam osciloskopui.
Pirmiausia importuojame visas bibliotekas, reikalingas kodui;
importo laikas importas matplotlib.pyplot kaip plt iš importuojamo importo * importas pyserial
Tada sukursime ir inicijuosime kintamuosius, kurie bus naudojami kodo metu. Masyvas val bus naudojamas saugoti duomenis, gautus iš nuoseklaus prievado, o cnt bus naudojamas skaičiuoti. Duomenys 0 vietoje bus ištrinti kas 50 duomenų suskaičiavus. Tai daroma tam, kad duomenys būtų rodomi osciloskope.
val = cnt = 0
Tada sukursime nuoseklaus prievado objektą, per kurį „Arduino“ susisieks su mūsų python scenarijumi. Įsitikinkite, kad žemiau nurodytas „com“ prievadas yra tas pats „com“ prievadas, per kurį jūsų „Arduino“ plokštė bendrauja su IDE. Aukščiau naudojamas 115200 perdavimo greitis buvo naudojamas norint užtikrinti greitą ryšį su „Arduino“. Norint išvengti klaidų, „Arduino“ nuoseklusis prievadas taip pat turi būti įgalintas, kad galėtų bendrauti su šiuo duomenų perdavimo greičiu.
prievadas = nuoseklusis. Serija („COM4“, 115200, skirtasis laikas = 0,5)
Tada mes padarome siužetą interaktyvų naudodami;
plt.ion ()
turime sukurti funkciją, kad iš gautų duomenų sugeneruotume siužetą, sukuriant viršutinę ir mažiausią ribą, kurios tikimės, kuri šiuo atveju yra 1023, remiantis „Arduino“ ADC skiriamąja geba. Mes taip pat nustatome pavadinimą, pažymime kiekvieną ašį ir pridedame užrašą, kad būtų lengva nustatyti siužetą.
#create the fig function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' apatiniame dešiniajame kampe ')
Tai padarę, mes dabar esame pasirengę parašyti pagrindinę kilpą, kuri paima duomenis iš nuoseklaus prievado, kai yra, ir juos braižo. Norėdami sinchronizuoti su „Arduino“, python scenarijus į „ Arduino“ siunčia rankos paspaudimo duomenis, norėdamas parodyti jo pasirengimą skaityti duomenis. Kai „Arduino“ gauna rankos paspaudimo duomenis, jis atsako su ADC duomenimis. Be šio rankos paspaudimo mes negalėsime pateikti duomenų realiuoju laiku.
while (Tiesa): port.write (b's ') #handhake with Arduino if (port.inWaiting ()): # jei arduino atsako value = port.readline () # perskaitykite atsakymo spausdinimą (reikšmę) #print, kad galėtume stebėkite jo skaičių = int (value) #konvertuokite gautus duomenis į sveikų skaičių spausdinimą ('0 kanalas: {0}'. formatas (skaičius)) # Miegokite pusę sekundės. time.sleep (0.01) val.append (int (number)) drawow (makeFig) #update plot, kad atspindėtų naują duomenų įvestį plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) # išlaikykite diagramą šviežią, ištrindami duomenis 0 padėtyje
Visas „arduino“ osciloskopo pitono kodas pateiktas šio straipsnio pabaigoje.
„Arduino“ kodas
Antrasis kodas yra „Arduino“ eskizas, skirtas gauti duomenis, atspindinčius ADC signalą, tada palaukite, kol gausite rankos paspaudimo signalą iš braižytuvo programinės įrangos. Vos gavęs rankos paspaudimo signalą, jis per UART persiunčia gautus duomenis braižytuvo programinei įrangai.
Pirmiausia deklaruojame „Arduino“ analoginio kaiščio, kuriam bus pritaikytas signalas, kaištį.
int jutiklio kaištis = A0;
Tada mes inicijuojame ir pradedame nuoseklųjį ryšį 115200 duomenų perdavimo sparta
void setup () { // inicializuokite nuoseklųjį ryšį 115200 bitų per sekundę greičiu, kad atitiktų pitono scenarijų: Serial.begin (115200); }
Galiausiai, funkcija voidloop (), kuri tvarko duomenų nuskaitymą ir duomenis nuosekliai siunčia braižytuvui.
void loop () { // perskaitykite 0 analoginio kaiščio įvestį: float sensorValue = analogRead (sensorpin); baitų duomenys = Serial.read (); if (duomenys == 's') { Serial.println (sensorValue); vėlavimas (10); // vėlavimas tarp skaitymų, kad būtų stabilumas } }
Visas „ Arduino“ osciloskopo kodas pateikiamas žemiau, taip pat šio straipsnio pabaigoje.
int jutiklio kaištis = A0; void setup () { // inicializuokite nuoseklųjį ryšį 115200 bitų per sekundę greičiu, kad atitiktų pitono scenarijų: Serial.begin (115200); } void loop () { // skaitykite įvestį analoginiame 0 kaištelyje: ###################################### ####################### float sensorValue = analogRead (jutiklio kaištis); baitų duomenys = Serial.read (); if (duomenys == 's') { Serial.println (sensorValue); vėlavimas (10); // vėlavimas tarp skaitymų, kad būtų stabilumas } }
„Arduino“ osciloskopas veikia
Įkelkite kodą į „Arduino“ sąranką ir paleiskite „python“ scenarijų. Turėtumėte pamatyti, kaip duomenys pradeda tekėti per python komandinę eilutę, o diagrama kinta atsižvelgiant į šviesos intensyvumą, kaip parodyta žemiau esančiame paveikslėlyje.
Taigi, kaip „Arduino“ galima naudoti kaip osciloskopą, jis taip pat gali būti pagamintas naudojant „Raspberry pi“. Čia patikrinkite išsamią „Raspberry Pi“ osciloskopo instrukciją.