Sadržaj:

Osobna meteorološka postaja koja koristi Raspberry Pi s BME280 na Javi: 6 koraka
Osobna meteorološka postaja koja koristi Raspberry Pi s BME280 na Javi: 6 koraka

Video: Osobna meteorološka postaja koja koristi Raspberry Pi s BME280 na Javi: 6 koraka

Video: Osobna meteorološka postaja koja koristi Raspberry Pi s BME280 na Javi: 6 koraka
Video: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, Srpanj
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đer smo željeli bolju kontrolu nad našim sustavom grijanja i klimatizacije. Izgradnja osobne meteorološke postaje izvrsno je iskustvo učenja. Kad 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 jednokrilno računalo sa Linux sustavom. Njegov cilj je poboljšati vještine programiranja i razumijevanje hardvera. Ljubitelji i zaljubljenici u elektroniku brzo su ga usvojili za inovativne projekte.

2. I²C štit za Raspberry Pi

INPI2 (I2C adapter) omogućuje Raspberry Pi 2/3 an I²C priključak za upotrebu s više I²C uređaja. Dostupno je u trgovini Dcube

3. Digitalni osjetnik vlage, tlaka i temperature, BME280

BME280 je senzor vlage, tlaka i temperature koji ima brzo vrijeme odziva i visoku ukupnu točnost. Ovaj smo senzor kupili u trgovini Dcube

4. I²C spojni kabel

Imali smo I²C spojni kabel dostupan u Dcube trgovini

5. Mikro USB kabel

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 kabela. Druga mogućnost je da se možete povezati s bežičnom mrežom pomoću USB bežičnog adaptera.

7. HDMI kabel (kabel za prikaz i povezivanje)

Svaki HDMI/DVI monitor i bilo koji televizor trebali bi raditi kao zaslon za Pi. Ali nije obavezno. Mogućnost udaljenog pristupa (poput-SSH) također se ne može isključiti. 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.

Tijekom učenja temeljito smo se upoznali s osnovama elektronike u vezi s poznavanjem hardvera i softvera. Željeli smo sastaviti jednostavnu shemu elektronike za ovaj projekt. Elektroničke sheme su poput nacrta za elektroniku. Nacrtajte nacrt i pažljivo slijedite dizajn. Ovdje smo primijenili neke osnove elektronike. Logika vas vodi od A do B, Mašta će vas odvesti posvuda!

Spajanje Raspberry Pi i I²C štita

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

Spajanje senzora i Raspberry Pi

Uzmite senzor i spojite I²C kabel s njim. Provjerite je li izlaz I²C UVIJEK spojen na ulaz I²C. Isto se mora slijediti i za Raspberry Pi sa I²C štitom postavljenim preko njega na GPIO pinove. 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. To čini stvari nekompliciranim.

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

Povezivanje s internetom je potreba

Ovdje zapravo imate izbor. Raspberry Pi možete spojiti putem LAN kabela ili bežičnog Nano USB adaptera za WIFI povezivanje. U svakom slučaju, manifest je povezivanje s internetom što je postignuto.

Napajanje strujnog kruga

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

Povezivanje s zaslonom

HDMI kabel možemo povezati s monitorom ili televizorom. Raspberry Pi -u možemo pristupiti bez povezivanja s monitorom pomoću -SSH (Pristupite naredbenom retku Pi s drugog računala). 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 ne sudjelovati

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 spremištuGithub.

Prije nego prijeđete na kôd, svakako pročitajte upute date u datoteci Readme i postavite Raspberry Pi prema njemu. Trebat će samo trenutak da to učinite. Osobna meteorološka stanica skup je mjernih instrumenata kojima upravlja privatna osoba, klub, udruga ili čak poduzeće. Osobnim meteorološkim postajama može se upravljati samo radi uživanja i obrazovanja vlasnika, ali mnogi operateri osobnih meteoroloških postaja 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 tisuću stvari, ipak pitajte nekoga tko zna.

Ovdje možete kopirati radni java kôd za ovaj senzor.

// Distribuirano s licencom za slobodnu volju.// Koristite ga na koji god način ž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 stranici ControlEverything.com. //

uvoz com.pi4j.io.i2c. I2CBus;

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

javna klasa BME280

{public static void main (String args ) throws Exception {// Stvori I2C sabirnicu I2CBus sabirnicu = I2CFactory.getInstance (I2CBus. BUS_1); // Nabavite I2C uređaj, BME280 I2C adresa je 0x76 (108) I2CDevice uređaj = sabirnica.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 tlaka 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 = ((byte) 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); // Odabir mjernog registra za regulaciju // Normalan način rada, temperatura i tlak preko uzorkovanja = 1 uređaj.write (0xF4, (bajt) 0x27); // Odabir registra konfiguracije // Vrijeme_ pripravnosti = 1000 ms device.write (0xF5, (byte) 0xA0); // Očitavanje 8 bajtova podataka s adrese 0xF7 (247) // tlak msb1, tlak msb, tlak lsb, temp msb1, temp msb, temp lsb, vlaga 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) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (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; // Izračuni pomaka tlaka 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); dvostruki p = 1048576,0 - (dvostruki) 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 tlak = (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 - kopanje_H1 * var_H / 524288,0); if (vlažnost> 100,0) {vlažnost = 100,0; } else if (vlaga <0,0) {vlažnost = 0,0; } // Izlaženje podataka na zaslon System.out.printf ("Temperatura u Celzijusima: %.2f C %n", cTemp); System.out.printf ("Temperatura u Fahrenheitu: %.2f F %n", fTemp); System.out.printf ("Tlak: %.2f hPa %n", tlak); 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 prijenos koda na terminalu i pogledajte izlaz na monitoru. Nakon nekoliko trenutaka prikazat će se svi parametri. Osiguravajući gladak prijelaz koda i miran rezultat, sjetite se 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 vlage i tlaka. Ove nove aplikacije su svijest o kontekstu, npr. Otkrivanje kože, otkrivanje promjena prostorije, 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), unutarnja navigacija (promjena otkrivanja poda, otkrivanje dizala), navigacija na otvorenom, aplikacije za slobodno vrijeme i sport, vremenska prognoza i indikacija okomite brzine (uspon/sudoper) Ubrzati).

Korak 6: Zaključak

Kao što vidite, ovaj je projekt izvrsna demonstracija onoga za što su hardver i softver sposobni. Za malo vremena može se izgraditi tako impresivan projekt! Naravno, ovo je tek početak. Izrada sofisticiranije osobne meteorološke postaje poput osobnih meteoroloških stanica u zračnoj luci može uključivati još neke senzore poput anemometra (brzina vjetra), transmisometra (vidljivost), piranometra (sunčevog zračenja) itd. Na Youtubeu imamo video vodič s osnovnim funkcijama I²C senzor s Rasp Pi. Zaista je nevjerojatno vidjeti rezultate i rad I²C komunikacije. Provjerite i to. Uživajte u izgradnji i učenju! Javite nam što mislite o ovom uputstvu. Voljeli bismo napraviti neka poboljšanja ako je potrebno.

Preporučeni: