Obsah:

Osobná meteorologická stanica používajúca Raspberry Pi s BME280 v Jave: 6 krokov
Osobná meteorologická stanica používajúca Raspberry Pi s BME280 v Jave: 6 krokov

Video: Osobná meteorologická stanica používajúca Raspberry Pi s BME280 v Jave: 6 krokov

Video: Osobná meteorologická stanica používajúca Raspberry Pi s BME280 v Jave: 6 krokov
Video: Метеостанция 2024, Júl
Anonim
Image
Image
Účet so základným vybavením
Účet so základným vybavením

Zlé počasie vždy vyzerá horšie cez okno

Vždy sme mali záujem monitorovať naše miestne počasie a to, čo vidíme z okna. Tiež sme chceli lepšiu kontrolu nad našim systémom vykurovania a klimatizácie. Budovanie osobnej meteorologickej stanice je úžasný zážitok z učenia. Po dokončení stavby tohto projektu lepšie porozumiete tomu, ako funguje bezdrôtová komunikácia, ako fungujú senzory a akú výkonnú môže mať platforma Raspberry Pi. Vďaka tomuto projektu ako základu a získaným skúsenostiam budete môcť v budúcnosti ľahko stavať komplexnejšie projekty.

Krok 1: Účet základného vybavenia

Účet so základným vybavením
Účet so základným vybavením
Účet so základným vybavením
Účet so základným vybavením
Účet so základným vybavením
Účet so základným vybavením

1. Raspberry Pi

Prvým krokom je dostať do rúk dosku Raspberry Pi. Raspberry Pi je jednodoskový počítač poháňaný systémom Linux. Cieľom je zlepšiť znalosti programovania a porozumenia hardvéru. Fandovia a nadšenci elektroniky si ho rýchlo osvojili pre inovatívne projekty.

2. I²C štít pre Raspberry Pi

INPI2 (adaptér I2C) poskytuje port Raspberry Pi 2/3 a I²C na použitie s viacerými zariadeniami I²C. Je k dispozícii v obchode Dcube Store

3. Digitálny snímač vlhkosti, tlaku a teploty, BME280

BME280 je snímač vlhkosti, tlaku a teploty, ktorý má rýchly čas odozvy a vysokú celkovú presnosť. Tento senzor sme kúpili v obchode Dcube Store

4. Pripojovací kábel I²C

V obchode Dcube Store sme mali k dispozícii prepojovací kábel I²C

5. Kábel Micro USB

Micro USB kábel Napájací zdroj je ideálnou voľbou pre napájanie Raspberry Pi.

6. Interpretujte prístup na internet prostredníctvom ethernetového kábla/adaptéra WiFi

Jedna z prvých vecí, ktoré budete chcieť urobiť, je pripojiť vaše Raspberry Pi k internetu. Pripojiť sa môžeme pomocou ethernetového kábla. Ďalšou možnosťou je, že sa môžete pripojiť k bezdrôtovej sieti pomocou bezdrôtového adaptéra USB.

7. Kábel HDMI (kábel pre zobrazenie a pripojenie)

Akýkoľvek monitor HDMI/DVI a akýkoľvek televízor by mali fungovať ako displeje pre Pi. Ale je to voliteľné. Nemožno vylúčiť ani možnosť vzdialeného prístupu (ako SSH). Prístup môžete získať aj pomocou softvéru PUTTY.

Krok 2: Hardvérové pripojenia pre nastavenie

Hardvérové pripojenia pre nastavenie
Hardvérové pripojenia pre nastavenie
Hardvérové pripojenia pre nastavenie
Hardvérové pripojenia pre nastavenie

Vytvorte obvod podľa zobrazenej schémy.

Počas učenia sme sa dôkladne zoznámili so základmi elektroniky, pokiaľ ide o znalosti hardvéru a softvéru. Chceli sme pre tento projekt vypracovať jednoduchú schému elektroniky. Elektronické schémy sú ako plán pre elektroniku. Vypracujte plán a starostlivo postupujte podľa návrhu. Tu sme aplikovali niektoré základy elektroniky. Logika vás dostane z bodu A do bodu B, predstavivosť vás zavedie kamkoľvek!

Pripojenie štítu Raspberry Pi a I²C

Najprv vezmite Raspberry Pi a umiestnite naň štít I²C (s portom I²C smerujúcim dovnútra). Jemne pritlačte štít na kolíky GPIO Pi a tento krok máme hotový rovnako ľahko ako koláč (pozri obrázok).

Pripojenie senzora a Raspberry Pi

Vezmite snímač a pripojte k nemu kábel I²C. Zaistite, aby sa výstup I²C VŽDY pripájal k vstupu I²C. To isté platí pre Raspberry Pi, na ktorom je na piny GPIO namontovaný I²C štít. Štít I²C a prepojovacie káble máme na našej strane ako veľmi veľkú úľavu a veľmi veľkú výhodu, pretože nám zostáva iba možnosť plug and play. Už žiadne problémy s kolíkmi a káblami, a preto zmätok je preč. Predstavte si seba v sieti drôtov a pustite sa do toho. Úľava od toho. Vďaka tomu sú veci nekomplikované.

Poznámka: Hnedý vodič by mal vždy nasledovať po uzemnení (GND) medzi výstupom jedného zariadenia a vstupom iného zariadenia

Pripojenie k internetu je potrebné

V skutočnosti tu máte na výber. Raspberry Pi môžete pripojiť pomocou kábla LAN alebo bezdrôtového adaptéra Nano USB pre pripojenie WIFI. Tak či onak, manifestom je pripojenie k internetu, ktoré je dosiahnuté.

Napájanie obvodu

Zapojte kábel Micro USB do napájacieho konektora Raspberry Pi. Porazte a voila! Všetko je v poriadku a ihneď začneme.

Pripojenie k displeju

Kábel HDMI môžeme buď pripojiť k monitoru alebo k televízoru. K Raspberry Pi môžeme pristupovať bez pripojenia k monitoru pomocou -SSH (Prístup k príkazovému riadku Pi z iného počítača). Na to môžete použiť aj softvér PUTTY. Táto možnosť je pre pokročilých používateľov, preto sa jej tu nebudeme podrobne venovať.

Počul som, že príde recesia, rozhodol som sa, že sa nezúčastním

Krok 3: Programovanie Raspberry Pi v Jave

Programovanie Raspberry Pi v Jave
Programovanie Raspberry Pi v Jave

Kód Java pre snímač Raspberry Pi a BME280. Je k dispozícii v našom úložisku Github.

Predtým, ako prejdete na kód, prečítajte si pokyny uvedené v súbore Readme a nakonfigurujte podľa neho svoje Raspberry Pi. Zaberie to len chvíľu. Osobná meteorologická stanica je sada nástrojov na meranie počasia, ktoré prevádzkuje súkromná osoba, klub, združenie alebo dokonca firma. Osobné meteorologické stanice môžu byť prevádzkované výhradne pre radosť a vzdelávanie majiteľa, ale mnoho osobných prevádzkovateľov meteorologických staníc tiež zdieľa svoje údaje s ostatnými, a to buď ručným zostavovaním údajov a ich distribúciou, alebo prostredníctvom internetu alebo amatérskeho rádia.

Kód je v najjednoduchšej forme, akú si dokážete predstaviť, a nemali by ste s ním mať žiadny problém, ale opýtajte sa, či áno. Aj keď vieš tisíc vecí, stále sa pýtaj niekoho, kto to vie.

Odtiaľto môžete skopírovať funkčný java kód pre tento senzor.

// Distribuované s licenciou slobodnej vôle.// Používajte ho akýmkoľvek spôsobom chcete, so ziskom alebo zadarmo, za predpokladu, že sa zmestí do licencií súvisiacich diel. // BME280 // Tento kód je navrhnutý tak, aby fungoval s mini modulom BME280_I2CS I2C, ktorý je k dispozícii 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;

verejná trieda BME280

{public static void main (String args ) throws Exception {// Create I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Získať zariadenie I2C, adresa BME280 I2C je 0x76 (108) I2CDevice zariadenie = bus.getDevice (0x76); // Načítanie 24 bajtov údajov z adresy 0x88 (136) bajt b1 = nový bajt [24]; device.read (0x88, b1, 0, 24); // Prevod údajov // teplotné koeficienty int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); ak (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); ak (dig_T3> 32767) {dig_T3 -= 65536; } // tlakové koeficienty int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); ak (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); ak (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); ak (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); ak (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); ak (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); ak (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); ak (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); ak (dig_P9> 32767) {dig_P9 -= 65536; } // Načítanie 1 bajtu údajov z adresy 0xA1 (161) int dig_H1 = ((bajt) device.read (0xA1) & 0xFF); // Prečítajte 7 bajtov dát z adresy 0xE1 (225) device.read (0xE1, b1, 0, 7); // Prevod údajov // koeficienty vlhkosti int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); ak (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); ak (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); ak (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; ak (dig_H6> 127) {dig_H6 -= 256; } // Vyberte kontrolný register vlhkosti // Vlhkosť nad vzorkovacou frekvenciou = 1 zariadenie.písať (0xF2, (bajt) 0x01); // Vyberte register merania merania // Normálny režim, teplota a tlak nad vzorkovacou frekvenciou = 1 zariadenie. Napísať (0xF4, (byte) 0x27); // Vyberte konfiguračný register // Pohotovostný čas = 1000 ms zariadenie.písať (0xF5, (bajt) 0xA0); // Načítanie 8 bajtov údajov z adresy 0xF7 (247) // tlak msb1, tlak msb, tlak lsb, temp msb1, temp msb, temp lsb, vlhkosť lsb, vlhkosť msb byte údaje = nový bajt [8]; device.read (0xF7, data, 0, 8); // Prevod údajov o tlaku a teplote na 19-bitové dlhé adc_p = (((dlhé) (údaje [0] & 0xFF) * 65536) + ((dlhé) (údaje [1] a 0xFF) * 256) + (dlhé) (údaje [2] & 0xF0)) / 16; dlhé adc_t = (((dlhé) (údaje [3] a 0xFF) * 65536) + ((dlhé) (údaje [4] a 0xFF) * 256) + (dlhé) (údaje [5] a 0xF0)) / 16; // Konvertovanie údajov o vlhkosti long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Výpočty teplotného ofsetu 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); double t_fine = (long) (var1 + var2); dvojnásobok cTemp = (var1 + var2) / 5120,0; dvojnásobok fTemp = cTemp * 1,8 + 32; // Výpočty ofsetu tlaku var1 = ((double) t_fine / 2.0) - 64000,0; var2 = var1 * var1 * ((double) dig_P6) / 32768.0; var2 = var2 + var1 * (((dvojité) dig_P5) * 2,0; var2 = (var2 / 4.0) + ((((double) dig_P4) * 65536.0); var1 = ((((double) dig_P3) * var1 * var1 / 524288.0 + ((double) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768.0) * ((dvojité) dig_P1); double p = 1048576.0 - (double) adc_p; p = (p - (var2 / 4096,0)) * 6250,0 / var1; var1 = ((double) dig_P9) * p * p / 2147483648.0; var2 = p * ((dvojité) dig_P8) / 32768,0; dvojnásobný tlak = (p + (var1 + var2 + ((double) dig_P7)) / 16,0) / 100; // Výpočty ofsetu vlhkosti 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))); dvojnásobná vlhkosť = var_H * (1,0 - dig_H1 * var_H / 524288,0); if (vlhkosť> 100,0) {vlhkosť = 100,0; } else if (vlhkosť <0,0) {vlhkosť = 0,0; } // Výstup údajov na obrazovku System.out.printf ("Teplota v stupňoch Celzia: %.2f C %n", cTemp); System.out.printf ("Teplota vo Fahrenheite: %.2f F %n", fTemp); System.out.printf ("Tlak: %.2f hPa %n", tlak); System.out.printf ("Relatívna vlhkosť: %.2f %% relatívna vlhkosť %n", vlhkosť); }}

Krok 4: Praktickosť kódu

Praktickosť kódexu
Praktickosť kódexu

Teraz si stiahnite (alebo git pull) kód a otvorte ho v Raspberry Pi.

Spustite príkazy na kompiláciu a nahrajte kód na terminál a pozrite sa na výstup na monitore. Po niekoľkých okamihoch sa zobrazia všetky parametre. Aby ste zaistili hladký prechod kódu a pokojný (ish) výsledok, vymyslíte viac nápadov na ďalšie zmeny (každý projekt začína príbehom).

Krok 5: Využitie v konštruktívnom svete

BME280 dosahuje vysoký výkon vo všetkých aplikáciách vyžadujúcich meranie vlhkosti a tlaku. Tieto vznikajúce aplikácie sú Context Awareness, napr. Detekcia pokožky, Detekcia zmeny miestnosti, Monitorovanie pohody / pohody, Varovanie týkajúce sa sucha alebo vysokých teplôt, Meranie objemu a prietoku vzduchu, Ovládanie domácej automatizácie, Riadiace kúrenie, Vetranie, Klimatizácia (HVAC), Internet vecí (IoT), Vylepšenie GPS (napr. Zlepšenie času do prvej opravy, Zúčtovanie mŕtveho, Detekcia sklonu), Vnútorná navigácia (zmena detekcie podlahy, Detekcia výťahu), Vonkajšia navigácia, Voľnočasové a športové aplikácie, Predpoveď počasia a Indikácia vertikálnej rýchlosti (Vzostup/Potopenie) Rýchlosť).

Krok 6: Záver

Ako vidíte, tento projekt je skvelou ukážkou toho, čo je hardvér a softvér schopný. Za malý čas je možné postaviť taký pôsobivý projekt! Samozrejme, toto je len začiatok. Vytvorenie sofistikovanejšej osobnej meteorologickej stanice, ako je automatizovaná letisková stanica, môže zahŕňať niekoľko ďalších senzorov, ako sú anemometer (rýchlosť vetra), transmisometer (viditeľnosť), pyranometer (slnečné žiarenie) atď. Na Youtube máme video návod so základným fungovaním I²C snímač s Rasp Pi. Je skutočne úžasné vidieť výsledky a fungovanie komunikácie I²C. Skontroluj to tiež. Bavte sa stavať a učiť sa! Dajte nám vedieť, čo si myslíte o tomto pokyne. V prípade potreby radi urobíme niekoľko vylepšení.

Odporúča: