- Projekto eiga:
- Projekto reikalavimai
- Grandinės schema:
- Įdiekite „Raspberry Pi“ osciloskopo priklausomybes:
- „Raspberry Pi“ osciloskopo „Python“ kodas:
- Veikiantis aviečių Pi osciloskopas:
Sveiki, vaikinai, sveiki atvykę į šios dienos įrašą. Vienas iš patraukliausių dalykų, susijusių su kūrėju, yra žinojimas, kaip sukurti laikinus įrankius. Jūs niekada neužstrigsite dirbdami prie bet kokio projekto, kai turite tokį universalumą. Taigi šiandien aš dalinsiuosi, kaip sukurti „ Raspberry Pi“ laikiną vienos iš svarbiausių elektros / elektronikos inžinerijos įrankių versiją; Osciloskopas.
Osciloskopas yra elektroninis bandymo prietaisas, leidžiantis vizualizuoti ir stebėti kintančią signalo įtampą, paprastai kaip dviejų matmenų diagramą su vienu ar keliais signalais, suplanuotais laiko atžvilgiu. Šiandienos projekte bus siekiama pakartoti osciloskopo signalo vizualizavimo galimybes naudojant „Raspberry Pi“ ir analoginio į skaitmeninį keitiklio modulį.
Projekto eiga:
Norint pakartoti osciloskopo signalo vizualizaciją naudojant „Raspberry Pi“, reikės atlikti šiuos veiksmus;
1. Atlikite įvesties signalo konversiją iš skaitmeninio į analoginį
2. Paruoškite gautus duomenis reprezentacijai
3. Nubraižykite duomenis tiesioginio laiko grafike
Supaprastinta šio projekto blokinė schema atrodys taip, kaip nurodyta toliau.
Projekto reikalavimai
Šiam projektui keliamus reikalavimus galima suskirstyti į du:
- Aparatinės įrangos reikalavimai
- Programinės įrangos reikalavimai
Aparatinės įrangos reikalavimai
Norint sukurti šį projektą, reikalingi šie komponentai / dalys;
- Aviečių pi 2 (arba bet kuris kitas modelis)
- 8 arba 16 GB SD kortelė
- LAN / Ethernet kabelis
- Maitinimo šaltinis arba USB kabelis
- ADS1115 ADC
- LDR (neprivaloma, kaip skirta bandymui)
- 10k arba 1k rezistorius
- Džemperių laidai
- Bandomoji Lenta
- Monitorius ar bet koks kitas būdas pamatyti „pi“ darbalaukį (įskaitant VNC)
Programinės įrangos reikalavimai
Šio projekto programinės įrangos reikalavimai iš esmės yra pitono moduliai ( matplotlib ir drawow ), kurie bus naudojami duomenų vizualizavimui, ir „Adafruit“ modulis sąsajai su ADS1115 ADC lustu. Aš parodysiu, kaip tęsti šiuos modulius „Raspberry Pi“.
Nors ši pamoka veiks nepriklausomai nuo naudojamos aviečių pi OS, aš naudosiu „Raspberry Pi stretch OS“ ir manysiu, kad esate gerai susipažinę su „Raspberry Pi“ nustatymu naudodamiesi „Raspbian stretch“ OS, ir žinote, kaip į avietę įtraukti SSH. naudokite terminalo programinę įrangą, pvz., glaistą. Jei turite problemų dėl bet kurio iš šių dalykų, šioje svetainėje yra daugybė „Raspberry Pi“ mokymo programų.
Sukūrę visus aparatūros komponentus, sukurkime schemas ir sujungsime komponentus.
Grandinės schema:
Norėdami konvertuoti analoginius įvesties signalus į skaitmeninius signalus, kuriuos galima vizualizuoti naudojant „Raspberry Pi“, naudosime ADS1115 ADC lustą. Ši mikroschema tampa svarbi, nes „Raspberry Pi“, skirtingai nei „Arduino“ ir daugumoje mikrovaldiklių, neturi borto analoginio skaitmeninio keitiklio (ADC). Nors mes galėjome naudoti bet kokią su aviečių pi suderinamą ADC mikroschemą, man labiau patinka šis lustas dėl didelės skiriamosios gebos (16 bitų) ir gerai dokumentuotų duomenų lentelių bei „Adafruit“ naudojimo instrukcijų. Taip pat galite patikrinti mūsų „Raspberry Pi ADC“ mokymo programą, kad sužinotumėte daugiau apie tai.
ADC yra I2C pagrįstas įrenginys ir turėtų būti prijungtas prie „Raspberry Pi“, kaip parodyta toliau pateiktose schemose.
Aiškumo dėlei žemiau aprašytas kaiščių sujungimas tarp dviejų komponentų.
„ADS1115“ ir „Raspberry Pi“ jungtys:
VDD - 3,3v
BND - GND
SDA - SDA
SCL - SCL
Kai visos jungtys atliktos, įjunkite savo pi ir tęskite toliau nurodytų priklausomybių diegimą.
Įdiekite „Raspberry Pi“ osciloskopo priklausomybes:
Prieš pradėdami rašyti pitono scenarijų, norėdami gauti duomenis iš ADC ir braižyti juos tiesioginiame grafike, turime įgalinti aviečių pi I2C ryšio sąsają ir įdiegti programinės įrangos reikalavimus, kurie buvo minėti anksčiau. Tai bus padaryta atliekant toliau nurodytus veiksmus, kad būtų lengva sekti:
1 žingsnis: Įjunkite „Raspberry Pi I2C“ sąsają
Norėdami įjungti „I2C“, paleiskite iš terminalo;
sudo raspi-config
Kai atsidarys konfigūracijos skydai, pasirinkite sąsajos parinktis, pasirinkite „I2C“ ir spustelėkite įgalinti.
2 žingsnis: Atnaujinkite „Raspberry pi“
Pirmas dalykas, kurį darau prieš pradėdamas bet kokį projektą, yra „Pi“ atnaujinimas. Tuo įsitikinęs, kad visi dalykai OS yra atnaujinti ir nepatirsi suderinamumo problemų su naujausia programine įranga, kurią pasirinkau įdiegti „Pi“. Norėdami tai padaryti, paleiskite žemiau dviejų komandų:
sudo apt-get update sudo apt-get atnaujinimas
3 veiksmas: įdiekite „Adafruit ADS1115“ biblioteką, skirtą ADC
Atlikę naujinimą, mes esame pasirengę įdiegti priklausomybes, pradedant „Adafruit python“ moduliu ADS115 lustui. Įsitikinkite, kad esate „Raspberry Pi“ namų kataloge, paleisdami;
cd ~
tada paleisdami įdiekite pagrindinius komponentus;
sudo apt-get install build-essential python-dev python-smbus git
Tada paleisdami klonuokite bibliotekai skirtą „Adafruit“ aplanką;
„git“ klonas https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Pereikite į klonuoto failo katalogą ir paleiskite sąrankos failą;
CD „Adafruit_Python_ADS1x1z sudo python setup.py install“
Po įdiegimo jūsų ekranas turėtų atrodyti taip, kaip paveikslėlyje žemiau.
4 žingsnis: išbandykite biblioteką ir 12C ryšį.
Prieš tęsdami likusį projektą, svarbu išbandyti biblioteką ir užtikrinti, kad ADC galėtų bendrauti su aviečių pi per I2C. Norėdami tai padaryti, naudosime scenarijaus pavyzdį, pateiktą su biblioteka.
Vis dar būdami „Adafruit_Python_ADS1x15“ aplanke, pakeiskite katalogą į pavyzdžių katalogą, paleisdami;
CD pavyzdžiai
Tada paleiskite pavyzdį sampletest.py, kuriame lentelių pavidalu rodoma keturių ADC kanalų vertė.
Paleiskite pavyzdį naudodami:
python simpletest.py
Jei „I2C“ modulis įgalintas ir ryšiai yra geri, turėtumėte pamatyti duomenis, kaip parodyta toliau pateiktame paveikslėlyje.
Jei įvyksta klaida, patikrinkite, ar ADC yra gerai prijungtas prie PI, o I2C ryšys įjungtas Pi.
5 žingsnis: įdiekite „ Matplotlib“
Norėdami vizualizuoti duomenis, turime įdiegti matplotlib modulį, kuris naudojamas visų rūšių grafikams atvaizduoti python. Tai galima padaryti bėgant;
sudo apt-get install python-matplotlib
Turėtumėte pamatyti tokį rezultatą kaip paveikslėlis žemiau.
6 žingsnis : įdiekite „ Drawnow python“ modulį
Galiausiai turime įdiegti traukiamą pitono modulį. Šis modulis padeda mums tiesiogiai atnaujinti duomenų diagramą.
Mes įdiegsime „Drawow“ per „python“ paketo diegimo programą; pip , todėl turime užtikrinti, kad jis būtų įdiegtas. Tai galima padaryti bėgant;
sudo apt-get įdiekite python-pip
Tada mes galime naudoti pip įdiegti drawnow paketą veikia:
sudo pip įdiegti nubrėžtą
Paleidę turėtumėte gauti tokį rezultatą kaip paveikslėlis žemiau.
Įdiegę visas priklausomybes, dabar esame pasirengę rašyti kodą.
„Raspberry Pi“ osciloskopo „Python“ kodas:
Šio Pi osciloskopo pitono kodas yra gana paprastas, ypač jei esate susipažinęs su python matplotlib moduliu. Prieš parodydamas mums visą kodą, pabandysiu jį padalyti į dalis ir paaiškinti, ką daro kiekviena kodo dalis, kad galėtumėte turėti pakankamai žinių išplėsti kodą, kad galėtumėte atlikti daugiau dalykų.
Šiame etape svarbu pereiti prie monitoriaus arba naudoti VNC vaizduoklį, kad galėtumėte pamatyti bet kokį „Raspberry Pi“ darbalaukį, nes braižomas grafikas nebus rodomas terminale.
Kai monitorius yra sąsaja, atidarykite naują python failą. Galite jį pavadinti bet kokiu norimu vardu, bet aš jį pavadinsiu scope.py.
sudo nano scope.py
Sukūrus failą, pirmiausia reikia importuoti modulius, kuriuos naudosime;
importavimo laikas importuoti matplotlib.pyplot kaip plt iš importuoto importo * importuoti „Adafruit_ADS1x15“
Tada sukursime ADS1x15 bibliotekos egzempliorių, nurodydami ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
Toliau nustatome ADC padidėjimą. Yra skirtingi stiprinimo diapazonai ir jie turėtų būti pasirinkti atsižvelgiant į įtampą, kurios tikitės ADC įėjime. Šioje pamokoje mes vertiname 0 - 4,09v, todėl naudosime 1 padidėjimą. Norėdami gauti daugiau informacijos apie padidėjimą, galite patikrinti ADS1015 / ADS1115 duomenų lapą.
GAUDA = 1
Tada turime sukurti masyvo kintamuosius, kurie bus naudojami braižomiems duomenims saugoti, o dar vienas - kaip skaičiavimas.
Val = cnt = 0
Tada mes žinome savo ketinimus padaryti sąveiką interaktyvų, kad galėtume suplanuoti duomenis tiesiogiai.
plt.ion ()
Tada mes pradedame nuolatinę ADC konversiją nurodydami ADC kanalą, šiuo atveju 0 kanalą, taip pat nurodome padidėjimą.
Reikėtų pažymėti, kad visus keturis ADS1115 esančius ADC kanalus galima nuskaityti vienu metu, tačiau šiai demonstracijai pakanka 1 kanalo.
adc.start_adc (0, pelnas = GAIN)
Tada sukursime funkciją def makeFig , norėdami sukurti ir nustatyti grafiko atributus, kurie išlaikys mūsų gyvą sklypą. Pirmiausia nustatome y ašies ribas naudodami ylim , po to įvesdami siužeto pavadinimą ir etiketės pavadinimą prieš nurodydami duomenis, kurie bus nubraižyti, ir jo siužeto stilių bei spalvą naudodami plt.plot (). Mes taip pat galime nurodyti kanalą (kaip buvo nurodytas 0 kanalas), kad galėtume identifikuoti kiekvieną signalą, kai naudojami keturi ADC kanalai. plt.legend naudojamas nurodyti, kur norime informacijos apie tą signalą (pvz., 0 kanalas), rodomą paveiksle.
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'apatinė dešinė')
Toliau mes parašome while ciklą, kuris bus naudojamas nuolat skaityti duomenis iš ADC ir atitinkamai atnaujinti diagramą.
Pirmas dalykas, kurį darome, yra nuskaityti ADC konversijos vertę
vertė = adc.get_last_result ()
Tada mes atspausdinsime vertę ant terminalo, kad gautume kitą būdą patvirtinti nupieštus duomenis. Palaukiame kelias sekundes po spausdinimo, tada pridedame duomenis prie sąrašo (val), sukurto tam kanalo duomenims saugoti.
spausdinti ('Channel 0: {0}'. format (value)] time.sleep (0.5) val.append (int (value))
Tada mes paskambiname „ drawow“, kad atnaujintume sklypą.
nubrauktas (makeFig)
Siekdami užtikrinti, kad naujausi duomenys būtų tokie, kokie yra diagramoje, duomenis iš 0 indekso ištriname kas 50 duomenų.
cnt = cnt + 1 if (cnt> 50): val.pop (0)
Tai viskas!
Visas „ Python“ kodas pateikiamas šios pamokos pabaigoje.
Veikiantis aviečių Pi osciloskopas:
Nukopijuokite visą python kodą ir įklijuokite į anksčiau sukurtą pitono failą, nepamirškite, kad mums reikės monitoriaus, kad galėtume peržiūrėti sklypą, todėl visa tai turėtų atlikti VNC arba prijungtas monitorius ar ekranas.
Išsaugokite kodą ir paleiskite naudodami;
sudo python apimtis.py
Jei naudojate kitą pavadinimą, o ne „scope.py“, nepamirškite jo pakeisti, kad atitiktų.
Po kelių minučių turėtumėte pamatyti, kaip ADC duomenys spausdinami ant terminalo. Kartais galite gauti įspėjimą iš matplotlib (kaip parodyta žemiau esančiame paveikslėlyje), kuris turėtų būti užblokuotas, tačiau tai vis tiek neturi įtakos rodomiems duomenims ar sklypui. Tačiau norint atmesti įspėjimą, po kodo importavimo eilutėmis galima pridėti šias kodo eilutes.
Importo įspėjimai importuokite matplotlib.cbook warnings.filterwarnings („ignoruoti“, kategorija = matplotlib.cbook.mplDeprecation)
Tai štai šiai pamokų vaikinams, norėdami visiškai išbandyti savo osciloskopą, galite prijungti analoginį įrenginį, pvz., Potenciometrą, prie ADC kanalo ir turėtumėte pamatyti, kaip duomenys keičiasi kiekvienu potenciometro posūkiu. Arba galite įvesti sinusinę arba kvadratinę bangą, kad patikrintumėte išvestį.
Ačiū, kad perskaitėte, jei turite klausimų (-ų) ar ką nors, ką norėčiau pridėti, tiesiog palikite man komentarą.
Iki kito karto tęskite!