Përmbajtje:

Stacioni i motit lokal: 8 hapa (me fotografi)
Stacioni i motit lokal: 8 hapa (me fotografi)

Video: Stacioni i motit lokal: 8 hapa (me fotografi)

Video: Stacioni i motit lokal: 8 hapa (me fotografi)
Video: Florence, Italy Walking Tour - NEW - 4K with Captions: Prowalk Tours 2024, Korrik
Anonim
Stacioni i motit lokal
Stacioni i motit lokal

Ndërsa po kërkoja një projekt të mrekullueshëm për të bërë projektin e parë të shkollës, kisha shumë ide se çfarë të bëja, por asnjërën prej tyre nuk e gjeta sfiduese.

Më vonë, mendova të krijoja një Stacion Moti që kishte diçka të veçantë për të. Doja të isha në gjendje të ruaja të gjitha të dhënat e mia dhe më vonë t'i përdorja ato për statistika. Ky projekt do të bëhej posaçërisht për personat që kanë interes për meteorologjinë dhe duan një stacion moti të krijuar në shtëpi që nuk kushton aq sa ato në dispozicion në treg. Projekti është bërë gjithashtu për të ruajtur aftësinë për të shtuar ose hequr sensorë në çdo kohë.

Isha vërtet i lumtur kur pashë rezultatin tim përfundimtar i cili doli më mirë se sa pritej.

Isshtë bërë nga një Linux që funksionon Raspberry Pi 4.

  • Uebfaqe Apache (html css js)
  • Eventlet (faqja e internetit e serverit të backendit)
  • MariaDB (serveri i bazës së të dhënave)

Furnizimet

  • Raspberry Pi 4:

    kartë sd (min 16 gb)

  • Sensorë:

    1. Sensori i shpejtësisë së erës QS-FS
    2. Sensori i erës Sinjali i kopshtit Dalja e aliazhit të aluminit Sensori i drejtimit të erës Sensori i matjes së shpejtësisë së folesë së erës https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminium-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Masja-Instrumenti-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (lagështia)
    4. BMP280 (presioni i ajrit)
    5. DS18B20 (temperatura)
  • Furnizimi me energji elektrike

    • Furnizimi me energji 5v (RPi)
    • Furnizimi me energji 9v (në një furnizim me energji të jashtme të bordit të bukës)
  • Breadboard (x2)

    T-kalldrëm plus për RPi 4

  • telat e kërcyesit
  • IC -të

    • MCP3008
    • PCF8574AN
  • Ekran LCD 16x2
  • LED (e kuqe
  • Zorrë (optinale)

    • arka vere
    • shtyllë druri (2m)
    • dërrasë druri (1m)

Hapi 1: Përgatitja e gjërave

Alwaysshtë gjithmonë e një rëndësie të madhe për të marrë të gjitha sendet që ju nevojiten para se të filloni të punoni në një hap. Kjo do t'ju kursejë shumë kohë gjatë punës në të.

Kështu së pari, Cfare te nevojitet:

  • Raspberry Pi 4:

    kartë sd (min 16 gb)

  • Sensorë:

    1. Sensori i shpejtësisë së erës QS-FS
    2. Sensori i erës Kopshti Sinjali i daljes Aliazh alumini Drejtimi i erës Sensori i erës Instrumenti i matjes së shpejtësisë së erës
    3. DHT22 (lagështia)
    4. BMP280 (presioni i ajrit)
    5. DS18B20 (temperatura)
  • Furnizimi me energji elektrike

    • Furnizimi me energji 5v (RPi)
    • Furnizimi me energji 9v (në një furnizim me energji të jashtme të bukës)
  • Breadboard (x2)
  • T-kalldrëm plus për RPi 4
  • telat e kërcyesit
  • IC -të

    • MCP3008
    • PCF8574AN
  • Ekran LCD 16x2
  • LED (e kuqe)
  • Zorrë (optinale)

    • arka druri prej druri
    • dërrasë druri (1m)
    • shtyllë (2m)

Të gjitha lidhjet ku i kam blerë mund t'i gjeni në pjesën e furnizimeve nën hyrje.

Hapi 2: Vendosja e RPi

Vendosja e RPi
Vendosja e RPi

Për projektin tonë ne kemi nevojë për një RPi me softuerin e dhënë të instaluar.

  • Uebfaqe Apache (html css js)
  • Flask Socket-IO (faqja e internetit e serverit në sfond)
  • MariaDB (serveri i bazës së të dhënave)

Para instalimit është gjithmonë i dobishëm për t'u siguruar që keni të instaluar softuerin më të fundit RPi. Për ta bërë këtë, thjesht ekzekutoni komandën e mëposhtme:

sudo apt përditësim

Apache:

Së pari le të flasim për Apache. Apache është një server në internet i cili përdoret në të gjithë botën. Ajo drejton faqen tuaj te internetit në mënyrë të përsosur. E vetmja gjë që duhet të bëni është ta instaloni dhe ta vendosni faqen tuaj në dosjen e duhur dhe aty është.

sudo apt install apache2 -y

Kjo eshte!

Për t'u siguruar që gjithçka është instaluar siç duhet, shfletoni në adresën tuaj mjedër pi Ip në shfletuesin tuaj dhe shikoni nëse merrni uebfaqen e paracaktuar. Nëse keni ndonjë problem në lidhje me këtë hap, mund të kontrolloni faqen e internetit të RPi këtu.

Eventlet:

Tani le të instalojmë Eventlet. Ai do të drejtojë serverin tonë të backendit dhe do të bëjë lidhjen nga sensorët tanë me faqen tonë të internetit. Për këtë na duhen disa pako.

Foleja-prizëIO:

pip3 instaloni flaks-socketio

Eventlet:

pip3 instaloni ngjarjen

Gevent:

pip3 instaloni gevent

Mariadb:

Mariadb është një bazë të dhënash e bazuar në MySQL e cila krijon baza të të dhënave relacionale. Shpesh përdoret në RPi dhe për këtë arsye ka shumë ndihmë që mund të gjeni në internet. Për më shumë informacion mund të shkoni në këtë lidhje.

apt install mariadb-server

Hapi 3: Lidhja e sensorëve dhe shtimi i kodit

Lidhja e sensorëve dhe shtimi i kodit
Lidhja e sensorëve dhe shtimi i kodit
Lidhja e sensorëve dhe shtimi i kodit
Lidhja e sensorëve dhe shtimi i kodit
Lidhja e sensorëve dhe shtimi i kodit
Lidhja e sensorëve dhe shtimi i kodit

Për të lidhur sensorët me RPi-në tonë mund të përdorim një T-Cobbler plus. Ky është një mjet i vogël i dobishëm që bën të mundur përdorimin e të gjitha kunjave tuaj në RPi tuaj në një dërrasë buke.

Në projektin tim kam 5 sensorë:

  1. Sensori i shpejtësisë së erës QS-FS
  2. Sensori i erës Sinjali i kopshtit Rezultati i aliazhit të aluminit Sensori i drejtimit të erës Sensori i instrumentit të matjes së shpejtësisë së erës
  3. DHT22 (lagështia)
  4. BMP280 (presioni i ajrit)
  5. DS18B20 (temperatura)

Sensori i shpejtësisë së erës:

Fillimisht fillova me sensorin e shpejtësisë së erës sepse isha kryesisht i emocionuar për këtë sensor. Shtë një sensor me një sinjal analog të daljes 0-5v dhe ka nevojë për një tension prej të paktën 7 volt për të punuar. Unë zgjedh për përshtatësin 9 volt për ta fuqizuar atë.

Për të lexuar në këtë sensor kam përdorur një MCP3008 i cili është një IC për të lexuar në sinjale analoge. IC mund të funksionojë në 3.3V ose 5V, por unë zgjedh 3.3V për ta bërë atë të pajtueshëm me RPi. Kjo do të thoshte se më duhej të ndryshoja tensionin e daljes nga 5V në 3.3V Unë e bëra këtë duke shtuar një ndarës të tensionit të krijuar nga 2 rezistorë (2k dhe 1k ohm).

Sensori i drejtimit të erës:

Drejtimi i erës është po aq i rëndësishëm sa shpejtësia e erës, kështu që unë do ta lidh këtë në vijim.

Ky sensor ka të njëjtat specifikime si sensori i shpejtësisë së erës. Gjithashtu do të punojë në 9V dhe ka një tension dalës prej 5 volt. Gjithashtu këtë sensor do ta lidhim me MCP3008 përmes një ndarësi të tensionit.

DHT22 (lagështia):

DHT22 lexon lagështinë. Kjo ju jep një vlerë në përqindje dhe vlera e saj mund të lexohet duke përdorur protokollin I2C në RPi. Prandaj, duhet të aktivizoni portet I2C në konfigurimin Raspi. Më shumë informacion këtu.

BMP280 (presioni i ajrit):

BMP280 përdoret për të lexuar presionin e ajrit. Vlera e tij lexohet përmes autobusit SPI në RPi. Ky protokoll gjithashtu duhet të aktivizohet në konfigurimin Raspi. Për kodin tim kam përdorur bibliotekën Adafruit.

DS18B20 (temperatura):

Sensori i fundit mat temperaturën. ky sensor është nga Dallas dhe nëse keni pasur një përvojë të vogël me Dallasin, ndoshta duhet ta dini tashmë se ata përdorin autobusin 1Wire. Mos u habitni nëse them se ky protokoll gjithashtu duhet të aktivizohet në konfigurimin Raspi.

Si i lidha sensorët:

Si pdf kam ngarkuar një skemë elektrike dhe dërrasë për ta bërë atë pak më të lehtë.

Pasi të keni qenë në gjendje të lidhni sensorët me sukses dhe keni shtuar kodin e kërkuar për të lexuar të gjithë sensorët, mund të shkoni përpara dhe të shkoni në hapin tjetër. Nëse ju pëlqen të lini një sensor prapa ose dëshironi të shtoni më shumë, mund ta bëni këtë.

Hapi 4: Hartimi i një Ui Web

Hartimi i një UI në internet
Hartimi i një UI në internet
Hartimi i një Ui Web
Hartimi i një Ui Web
Hartimi i një Ui Web
Hartimi i një Ui Web

Tani kemi lidhur sensorët që na nevojiten një dizajn për faqen tonë të internetit.

Ne duam që faqja e internetit të krijojë një pamje të lehtë ndërsa shfaq të gjitha të dhënat në kohë reale të sensorëve.

Gjithashtu ne duam të jemi në gjendje të shohim historinë e këtyre vlerave të matura për intervalin kohor.

Kështu së pari fillova të shikoja përreth në internet për ndonjë frymëzim. Mbi të gjitha aty ku gjenden vetëm faqet e informacionit për ujërat pa dizajnin që po kërkoja. Stacionet e motit që tashmë ishin në treg kishin më shumë gjasa një ekran. Dhe nga ajo shfaqje erdhi frymëzimi im. Shumica e ekraneve kanë një dizajn me një pamje rrjeti. Kjo më dha idenë për të krijuar faqen kryesore ku do të shfaqeshin të gjithë sensorët.

Por, thashë gjithashtu se doja të bëja një faqe ku mund të shihni historinë e secilit sensor vlerat e saj.

Për këtë arsye, unë gjithashtu bëra një faqe të dytë në modelin tim që përmbante këtë. Në këtë faqe unë mund të shoh disa informacione shtesë në lidhje me sensorin tim që nuk do të shfaqen në faqen time të parë dhe jashtë kursit të historisë.

Pas disa orësh, dizajni im i plotë u përpunua!

Dizajni është bërë duke përdorur Adobe XD.

Hapi 5: Krijimi i bazës së të dhënave

Krijimi i bazës së të dhënave
Krijimi i bazës së të dhënave

Për të marrë një pushim nga pjesa e projektimit fillova në bazën time të të dhënave.

Kjo bazë të dhënash do të përmbajë të gjithë sensorët (5), të gjithë aktivizuesit (2) dhe vlerat që kishin ata sensorë.

Baza e të dhënave është mjaft e lehtë dhe ka disa lidhje.

Ju mund të shihni modelin e bazës së të dhënave në foto.

Hapi 6: Kodimi i Uebfaqes: Frontend (html Css)

Kthehu në faqen e internetit!

Tani kam një dizajn që mund të filloj ta kodoj si html css për ta përdorur me të vërtetë.

Në faqen kryesore:

Fillova duke e konsideruar secilin sensor si një element në faqen time të internetit. Kështu që më vonë mund ta lejoj këtë pjesë të gjenerohet nga kodi im Javascript.

Unë gjithashtu futa klasa të rastësishme të mbajtësve të JS në elemente. Këto do të bënin të mundur ndryshimin e përmbajtjes së atij elementi

Kjo më mori shumë kohë sepse nuk jam aq i mirë në këtë gjuhë të veçantë.

Pasi të kisha bërë faqen kryesore, ishte koha për të filluar në faqen e historisë.

Në faqen e historisë:

Kjo faqe ishte pak më e lehtë për tu rikrijuar. Në këtë faqe kishte edhe js-mbajtës për të marrë informacionin rreth sensorit, një slot të vlerës në kohë reale dhe për të shfaqur tabelën me vlerat e matura.

Për të krijuar një opsion tab në faqen time të internetit për të zgjedhur midis Tabela ose Grafiku, më duhej të shtoja pak Javascript për t'i bërë elementët të mos shfaqen ose të mos shfaqen.

Tani kemi një faqe në internet mahnitëse, por nuk mund të tregojmë asgjë në të? Le ta rregullojmë atë.

Kodin tim mund ta gjeni në depon time të github:

Hapi 7: Kodimi i Uebfaqes: Backend (eventlet) + Kodimi Frontend (javascript)

Përfundimi:

Ndërsa serveri backend është instaluar tashmë ne ende duhet ta zbatojmë këtë në projektin tonë. Së pari ne duhet të shtojmë disa importe për të bërë që gjithçka të funksionojë siç duhet.

nga importi i shisheve Flask, kërkesë, jsonify nga flask_socketio import SocketIO nga flask_cors import CORS

Për ta bërë serverin të fillojë, duhet të shtojmë sa vijon:

socketio.run (aplikacioni, debug = False, host = '0.0.0.0')

Tani serveri është online, por nuk do të jetë në gjendje të flasë me frontin.

Nuk merr ose kthen asgjë. Le ta ndryshojmë atë.

Për të kërkuar të gjithë sensorët në bazën e të dhënave do të shtoni një rrugë:

@app.route (pika përfundimtare + '/sensorë', metodat = ['GET']) def get_sensors (): nëse kërkohet.metoda == 'MERR': s = DataRepository.get_sensors () kthejnë jsonify (sensorë = s), 200

Ky kod përdor një klasë të quajtur DataRepository dhe flet me bazën e të dhënave. Këtu na kthen sensorët që kemi kërkuar.

Ne gjithashtu kemi nevojë për një rrugë për të kërkuar informacionin për 1 sensor specifik dhe një tjetër për vlerat e një sensori të caktuar.

Këto janë të gjitha rrugë, por për të bërë të mundshme të dhënat në kohë reale. Ne duhet të dërgojmë çdo interval të dhënat që sensorët sapo lexuan. Për ta bërë këtë ne përdorim lidhjen Socket-IO. Shtë një lidhje e krijuar që nga momenti që dikush ngarkon faqen e internetit me JS dhe e mban këtë lidhje të hapur. Kjo është një lidhje e plotë dupleks që do të thotë se është një lidhje që funksionon në të dy mënyrat (dërgoni dhe merrni) në të njëjtën kohë. Për ta përdorur këtë ne duhet të shtojmë kodin e mëposhtëm.

@socketio.on ('Connect') def initial_connection (): print ('Lidh një klient të ri') socketio.send ("U prirur geconnecteerd") # # Dërgoji klientit!

Kjo paqe e kodit funksionon kur një klient lidhet.

Për të marrë ndonjë mesazh nga frontend mund të përdorni këtë kod.

@socketio.on ('mesazh') def message_recived (): kalo

Ju gjithashtu mund të dërgoni mesazhe. Kjo bëhet nga sa vijon.

socketio.emit ('Update_RTD', dict_results, broadcast = True)

Argumenti i parë i dhënë mund të jetë gjithçka që dëshironi, por do të korrespondojë me atë që vendosni në JS tuaj dhe gjithashtu mund të dërgoni objekte me të. Kjo është fakultative.

Javascript:

Importantshtë e rëndësishme të shtoni pak JS që serveri të lidhet me serverin backend që të jetë në gjendje të shfaqë të dhënat aktuale dhe të marrë informacion nga baza e të dhënave.

Ne do t'i thërrasim funksionet socketIO që kemi bërë për të marrë dhe dërguar të dhëna.

Kur marrim të dhëna si një Objekt Json ne do t'i çmontojmë ato për të marrë informacionin që duam dhe pastaj t'i vendosim në mbajtësit e JS që vendosim në faqen tonë të internetit.

Kodin tim mund ta gjeni në depon time të github:

Hapi 8: Bërja e një zorrë

Marrja e një zorrë
Marrja e një zorrë
Marrja e një zorrë
Marrja e një zorrë
Marrja e një zorrë
Marrja e një zorrë
Marrja e një zorrë
Marrja e një zorrë

Mbulesa mori shumë punë dhe mund të bëhet me çfarëdo mënyre që dëshironi. Kështu e bëra.

Mora disa Arka Vere.

Njërën prej tyre e kam përdorur si kuti për të përmbajtur RPi -në time dhe shumicën e sensorëve të mi.

Sensori i shpejtësisë së erës dhe sensori i drejtimit të erës natyrisht nuk u vendosën brenda, por mbi një traversë të vendosur në një shtyllë. Në këtë shtyllë e vura atë arkë verë ku bëra edhe një derë.

Ju mund të shihni se si e përfundova projektin tim duke parë fotot.

Ky është sigurisht një shembull se si mund ta bëni. Ju mund të bëni me të çfarë të doni.

Recommended: