Sadržaj:

Lokalna meteorološka stanica: 8 koraka (sa slikama)
Lokalna meteorološka stanica: 8 koraka (sa slikama)

Video: Lokalna meteorološka stanica: 8 koraka (sa slikama)

Video: Lokalna meteorološka stanica: 8 koraka (sa slikama)
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Juli
Anonim
Lokalna meteorološka stanica
Lokalna meteorološka stanica

Dok sam tražio odličan projekat za svoj prvi školski projekat, imao sam mnogo ideja šta da napravim, ali nijedan od njih nije mi bio izazovan.

Kasnije sam razmišljao o tome da napravim meteorološku stanicu koja bi imala nešto posebno za sebe. Htio sam moći pohraniti sve svoje podatke i kasnije ih koristiti za statistiku. Ovaj bi projekt bio posebno napravljen za osobe koje se zanimaju za meteorologiju i žele domaću meteorološku stanicu koja ne košta toliko koliko one dostupne na tržištu. Projekt je također napravljen da zadrži mogućnost dodavanja ili uklanjanja senzora u bilo kojem trenutku.

Zaista sam bio sretan kada sam vidio svoj krajnji rezultat koji je ispao bolje od očekivanog.

Napravljen je od Raspberry Pi 4 sa Linux -om.

  • Apache web stranica (html css js)
  • Događaj (web stranica pozadinskog servera)
  • MariaDB (server baze podataka)

Supplies

  • Raspberry Pi 4:

    sd-kartica (min. 16 GB)

  • Senzori:

    1. QS-FS senzor brzine vjetra
    2. Senzor vjetra Vrtni signal izlaznog signala Aluminijska legura Senzor smjera vjetra Senzor za mjerenje brzine vjetrobrana https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminium-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Mjerenje-Instrument-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
    3. DHT22 (vlažnost)
    4. BMP280 (pritisak zraka)
    5. DS18B20 (temperatura)
  • Napajanja
    • 5v napajanje (RPi)
    • 9v napajanje (na vanjskom izvoru napajanja)
  • Oglasna ploča (x2)

    T-obućar plus za RPi 4

  • kratkospojne žice
  • IC -ovi

    • MCP3008
    • PCF8574AN
  • LCD ekran 16x2
  • LED (crvena
  • Kućište (opcionalno)

    • gajbe za vino
    • drveni stup (2m)
    • drvena daska (1m)

Korak 1: Priprema stvari

Uvijek je od velike važnosti nabaviti sve potrebne stavke prije nego počnete raditi na stepenicama. Ovo će vam uštedjeti mnogo vremena dok radite na tome.

Pa prvo, Šta ti treba:

  • Raspberry Pi 4:

    sd-kartica (min. 16 GB)

  • Senzori:

    1. QS-FS senzor brzine vjetra
    2. Senzor vjetra Vrtni signalni izlaz Aluminijumska legura Senzor smjera vjetra Senzor vjetra Lopatica za mjerenje brzine
    3. DHT22 (vlažnost)
    4. BMP280 (vazdušni pritisak)
    5. DS18B20 (temperatura)
  • Napajanja
    • Napajanje 5v (RPi)
    • 9v napajanje (na vanjskom izvoru napajanja)
  • Oglasna ploča (x2)
  • T-obućar plus za RPi 4
  • kratkospojne žice
  • IC -ovi

    • MCP3008
    • PCF8574AN
  • LCD ekran 16x2
  • LED (crvena)
  • Kućište (opcionalno)

    • vino crateswooden
    • drvena daska (1m)
    • stup (2m)

Sve linkove na kojima sam ih kupio možete pronaći u odjeljku potrošnog materijala ispod uvoda.

Korak 2: Postavljanje RPi -ja

Postavljanje RPi -ja
Postavljanje RPi -ja

Za naš projekat potreban nam je RPi sa instaliranim datim softverom.

  • Apache web stranica (html css js)
  • Flask Socket-IO (web stranica pozadinskog servera)
  • MariaDB (server baze podataka)

Prije instaliranja uvijek je pri ruci provjeriti imate li na računaru instaliran najnoviji softver. Da biste to učinili, samo izvršite sljedeću naredbu:

sudo apt update

Apache:

Prvo da razgovaramo o Apacheu. Apache je web poslužitelj koji se koristi u cijelom svijetu. Besprijekorno pokreće vašu web stranicu. Jedino što trebate učiniti je instalirati ga i staviti svoju web stranicu u pravu mapu i tu je.

sudo apt install apache2 -y

To je to!

Da biste bili sigurni da je sve ispravno instalirano, surfajte do vaše maline pi IP adrese u svom pregledaču i pogledajte da li ste dobili zadanu web lokaciju. Ako imate bilo kakvih problema u vezi s ovim korakom, ovdje možete provjeriti web stranicu RPi.

Eventlet:

Sada instalirajmo Eventlet. Pokretat će naš pozadinski poslužitelj i uspostavit će vezu sa naših senzora na našu web stranicu. Za to nam je potrebno nekoliko paketa.

Utičnica za utičnicuIO:

pip3 instalirajte flask-socketio

Eventlet:

pip3 instalirajte eventlet

Gevent:

pip3 install gevent

Mariadb:

Mariadb je MySQL baza podataka koja pravi relacione baze podataka. Često se koristi na RPi -ju i stoga postoji mnogo pomoći koju možete pronaći na internetu. Za više informacija možete otići na ovaj link.

apt install mariadb-server

Korak 3: Povezivanje senzora i dodavanje koda

Povezivanje senzora i dodavanje koda
Povezivanje senzora i dodavanje koda
Povezivanje senzora i dodavanje koda
Povezivanje senzora i dodavanje koda
Povezivanje senzora i dodavanje koda
Povezivanje senzora i dodavanje koda

Za povezivanje senzora na naš RPi možemo koristiti T-Cobbler plus. Ovo je zgodan mali alat koji omogućuje korištenje svih vaših pinova na RPi na ploči.

U svom projektu imam 5 senzora:

  1. QS-FS senzor brzine vjetra
  2. Senzor vjetra Vrtni signalni izlaz Aluminijumska legura Senzor smjera vjetra Senzor vjetra Lopatica za mjerenje brzine
  3. DHT22 (vlažnost)
  4. BMP280 (vazdušni pritisak)
  5. DS18B20 (temperatura)

Senzor brzine vjetra:

Prije svega, počeo sam sa senzorom brzine vjetra jer sam bio uglavnom uzbuđen zbog ovog senzora. To je senzor s analognim signalom na izlazu 0-5v i za rad mu je potreban napon od najmanje 7 volti. Za napajanje biram adapter od 9 volti.

Za čitanje u ovom senzoru koristio sam MCP3008 koji je IC za čitanje u analognim signalima. IC može raditi na 3.3V ili 5V, ali ja biram 3.3V kako bih bio kompatibilan s RPi. To je značilo da sam morao promijeniti izlazni napon sa 5V na 3.3V. To sam učinio dodavanjem razdjelnika napona koji su stvorila 2 otpornika (2k i 1k ohm).

Senzor smjera vjetra:

Smjer vjetra je važan koliko i brzina vjetra, pa ću ovo povezati sljedeće.

Ovaj senzor ima iste specifikacije kao i senzor brzine vjetra. Također će raditi na 9V i ima izlazni napon od 5 volti. Također ovaj senzor ćemo spojiti na MCP3008 putem razdjelnika napona.

DHT22 (vlažnost):

DHT22 očitava vlažnost. Daje vam vrijednost u postocima, a vrijednost se može očitati korištenjem I2C protokola na RPi. Stoga morate omogućiti Raspone I2C portove u Raspi-konfiguraciji. Više informacija ovdje.

BMP280 (vazdušni pritisak):

BMP280 se koristi za očitavanje vazdušnog pritiska. Njegova vrijednost se očitava putem SPI sabirnice na RPi. Ovaj protokol takođe treba omogućiti u Raspi-config-u. Za svoj kôd koristio sam biblioteku Adafruit.

DS18B20 (temperatura):

Posljednji senzor mjeri temperaturu. ovaj senzor je iz Dallasa i ako ste imali malo iskustva s Dallasom, vjerojatno biste već trebali znati da oni koriste 1Wire-bus. Nemojte se iznenaditi ako kažem da ovaj protokol također treba omogućiti u Raspi-config-u.

Kako sam spojio senzore:

Kao pdf sam učitao električnu shemu i shemu kako bih je učinio malo lakšom.

Nakon što ste uspjeli spojiti senzore i dodali ste kôd potreban za čitanje svih senzora, možete prijeći na sljedeći korak. Ako želite ostaviti senzor iza sebe ili želite dodati još toga, to možete učiniti.

Korak 4: Dizajniranje web sučelja

Dizajniranje web sučelja
Dizajniranje web sučelja
Dizajniranje web sučelja
Dizajniranje web sučelja
Dizajniranje web sučelja
Dizajniranje web sučelja

Sada smo povezali senzore koji su nam potrebni za dizajn naše web stranice.

Želimo da web stranica stvori jednostavan izgled dok prikazuje sve podatke senzora u stvarnom vremenu.

Također želimo biti u mogućnosti vidjeti povijest ovih izmjerenih vrijednosti po vremenskom intervalu.

Tako sam prvo počeo pretraživati web po inspiraciju. Najviše od svega gdje su samo informacije o web stranicama bez zaista dizajna koji sam tražio. Meteorološke stanice koje su već bile na tržištu najvjerojatnije su imale ekran. I iz tog prikaza je došla moja inspiracija. Većina ekrana ima dizajn u obliku mreže. To mi je dalo ideju da napravim početnu stranicu na kojoj će biti prikazani svi senzori.

Ali, također sam rekao da želim napraviti stranicu na kojoj možete vidjeti historiju svakog senzora i njegove vrijednosti.

Iz tog razloga sam napravio i drugu stranicu u svom dizajnu koja sadrži ovo. Na ovoj stranici sam mogao vidjeti neke dodatne informacije o svom senzoru koje se ne bi mogle prikazati na mojoj naslovnoj strani i naravno dio istorije.

Nakon nekoliko sati sam razradio kompletan dizajn!

Dizajn je napravljen pomoću programa Adobe XD.

Korak 5: Kreiranje baze podataka

Kreiranje baze podataka
Kreiranje baze podataka

Da bih se odmorio od dijela za projektiranje koji sam započeo u svojoj bazi podataka.

Ova baza podataka sadržavala bi sve senzore (5), sve aktuatore (2) i vrijednosti koje su ti senzori imali.

Baza podataka je prilično jednostavna i ima nekoliko veza.

Model baze podataka možete vidjeti na fotografiji.

Korak 6: Kodiranje web stranice: Frontend (html Css)

Natrag na web stranicu!

Sada imam dizajn koji mogu početi kodirati kao html css da bih ga zaista koristio.

Na početnoj stranici:

Počeo sam razmatrajući svaki senzor kao element na svojoj web stranici. Tako da sam kasnije mogao dopustiti da se ovaj dio generira mojim Javascript kodom.

Takođe sam umetnuo nasumične klase JS-držača u elemente. To bi omogućilo promjenu sadržaja tog elementa

Ovo mi je oduzelo mnogo vremena jer nisam baš dobar u ovom jeziku.

Nakon što ste napravili početnu stranicu, došlo je vrijeme da počnete sa istorijskom stranicom.

Na stranici istorije:

Ovu stranicu je bilo malo lakše ponovno stvoriti. Na ovoj stranici bilo je i js-držača za unos informacija o senzoru, utor za vrijednost u stvarnom vremenu i za prikaz tablice sa svim izmjerenim vrijednostima.

Da bih stvorio opciju kartice na svojoj web stranici za izbor između tablice ili grafikona, morao sam dodati malo Javascripta kako se elementi ne bi prikazivali ili prikazivali.

Sada imamo zadivljujuću web stranicu, ali ne možemo ništa prikazati na njoj? Popravimo to.

Moj kôd možete pronaći na mom github spremištu:

Korak 7: Kodiranje web stranice: Backend (eventlet) + Coding Frontend (javascript)

Pozadinsko:

Dok je pozadinski poslužitelj već instaliran, još uvijek moramo to implementirati u naš projekt. Prvo moramo dodati neke uvoze kako bi sve radilo kako treba.

iz flask import Flask, zahtjev, jsonify iz flask_socketio uvoz SocketIO iz flask_cors uvoz CORS

Da bi se server pokrenuo moramo dodati sljedeće:

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

Server je sada na mreži, ali neće moći razgovarati sa sučeljem.

Ne prima i ne vraća ništa. Promijenimo to.

Da bismo zatražili sve senzore u bazi podataka, wel će dodati rutu:

@app.route (endpoint + '/sensors', methods = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () vrati jsonify (sensors = s), 200

Ovaj kôd koristi klasu pod nazivom DataRepository i obraća se bazi podataka. Ovdje nam vraća senzore koje smo tražili.

Također nam je potreban put za traženje informacija o jednom određenom senzoru i drugom za vrijednosti danog senzora.

Sve su to rute, ali kako bi se omogućili podaci u stvarnom vremenu. Moramo slati svaki interval podatke koje su senzori upravo pročitali. Da bismo to učinili, koristimo Socket-IO vezu. To je veza uspostavljena od trenutka kada neko učita web stranicu s JS -om i održava tu vezu otvorenom. Ovo je full-duplex veza što znači da radi na oba načina istovremeno (slanje i primanje). Da bismo ovo koristili, moramo dodati sljedeći kod.

@socketio.on ('connect') def initial_connection (): print ('Povezivanje novog klijenta') socketio.send ("U bent geconnecteerd") # # Pošalji klijentu!

Ovaj mir koda se pokreće kada se klijent poveže.

Pomoću ovog koda možete dobiti bilo koju poruku sa sučelja.

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

Takođe možete slati poruke. To se postiže na sljedeći način.

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

Prvi navedeni argument može biti sve što želite, ali će odgovarati onome što ste unijeli u svoj JS, a s njim možete slati i objekte. Ovo nije obavezno.

Javascript:

Važno je dodati malo JS -a kako bi se server povezao sa pozadinskim serverom kako bi mogao prikazati trenutne podatke i dobiti podatke iz baze podataka.

Pozvat ćemo funkcije socketIO koje smo napravili za primanje i slanje podataka.

Kada primamo podatke kao Json objekt, demontirat ćemo ih kako bismo dobili željene podatke, a zatim ih staviti u JS držače koje stavljamo na našu web stranicu.

Moj kôd možete pronaći na mom github spremištu:

Korak 8: Izrada kućišta

Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta
Izrada kućišta

Kućište je oduzelo puno posla i može se izvesti na bilo koji način. Ovako sam to uradio.

Uzeo sam gajbe za vino.

Jedan od njih sam koristio kao kutiju za smještaj svojih RPi i većine svojih senzora.

Senzor brzine vjetra i senzor smjera vjetra naravno nisu bili postavljeni unutra, već na vrhu prečke postavljene na stupu. Na ovaj stup objesio sam sanduk za vino gdje sam napravio i vrata.

Možete vidjeti kako sam završio svoj projekt gledajući fotografije.

Ovo je naravno primjer kako to možete učiniti. Možete s njim raditi šta god želite.

Preporučuje se: