Talaan ng mga Nilalaman:

Local Weather Station: 8 Hakbang (may Mga Larawan)
Local Weather Station: 8 Hakbang (may Mga Larawan)

Video: Local Weather Station: 8 Hakbang (may Mga Larawan)

Video: Local Weather Station: 8 Hakbang (may Mga Larawan)
Video: Pagbabalita/Project sa Filipino 2024, Hulyo
Anonim
Local Weather Station
Local Weather Station

Habang naghahanap ako para sa isang mahusay na proyekto na gagawin para sa aking unang taon na proyekto sa pag-aaral marami akong ideya tungkol sa kung ano ang gagawin ngunit wala sa kanila ang nakita kong mahirap.

Sa paglaon ay dapat na akong gumawa ng isang Weather Station na mayroong espesyal na bagay dito. Nais kong maimbak ang lahat ng aking data at sa paglaon ay gamitin ito para sa mga istatistika. Ang proyektong ito ay espesyal na gagawin para sa mga taong may interes para sa meteorolohiya at nais ng isang nasa bahay na nilikha na istasyon ng panahon na hindi gastusin ng mas malaki sa mga magagamit sa merkado. Ginagawa rin ang proyekto upang mapanatili ang kakayahang magdagdag o mag-alis ng mga sensor sa anumang oras.

Tuwang tuwa ako nang makita ko ang aking kinalabasan na resulta na naging mas mahusay kaysa sa inaasahan.

Ito ay gawa sa isang Raspberry Pi 4 na tumatakbo linux.

  • Apache Website (html css js)
  • Eventlet (website ng backend server)
  • MariaDB (database server)

Mga gamit

  • Raspberry Pi 4:

    sd-card (min 16gb)

  • Mga Sensor:

    1. QS-FS sensor ng bilis ng hangin
    2. Wind Sensor Garden Signal Output Aluminium Alloy Direksyon ng Sensor Wind Vane Instrumentong Pagsukat ng Bilis https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminum-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Measuring-Instrumento-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (halumigmig)
    4. BMP280 (air pressure)
    5. DS18B20 (temperatura)
  • Mga Power Supply's

    • 5v power supply (RPi)
    • 9v power supply (sa isang panlabas na power supply ng breadboard)
  • Breadboard (x2)

    T-cobbler plus para sa RPi 4

  • jumper wires
  • IC's

    • MCP3008
    • PCF8574AN
  • LCD Display 16x2
  • LED (pula
  • Casing (optinal)

    • crates ng alak
    • kahoy na poste (2m)
    • sahig na gawa sa kahoy (1m)

Hakbang 1: Paghanda ng Mga Bagay

Palaging may malaking kahalagahan upang makuha ang lahat ng mga item na kailangan mo bago ka magsimulang magtrabaho sa isang hakbang. Makakatipid ito sa iyo ng maraming oras habang pinagtatrabahuhan ito.

Kaya una, Ano'ng kailangan mo:

  • Raspberry Pi 4:

    sd-card (min 16gb)

  • Mga Sensor:

    1. QS-FS sensor ng bilis ng hangin
    2. Wind Sensor Garden Signal Output Aluminium Alloy Direksyon ng Wind Sensor Wind Vane Instrumentong Pagsukat ng Bilis
    3. DHT22 (halumigmig)
    4. BMP280 (presyon ng hangin)
    5. DS18B20 (temperatura)
  • Mga Power Supply's

    • 5v power supply (RPi)
    • 9v power supply (sa isang panlabas na power supply ng breadboard)
  • Breadboard (x2)
  • T-cobbler plus para sa RPi 4
  • jumper wires
  • IC's

    • MCP3008
    • PCF8574AN
  • LCD Display 16x2
  • LED (pula)
  • Casing (optinal)

    • wine crateswooden
    • sahig na gawa sa kahoy (1m)
    • poste (2m)

Mahahanap mo ang lahat ng mga link kung saan ko ito binili sa seksyon ng mga supply sa ilalim ng intro.

Hakbang 2: Pag-set up ng RPi

Pag-set up ng RPi
Pag-set up ng RPi

Para sa aming proyekto kailangan namin ng isang RPi na may naka-install na naibigay na software.

  • Apache Website (html css js)
  • Flask Socket-IO (backend server website)
  • MariaDB (database server)

Bago i-install ito ay laging madaling gamitin upang matiyak na mayroon kang pinakabagong software na naka-install sa iyo RPi. Upang magawa ito, ipatupad lamang ang sumusunod na utos:

sudo apt update

Apache:

Hinahayaan muna ang pag-usapan ang tungkol sa Apache. Ang Apache ay isang webserver na ginagamit sa buong mundo. Nagpapatakbo ito ng iyong website nang walang kamali-mali. Ang tanging bagay na kailangan mong gawin ay i-install ito at ilagay ang iyong website sa tamang folder at narito ito.

sudo apt i-install ang apache2 -y

Ayan yun!

Upang matiyak na ang lahat ay naka-install nang tama sa pag-surf sa iyong raspberry pi Ip-address sa iyong browser at tingnan kung nakuha mo ang default na website. Kung mayroon kang anumang mga problema tungkol sa hakbang na ito maaari mong suriin ang RPi website dito.

Eventlet:

Ngayon i-install natin ang Eventlet. Patakbuhin nito ang aming backend server at gagawin ang koneksyon mula sa aming mga sensor patungo sa aming website. Para sa kailangan namin ng isang pares ng mga pakete.

Flask-socketIO:

pip3 i-install ang flask-socketio

Eventlet:

pip3 install installlet

Gevent:

pip3 i-install ang gevent

Mariadb:

Ang Mariadb ay isang batay sa database ng MySQL na gumagawa ng mga nauugnay na database. Ito ay madalas na ginagamit sa RPi at samakatuwid mayroong maraming tulong na maaari mong makita sa internet. Para sa karagdagang impormasyon maaari kang pumunta sa link na ito.

apt i-install ang mariadb-server

Hakbang 3: Pagkonekta ng Mga Sensor at Pagdaragdag ng Code

Pagkonekta ng Mga Sensor at Pagdaragdag ng Code
Pagkonekta ng Mga Sensor at Pagdaragdag ng Code
Pagkonekta ng Mga Sensor at Pagdaragdag ng Code
Pagkonekta ng Mga Sensor at Pagdaragdag ng Code
Pagkonekta ng Mga Sensor at Pagdaragdag ng Code
Pagkonekta ng Mga Sensor at Pagdaragdag ng Code

Upang ikonekta ang mga sensor sa aming RPi maaari kaming gumamit ng isang T-Cobbler plus. Ito ay isang madaling gamiting maliit na tool na ginagawang posible na gamitin ang lahat ng iyong mga pin sa iyong RPi sa isang breadboard.

Sa aking proyekto mayroon akong 5 mga sensor:

  1. QS-FS sensor ng bilis ng hangin
  2. Wind Sensor Garden Signal Output Aluminium Alloy Direksyon ng Wind Sensor Wind Vane Instrumentong Pagsukat ng Bilis
  3. DHT22 (halumigmig)
  4. BMP280 (presyon ng hangin)
  5. DS18B20 (temperatura)

Wind sensor ng bilis:

Una sa lahat nagsimula ako sa sensor ng bilis ng hangin dahil karamihan ay nasasabik ako sa sensor na ito. Ito ay isang sensor na may isang analog signal ng 0-5v output at nangangailangan ng isang boltahe ng minimum na 7 volts upang gumana. Pinili ko para sa 9 volts adapter upang mapagana ito.

Upang mabasa sa sensor na ito ginamit ko ang isang MCP3008 na isang IC upang mabasa sa Mga signal ng analog. Ang IC ay maaaring gumana sa 3.3V o 5V ngunit pinili ko ang 3.3V upang gawin itong katugma sa RPi. Nangangahulugan ito na kailangan kong baguhin ang boltahe ng output mula 5V hanggang 3.3V Ginawa ko ito sa pamamagitan ng pagdaragdag ng isang divider ng boltahe na nilikha ng 2 resistors (2k at 1k ohm).

Sensor ng Direksyon ng Hangin:

Ang direksyon ng hangin ay kasinghalaga ng bilis ng hangin samakatuwid ay ikonekta ko ito sa susunod.

Ang sensor na ito ay may parehong pagtutukoy bilang sensor ng bilis ng hangin. Gagana rin ito sa 9V at mayroong output boltahe na 5 volts. Gayundin ang sensor na ito ay kumonekta kami sa MCP3008 sa pamamagitan ng isang voltner divider.

DHT22 (kahalumigmigan):

Binabasa ng DHT22 ang halumigmig. Nagbibigay ito sa iyo ng isang halaga sa porsyento at ang halaga nito ay maaaring mabasa sa pamamagitan ng paggamit ng I2C protocol sa RPi. Samakatuwid dapat mong paganahin ang mga port ng I2C sa Raspi-config. Dagdag pang impormasyon dito.

BMP280 (presyon ng hangin):

Ginagamit ang BMP280 upang basahin ang presyon ng hangin. Nabasa ang halaga nito sa pamamagitan ng SPI bus sa RPi. Kailangan ding paganahin ang protokol na ito sa Raspi-config. Para sa aking code ginamit ko ang Adafruit library.

DS18B20 (temperatura):

Sinusukat ng huling sensor ang temperatura. ang sensor na ito ay mula sa Dallas at kung mayroon kang kaunting karanasan sa Dallas dapat alam mo na na ginagamit nila ang 1Wire-bus. Huwag magulat kung sasabihin ko na ang protokol na ito ay kailangan ding paganahin sa Raspi-config.

Paano ko konektado ang mga sensor:

Tulad ng pdf nag-upload ako ng isang electrical at breadboard scheme upang gawing mas madali ito.

Matapos ma-ugnay nang matagumpay ang mga sensor at naidagdag mo ang kinakailangang code upang mabasa ang lahat ng mga sensor maaari kang magpatuloy at pumunta sa susunod na hakbang. Kung nais mong mag-iwan ng isang sensor sa likod o nais na magdagdag ng higit pa maaari mong gawin ito.

Hakbang 4: Pagdidisenyo ng isang Web Ui

Pagdidisenyo ng isang Ui sa Web
Pagdidisenyo ng isang Ui sa Web
Pagdidisenyo ng isang Ui sa Web
Pagdidisenyo ng isang Ui sa Web
Pagdidisenyo ng isang Ui sa Web
Pagdidisenyo ng isang Ui sa Web

Nakakonekta namin ngayon ang mga sensor na kailangan namin ng isang disenyo para sa aming website.

Nais naming lumikha ng website ng isang madaling hitsura habang ipinapakita ang lahat ng realtime-data ng mga sensor.

Gayundin nais naming makita ang kasaysayan ng mga sinusukat na halagang ito sa bawat agwat ng oras.

Kaya Una nagsimula akong tumingin sa paligid ng web para sa ilang inspirasyon. Karamihan sa lahat kung saan ang mga site ng impormasyon ng wheater na wala talaga ang disenyo na hinahanap ko. Ang mga istasyon ng panahon na nasa merkado ay malamang na may isang display. At sa labas ng display na iyon ang aking inspirasyon ay dumating. Karamihan sa mga display ay may disenyo na may hitsura ng grid. Binigyan ako nito ng ideya na lumikha ng home page kung saan ipapakita ang lahat ng mga sensor.

Ngunit, sinabi ko rin na nais kong gumawa ng isang pahina kung saan makikita mo ang kasaysayan ng bawat sensor ng mga halagang ito.

Dahil sa kadahilanang iyon gumawa din ako ng isang pahina ng aking disenyo na naglalaman nito. Sa pahinang ito nakikita ko ang ilang labis na impormasyon tungkol sa aking sensor na hindi ipapakita sa aking front-page at off course ang bahagi ng kasaysayan.

Matapos ang ilang oras ay nagtrabaho ang aking buong disenyo!

Ang disenyo ay ginawa gamit ang Adobe XD.

Hakbang 5: Lumilikha ng Database

Lumilikha ng Database
Lumilikha ng Database

Upang makakuha ng pahinga mula sa bahagi ng pagdidisenyo nagsimula ako sa aking database.

Maglalaman ang database na ito ng lahat ng mga sensor (5), lahat ng mga actuator (2) at mga halagang mayroon ang mga sensor na iyon.

Ang database ay medyo madali at may ilang mga relasyon.

Maaari mong makita ang modelo ng database sa larawan.

Hakbang 6: Pag-coding sa Website: Frontend (html Css)

Bumalik sa Website!

Ngayon mayroon akong isang disenyo Maaari ko bang simulan ang pag-coding nito bilang html css upang talagang gamitin ito.

Sa home-page:

Sinimulan ko ng sa pamamagitan ng pagsasaalang-alang sa bawat sensor bilang isang elemento sa aking website. Sa gayon ay maipaya ko sa paglaon ang bahaging ito na makabuo ng aking Javascript code.

Nagpasok din ako ng mga random na klase ng may hawak ng JS sa mga elemento. Gagawin nitong posible na baguhin ang nilalaman ng sangkap na iyon

Tumagal ito sa akin ng maraming oras dahil hindi ako ganoon kahusay sa partikular na wikang ito.

Sa tapos na ang home-page oras na upang magsimula sa pahina ng kasaysayan.

Sa pahina ng kasaysayan:

Ang pahinang ito ay medyo madali upang muling likhain. Sa pahinang ito ay mayroon ding mga may hawak ng js upang makuha ang impormasyon tungkol sa sensor, isang realtime na halaga ng puwang at upang ipakita ang talahanayan na may mga sinusukat na halaga.

Upang lumikha ng isang tab-pagpipilian sa aking website upang pumili sa pagitan ng Talaan o Tsart kailangan kong magdagdag ng kaunting Javascript upang gawin ang mga elemento na hindi ipinakita o ipinapakita.

Ngayon mayroon kaming nakamamanghang website ngunit hindi maipakita dito. Ayusin natin yan.

Maaari mong makita ang aking code sa aking github repository: https://github.com/JensdbHowest/ Howest-Project1

Hakbang 7: Pag-coding sa Website: Backend (eventlet) + Coding Frontend (javascript)

Backend:

Habang naka-install na ang backend server kailangan pa rin namin itong ipatupad sa aming proyekto. Una kailangan naming magdagdag ng ilang mga pag-import upang gumana nang maayos ang lahat.

mula sa flask import Flask, hiling, jsonify mula sa flask_socketio import SocketIO mula sa flask_cors import CORS

Upang simulan ang server kailangan naming idagdag ang sumusunod:

socketio.run (app, debug = Mali, host = '0.0.0.0')

Ngayon ang server ay online ngunit hindi ito magagawang makipag-usap sa frontend.

Hindi nito tatanggapin o ibabalik ang anumang bagay. Palitan na natin yan.

Upang hilingin para sa lahat ng mga sensor sa database wel ay magdagdag ng isang ruta:

@ app.route (endpoint + '/ sensors', mga pamamaraan = ['GET']) def get_sensors (): kung request.method == 'GET': s = DataRepository.get_sensors () ibalik ang jsonify (sensors = s), 200

Gumagamit ang code na ito ng isang klase na tinatawag na DataRepository at nagsasalita sa database. Dito binabalik sa amin ang mga sensor na hiniling natin.

Kailangan din namin ng isang ruta upang tanungin ang impormasyon tungkol sa 1 tukoy na sensor at isa pa para sa mga halaga ng isang naibigay na sensor.

Ito ang lahat ng mga ruta ngunit upang gawing posible ang realtime data. Kailangan naming ipadala sa bawat agwat ang data na nabasa lamang ng mga sensor. Upang magawa ito ginagamit namin ang koneksyon sa Socket-IO. Ito ay isang koneksyon na itinatag mula sa sandaling may naglo-load ng website sa JS at pinapanatili nitong bukas ang koneksyon na ito. Ito ay isang full-duplex na koneksyon na nangangahulugang ito ay isang koneksyon na gumagana sa parehong paraan (ipadala at tanggapin) nang sabay. Upang magamit ito kailangan nating idagdag ang sumusunod na code.

@ socketio.on ('kumonekta') def initial_connection (): i-print ('Isang bagong client connect') socketio.send ("U bent geconnecteerd") # # Ipadala sa kliyente!

Mapapatakbo ang kapayapaan ng code na ito kapag nagkonekta ang isang kliyente.

Upang makakuha ng anumang mensahe mula sa frontend maaari mong gamitin ang code na ito.

@ socketio.on ('message') def message_recieved (): pass

Maaari ka ring magpadala ng mga mensahe. Natapos ito sa pamamagitan ng mga sumusunod.

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

Ang unang ibinigay na argumento ay maaaring maging anumang nais mo ngunit tumutugma sa kung ano ang inilagay mo sa iyong JS at maaari ka ring magpadala ng mga bagay kasama nito. Opsyonal ito.

Javascript:

Mahalagang magdagdag ng kaunting JS upang makuha ang server na konektado sa backend server upang maipakita ang kasalukuyang data at makakuha ng impormasyon mula sa database.

Tatawagan namin ang mga pagpapaandar ng socketIO na ginawa namin upang makatanggap at magpadala ng data.

Kapag natanggap namin ang data bilang isang Json Object maaalis namin ito upang makuha ang impormasyong nais namin at pagkatapos ay ilagay ito sa mga may hawak ng JS na inilagay namin sa aming website.

Maaari mong makita ang aking code sa aking github repository: https://github.com/JensdbHowest/ Howest-Project1

Hakbang 8: Paggawa ng Casing

Paggawa ng Casing
Paggawa ng Casing
Paggawa ng Casing
Paggawa ng Casing
Paggawa ng Casing
Paggawa ng Casing
Paggawa ng Casing
Paggawa ng Casing

Ang casing ay tumagal ng maraming trabaho at maaaring gawin sa anumang nais mong paraan. Ganito ko ito nagawa.

Kumuha ako ng ilang Wine Crates.

Isa sa mga ito ang ginamit ko bilang kahon upang maglaman ng aking RPi at karamihan sa aking mga sensor.

Ang sensor ng bilis ng hangin at sensor ng direksyon ng hangin ay syempre hindi nakalagay sa loob ngunit sa tuktok ng isang crossbar na nakalagay sa isang poste. Sa posteng ito ay isinabit ko ang crate ng alak kung saan gumawa din ako ng pintuan.

Maaari mong makita kung paano ko natapos ang aking proyekto sa pamamagitan ng pagtingin sa mga larawan.

Ito ay syempre isang halimbawa ng kung paano mo ito magagawa. Maaari mong gawin ito sa anumang nais mo.

Inirerekumendang: