Turinys:

Vietinė oro stotis: 8 žingsniai (su nuotraukomis)
Vietinė oro stotis: 8 žingsniai (su nuotraukomis)

Video: Vietinė oro stotis: 8 žingsniai (su nuotraukomis)

Video: Vietinė oro stotis: 8 žingsniai (su nuotraukomis)
Video: E11: Oro atakos vadovai – viena brangiausių karinių profesijų 2024, Liepa
Anonim
Vietinė orų stotis
Vietinė orų stotis

Ieškodama puikaus projekto savo pirmųjų metų mokyklos projektui įgyvendinti, turėjau daug idėjų, ką daryti, bet nė vienam iš jų neradau sunkumų.

Vėliau sugalvojau sukurti orų stotį, kuri turėtų kažką ypatingo. Norėjau turėti galimybę išsaugoti visus savo duomenis ir vėliau juos naudoti statistikai. Šis projektas būtų specialiai sukurtas žmonėms, besidomintiems meteorologija ir norintiems namuose sukurtos orų stoties, kuri nekainuotų tiek, kiek yra rinkoje. Projektas taip pat sukurtas siekiant išlaikyti galimybę bet kada pridėti ar pašalinti jutiklius.

Buvau tikrai laimingas, kai pamačiau savo galutinį rezultatą, kuris pasirodė geresnis nei tikėjausi.

Jis pagamintas iš „Raspberry Pi 4“, kuriame veikia „Linux“.

  • „Apache“svetainė (html css js)
  • „Eventlet“(vidinio serverio svetainė)
  • „MariaDB“(duomenų bazės serveris)

Prekės

  • Raspberry Pi 4:

    SD kortelė (mažiausiai 16 GB)

  • Jutikliai:

    1. QS-FS vėjo greičio jutiklis
    2. Vėjo jutiklio sodo signalo išvestis Aliuminio lydinio vėjo krypties jutiklio vėjo vėjo greičio matavimo priemonė https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminium-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Measuring-Instrument-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (drėgmė) https://www.bitsandparts.nl/Temperatūros jutikliai-ir- „Thermokoppels/Temperatuursensor-en-luchtvochtigheidssensor-DHT22/p109717
    4. BMP280 (oro slėgis) https://www.bitsandparts.nl/Temperatūros jutikliai-ir-Termmokoppels/Barometrische-druksensor-hoogtemeter-temperatuursensor-I2C-SPI-BMP280/p124314
    5. DS18B20 (temperatūra) https://www.bitsandparts.nl/Temperatūros jutikliai-ir- „Thermokoppels/“Temperatūros jutiklis-1- Laidų- „Dallas-DS18B20/p109705“
  • Maitinimo šaltinis

    • 5 V maitinimo šaltinis (RPi)
    • 9 V maitinimo šaltinis (naudojant išorinį maitinimo bloką)
  • Duonos lenta (x2)

    T-cobbler plus RPi 4

  • jungiamieji laidai
  • IC

    • MCP3008
    • PCF8574AN
  • LCD ekranas 16x2
  • LED (raudonas
  • Korpusas (optinis)

    • vyno dėžės
    • medinis stulpas (2 m)
    • medinė lenta (1 m)

1 žingsnis: Paruoškite daiktus

Prieš pradedant dirbti, visada labai svarbu gauti visus reikalingus daiktus. Tai sutaupys daug laiko dirbant su juo.

Taigi pirmiausia, Ko tau reikia:

  • Raspberry Pi 4:

    SD kortelė (mažiausiai 16 GB)

  • Jutikliai:

    1. QS-FS vėjo greičio jutiklis
    2. Vėjo jutiklio sodo signalo išvestis Aliuminio lydinio vėjo krypties jutiklis Vėjo vėjo greičio matavimo priemonė
    3. DHT22 (drėgmė)
    4. BMP280 (oro slėgis)
    5. DS18B20 (temperatūra)
  • Maitinimo šaltinis

    • 5 V maitinimo šaltinis (RPi)
    • 9 V maitinimo šaltinis (naudojant išorinį maitinimo bloką)
  • Duonos lenta (x2)
  • T-cobbler plus RPi 4
  • jungiamieji laidai
  • IC

    • MCP3008
    • PCF8574AN
  • LCD ekranas 16x2
  • LED (raudonas)
  • Korpusas (optinis)

    • medinis vynas
    • medinė lenta (1 m)
    • polius (2 m)

Visas nuorodas, kuriose aš jas nusipirkau, galite rasti priedų skyriuje po įžanga.

2 žingsnis: RPi nustatymas

RPi nustatymas
RPi nustatymas

Mūsų projektui mums reikia RPi su įdiegta programine įranga.

  • „Apache“svetainė (html css js)
  • „Flask Socket-IO“(vidinio serverio svetainė)
  • „MariaDB“(duomenų bazės serveris)

Prieš diegdami visada patogu įsitikinti, kad RPi įdiegta naujausia programinė įranga. Norėdami tai padaryti, tiesiog vykdykite šią komandą:

sudo apt atnaujinimas

„Apache“:

Pirmiausia pakalbėkime apie „Apache“. „Apache“yra žiniatinklio serveris, naudojamas visame pasaulyje. Jis nepriekaištingai valdo jūsų svetainę. Vienintelis dalykas, kurį jums reikia padaryti, tai jį įdiegti ir įdėti savo svetainę į reikiamą aplanką ir ten jis yra.

sudo apt įdiegti apache2 -y

Viskas!

Norėdami įsitikinti, kad viskas įdiegta teisingai, naršykite savo aviečių pi IP adresą naršyklėje ir pažiūrėkite, ar gaunate numatytąją svetainę. Jei turite kokių nors problemų dėl šio žingsnio, galite patikrinti RPi svetainę čia.

Įvykis:

Dabar įdiekime „Eventlet“. Jis paleis mūsų užpakalinį serverį ir sujungs mūsų jutiklius su mūsų svetaine. Tam mums reikia poros paketų.

Kolbos lizdas:

pip3 įdiegti kolbą-lizdą

Įvykis:

pip3 įdiegti įvykį

Geventas:

pip3 įdiegimo geventas

Mariadb:

„Mariadb“yra „MySQL“pagrįsta duomenų bazė, kurianti santykių duomenų bazes. Jis dažnai naudojamas RPi, todėl internete galite rasti daug pagalbos. Norėdami gauti daugiau informacijos, galite eiti į šią nuorodą.

apt install mariadb-server

3 žingsnis: jutiklių prijungimas ir kodo pridėjimas

Jutiklių prijungimas ir kodo pridėjimas
Jutiklių prijungimas ir kodo pridėjimas
Jutiklių prijungimas ir kodo pridėjimas
Jutiklių prijungimas ir kodo pridėjimas
Jutiklių prijungimas ir kodo pridėjimas
Jutiklių prijungimas ir kodo pridėjimas

Norėdami prijungti jutiklius prie mūsų RPi, galime naudoti „T-Cobbler plus“. Tai patogus mažas įrankis, leidžiantis naudoti visus kaiščius ant RPi ant duonos lentos.

Savo projekte turiu 5 jutiklius:

  1. QS-FS vėjo greičio jutiklis
  2. Vėjo jutiklio sodo signalo išvestis Aliuminio lydinio vėjo krypties jutiklis Vėjo vėjo greičio matavimo priemonė
  3. DHT22 (drėgmė)
  4. BMP280 (oro slėgis)
  5. DS18B20 (temperatūra)

Vėjo greičio jutiklis:

Pirmiausia pradėjau nuo vėjo greičio jutiklio, nes labiausiai jaudinausi dėl šio jutiklio. Tai jutiklis, kurio analoginis signalas yra 0–5 V išvesties ir kuriam reikalinga mažiausiai 7 voltų įtampa. Aš pasirenku 9 voltų adapterį, kad galėčiau jį maitinti.

Norėdami skaityti šiame jutiklyje, aš naudoju MCP3008, kuris yra IC, skirtas skaityti analoginius signalus. IC gali veikti 3.3V arba 5V, bet aš pasirenku 3.3V, kad jis būtų suderinamas su RPi. Tai reiškė, kad turėjau pakeisti išėjimo įtampą nuo 5 V iki 3,3 V. Aš tai padariau pridėdamas įtampos daliklį, sukurtą 2 rezistorių (2 k ir 1 k omų).

Vėjo krypties jutiklis:

Vėjo kryptis yra tokia pat svarbi kaip ir vėjo greitis, todėl prijungsiu tai toliau.

Šis jutiklis turi tą pačią specifikaciją kaip ir vėjo greičio jutiklis. Jis taip pat veiks su 9 V įtampa ir turi 5 voltų išėjimo įtampą. Taip pat šį jutiklį prijungsime prie MCP3008 per įtampos skirstytuvą.

DHT22 (drėgmė):

DHT22 nuskaito drėgmę. Tai suteikia jums procentinę vertę, o jos reikšmę galima nuskaityti naudojant RPi I2C protokolą. Todėl „Raspi-config“turite įgalinti I2C prievadus. Daugiau informacijos čia.

BMP280 (oro slėgis):

BMP280 naudojamas oro slėgiui nuskaityti. Jo vertė nuskaitoma per SPI magistralę RPi. Šis protokolas taip pat turi būti įjungtas „Raspi-config“. Kodui naudoti „Adafruit“biblioteką.

DS18B20 (temperatūra):

Paskutinis jutiklis matuoja temperatūrą. šis jutiklis yra iš Dalaso ir, jei turite šiek tiek patirties su Dalasu, tikriausiai jau turėtumėte žinoti, kad jie naudoja 1Wire magistralę. Nenustebkite, jei pasakysiu, kad šį protokolą taip pat reikia įjungti „Raspi-config“.

Kaip prijungti jutiklius:

Kaip pdf, įkėliau elektros ir duonos lentos schemą, kad būtų šiek tiek lengviau.

Sėkmingai prijungę jutiklius ir pridėję kodą, reikalingą visiems jutikliams perskaityti, galite tęsti ir pereiti prie kito veiksmo. Jei norite palikti jutiklį arba norite pridėti daugiau, galite tai padaryti.

4 veiksmas: žiniatinklio vartotojo sąsajos kūrimas

Žiniatinklio vartotojo sąsajos kūrimas
Žiniatinklio vartotojo sąsajos kūrimas
Žiniatinklio vartotojo sąsajos kūrimas
Žiniatinklio vartotojo sąsajos kūrimas
Žiniatinklio vartotojo sąsajos kūrimas
Žiniatinklio vartotojo sąsajos kūrimas

Dabar mes prijungėme jutiklius, kurių reikia mūsų svetainės dizainui.

Mes norime, kad svetainė sukurtų paprastą išvaizdą, rodydama visus jutiklių duomenis realiuoju laiku.

Taip pat norime matyti šių išmatuotų verčių istoriją per tam tikrą laikotarpį.

Taigi pirmiausia pradėjau dairytis internete, kad gaučiau įkvėpimo. Labiausiai ten, kur tik informacijos apie svetaines be iš tikrųjų tokio dizaino, kokio aš ieškojau. Oro stotys, kurios jau buvo rinkoje, greičiausiai turėjo ekraną. Ir iš to pasirodymo atsirado mano įkvėpimas. Dauguma ekranų turi tinklelio išvaizdą. Tai man suteikė idėją sukurti pagrindinį puslapį, kuriame būtų rodomi visi jutikliai.

Bet aš taip pat pasakiau, kad noriu sukurti puslapį, kuriame galite pamatyti kiekvieno jutiklio istoriją.

Dėl šios priežasties aš taip pat sukūriau antrąjį savo dizaino puslapį, kuriame tai buvo. Šiame puslapyje galėjau pamatyti papildomos informacijos apie savo jutiklį, kuri nebūtų rodoma mano pirmame puslapyje ir, žinoma, istorijos dalyje.

Po kelių valandų suprojektavau visą dizainą!

Dizainas buvo sukurtas naudojant „Adobe XD“.

5 veiksmas: duomenų bazės kūrimas

Duomenų bazės kūrimas
Duomenų bazės kūrimas

Norėdami pailsėti nuo projektavimo dalies, pradėjau savo duomenų bazėje.

Šioje duomenų bazėje būtų visi jutikliai (5), visos pavaros (2) ir tų jutiklių vertės.

Duomenų bazė yra gana paprasta ir turi keletą ryšių.

Duomenų bazės modelį galite pamatyti nuotraukoje.

6 veiksmas: svetainės kodavimas: „Frontend“(html CSS)

Grįžkite į svetainę!

Dabar turiu dizainą, kurį galiu pradėti koduoti kaip html css, kad tikrai jį panaudočiau.

Pagrindiniame puslapyje:

Pradėjau nuo to, kad kiekvieną jutiklį laikiau savo svetainės elementu. Kad vėliau galėčiau leisti šiai daliai generuoti pagal „Javascript“kodą.

Taip pat į elementus įterpiau atsitiktines JS turėtojų klases. Tai leistų pakeisti to elemento turinį

Tai užtruko man daug laiko, nes nesu tokia gera šia kalba.

Sukūrus pagrindinį puslapį, atėjo laikas pradėti nuo istorijos puslapio.

Istorijos puslapyje:

Šį puslapį buvo šiek tiek lengviau atkurti. Šiame puslapyje taip pat buvo js laikikliai, skirti gauti informaciją apie jutiklį, realaus laiko reikšmių lizdą ir parodyti lentelę su visomis išmatuotomis vertėmis.

Norėdami sukurti skirtuko parinktį savo svetainėje, norėdamas pasirinkti lentelę ar diagramą, turėjau pridėti šiek tiek „Javascript“, kad elementai nebūtų rodomi arba nerodomi.

Dabar turime nuostabią svetainę, bet nieko negalime joje parodyti? Pataisykime tai.

Mano kodą galite rasti mano „github“saugykloje:

7 veiksmas: svetainės kodavimas: užpakalinė dalis (įvykis) + kodavimo sąsaja („javascript“)

Užpakalinė dalis:

Nors vidinis serveris jau yra įdiegtas, mes vis tiek turime tai įgyvendinti savo projekte. Pirmiausia turime pridėti tam tikrą importą, kad viskas veiktų tinkamai.

iš kolbos importo Kolba, prašymas, jsonify iš flask_socketio importuoti SocketIO iš flask_cors importuoti CORS

Norėdami paleisti serverį, turime pridėti:

socketio.run (programa, derinimas = klaidinga, priegloba = '0.0.0.0')

Dabar serveris yra prisijungęs, bet negalės kalbėti su priekine sąsaja.

Tai nieko negauna ir negrąžina. Pakeiskime tai.

Norėdami paprašyti visų duomenų bazės jutiklių, pridėsite maršrutą:

@app.route (galinis taškas + '/sensoriai', metodai = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sensor = s), 200

Šis kodas naudoja klasę „DataRepository“ir kalba su duomenų baze. Čia jis mums grąžina prašomus jutiklius.

Mums taip pat reikia maršruto, kad galėtume paklausti informacijos apie 1 konkretų jutiklį, o kito - apie tam tikro jutiklio vertes.

Tai visi maršrutai, tik tam, kad būtų galima gauti duomenis realiuoju laiku. Kiekvieną intervalą turime siųsti duomenis, kuriuos jutikliai ką tik perskaitė. Norėdami tai padaryti, mes naudojame „Socket-IO“jungtį. Tai ryšys, sukurtas nuo to momento, kai kas nors įkelia svetainę su JS ir palaiko šį ryšį. Tai visiškai dvipusis ryšys, o tai reiškia, kad tai yra ryšys, kuris vienu metu veikia abiem būdais (siųsti ir gauti). Norėdami tai naudoti, turime pridėti šį kodą.

@socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U Bend geconnecteerd") # # Siųsti klientui!

Ši kodo ramybė paleidžiama, kai klientas prisijungia.

Norėdami gauti bet kokį pranešimą iš vartotojo sąsajos, galite naudoti šį kodą.

@socketio.on („pranešimas“) def message_recieved (): praeiti

Taip pat galite siųsti pranešimus. Tai daroma taip.

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

Pirmasis pateiktas argumentas gali būti bet koks, ko norite, tačiau jis atitiks tai, ką įdėjote į savo JS, ir su juo taip pat galite siųsti objektus. Tai neprivaloma.

„JavaScript“:

Svarbu pridėti šiek tiek JS, kad serveris būtų prijungtas prie vidinio serverio, kad būtų galima rodyti dabartinius duomenis ir gauti informaciją iš duomenų bazės.

Mes iškviesime „socketIO“funkcijas, kurias sukūrėme duomenims priimti ir siųsti.

Kai gausime duomenis kaip „Json“objektą, mes juos išmontuosime, kad gautume norimą informaciją, ir tada įdėsime juos į JS laikiklius, kuriuos įdėjome į savo svetainę.

Mano kodą galite rasti mano „github“saugykloje:

8 žingsnis: korpuso gamyba

Korpuso gamyba
Korpuso gamyba
Korpuso gamyba
Korpuso gamyba
Korpuso gamyba
Korpuso gamyba
Korpuso gamyba
Korpuso gamyba

Korpusas užėmė daug darbo ir gali būti atliekamas bet kokiu būdu. Štai kaip aš tai padariau.

Pasiėmiau keletą vyno dėžių.

Vieną iš jų naudojau kaip dėžutę, kurioje buvo mano RPi ir dauguma jutiklių.

Žinoma, vėjo greičio jutiklis ir vėjo krypties jutiklis buvo dedami ne viduje, o ant skersinio, uždėto ant stulpo. Ant šio stulpo pakabinau tą vyno dėžę, kur taip pat padariau duris.

Žiūrėdami į nuotraukas, galite pamatyti, kaip baigiau savo projektą.

Žinoma, tai yra pavyzdys, kaip tai padaryti. Su juo galite daryti ką tik norite.

Rekomenduojamas: