Kazalo:
- Korak 1: Opis osnovne opreme
- Korak: Povezave strojne opreme za namestitev
- 3. korak: Programiranje Raspberry Pi v Javi
- 4. korak: Praktičnost kodeksa
- 5. korak: Uporaba v konstruktivnem svetu
- 6. korak: Zaključek
Video: Osebna vremenska postaja z uporabo Raspberry Pi z BME280 v Javi: 6 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
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
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
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
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
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:
Vremenska postaja NaTaLia: Vremenska postaja Arduino s sončno energijo Na pravi poti: 8 korakov (s slikami)
Vremenska postaja NaTaLia: Vremenska postaja na sončni pogon Arduino je ravnala pravilno: Po enem letu uspešnega delovanja na dveh različnih lokacijah delim svoje načrte projektov vremenskih postaj na sončno energijo in razložim, kako se je razvila v sistem, ki lahko resnično preživi dolgo časa obdobja iz sončne energije. Če sledite
Sobna vremenska postaja z uporabo Arduina in BME280: 4 koraki
Sobna vremenska postaja z uporabo Arduina in BME280: Prej sem delila preprosto vremensko postajo, ki je prikazovala temperaturo in vlažnost lokalnega območja. Težava pri tem je bila, da bi trajalo nekaj časa za posodobitev in podatki niso bili točni. V tej vadnici bomo naredili notranji vremenski monitor
Vremenska postaja z uporabo Wemos D1 Mini, BME280 in Sensate .: 6 korakov
Vremenska postaja z uporabo Wemos D1 Mini, BME280 in Sensate .: V prejšnjih objavah sem delil različne metode za izgradnjo vremenske postaje. Če niste preverili, je tukaj povezava. V tem navodilu bom pokazal, kako z uporabo Wemosa in platforme IoT, imenovane Sensate, zgraditi preprosto vremensko postajo.
Osebna vremenska postaja Photon IoT iz delcev: 4 koraki (s slikami)
Osebna vremenska postaja Photon IoT iz delcev:
Vremenska postaja z uporabo Raspberry Pi z BME280 v Pythonu: 6 korakov
Vremenska postaja z uporabo Raspberry Pi z BME280 v Pythonu: je maith an scéalaí an aimir (Vreme je dober pripovedovalec zgodb) Zaradi globalnega segrevanja in podnebnih sprememb globalni vremenski vzorec po vsem svetu postaja nestabilen, kar vodi v številne vremenske vplive naravne nesreče (suše, ekstremne