Sadržaj:

Lična meteorološka stanica koja koristi Raspberry Pi sa BME280 na Javi: 6 koraka
Lična meteorološka stanica koja koristi Raspberry Pi sa BME280 na Javi: 6 koraka

Video: Lična meteorološka stanica koja koristi Raspberry Pi sa BME280 na Javi: 6 koraka

Video: Lična meteorološka stanica koja koristi Raspberry Pi sa BME280 na Javi: 6 koraka
Video: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, Novembar
Anonim
Image
Image
Račun osnovne opreme
Račun osnovne opreme

Loše vrijeme uvijek izgleda gore kroz prozor

Uvijek smo bili zainteresirani za praćenje našeg lokalnog vremena i onoga što vidimo kroz prozor. Takođe smo želeli bolju kontrolu nad našim sistemom grejanja i klimatizacije. Izgradnja lične meteorološke stanice odlično je iskustvo učenja. Kada završite s izgradnjom ovog projekta, bolje ćete razumjeti kako funkcioniraju bežične komunikacije, kako rade senzori i koliko moćna može biti Raspberry Pi platforma. S ovim projektom kao bazom i stečenim iskustvom moći ćete u budućnosti lako graditi složenije projekte.

Korak 1: Opis osnovne opreme

Račun osnovne opreme
Račun osnovne opreme
Račun osnovne opreme
Račun osnovne opreme
Račun osnovne opreme
Račun osnovne opreme

1. Pivo od maline

Prvi korak je da uzmete u ruke Raspberry Pi ploču. Raspberry Pi je jednokrilni računar sa Linux operativnim sistemom. Njegov cilj je poboljšati vještine programiranja i razumijevanje hardvera. Brzo su ga usvojili hobisti i ljubitelji elektronike za inovativne projekte.

2. I²C štit za Raspberry Pi

INPI2 (I2C adapter) pruža Raspberry Pi 2/3 i I²C port za upotrebu sa više I²C uređaja. Dostupno je u trgovini Dcube

3. Digitalni senzor vlažnosti, pritiska i temperature, BME280

BME280 je senzor vlažnosti, pritiska i temperature koji ima brzo vrijeme odziva i visoku ukupnu tačnost. Ovaj senzor smo kupili u Dcube Store -u

4. I²C priključni kabel

Imali smo I²C priključni kabel dostupan u Dcube trgovini

5. Mikro USB kabl

Napajanje mikro USB kabelom idealan je izbor za napajanje Raspberry Pi.

6. Interpretirajte pristup Internetu putem Ethernet kabela/WiFi adaptera

Jedna od prvih stvari koju ćete htjeti učiniti je da povežete svoj Raspberry Pi s internetom. Možemo se povezati pomoću Ethernet kabla. Druga mogućnost je da se možete povezati s bežičnom mrežom pomoću USB bežičnog adaptera.

7. HDMI kabl (ekran i kabl za povezivanje)

Svaki HDMI/DVI monitor i bilo koji televizor trebali bi raditi kao zaslon za Pi. Ali nije obavezno. Ne može se isključiti ni mogućnost daljinskog pristupa (poput-SSH). Pristup možete dobiti i pomoću softvera PUTTY.

Korak 2: Hardverske veze za postavljanje

Hardverske veze za postavljanje
Hardverske veze za postavljanje
Hardverske veze za postavljanje
Hardverske veze za postavljanje

Napravite krug prema prikazanoj shemi.

Dok smo učili, temeljno smo se upoznali s osnovama elektronike u pogledu hardverskog i softverskog znanja. Željeli smo sastaviti jednostavnu elektroničku shemu za ovaj projekt. Elektroničke sheme su poput nacrta za elektroniku. Nacrtajte nacrt i pažljivo pratite dizajn. Ovdje smo primijenili neke osnove elektronike. Logika vas vodi od A do B, mašta će vas odvesti posvuda!

Povezivanje Raspberry Pi i I²C štita

Prije svega uzmite Raspberry Pi i na njega postavite I²C štit (s ulazom I²C okrenut prema unutra). Lagano pritisnite Shield preko GPIO igle Pi i završili smo s ovim korakom lako kao pita (pogledajte sliku).

Povezivanje senzora i Raspberry Pi

Uzmite senzor i spojite I²C kabel s njim. Uvjerite se da je I²C izlaz UVIJEK spojen na I²C ulaz. Isto se mora slijediti i za Raspberry Pi sa I²C štitom postavljenim preko njega GPIO pinovima. Imamo I²C štit i spojne kabele sa naše strane kao vrlo veliko olakšanje i vrlo veliku prednost jer nam preostaje samo plug and play opcija. Nema više problema sa iglama i ožičenjem pa je zabuna nestala. Zamislite samo sebe u mreži žica i ulazite u to. Olakšanje od toga. Ovo čini stvari nekompliciranim.

Napomena: Smeđa žica uvijek treba slijediti vezu uzemljenja (GND) između izlaza jednog uređaja i ulaza drugog uređaja

Povezivanje s internetom je potrebno

Ovdje zapravo imate izbor. Raspberry Pi možete povezati pomoću LAN kabela ili bežičnog Nano USB adaptera za WIFI povezivanje. U svakom slučaju, manifest je povezivanje na internet što je postignuto.

Napajanje strujnog kola

Uključite mikro USB kabel u utičnicu za napajanje Raspberry Pi. Udari i voila! Sve je u redu i odmah ćemo početi.

Povezivanje sa ekranom

HDMI kabl možemo povezati sa monitorom ili televizorom. Raspberry Pi -u možemo pristupiti bez povezivanja s monitorom pomoću -SSH (Pristupite komandnoj liniji Pi -a s drugog računara). Za to možete koristiti i softver PUTTY. Ova je opcija za napredne korisnike pa je ovdje nećemo detaljno opisivati.

Čuo sam da će doći do recesije, odlučio sam da ne učestvujem

Korak 3: Programiranje Raspberry Pi u Javi

Programiranje Raspberry Pi u Javi
Programiranje Raspberry Pi u Javi

Java kod za Raspberry Pi i BME280 senzor. Dostupno je u našem Github spremištu.

Prije nego što pređete na kôd, svakako pročitajte upute date u datoteci Readme i postavite Raspberry Pi prema njemu. Za to će trebati samo trenutak. Lična meteorološka stanica je skup mjernih instrumenata kojima upravlja privatna osoba, klub, udruženje ili čak preduzeće. Osobnim meteorološkim stanicama može se upravljati samo radi uživanja i obrazovanja vlasnika, ali mnogi operateri ličnih meteoroloških stanica također dijele svoje podatke s drugima, bilo ručnim prikupljanjem podataka i njihovom distribucijom, bilo korištenjem interneta ili radioamatera.

Kôd je u najjednostavnijem obliku koji možete zamisliti i ne biste trebali imati problema s njim, ali pitajte imate li ga. Čak i ako znate hiljadu stvari, ipak pitajte nekoga ko zna.

Radni java kod za ovaj senzor možete kopirati i odavde.

// Distribuirano s licencom za slobodnu volju.// Koristite ga kako god želite, profitno ili besplatno, pod uvjetom da se uklapa u licence povezanih djela. // BME280 // Ovaj kod je dizajniran za rad s BME280_I2CS I2C mini modulom dostupnim na ControlEverything.com. //

import com.pi4j.io.i2c. I2CBus;

import com.pi4j.io.i2c. I2CDevice; import com.pi4j.io.i2c. I2CFactory; import java.io. IOException;

javna klasa BME280

{public static void main (String args ) throws Exception {// Kreirajte I2C sabirnicu I2CBus sabirnicu = I2CFactory.getInstance (I2CBus. BUS_1); // Nabavite I2C uređaj, BME280 I2C adresa je 0x76 (108) I2CDevice uređaj = bus.getDevice (0x76); // Očitavanje 24 bajta podataka s adrese 0x88 (136) bajt b1 = novi bajt [24]; device.read (0x88, b1, 0, 24); // Pretvorimo podatke // temp koeficijenti int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); if (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); if (dig_T3> 32767) {dig_T3 -= 65536; } // koeficijenti pritiska int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); if (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); if (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); if (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); if (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); if (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); if (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); if (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); if (dig_P9> 32767) {dig_P9 -= 65536; } // Očitavanje 1 bajta podataka s adrese 0xA1 (161) int dig_H1 = ((bajt) device.read (0xA1) & 0xFF); // Očitavanje 7 bajtova podataka s adrese 0xE1 (225) device.read (0xE1, b1, 0, 7); // Pretvorimo podatke // koeficijenti vlažnosti int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); if (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); if (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); if (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; if (dig_H6> 127) {dig_H6 -= 256; } // Odaberite registar kontrolne vlažnosti // Vlažnost preko uzorkovanja = 1 device.write (0xF2, (byte) 0x01); // Odaberite registar kontrolnih mjerenja // Normalni način rada, temperatura i pritisak preko uzorkovanja = 1 uređaj.write (0xF4, (bajt) 0x27); // Odabir registra konfiguracije // Vrijeme pripravnosti = 1000 ms device.write (0xF5, (bajt) 0xA0); // Očitavanje 8 bajtova podataka sa adrese 0xF7 (247) // pritisak msb1, pritisak msb, pritisak lsb, temp msb1, temp msb, temp lsb, vlažnost lsb, vlažnost msb bajt podaci = novi bajt [8]; device.read (0xF7, podaci, 0, 8); // Pretvorimo podatke o tlaku i temperaturi u 19-bitne podatke adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (long) (podaci [2] & 0xF0)) / 16; long adc_t = (((long) (podaci [3] & 0xFF) * 65536) + ((long) (podaci [4] & 0xFF) * 256) + (dugački) (podaci [5] & 0xF0)) / 16; // Pretvorimo podatke o vlažnosti long adc_h = ((long) (podaci [6] & 0xFF) * 256 + (long) (podaci [7] & 0xFF)); // Izračuni pomaka temperature double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); double var2 = ((((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * (((double) adc_t) /131072.0 - ((double) dig_T1) /8192.0)) * ((double) dig_T3); dvostruko t_fine = (dugo) (var1 + var2); dvostruki cTemp = (var1 + var2) / 5120.0; dvostruki fTemp = cTemp * 1,8 + 32; // Proračuni pomaka pritiska var1 = ((dvostruko) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dvostruko) dig_P6) / 32768.0; var2 = var2 + var1 * ((dvostruko) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((dvostruko) dig_P4) * 65536.0); var1 = (((double) dig_P3) * var1 * var1 / 524288.0 + ((double) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((dvostruko) dig_P1); double p = 1048576.0 - (double) adc_p; p = (p - (var2 / 4096.0)) * 6250,0 / var1; var1 = ((dvostruko) dig_P9) * p * p / 2147483648.0; var2 = p * ((dvostruko) dig_P8) / 32768.0; dvostruki pritisak = (p + (var1 + var2 + ((dvostruko) dig_P7)) / 16,0) / 100; // Izračuni pomaka vlažnosti double var_H = (((double) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); dvostruka vlažnost = var_H * (1,0 - dig_H1 * var_H / 524288,0); if (vlažnost> 100,0) {vlažnost = 100,0; } else if (vlažnost <0,0) {vlažnost = 0,0; } // Izlaženje podataka na ekran System.out.printf ("Temperatura u Celzijusima: %.2f C %n", cTemp); System.out.printf ("Temperatura u Fahrenheitu: %.2f F %n", fTemp); System.out.printf ("Pritisak: %.2f hPa %n", pritisak); System.out.printf ("Relativna vlažnost: %.2f %% RH %n", vlažnost); }}

Korak 4: Praktičnost koda

Praktičnost kodeksa
Praktičnost kodeksa

Sada preuzmite (ili git povucite) kôd i otvorite ga u Raspberry Pi.

Pokrenite naredbe za kompajliranje i učitavanje koda na terminalu i pogledajte izlaz na monitoru. Nakon nekoliko trenutaka prikazat će se svi parametri. Osiguravajući nesmetan prijelaz koda i miran rezultat, smišljate više ideja za dodatne izmjene (Svaki projekt započinje pričom).

Korak 5: Korištenje u konstruktivnom svijetu

BME280 postiže visoke performanse u svim aplikacijama koje zahtijevaju mjerenje vlažnosti i pritiska. Ove nove aplikacije su svijest o kontekstu, npr. Otkrivanje kože, otkrivanje promjena sobe, praćenje kondicije / dobrobiti, upozorenje u pogledu suhoće ili visokih temperatura, mjerenje volumena i protoka zraka, kontrola kućne automatizacije, kontrolno grijanje, ventilacija, klimatizacija (HVAC), Internet stvari (IoT), Poboljšanje GPS-a (npr. Poboljšanje vremena do prvog popravka, mrtvo računanje, otkrivanje nagiba), unutrašnja navigacija (promjena otkrivanja poda, otkrivanje lifta), navigacija na otvorenom, aplikacije za slobodno vrijeme i sport, vremenska prognoza i indikacija okomite brzine (podizanje/sudoper) Brzina).

Korak 6: Zaključak

Kao što vidite, ovaj projekt je sjajna demonstracija za šta su hardver i softver sposobni. Za malo vremena može se izgraditi tako impresivan projekt! Naravno, ovo je tek početak. Izrada sofisticiranije lične meteorološke stanice, poput automatizovanih aerodromskih ličnih meteoroloških stanica, može uključivati još neke senzore poput anemometra (brzina vjetra), transmisometra (vidljivost), piranometra (sunčevog zračenja) itd. Na Youtube -u imamo video vodič koji ima osnovne funkcije I²C senzor sa Rasp Pi. Zaista je nevjerojatno vidjeti rezultate i rad I²C komunikacije. Proverite i to. Uživajte u izgradnji i učenju! Javite nam šta mislite o ovom uputstvu. Voljeli bismo napraviti neka poboljšanja ako je potrebno.

Preporučuje se: