Kazalo:

Osebna vremenska postaja z uporabo Raspberry Pi z BME280 v Javi: 6 korakov
Osebna vremenska postaja z uporabo Raspberry Pi z BME280 v Javi: 6 korakov

Video: Osebna vremenska postaja z uporabo Raspberry Pi z BME280 v Javi: 6 korakov

Video: Osebna vremenska postaja z uporabo Raspberry Pi z BME280 v Javi: 6 korakov
Video: Веб-программирование – информатика для руководителей бизнеса 2016 2024, Julij
Anonim
Image
Image
Račun osnovne opreme
Račun osnovne opreme

Slabo vreme skozi okno vedno izgleda slabše

Vedno nas je zanimalo spremljanje lokalnega vremena in tega, kar vidimo skozi okno. Želeli smo tudi boljši nadzor nad našim sistemom ogrevanja in klimatizacije. Izgradnja osebne vremenske postaje je odlična učna izkušnja. Ko končate gradnjo tega projekta, boste bolje razumeli, kako delujejo brezžične komunikacije, kako delujejo senzorji in kako močna je lahko platforma Raspberry Pi. S tem projektom kot osnovo in pridobljenimi izkušnjami boste v prihodnosti zlahka zgradili kompleksnejše projekte.

Korak 1: Opis osnovne opreme

Popis osnovne opreme
Popis osnovne opreme
Popis osnovne opreme
Popis osnovne opreme
Popis osnovne opreme
Popis osnovne opreme

1. Malina Pi

Prvi korak je, da v roke dobite ploščo Raspberry Pi. Raspberry Pi je enokanalni računalnik z operacijskim sistemom Linux. Njegov cilj je izboljšati programsko znanje in razumevanje strojne opreme. Hobiji in navdušenci nad elektroniko so ga hitro sprejeli za inovativne projekte.

2. I²C ščit za Raspberry Pi

INPI2 (I2C adapter) ponuja vrata Raspberry Pi 2/3 in I²C za uporabo z več napravami I²C. Na voljo je v trgovini Dcube

3. Digitalni senzor vlažnosti, tlaka in temperature, BME280

BME280 je senzor vlažnosti, tlaka in temperature, ki ima hiter odzivni čas in visoko splošno natančnost. Ta senzor smo kupili v trgovini Dcube

4. Priključni kabel I²C

V trgovini Dcube smo imeli na voljo priključni kabel I²C

5. Kabel mikro USB

Napajalni kabel mikro USB je idealna izbira za napajanje Raspberry Pi.

6. Razlagajte dostop do interneta prek vmesnika EthernetCable/WiFi

Ena prvih stvari, ki jih boste želeli narediti, je, da svoj Raspberry Pi povežete z internetom. Povežemo se lahko z ethernetnim kablom. Druga možnost je, da se lahko z brezžičnim vmesnikom USB povežete v brezžično omrežje.

7. Kabel HDMI (kabel za prikaz in povezovanje)

Vsak monitor HDMI/DVI in kateri koli televizor bi moral delovati kot zaslon za Pi. Je pa neobvezno. Tudi možnosti oddaljenega dostopa (kot-SSH) ni mogoče izključiti. Dostopate lahko tudi s programsko opremo PUTTY.

Korak: Povezave strojne opreme za namestitev

Strojne povezave za namestitev
Strojne povezave za namestitev
Strojne povezave za namestitev
Strojne povezave za namestitev

Naredite vezje v skladu s prikazano shemo.

Med učenjem smo temeljito preučili osnove elektronike glede znanja o strojni in programski opremi. Za ta projekt smo želeli sestaviti preprosto shemo elektronike. Elektronske sheme so kot načrt za elektroniko. Naredite načrt in natančno sledite načrtu. Tu smo uporabili nekaj osnov elektronike. Logika vas vodi od A do B, domišljija vas bo popeljala povsod!

Povezava Raspberry Pi in I²C ščita

Najprej vzemite Raspberry Pi in nanj položite ščit I²C (z vrati proti vhodu I²C). Nežno pritisnite ščit nad zatiče GPIO za Pi in s tem korakom smo končali tako enostavno kot pita (glej sliko).

Povezava senzorja in Raspberry Pi

Vzemite senzor in z njim povežite kabel I²C. Prepričajte se, da je izhod I²C VEDNO povezan z vhodom I²C. Enako je treba storiti za Raspberry Pi z I²C ščitom, nameščenim nanj preko zatičev GPIO. I²C Shield in priključne kable na naši strani imamo za zelo veliko olajšanje in zelo veliko prednost, saj nam ostane le še možnost plug and play. Ni več težav z zatiči in ožičenjem, zato zmede ni več. Samo predstavljajte se v spletu žic in se spuščajte v to. Olajšanje od tega. Zaradi tega so stvari nezapletene.

Opomba: Rjava žica mora vedno slediti ozemljitveni (GND) povezavi med izhodom ene naprave in vhodom druge naprave

Internetna povezava je nujna

Tu imaš pravzaprav izbiro. Raspberry Pi lahko povežete s kablom LAN ali brezžičnim Nano USB vmesnikom za povezljivost WIFI. Kakor koli že, manifest je, da se povežete z internetom, kar je doseženo.

Napajanje vezja

Priključite kabel Micro USB v vtičnico za napajanje Raspberry Pi. Udari in voila! Vse je v redu in takoj bomo začeli.

Povezava z zaslonom

Kabel HDMI lahko priključimo na monitor ali televizor. Do Raspberry Pi lahko dostopamo, ne da bi ga povezali z monitorjem z uporabo -SSH (dostopajte do ukazne vrstice Pi iz drugega računalnika). Za to lahko uporabite tudi programsko opremo PUTTY. Ta možnost je za napredne uporabnike, zato je tukaj ne bomo podrobno obravnavali.

Slišal sem, da bo recesija, odločil sem se, da ne bom sodeloval

3. korak: Programiranje Raspberry Pi v Javi

Programiranje Raspberry Pi v Javi
Programiranje Raspberry Pi v Javi

Koda Java za senzor Raspberry Pi in BME280. Na voljo je v našem skladišču Github.

Preden nadaljujete s kodo, se prepričajte, da ste prebrali navodila v datoteki Readme in v skladu z njimi nastavite Raspberry Pi. To bo trajalo le trenutek. Osebna vremenska postaja je niz vremenskih merilnih instrumentov, ki jih upravlja zasebnik, klub, društvo ali celo podjetje. Osebne vremenske postaje se lahko upravljajo izključno v veselje in izobraževanje lastnika, vendar številni upravljavci vremenskih postaj svoje podatke delijo tudi z drugimi, bodisi z ročnim zbiranjem podatkov in njihovo distribucijo, bodisi z uporabo interneta ali amaterskega radia.

Koda je v najpreprostejši obliki, ki si jo lahko zamislite, in z njo ne bi smelo biti težav, ampak vprašajte, če imate. Tudi če veste tisoč stvari, še vedno vprašajte nekoga, ki ve.

Delovno kodo java za ta senzor lahko kopirate tudi od tu.

// Razdeljeno z licenco po lastni volji.// Uporabite ga kakor koli želite, dobičkonosno ali brezplačno, pod pogojem, da ustreza licencam pripadajočih del. // BME280 // Ta koda je zasnovana za delo z mini modulom BME280_I2CS I2C, ki je na voljo na spletnem mestu ControlEverything.com. //

uvoz com.pi4j.io.i2c. I2CBus;

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

javni razred BME280

{public static void main (String args ) throws Exception {// Ustvari vodilo I2C vodilo I2CBus = I2CFactory.getInstance (I2CBus. BUS_1); // Pridobite napravo I2C, naslov IE2 BME280 je 0x76 (108) Naprava I2CDevice = bus.getDevice (0x76); // preberite 24 bajtov podatkov z naslova 0x88 (136) bajt b1 = nov bajt [24]; device.read (0x88, b1, 0, 24); // pretvorimo podatke // začasni koeficienti int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); če (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); če (dig_T3> 32767) {dig_T3 -= 65536; } // tlačni koeficienti int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); če (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); če (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); če (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); če (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); če (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); če (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); če (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); če (dig_P9> 32767) {dig_P9 -= 65536; } // Preberite 1 bajt podatkov z naslova 0xA1 (161) int dig_H1 = ((bajt) naprava.preberi (0xA1) & 0xFF); // Branje 7 bajtov podatkov z naslova 0xE1 (225) device.read (0xE1, b1, 0, 7); // pretvorimo podatke // koeficiente vlažnosti int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); če (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); če (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); če (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; če (dig_H6> 127) {dig_H6 -= 256; } // Izbira kontrolnega registra vlažnosti // Vlažnost nad vzorčenjem = 1 device.write (0xF2, (byte) 0x01); // Izberite register krmilnih meritev // Običajen način, temperatura in tlak nad vzorčenjem = 1 naprava.write (0xF4, (bajt) 0x27); // Izberite konfiguracijski register // Čas pripravljenosti = 1000 ms device.write (0xF5, (bajt) 0xA0); // beremo 8 bajtov podatkov z naslova 0xF7 (247) // tlak msb1, tlak msb, tlak lsb, temp msb1, temp msb, temp lsb, vlažnost lsb, vlažnost msb bajt podatki = novi bajt [8]; device.read (0xF7, podatki, 0, 8); // Pretvorimo podatke o tlaku in temperaturi v 19-bitne dolžine adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (long) (podatki [2] & 0xF0)) / 16; dolg adc_t = (((dolg) (podatki [3] & 0xFF) * 65536) + ((dolgi) (podatki [4] & 0xFF) * 256) + (dolgi) (podatki [5] & 0xF0)) / 16; // pretvorimo podatke o vlažnosti dolgo adc_h = ((dolga) (podatki [6] & 0xFF) * 256 + (dolga) (podatki [7] & 0xFF)); // Izračuni odmika 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); dvojno t_fine = (dolgo) (var1 + var2); dvojni cTemp = (var1 + var2) / 5120.0; dvojni fTemp = cTemp * 1,8 + 32; // Izračuni odmika tlaka var1 = ((dvojno) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dvojno) dig_P6) / 32768,0; var2 = var2 + var1 * ((dvojno) dig_P5) * 2,0; var2 = (var2 / 4.0) + (((dvojno) dig_P4) * 65536.0); var1 = (((dvojni) dig_P3) * var1 * var1 / 524288.0 + ((dvojni) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((dvojno) dig_P1); dvojni p = 1048576,0 - (dvojni) adc_p; p = (p - (var2 / 4096.0)) * 6250,0 / var1; var1 = ((dvojno) dig_P9) * p * p / 2147483648.0; var2 = p * ((dvojno) dig_P8) / 32768,0; dvojni tlak = (p + (var1 + var2 + ((dvojni) dig_P7)) / 16,0) / 100; // Izračuni odmika 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))); dvojna vlažnost = var_H * (1,0 - kopa_H1 * var_H / 524288,0); če (vlažnost> 100,0) {vlaga = 100,0; } drugače če (vlažnost <0,0) {vlažnost = 0,0; } // Izhodni podatki na zaslon System.out.printf ("Temperatura v Celzijah: %.2f C %n", cTemp); System.out.printf ("Temperatura v Fahrenheitu: %.2f F %n", fTemp); System.out.printf ("Tlak: %.2f hPa %n", tlak); System.out.printf ("Relativna vlažnost: %.2f %% RH %n", vlažnost); }}

4. korak: Praktičnost kodeksa

Praktičnost kodeksa
Praktičnost kodeksa

Zdaj prenesite (ali git povlecite) kodo in jo odprite v Raspberry Pi.

Zaženite ukaze za sestavljanje in nalaganje kode na terminalu in si oglejte rezultate na monitorju. Po nekaj trenutkih prikaže vse parametre. Če želite zagotoviti nemoten prehod kode in miren (ish) rezultat, pomislite na več idej za nadaljnje spremembe (Vsak projekt se začne z zgodbo).

5. korak: Uporaba v konstruktivnem svetu

BME280 dosega visoke zmogljivosti v vseh aplikacijah, ki zahtevajo merjenje vlažnosti in tlaka. Te nove aplikacije so Context Awareness, npr. Odkrivanje kože, zaznavanje sprememb prostora, spremljanje telesne pripravljenosti / dobro počutje, opozorilo glede suhosti ali visokih temperatur, merjenje volumna in pretoka zraka, nadzor avtomatizacije doma, nadzor ogrevanja, prezračevanje, klimatizacija (HVAC), internet stvari (IoT), Izboljšanje GPS (npr. Izboljšanje časa do prvega popravka, obračun mrtvih vozil, zaznavanje pobočja), notranja navigacija (sprememba zaznavanja tal, zaznavanje dvigala), navigacija na prostem, aplikacije za prosti čas in šport, vremenska napoved in oznaka navpične hitrosti (dvig/ponor) Hitrost).

6. korak: Zaključek

Kot lahko vidite, je ta projekt odlična demonstracija, česa zmoreta strojna in programska oprema. V kratkem času lahko zgradite tako impresiven projekt! Seveda je to šele začetek. Izdelava bolj izpopolnjene osebne vremenske postaje, kot so avtomatske letališke osebne vremenske postaje, lahko vključuje še nekaj senzorjev, kot so anemometer (hitrost vetra), transmisometer (vidljivost), piranometer (sončno sevanje) itd. Senzor I²C z Rasp Pi. Resnično je neverjetno videti rezultate in delovanje komunikacij I²C. Preverite tudi. Uživajte pri gradnji in učenju! Sporočite nam, kaj menite o tem navodilu. Če je potrebno, bi radi izboljšali.

Priporočena: