Obsah:

Osobní meteorologická stanice využívající Raspberry Pi s BME280 v Javě: 6 kroků
Osobní meteorologická stanice využívající Raspberry Pi s BME280 v Javě: 6 kroků

Video: Osobní meteorologická stanice využívající Raspberry Pi s BME280 v Javě: 6 kroků

Video: Osobní meteorologická stanice využívající Raspberry Pi s BME280 v Javě: 6 kroků
Video: The Choice is Ours (2016) Official Full Version 2024, Červenec
Anonim
Image
Image
Bill of Essential Equipment
Bill of Essential Equipment

Špatné počasí vždy vypadá hůře oknem

Vždy jsme měli zájem sledovat naše místní počasí a to, co vidíme z okna. Také jsme chtěli lepší kontrolu nad naším systémem vytápění a klimatizace. Budování osobní meteorologické stanice je skvělá zkušenost s učením. Když dokončíte stavbu tohoto projektu, budete lépe rozumět tomu, jak funguje bezdrátová komunikace, jak fungují senzory a jak mocná může být platforma Raspberry Pi. S tímto projektem jako základnou a získanými zkušenostmi budete moci v budoucnu snadno stavět složitější projekty.

Krok 1: Bill of Essential Equipment

Bill of Essential Equipment
Bill of Essential Equipment
Bill of Essential Equipment
Bill of Essential Equipment
Bill of Essential Equipment
Bill of Essential Equipment

1. Raspberry Pi

Prvním krokem je dostat do rukou desku Raspberry Pi. Raspberry Pi je jednodeskový počítač s operačním systémem Linux. Jeho cílem je zlepšit znalosti programování a porozumění hardwaru. Fanoušci a nadšenci elektroniky si jej rychle osvojili pro inovativní projekty.

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

INPI2 (adaptér I2C) poskytuje Raspberry Pi 2/3 port I²C pro použití s více zařízeními I²C. Je k dispozici v Dcube Store

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

BME280 je snímač vlhkosti, tlaku a teploty, který má rychlou dobu odezvy a vysokou celkovou přesnost. Tento senzor jsme zakoupili v Dcube Store

4. Připojovací kabel I²C

V Dcube Store jsme měli k dispozici propojovací kabel I²C

5. Micro USB kabel

Micro USB kabel Napájecí zdroj je ideální volbou pro napájení Raspberry Pi.

6. Interpretujte přístup k internetu pomocí ethernetového kabelu/WiFi adaptéru

Jednou z prvních věcí, které budete chtít udělat, je připojení vašeho Raspberry Pi k internetu. Můžeme se připojit pomocí ethernetového kabelu. Další možností je, že se můžete připojit k bezdrátové síti pomocí bezdrátového adaptéru USB.

7. Kabel HDMI (kabel pro zobrazení a připojení)

Jakýkoli monitor HDMI/DVI a jakýkoli televizor by měl fungovat jako displej pro Pi. Ale je to volitelné. Nelze také vyloučit možnost vzdáleného přístupu (jako SSH). Přístup můžete získat také pomocí softwaru PUTTY.

Krok 2: Hardwarová připojení pro nastavení

Hardwarová připojení pro nastavení
Hardwarová připojení pro nastavení
Hardwarová připojení pro nastavení
Hardwarová připojení pro nastavení

Vytvořte obvod podle zobrazeného schématu.

Při učení jsme se důkladně seznámili se základy elektroniky ohledně znalostí hardwaru a softwaru. Chtěli jsme pro tento projekt vypracovat jednoduché schéma elektroniky. Elektronická schémata jsou jako plán pro elektroniku. Vypracujte plán a pečlivě postupujte podle návrhu. Zde jsme aplikovali některé základy elektroniky. Logika vás dostane z bodu A do bodu B, představivost vás vezme všude!

Připojení štítu Raspberry Pi a I²C

Nejprve si vezměte Raspberry Pi a umístěte na něj I²C Shield (s I²C portem směřujícím dovnitř). Jemně přitlačte Shield na GPIO piny Pi a tento krok máme hotový stejně snadno jako koláč (viz obrázek).

Připojení senzoru a Raspberry Pi

Vezměte snímač a připojte k němu kabel I²C. Ujistěte se, že se výstup I²C VŽDY připojí ke vstupu I²C. Totéž je třeba dodržovat u Raspberry Pi s I²C štítem přes GPIO piny. I²C Shield a propojovací kabely máme na naší straně jako velkou úlevu a velmi velkou výhodu, protože nám zbývá jen možnost plug and play. Už žádné problémy s kolíky a kabeláží, a proto zmatek zmizel. Představte si sebe v síti drátů a pusťte se do toho. Úleva od toho. Díky tomu jsou věci nekomplikované.

Poznámka: Hnědý vodič by měl vždy sledovat uzemnění (GND) mezi výstupem jednoho zařízení a vstupem jiného zařízení

Připojení k internetu je potřeba

Tady máte vlastně na výběr. Raspberry Pi můžete připojit pomocí kabelu LAN nebo bezdrátového adaptéru Nano USB pro připojení WIFI. Ať tak či onak, manifestem je připojení k internetu, což je splněno.

Napájení obvodu

Zapojte kabel Micro USB do napájecího konektoru Raspberry Pi. Punch up a voila! Všechno je v pořádku a hned začneme.

Připojení k displeji

Můžeme mít buď kabel HDMI připojený k monitoru nebo k televizi. K Raspberry Pi můžeme přistupovat bez připojení k monitoru pomocí -SSH (Přístup k příkazovému řádku Pi z jiného počítače). K tomu můžete také použít software PUTTY. Tato možnost je pro pokročilé uživatele, takže se jí zde nebudeme podrobně zabývat.

Slyšel jsem, že bude recese, rozhodl jsem se neúčastnit

Krok 3: Programování Raspberry Pi v Javě

Programování Raspberry Pi v Javě
Programování Raspberry Pi v Javě

Kód Java pro snímač Raspberry Pi a BME280. Je k dispozici v našem úložišti Github.

Než přejdete ke kódu, přečtěte si pokyny uvedené v souboru Readme a podle něj nastavte svůj Raspberry Pi. Bude to chvíli trvat. Osobní meteorologická stanice je sada nástrojů pro měření počasí provozovaných soukromou osobou, klubem, sdružením nebo dokonce podnikem. Osobní meteorologické stanice mohou být provozovány výlučně pro potěšení a vzdělávání majitele, ale mnoho provozovatelů osobních meteorologických stanic také sdílí svá data s ostatními, a to buď ručním kompilováním dat a jejich distribucí, nebo pomocí internetu nebo amatérského rádia.

Kód je v nejjednodušší formě, jakou si dokážete představit, a neměli byste s ním mít žádný problém, ale zeptejte se, jestli ano. I když víš tisíc věcí, stejně se zeptej někoho, kdo ví.

Odtud také můžete zkopírovat funkční java kód pro tento senzor.

// Distribuováno s licencí svobodné vůle.// Používejte jej libovolným způsobem, ať už ziskem nebo zdarma, za předpokladu, že se vejde do licencí souvisejících děl. // BME280 // Tento kód je navržen tak, aby fungoval s mini modulem BME280_I2CS I2C, který je k dispozici na ControlEverything.com. //

importovat com.pi4j.io.i2c. I2CBus;

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

veřejná třída BME280

{public static void main (String args ) throws Exception {// Create I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Získejte I2C zařízení, adresa BME280 I2C je 0x76 (108) I2CDevice zařízení = bus.getDevice (0x76); // Přečíst 24 bytů dat z adresy 0x88 (136) byte b1 = nový byte [24]; device.read (0x88, b1, 0, 24); // Převod dat // teplotní koeficienty 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; } // koeficienty tlaku 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; } // Přečíst 1 byte dat z adresy 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Přečíst 7 bajtů dat z adresy 0xE1 (225) device.read (0xE1, b1, 0, 7); // Převod dat // koeficienty vlhkosti 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; } // Vyberte kontrolní registr vlhkosti // Vlhkost nad vzorkovací frekvencí = 1 zařízení. Zápis (0xF2, (byte) 0x01); // Vyberte registr měření měření // Normální režim, teplota a tlak nad vzorkovací frekvencí = 1 zařízení. Zápis (0xF4, (byte) 0x27); // Vyberte konfigurační registr // Pohotovostní doba = 1000 ms zařízení.write (0xF5, (byte) 0xA0); // Přečíst 8 bytů dat z adresy 0xF7 (247) // tlak msb1, tlak msb, tlak lsb, temp msb1, temp msb, temp lsb, vlhkost lsb, vlhkost msb byte data = nový byte [8]; device.read (0xF7, data, 0, 8); // Převod údajů o tlaku a teplotě na 19 bitů dlouhý adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (long) (data [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Převod údajů 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); double cTemp = (var1 + var2) / 5120.0; zdvojnásobit 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 * (((double) 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 * ((double) 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á vlhkost = var_H * (1,0 - dig_H1 * var_H / 524288,0); if (vlhkost> 100,0) {vlhkost = 100,0; } else if (vlhkost <0,0) {vlhkost = 0,0; } // Výstup dat na obrazovku System.out.printf ("Teplota ve stupních Celsia: %.2f C %n", cTemp); System.out.printf ("Teplota ve stupních Fahrenheita: %.2f F %n", fTemp); System.out.printf ("Tlak: %.2f hPa %n", tlak); System.out.printf ("Relativní vlhkost: %.2f %% RH %n", vlhkost); }}

Krok 4: Praktičnost kódu

Praktičnost kodexu
Praktičnost kodexu

Nyní si stáhněte (nebo git pull) kód a otevřete jej v Raspberry Pi.

Spusťte příkazy pro kompilaci a nahrání kódu na terminál a podívejte se na výstup na monitoru. Po několika okamžicích se zobrazí všechny parametry. Zajistíte -li hladký přechod kódu a klidný (ish) výsledek, vymyslíte více nápadů na provedení dalších změn (každý projekt začíná příběhem).

Krok 5: Využití v konstruktivním světě

BME280 dosahuje vysokého výkonu ve všech aplikacích vyžadujících měření vlhkosti a tlaku. Tyto nově vznikající aplikace jsou Context Awareness, např. Detekce kůže, Detekce změny místnosti, Monitorování kondice / pohody, Varování týkající se sucha nebo vysokých teplot, Měření objemu a průtoku vzduchu, Ovládání domácí automatizace, Ovládání topení, Ventilace, Klimatizace (HVAC), Internet věcí (IoT), Vylepšení GPS (např. Vylepšení Time-to-First-Fix, Dead Reckoning, Slope Detection), Indoor Navigation (Change of Floor Detection, Elevator Detection), Outdoor Navigation, Leisure & Sports Applications, Forecast Weather and Vertical Velocity Indication (Rise/Sink Rychlost).

Krok 6: Závěr

Jak vidíte, tento projekt je skvělou ukázkou toho, čeho je hardware a software schopen. Za krátkou dobu lze vybudovat tak působivý projekt! Samozřejmě, toto je jen začátek. Vytvoření sofistikovanější osobní meteorologické stanice, jako je automatická letištní osobní meteorologická stanice, může zahrnovat několik dalších senzorů, jako je anemometr (rychlost větru), transmisometr (viditelnost), pyranometr (sluneční záření) atd. Na Youtube máme videonávod se základním fungováním I²C senzor s Rasp Pi. Je opravdu úžasné sledovat výsledky a fungování komunikace I²C. Zkontrolujte to také. Bavte se stavět a učit se! Dejte nám prosím vědět, co si o tomto pokynu myslíte. V případě potřeby rádi provedeme některá vylepšení.

Doporučuje: