Innehållsförteckning:

Personlig väderstation med Raspberry Pi med BME280 i Java: 6 steg
Personlig väderstation med Raspberry Pi med BME280 i Java: 6 steg

Video: Personlig väderstation med Raspberry Pi med BME280 i Java: 6 steg

Video: Personlig väderstation med Raspberry Pi med BME280 i Java: 6 steg
Video: Guardians in the Wilderness: Joey & Shannon Hodgson's Journey as Remote Forest Fire Tower Lookouts 2024, Juli
Anonim
Image
Image
Essential -utrustning
Essential -utrustning

Dåligt väder ser alltid sämre ut genom ett fönster

Vi har alltid varit intresserade av att övervaka vårt lokala väder och vad vi ser genom fönstret. Vi ville också ha bättre kontroll över vårt värme- och luftkonditioneringssystem. Att bygga en personlig väderstation är en bra inlärningsupplevelse. När du är klar med att bygga detta projekt får du en bättre förståelse för hur trådlös kommunikation fungerar, hur sensorer fungerar och hur kraftfull Raspberry Pi -plattformen kan vara. Med det här projektet som bas och den erfarenhet du har fått kommer du lätt att kunna bygga mer komplexa projekt i framtiden.

Steg 1: Faktablad för viktig utrustning

Essential -utrustning
Essential -utrustning
Essential -utrustning
Essential -utrustning
Essential -utrustning
Essential -utrustning

1. En hallon Pi

Det första steget är att få tag på ett Raspberry Pi -kort. Raspberry Pi är en Linux -driven enkelkortsdator. Dess mål är att förbättra programmeringskunskaper och hårdvaruförståelse. Det antogs snabbt av hobbyister och elektronikentusiaster för innovativa projekt.

2. I²C Shield för Raspberry Pi

INPI2 (I2C -adaptern) tillhandahåller Raspberry Pi 2/3 en I²C -port för användning med flera I²C -enheter. Den är tillgänglig på Dcube Store

3. Digital fukt-, tryck- och temperatursensor, BME280

BME280 är en fukt-, tryck- och temperatursensor som har snabb responstid och hög övergripande noggrannhet. Vi köpte den här sensorn från Dcube Store

4. I²C -anslutningskabel

Vi hade I²C -anslutningskabeln tillgänglig på Dcube Store

5. Micro USB -kabel

Mikro -USB -kabeln Strömförsörjning är ett idealiskt val för att driva Raspberry Pi.

6. Tolka Internetåtkomst via EthernetCable/WiFi -adapter

En av de första sakerna du vill göra är att ansluta din Raspberry Pi till Internet. Vi kan ansluta med en Ethernet -kabel. En annan möjlighet är att du kan ansluta till ett trådlöst nätverk med en trådlös USB -adapter.

7. HDMI -kabel (Display & anslutningskabel)

Alla HDMI/DVI -skärmar och alla TV -apparater ska fungera som en skärm för Pi. Men det är valfritt. Fjärråtkomst (som-SSH) kan inte uteslutas också. Du kan också få åtkomst med PUTTY -programvara.

Steg 2: Maskinvaruanslutningar för installation

Maskinvaruanslutningar för installation
Maskinvaruanslutningar för installation
Maskinvaruanslutningar för installation
Maskinvaruanslutningar för installation

Gör kretsen enligt schemat som visas.

Medan vi lärde oss fick vi grundligt med elektronikens grundläggande kunskaper om hårdvara och mjukvara. Vi ville ta fram en enkel elektronikschema för detta projekt. Elektroniska scheman är som en plan för elektronik. Rita upp en ritning och följ designen noggrant. Vi har tillämpat några grunder i elektroniken här. Logik tar dig från A till B, fantasi tar dig överallt!

Anslutning av Raspberry Pi och I²C Shield

Först och främst ta Raspberry Pi och placera I²C -skölden (med inåtvänd I²C -port) på den. Tryck försiktigt på skärmen över GPIO -stiften på Pi och vi är klara med det här steget så enkelt som en paj (se bilden).

Anslutning av sensorn och Raspberry Pi

Ta sensorn och anslut I²C -kabeln med den. Se till att I²C -utgång ALLTID ansluts till I²C -ingången. Detsamma måste följas för Raspberry Pi med I²C -skölden monterad över GPIO -stiften. Vi har I²C -skölden och anslutningskablarna på vår sida som en mycket stor lättnad och en mycket stor fördel eftersom vi bara har kvar plug and play -alternativ. Inga fler stift- och kabelfrågor och därför är förvirringen borta. Tänk dig själv i trådarnas nät och gå in i det. En lättnad från det. Detta gör saker okomplicerade.

Obs: Den bruna tråden bör alltid följa jordanslutningen (GND) mellan utgången på en enhet och ingången till en annan enhet

Internetanslutning är ett behov

Du har ett val här faktiskt. Du kan ansluta Raspberry Pi med LAN -kabeln eller den trådlösa Nano USB -adaptern för WIFI -anslutning. Hursomhelst är manifestet att ansluta till internet som uppnås.

Drivning av kretsen

Anslut Micro USB -kabeln till strömuttaget på Raspberry Pi. Punch upp och voila! Allt är bra och vi börjar omedelbart.

Anslutning till display

Vi kan antingen ha HDMI -kabeln ansluten till en bildskärm eller en TV. Vi kan komma åt en Raspberry Pi utan att ansluta den till en bildskärm med hjälp av -SSH (Gå till kommandoraden för Pi från en annan dator). Du kan också använda PUTTY -programvaran för det. Detta alternativ är för avancerade användare så vi kommer inte att täcka det i detalj här.

Jag har hört att det kommer att bli en lågkonjunktur, jag har bestämt mig för att inte delta

Steg 3: Raspberry Pi -programmering i Java

Raspberry Pi -programmering i Java
Raspberry Pi -programmering i Java

Java -koden för Raspberry Pi och BME280 -sensorn. Den är tillgänglig i vårt Github -arkiv.

Innan du går vidare till koden, se till att du läser instruktionerna i Readme -filen och konfigurerar din Raspberry Pi enligt den. Det tar bara en stund att göra det. En personlig väderstation är en uppsättning vädermätinstrument som drivs av en privatperson, klubb, förening eller till och med företag. Personliga väderstationer kan drivas enbart för ägarens njutning och utbildning, men många personliga väderstationsoperatörer delar också sina data med andra, antingen genom att manuellt sammanställa data och distribuera dem, eller genom att använda internet eller amatörradio.

Koden är i sin enklaste form du kan tänka dig och du bör inte ha några problem med den utan fråga om du har. Även om du vet tusen saker, fråga ändå någon som vet.

Du kan också kopiera den fungerande java -koden för den här sensorn härifrån.

// Distribueras med en fri vilja licens. // Använd den hur du vill, vinst eller gratis, förutsatt att den passar in i licensen för dess associerade verk. // BME280 // Denna kod är utformad för att fungera med BME280_I2CS I2C Mini Module tillgänglig från ControlEverything.com. //

importera com.pi4j.io.i2c. I2CBus;

importera com.pi4j.io.i2c. I2CDenhet; importera com.pi4j.io.i2c. I2CFactory; importera java.io. IOException;

offentlig klass BME280

{public static void main (String args ) kastar undantag {// Skapa I2C -buss I2CBus -buss = I2CFactory.getInstance (I2CBus. BUS_1); // Get I2C device, BME280 I2C address is 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Läs 24 byte med data från adressen 0x88 (136) byte b1 = ny byte [24]; enhet. läs (0x88, b1, 0, 24); // Konvertera data // temp koefficienter int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); om (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); om (dig_T3> 32767) {dig_T3 -= 65536; } // tryckkoefficienter int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); om (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); om (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); om (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); om (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); om (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); om (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); om (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); om (dig_P9> 32767) {dig_P9 -= 65536; } // Läs 1 byte data från adressen 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Läs 7 byte med data från adressen 0xE1 (225) device.read (0xE1, b1, 0, 7); // Konvertera data // fuktighetskoefficienter int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); om (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); om (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); om (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; om (dig_H6> 127) {dig_H6 -= 256; } // Välj kontrollfuktighetsregister // Luftfuktighet över samplingshastighet = 1 enhet. Skriv (0xF2, (byte) 0x01); // Välj kontrollmätningsregister // Normalt läge, temp och tryck över samplingshastigheten = 1 enhet. Skriv (0xF4, (byte) 0x27); // Välj konfigurationsregister // Standby -tid = 1000 ms device.write (0xF5, (byte) 0xA0); // Läs 8 byte med data från adressen 0xF7 (247) // tryck msb1, tryck msb, tryck lsb, temp msb1, temp msb, temp lsb, fuktighet lsb, fuktighet msb byte data = ny byte [8]; device.read (0xF7, data, 0, 8); // Konvertera tryck- och temperaturdata till 19-bitars lång 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; // Konvertera fuktdata lång adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperaturförskjutningsberäkningar dubbel var1 = (((dubbel) adc_t) / 16384.0 - ((dubbel) dig_T1) / 1024.0) * ((dubbel) dig_T2); dubbel var2 = ((((dubbel) adc_t) / 131072.0 - ((dubbel) dig_T1) / 8192.0) * (((dubbel) adc_t) /131072.0 - ((dubbel) dig_T1) /8192.0)) * ((dubbel) dig_T3); dubbel t_fine = (lång) (var1 + var2); dubbel cTemp = (var1 + var2) / 5120,0; dubbel fTemp = cTemp * 1,8 + 32; // Beräkningar av tryckförskjutning var1 = ((dubbel) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dubbel) dig_P6) / 32768.0; var2 = var2 + var1 * ((dubbel) dig_P5) * 2,0; var2 = (var2 / 4,0) + (((dubbel) dig_P4) * 65536,0); var1 = (((dubbel) dig_P3) * var1 * var1 / 524288.0 + ((dubbel) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((dubbel) dig_P1); dubbel p = 1048576.0 - (dubbel) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dubbel) dig_P9) * p * p / 2147483648.0; var2 = p * ((dubbel) dig_P8) / 32768.0; dubbel tryck = (p + (var1 + var2 + ((dubbel) dig_P7)) / 16,0) / 100; // Beräkningar av luftfuktighetsförskjutning dubbel var_H = (((dubbel) t_fin) - 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))); dubbel luftfuktighet = var_H * (1,0 - dig_H1 * var_H / 524288,0); om (luftfuktighet> 100,0) {fuktighet = 100,0; } annars om (fuktighet <0,0) {fuktighet = 0,0; } // Utdata till skärmen System.out.printf ("Temperatur i Celsius: %.2f C %n", cTemp); System.out.printf ("Temperatur i Fahrenheit: %.2f F %n", fTemp); System.out.printf ("Tryck: %.2f hPa %n", tryck); System.out.printf ("Relativ luftfuktighet: %.2f %% RH %n", fuktighet); }}

Steg 4: Kodens praktiska

Koden praktiska
Koden praktiska

Ladda ner (eller git pull) koden och öppna den i Raspberry Pi.

Kör kommandona för att kompilera och ladda upp koden på terminalen och se utdata på Monitor. Efter några ögonblick kommer alla parametrar att visas. Genom att se till att du har en smidig kodövergång och ett lugnt (ish) resultat, tänker du på fler idéer för att göra ytterligare ändringar (Varje projekt börjar med en berättelse).

Steg 5: Användning i konstruktiv värld

BME280 uppnår hög prestanda i alla applikationer som kräver fukt- och tryckmätning. Dessa nya applikationer är Context Awareness, t.ex. Huddetektering, upptäckt av rumsbyte, Fitnessövervakning / välbefinnande, Varning angående torrhet eller höga temperaturer, Mätning av volym och luftflöde, Hemmautomatiseringskontroll, Kontrollvärme, Ventilation, Luftkonditionering (HVAC), Internet of Things (IoT), GPS-förbättring (t.ex. förbättring av tid-till-första-fix, dödräkning, detektering av lutning), inomhusnavigering (byte av golvdetektering, hissdetektering), utomhusnavigering, fritids- och sportapplikationer, väderprognoser och vertikal hastighetsindikering (stigning/sänkning) Fart).

Steg 6: Slutsats

Som du kan se är detta projekt en bra demonstration av vad hårdvara och programvara kan. På lite tid kan man bygga ett så imponerande projekt! Naturligtvis är detta bara en början. Att göra en mer sofistikerad personlig väderstation som automatiserade flygplatspersonliga väderstationer kan innebära några fler sensorer som vindmätare (vindhastighet), transmissometer (sikt), pyranometer (solstrålning) etc. Vi har en videohandledning på Youtube som har grundläggande funktion för I²C -sensor med Rasp Pi. Det är verkligen fantastiskt att se resultaten och arbetet med I²C -kommunikationen. Kolla det också. Ha kul att bygga och lära! Låt oss veta vad du tycker om detta instruerbara. Vi gör gärna några förbättringar om det behövs.

Rekommenderad: