Obsah:
- Krok 1: Bill of Essential Equipment
- Krok 2: Hardwarová připojení pro nastavení
- Krok 3: Programování Raspberry Pi v Javě
- Krok 4: Praktičnost kódu
- Krok 5: Využití v konstruktivním světě
- Krok 6: Závěr
Video: Osobní meteorologická stanice využívající Raspberry Pi s BME280 v Javě: 6 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:19
Š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
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í
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ě
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
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:
Profesionální meteorologická stanice využívající ESP8266 a ESP32 DIY: 9 kroků (s obrázky)
Profesionální meteorologická stanice využívající ESP8266 a ESP32 DIY: LineaMeteoStazione je kompletní meteorologická stanice, kterou lze propojit s profesionálními senzory od společnosti Sensirion a také s některou komponentou Davis Instrument (Rain Gauge, Anemometer) Projekt je zaměřen jako meteorologická stanice pro vlastní potřebu, ale vyžaduje pouze
DIY osobní meteorologická stanice Monitor: 6 kroků
DIY Personal Weather Station Monitor: DarkSky ,, Naše služba API pro stávající zákazníky se dnes nemění, ale již nebudeme přijímat nové registrace. Rozhraní API bude i nadále fungovat do konce roku 2021. https://blog.darksky.net/Personal Weather Station Monitor zobrazí váš
Meteorologická stanice NaTaLia: Meteorologická stanice poháněná solární energií Arduino provedla správnou cestu: 8 kroků (s obrázky)
Meteorologická stanice NaTaLia: Meteostanice poháněná solární energií Arduino Správně: Po 1 roce úspěšného provozu na 2 různých místech sdílím své plány projektů solární elektrárny a vysvětluji, jak se vyvinuly do systému, který může skutečně přežít po dlouhou dobu období ze sluneční energie. Pokud budete dodržovat
Pokojová meteorologická stanice využívající Arduino a BME280: 4 kroky
Pokojová meteorologická stanice využívající Arduino a BME280: Dříve jsem sdílel jednoduchou meteorologickou stanici, která zobrazovala teplotu a vlhkost místní oblasti. Problém byl v tom, že aktualizace bude nějakou dobu trvat a data nebyla přesná. V tomto tutoriálu vytvoříme vnitřní monitor počasí
Meteorologická stanice využívající Raspberry Pi s BME280 v Pythonu: 6 kroků
Meteorologická stanice využívající Raspberry Pi s BME280 v Pythonu: je hlavní scénou (Počasí je dobrým vypravěčem) S globálním oteplováním a problémy se změnou klimatu se globální model počasí v našem světě stává nevyrovnaným, což vede k řadě povětrnostních vlivů přírodní katastrofy (sucha, extrémní