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, Studeni
Anonim
Lokalna meteorološka stanica
Lokalna meteorološka stanica

Dok sam tražio sjajan projekt za svoj prvi školski projekt, imao sam mnogo ideja o tome što napraviti, ali nijedan od njih nije mi bio izazovan.

Kasnije sam razmišljao o izradi meteorološke postaje 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 postaju 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.

Bio sam jako sretan kad sam vidio svoj krajnji rezultat koji je ispao bolje od očekivanog.

Izrađen je od Raspberry Pi 4 s Linuxom.

  • Apache web stranica (html css js)
  • Eventlet (web stranica pozadinskog poslužitelja)
  • MariaDB (poslužitelj baze podataka)

Pribor

  • Malina Pi 4:

    sd-kartica (min. 16 GB)

  • Senzori:

    1. QS-FS osjetnik brzine vjetra
    2. Senzor vjetra Vrtni signal izlaznog signala Aluminijska legura Senzor smjera vjetra Senzor za mjerenje brzine lopatica vjetra 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 (vlaga)
    4. BMP280 (tlak zraka)
    5. DS18B20 (temperatura)
  • Napajanja
    • Napajanje 5v (RPi)
    • Napajanje 9v (na vanjskom izvoru napajanja)
  • Oglasna ploča (x2)

    T-postolar plus za RPi 4

  • kratkospojne žice
  • IC -ovi

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

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

Korak 1: Priprema stvari

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

Dakle prvo, Što trebaš:

  • Malina Pi 4:

    sd-kartica (min. 16 GB)

  • Senzori:

    1. QS-FS osjetnik brzine vjetra
    2. Senzor vjetra Vrtni signalni izlaz Aluminijska legura Senzor smjera vjetra Senzor vjetra Lopatica za mjerenje brzine
    3. DHT22 (vlaga)
    4. BMP280 (tlak zraka)
    5. DS18B20 (temperatura)
  • Napajanja
    • Napajanje 5v (RPi)
    • Napajanje 9v (na vanjskom izvoru napajanja)
  • Oglasna ploča (x2)
  • T-postolar plus za RPi 4
  • kratkospojne žice
  • IC -ovi

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

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

Sve poveznice 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š projekt potreban nam je RPi s instaliranim danim softverom.

  • Apache web stranica (html css js)
  • Flask Socket-IO (web stranica pozadinskog poslužitelja)
  • MariaDB (poslužitelj baze podataka)

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

sudo apt ažuriranje

Apač:

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

sudo apt install apache2 -y

To je to!

Da biste bili sigurni da je sve ispravno instalirano, surfajte do svoje maline pi IP adrese u svom pregledniku i provjerite jeste li dobili zadanu web stranicu. Ako imate 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 s 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 instalirajte gevent

Mariadb:

Mariadb je baza podataka bazirana na MySQL -u koja izrađuje relacijske baze podataka. Često se koristi na RPi -ju pa stoga na internetu možete pronaći mnogo pomoći. Za više informacija možete otići na ovu vezu.

apt install mariadb-server

Korak 3: Spajanje senzora i dodavanje koda

Spajanje senzora i dodavanje koda
Spajanje senzora i dodavanje koda
Spajanje senzora i dodavanje koda
Spajanje senzora i dodavanje koda
Spajanje senzora i dodavanje koda
Spajanje senzora i dodavanje koda

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

U svom projektu imam 5 senzora:

  1. QS-FS osjetnik brzine vjetra
  2. Senzor vjetra Vrtni signalni izlaz Aluminijska legura Senzor smjera vjetra Senzor vjetra Lopatica za mjerenje brzine
  3. DHT22 (vlaga)
  4. BMP280 (tlak zraka)
  5. DS18B20 (temperatura)

Senzor brzine vjetra:

Prije svega, počeo sam sa senzorom brzine vjetra jer sam bio najviše uzbuđen zbog ovog senzora. To je senzor s analognim signalom 0-5v izlaza 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 analognih signala. IC može raditi na 3.3V ili 5V, ali ja biram 3.3V kako bi bio kompatibilan s RPi. To je značilo da sam morao promijeniti izlazni napon s 5 V na 3,3 V. To sam učinio dodavanjem razdjelnika napona koji su stvorila 2 otpornika (2 k i 1 k ohma).

Senzor smjera vjetra:

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

Ovaj senzor ima iste specifikacije kao i osjetnik 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 (vlaga):

DHT22 očitava vlagu. Daje vam vrijednost u postocima, a njezina se vrijednost može očitati pomoću I2C protokola na RPi. Stoga morate omogućiti Raspone-2 konfiguraciju I2C portova. Više informacija ovdje.

BMP280 (tlak zraka):

BMP280 se koristi za očitavanje tlaka zraka. Vrijednost se očitava putem SPI sabirnice na RPi. Ovaj protokol također je potrebno omogućiti u Raspi-config. 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 učitao sam shemu električne i matične ploče kako bih je malo olakšao.

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 više, 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 spojili 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 postaje koje su već bile na tržištu najvjerojatnije su imale zaslon. I iz tog prikaza došla je moja inspiracija. Većina zaslona ima dizajn s mrežom. 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 povijest svakog senzora i njegove vrijednosti.

Iz tog razloga napravio sam i drugu stranicu u svom dizajnu koja sadrži ovo. Na ovoj stranici mogao sam vidjeti neke dodatne informacije o svom senzoru koje se ne bi mogle prikazati na mojoj naslovnici i izvan povijesnog dijela.

Nakon nekoliko sati razradio sam svoj potpuni dizajn!

Dizajn je izrađen pomoću programa Adobe XD.

Korak 5: Stvaranje baze podataka

Stvaranje baze podataka
Stvaranje baze podataka

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

Ova bi baza podataka sadržavala 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 ga 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đer sam umetnuo slučajne klase JS-držača u elemente. To bi omogućilo promjenu sadržaja tog elementa

Ovo mi je oduzelo puno vremena jer nisam toliko dobar u ovom jeziku.

Nakon što ste napravili početnu stranicu, došlo je vrijeme za početak na stranici s poviješću.

Na stranici povijesti:

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 odabir 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? Ispravimo to.

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

Korak 7: Kodiranje web stranice: Pozadinski (eventlet) + Frontend za kodiranje (javascript)

Pozadinsko:

Dok je pozadinski poslužitelj već instaliran, to još moramo 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 poslužitelj pokrenuo, moramo dodati sljedeće:

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

Poslužitelj je sada na mreži, ali neće moći razgovarati s sučeljem.

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

Za traženje svih senzora 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 u svaki interval slati podatke koje su senzori upravo pročitali. Za to koristimo Socket-IO vezu. To je veza uspostavljena od trenutka kada netko učita web stranicu s JS -om i održava tu vezu otvorenom. Ovo je full-duplex veza, što znači da je veza koja radi na oba načina (slanje i primanje) istovremeno. Da bismo to koristili, moramo dodati sljedeći kôd.

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

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

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

@socketio.on ('message') def message_recieved (): proći

Također možete slati poruke. To se postiže sljedećim.

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 poslužitelj bio povezan s pozadinskim poslužiteljem kako bi mogao prikazati trenutne podatke i dobiti podatke iz baze podataka.

Nazvat ć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 u 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 napravio.

Uzeo sam gajbe za vino.

Jedan od njih koristio sam 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 vrh prečke postavljene na stup. Na ovaj stup objesio sam onu gajbu 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 što god želite.

Preporučeni: