Orodha ya maudhui:

Kituo cha Hali ya Hewa cha Mitaa: Hatua 8 (na Picha)
Kituo cha Hali ya Hewa cha Mitaa: Hatua 8 (na Picha)

Video: Kituo cha Hali ya Hewa cha Mitaa: Hatua 8 (na Picha)

Video: Kituo cha Hali ya Hewa cha Mitaa: Hatua 8 (na Picha)
Video: Majambazi walipopambana na Polisi baada ya kuiba pesa NMB Bank 2024, Novemba
Anonim
Kituo cha Hali ya Hewa
Kituo cha Hali ya Hewa

Kama nilikuwa nikitafuta mradi mzuri wa kufanya mradi wa shule yangu ya mwaka wa kwanza nilikuwa na maoni mengi ya nini cha kufanya lakini hakuna hata moja niliyoona kuwa ngumu.

Baadaye nilijaribu kutengeneza Kituo cha Hali ya Hewa ambacho kilikuwa na kitu maalum kwake. Nilitaka kuweza kuhifadhi data zangu zote na baadaye nitumie hii kwa takwimu. Mradi huu utafanywa maalum kwa watu ambao wana nia ya hali ya hewa na wanataka kituo cha hali ya hewa kilichoundwa nyumbani ambacho hakina gharama kama ile inayopatikana kwenye soko. Mradi pia umetengenezwa kudumisha uwezo wa kuongeza au kuondoa sensorer wakati wowote.

Nilifurahi sana wakati niliona matokeo yangu ya mwisho ambayo yalibadilika kuliko ilivyotarajiwa.

Imetengenezwa na Raspberry Pi 4 inayoendesha linux.

  • Wavuti ya Apache (html css js)
  • Eventlet (tovuti ya seva ya nyuma)
  • MariaDB (seva ya hifadhidata)

Vifaa

  • Raspberry Pi 4:

    kadi ya sd (dakika 16gb)

  • Sensorer:

    1. Sensor ya kasi ya upepo wa QS-FS
    2. Pato la Ishara ya Bustani Pato la Alumini Aloi Uelekeo wa Upepo Sensor Upepo wa Vane Chombo cha Kupima Kasi https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminium-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Kipima-Ala-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (unyevu)
    4. BMP280 (shinikizo la hewa)
    5. DS18B20 (joto)
  • Ugavi wa Umeme

    • Ugavi wa umeme wa 5v (RPi)
    • Ugavi wa umeme wa 9v (kwenye usambazaji wa umeme wa bodi ya nje)
  • Bodi ya mkate (x2)

    T-cobbler pamoja na RPi 4

  • waya za kuruka
  • IC

    • MCP3008
    • PCF8574AN
  • Uonyesho wa LCD 16x2
  • LED (nyekundu
  • Kasha (macho)

    • kreti za divai
    • mti wa mbao (2m)
    • ubao wa mbao (1m)

Hatua ya 1: Kuandaa Tayari

Daima ni muhimu sana kupata vitu vyote unavyohitaji kabla ya kuanza kufanya kazi kwa hatua. Hii itakuokoa wakati mwingi wakati wa kuifanyia kazi.

Kwanza, Unahitaji nini:

  • Raspberry Pi 4:

    kadi ya sd (dakika 16gb)

  • Sensorer:

    1. Sensor ya kasi ya upepo wa QS-FS
    2. Ishara ya Upepo wa Bustani ya Ishara Pato Aluminium Aloi Uelekeo wa Upepo Sensor Upepo Vane Kasi Kupima Ala
    3. DHT22 (unyevu)
    4. BMP280 (shinikizo la hewa)
    5. DS18B20 (joto)
  • Ugavi wa Umeme

    • Ugavi wa umeme wa 5v (RPi)
    • Ugavi wa umeme wa 9v (kwenye usambazaji wa nje wa bodi ya mkate)
  • Bodi ya mkate (x2)
  • T-cobbler pamoja na RPi 4
  • waya za kuruka
  • IC

    • MCP3008
    • PCF8574AN
  • Uonyesho wa LCD 16x2
  • LED (nyekundu)
  • Kasha (macho)

    • mbao za mvinyo
    • ubao wa mbao (1m)
    • pole (2m)

Unaweza kupata viungo vyote ambapo nilinunua hizi katika sehemu ya vifaa chini ya utangulizi.

Hatua ya 2: Kuanzisha RPi

Kuanzisha RPi
Kuanzisha RPi

Kwa mradi wetu tunahitaji RPi na programu iliyopewa imewekwa.

  • Wavuti ya Apache (html css js)
  • Flask Socket-IO (tovuti ya seva ya nyuma)
  • MariaDB (seva ya hifadhidata)

Kabla ya kuiweka ni rahisi kila wakati kuhakikisha kuwa una programu mpya iliyosanikishwa kwako RPi. Ili kufanya hivyo fanya tu amri ifuatayo:

sasisho la sudo apt

Apache:

Kwanza lets majadiliano juu ya Apache. Apache ni webserver ambayo hutumiwa ulimwenguni kote. Ni anaendesha tovuti yako flawlessly. Kitu pekee unachohitaji kufanya ni kuiweka na kuweka wavuti yako kwenye folda sahihi na ndio hiyo hapo.

Sudo apt kufunga apache2 -y

Hiyo ndio!

Ili kuhakikisha kuwa kila kitu kimesakinishwa kwa usahihi kwenye anwani yako ya rasipberry pi Ip-katika kivinjari chako na uone ikiwa unapata wavuti chaguomsingi. Ikiwa una shida yoyote kuhusu hatua hii unaweza kuangalia tovuti ya RPi hapa.

Jarida:

Sasa wacha tuweke Eventlet. Itatumia seva yetu ya nyuma na itafanya unganisho kutoka kwa sensorer zetu kwenye wavuti yetu. Kwa hilo tunahitaji vifurushi kadhaa.

Flask-socketIO:

pip3 kufunga chupa-socketio

Jarida:

pip3 kufunga eventlet

Mzunguko:

pip3 kufunga gevent

Mariadb:

Mariadb ni hifadhidata ya msingi ya MySQL ambayo hufanya hifadhidata za uhusiano. Mara nyingi hutumiwa kwenye RPi na kwa hivyo kuna msaada mwingi ambao unaweza kupata kwenye wavuti. Kwa habari zaidi unaweza kwenda kwenye kiunga hiki.

apt kufunga mariadb-server

Hatua ya 3: Kuunganisha Sensorer na Kuongeza Msimbo

Kuunganisha Sensorer na Kuongeza Msimbo
Kuunganisha Sensorer na Kuongeza Msimbo
Kuunganisha Sensorer na Kuongeza Msimbo
Kuunganisha Sensorer na Kuongeza Msimbo
Kuunganisha Sensorer na Kuongeza Msimbo
Kuunganisha Sensorer na Kuongeza Msimbo

Ili kuunganisha sensorer kwa RPi yetu tunaweza kutumia T-Cobbler plus. Hii ni zana ndogo inayofaa ambayo inafanya uwezekano wa kutumia pini zako zote kwenye RPi yako kwenye ubao wa mkate.

Katika mradi wangu nina sensorer 5:

  1. Sensor ya kasi ya upepo wa QS-FS
  2. Ishara ya Upepo wa Bustani ya Ishara Pato Aluminium Aloi Uelekeo wa Upepo Sensor Upepo Vane Kasi Kupima Ala
  3. DHT22 (unyevu)
  4. BMP280 (shinikizo la hewa)
  5. DS18B20 (joto)

Sura ya kasi ya upepo:

Kwanza kabisa nilianza na sensa ya kasi ya upepo kwa sababu nilikuwa na msisimko zaidi juu ya sensor hii. Ni sensa yenye ishara ya analog ya pato 0-5v na inahitaji voltage ya kiwango cha chini cha volts 7 kufanya kazi. Mimi kuchagua 9 volts ADAPTER kwa nguvu yake.

Kusoma katika sensa hii nilitumia MCP3008 ambayo ni IC kusoma katika ishara za Analog. IC inaweza kufanya kazi kwa 3.3V au 5V lakini mimi huchagua 3.3V kuifanya iwe sawa na RPi. Hii ilimaanisha kuwa nilihitaji kubadilisha voltage ya pato kutoka 5V hadi 3.3V nilifanya hivi kwa kuongeza mgawanyiko wa voltage iliyoundwa na vipinga 2 (2k na 1k ohm).

Sensorer ya Uelekeo wa Upepo:

Uelekeo wa upepo ni muhimu kama kasi ya upepo kwa hivyo nitaunganisha hii ijayo.

Sensor hii ina vipimo sawa na sensor ya kasi ya upepo. Pia itafanya kazi kwenye 9V na ina voltage ya pato la volts 5. Pia sensor hii tutaunganisha kwa MCP3008 kupitia mgawanyiko wa voltage.

DHT22 (unyevu):

DHT22 inasoma unyevu. Inakupa thamani kwa asilimia na thamani yake inaweza kusomwa kwa kutumia itifaki ya I2C kwenye RPi. Kwa hivyo lazima uwezeshe bandari za I2C kwenye Raspi-config. Maelezo zaidi hapa.

BMP280 (shinikizo la hewa):

BMP280 hutumiwa kusoma shinikizo la hewa. Thamani yake husomwa kupitia basi ya SPI kwenye RPi. Itifaki hii pia inahitaji kuwezeshwa kwenye Raspi-config. Kwa nambari yangu nilitumia maktaba ya Adafruit.

DS18B20 (joto):

Sensorer ya mwisho inapima joto. sensa hii inatoka Dallas na ikiwa umekuwa na uzoefu kidogo na Dallas labda tayari unajua kuwa wanatumia basi ya 1Wire. Usishangae nikisema kwamba itifaki hii pia inahitaji kuwezeshwa kwenye Raspi-config.

Jinsi niliunganisha sensorer:

Kama pdf nilipakia mpango wa umeme na mkate ili kurahisisha kidogo.

Baada ya kuweza kuunganisha sensorer kwa mafanikio na ukaongeza nambari inayotakiwa kusoma sensorer zote unaweza kuendelea na kwenda hatua inayofuata. Ikiwa ungependa kuacha sensorer nyuma au ungependa kuongeza zaidi unaweza kufanya hivyo.

Hatua ya 4: Kubuni Ui ya Wavuti

Kubuni Ui ya Mtandao
Kubuni Ui ya Mtandao
Kubuni Ui ya Mtandao
Kubuni Ui ya Mtandao
Kubuni Ui ya Mtandao
Kubuni Ui ya Mtandao

Sasa tumeunganisha sensorer tunahitaji muundo wa wavuti yetu.

Tunataka wavuti iwe na muonekano rahisi wakati wa kuonyesha data ya wakati halisi wa sensorer.

Pia tunataka kuweza kuona historia ya maadili haya yaliyopimwa kwa kila muda.

Kwa hivyo Kwanza nilianza kutazama kwenye wavuti ili kupata msukumo. Zaidi ya yote ambapo tovuti za maelezo ya gurudumu tu bila muundo ambao nilikuwa nikitafuta. Vituo vya hali ya hewa ambao walikuwa tayari kwenye soko walikuwa na uwezekano mkubwa wa kuonyesha. Na nje ya onyesho hilo msukumo wangu ulikuja. Maonyesho mengi yana muundo na sura ya gridi. Hii ilinipa wazo la kuunda ukurasa wa kwanza ambapo sensorer zote zitaonyeshwa.

Lakini, nilisema pia kuwa ninataka kutengeneza ukurasa ambapo unaweza kuona historia ya kila sensorer maadili yake.

Kwa sababu ya sababu hiyo mimi pia nilifanya ukurasa wa 2 katika muundo wangu ulio na hii. Kwenye ukurasa huu ningeweza kuona habari zaidi juu ya sensa yangu ambayo haingeonyeshwa kwenye ukurasa wangu wa mbele na bila shaka sehemu ya historia.

Baada ya masaa machache nilikuwa na muundo wangu kamili!

Ubunifu ulifanywa kwa kutumia Adobe XD.

Hatua ya 5: Kuunda Hifadhidata

Kuunda Hifadhidata
Kuunda Hifadhidata

Ili kupata mapumziko kutoka kwa sehemu ya kubuni nilianza kwenye hifadhidata yangu.

Hifadhidata hii ingekuwa na sensorer zote (5), watendaji wote (2) na maadili ambayo sensorer hizo zilikuwa nazo.

Hifadhidata ni rahisi sana na ina mahusiano machache.

Unaweza kuona mfano wa hifadhidata kwenye picha.

Hatua ya 6: Kuandika tovuti: Mbele (html Css)

Rudi kwenye Tovuti!

Sasa nina muundo ninaweza kuanza kuiweka kama html css kuitumia.

Kwenye ukurasa wa nyumbani:

Nilianza kwa kuzingatia kila sensa kama kipengee kwenye wavuti yangu. Ili baadaye niruhusu sehemu hii itengeneze kwa nambari yangu ya Javascript.

Niliingiza pia madarasa ya mmiliki wa JS kwa vitu. Hizi zingefanya iwezekane kubadilisha yaliyomo kwenye kipengee hicho

Hii ilinichukua muda mwingi kwa sababu mimi sio mzuri katika lugha hii.

Baada ya kufanya ukurasa wa nyumbani ilikuwa wakati wa kuanza kwenye ukurasa wa historia.

Kwenye ukurasa wa historia:

Ukurasa huu ulikuwa rahisi sana kurudia. Katika ukurasa huu pia kulikuwa na wamiliki wa js kupata maelezo juu ya kihisi ndani, nafasi ya thamani ya wakati halisi na kuonyesha meza na maadili yaliyopimwa.

Kuunda chaguo la tabo kwenye wavuti yangu kuchagua kati ya Jedwali au Chati ilibidi niongeze Javascript kidogo ili kufanya vitu visionyeshe au visionyeshe.

Sasa tuna wavuti nzuri lakini hatuwezi kuonyesha chochote juu yake? Wacha turekebishe hilo.

Unaweza kupata nambari yangu kwenye hazina yangu ya github:

Hatua ya 7: Kuandika Tovuti: Backend (eventlet) + Coding Frontend (javascript)

Nyuma:

Wakati seva ya nyuma tayari imewekwa bado tunahitaji kutekeleza hii katika mradi wetu. Kwanza tunahitaji kuongeza uagizaji ili kufanya kila kitu kifanye kazi vizuri.

kutoka kwa chupa ya kuingiza chupa, ombi, jsonify kutoka flask_socketio kuagiza SocketIO kutoka flask_cors kuagiza CORS

Ili kufanya seva ianze tunahitaji kuongeza yafuatayo:

socketio.run (app, debug = Uongo, mwenyeji = '0.0.0.0')

Sasa seva iko mkondoni lakini haitaweza kuzungumza na mbele.

Haipokei au hairudishi chochote. Wacha tubadilishe hiyo.

Kuuliza sensorer zote kwenye hifadhidata wel itaongeza njia:

@ app.route (endpoint + '/ sensors', mbinu = ['GET']) def get_sensors (): ikiwa ombi.method == 'GET': s = DataRepository.get_sensors () kurudi jsonify (sensorer = s), 200

Nambari hii hutumia darasa linaloitwa DataRepository na inazungumza na hifadhidata. Hapa inaturudishia sensorer tulizoomba.

Tunahitaji pia njia ya kuuliza habari kuhusu sensa maalum 1 na nyingine kwa maadili ya sensorer iliyopewa.

Hizi ni njia zote lakini kufanya data ya wakati halisi iwezekane. Tunahitaji kutuma kila muda data ambayo sensorer zimesoma tu. Ili kufanya hivyo tunatumia unganisho la Socket-IO. Ni muunganisho ulioanzishwa kutoka wakati mtu anapakia tovuti na JS na inaweka unganisho hili wazi. Huu ni muunganisho kamili wa duplex ambayo inamaanisha ni muunganisho ambao hufanya kazi kwa njia zote mbili (tuma na upokee) kwa wakati mmoja. Ili kutumia hii tunahitaji kuongeza nambari ifuatayo.

@ socketio.on ('unganisha') def initial_connection (): chapisha ('mteja mpya unganisha') socketio.send ("U bent geconnecteerd") # # Tuma kwa mteja!

Amani hii ya nambari inaendeshwa wakati mteja anaunganisha.

Kupata ujumbe wowote kutoka mbele unaweza kutumia nambari hii.

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

Unaweza pia kutuma ujumbe. Hii inafanywa na yafuatayo.

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

Hoja ya kwanza inaweza kuwa chochote unachotaka lakini italingana na kile unachoweka kwenye JS yako na unaweza kutuma vitu nayo pia. Hii ni hiari.

Javascript:

Ni muhimu kuongeza kidogo ya JS kupata seva iliyounganishwa na seva ya backend ili kuweza kuonyesha data ya sasa na kupata habari kutoka kwa hifadhidata.

Tutaita kazi za socketIO tulizopokea kupokea na kutuma data.

Tunapopokea data kama Json Object tutaisambaratisha ili kupata habari tunayotaka na kisha kuiweka kwa wamiliki wa JS tulioweka kwenye wavuti yetu.

Unaweza kupata nambari yangu kwenye hazina yangu ya github:

Hatua ya 8: Kufanya Kesi

Kufanya Kesi
Kufanya Kesi
Kufanya Kesi
Kufanya Kesi
Kufanya Kesi
Kufanya Kesi
Kufanya Kesi
Kufanya Kesi

Kesi hiyo ilichukua kazi nyingi na inaweza kufanywa kwa njia yoyote unayotaka. Hivi ndivyo nilivyofanya.

Nilichukua Kreti za Mvinyo.

Mmoja wao nilitumia kama sanduku kubeba RPi yangu na sensorer zangu nyingi.

Sensor ya kasi ya upepo na sensor ya mwelekeo wa upepo bila shaka haikuwekwa ndani lakini juu ya msalaba uliowekwa kwenye nguzo. Kwenye fimbo hii nilining'iniza kreti hiyo ya divai ambapo pia nilitengeneza mlango.

Unaweza kuona jinsi nilivyomaliza mradi wangu kwa kuangalia picha.

Hii ni mfano wa jinsi unaweza kuifanya. Unaweza kufanya nayo chochote unachotaka.

Ilipendekeza: