Innholdsfortegnelse:

Personlig værstasjon som bruker Raspberry Pi med BME280 i Java: 6 trinn
Personlig værstasjon som bruker Raspberry Pi med BME280 i Java: 6 trinn

Video: Personlig værstasjon som bruker Raspberry Pi med BME280 i Java: 6 trinn

Video: Personlig værstasjon som bruker Raspberry Pi med BME280 i Java: 6 trinn
Video: KI og bærekraftsmålene 2024, November
Anonim
Image
Image
Bill of Essential Equipment
Bill of Essential Equipment

Dårlig vær ser alltid verre ut gjennom et vindu

Vi har alltid vært interessert i å overvåke vårt lokale vær og det vi ser ut av vinduet. Vi ønsket også bedre kontroll over vårt varme- og klimaanlegg. Å bygge en personlig værstasjon er en flott læringsopplevelse. Når du er ferdig med å bygge dette prosjektet, får du en bedre forståelse av hvordan trådløs kommunikasjon fungerer, hvordan sensorer fungerer og hvor kraftig Raspberry Pi -plattformen kan være. Med dette prosjektet som base og erfaringen, vil du enkelt kunne bygge mer komplekse prosjekter i fremtiden.

Trinn 1: Bill av essensielt utstyr

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. En bringebær Pi

Det første trinnet er å få tak i et Raspberry Pi -kort. Raspberry Pi er en Linux -drevet enkeltbordsmaskin. Målet er å forbedre programmeringskunnskaper og maskinvareforståelse. Det ble raskt vedtatt av hobbyfolk og elektronikkentusiaster for innovative prosjekter.

2. I²C Shield for Raspberry Pi

INPI2 (I2C -adapteren) gir Raspberry Pi 2/3 en I²C -port for bruk med flere I²C -enheter. Den er tilgjengelig på Dcube Store

3. Digital fuktighets-, trykk- og temperatursensor, BME280

BME280 er en fuktighets-, trykk- og temperatursensor som har rask responstid og høy generell nøyaktighet. Vi kjøpte denne sensoren fra Dcube Store

4. I²C -tilkoblingskabel

Vi hadde I²C -tilkoblingskabelen tilgjengelig på Dcube Store

5. Micro USB -kabel

Micro USB -kabelen Strømforsyning er et ideelt valg for å drive Raspberry Pi.

6. Tolk Internett -tilgang via EthernetCable/WiFi -adapter

En av de første tingene du vil gjøre er å få Raspberry Pi koblet til Internett. Vi kan koble til med en Ethernet -kabel. En annen mulighet er at du kan koble til et trådløst nettverk ved hjelp av en trådløs USB -adapter.

7. HDMI -kabel (skjerm og tilkoblingskabel)

Enhver HDMI/DVI -skjerm og hvilken som helst TV skal fungere som en skjerm for Pi. Men det er valgfritt. Mulighet for ekstern tilgang (like-SSH) kan ikke utelukkes også. Du kan også få tilgang med PUTTY -programvare.

Trinn 2: Maskinvaretilkoblinger for oppsett

Maskinvaretilkoblinger for oppsett
Maskinvaretilkoblinger for oppsett
Maskinvaretilkoblinger for oppsett
Maskinvaretilkoblinger for oppsett

Lag kretsen i henhold til skjematisk vist.

Mens vi lærte, ble vi grundig med det grunnleggende innen elektronikk angående maskinvare- og programvarekunnskap. Vi ønsket å lage en enkel elektronisk skjema for dette prosjektet. Elektroniske skjemaer er som en blåkopi for elektronikk. Lag en plan og følg designet nøye. Vi har brukt noen grunnleggende elektronikk her. Logikk får deg fra A til B, fantasi tar deg overalt!

Tilkobling av Raspberry Pi og I²C Shield

Først av alt, ta Raspberry Pi og legg I²C -skjoldet (med innadvendt I²C -port) på det. Trykk skjoldet forsiktig over GPIO -pinnene til Pi, og vi er ferdige med dette trinnet så enkelt som en kake (se bildet).

Tilkobling av sensoren og Raspberry Pi

Ta sensoren og koble I²C -kabelen med den. Sørg for at I²C Output ALLTID kobles til I²C Input. Det samme må følges for Raspberry Pi med I²C -skjoldet montert over GPIO -pinnene. Vi har I²C -skjoldet og tilkoblingskablene på vår side som en veldig stor lettelse og en veldig stor fordel ettersom vi bare sitter igjen med plug and play -alternativ. Ingen flere pins og ledningsproblemer, og derfor er forvirringen borte. Tenk deg selv at du er i ledningsnettet og kommer inn på det. En lettelse fra det. Dette gjør ting ukomplisert.

Merk: Den brune ledningen bør alltid følge jordforbindelsen (GND) mellom utgangen til en enhet og inngangen til en annen enhet

Internett -tilkobling er et behov

Du har et valg her faktisk. Du kan koble Raspberry Pi med LAN -kabelen eller den trådløse Nano USB -adapteren for WIFI -tilkobling. Uansett er manifestet å koble til internett som oppnås.

Drift av kretsen

Koble Micro USB -kabelen til strømkontakten på Raspberry Pi. Punch opp og voila! Alt er i orden, og vi starter umiddelbart.

Tilkobling til skjerm

Vi kan enten ha HDMI -kabelen koblet til en skjerm eller en TV. Vi kan få tilgang til en Raspberry Pi uten å koble den til en skjerm ved hjelp av -SSH (Få tilgang til kommandolinjen til Pi fra en annen datamaskin). Du kan også bruke PUTTY -programvaren til det. Dette alternativet er for avanserte brukere, så vi vil ikke dekke det i detalj her.

Jeg har hørt at det kommer en lavkonjunktur, jeg har bestemt meg for ikke å delta

Trinn 3: Raspberry Pi -programmering i Java

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

Java -koden for Raspberry Pi og BME280 -sensoren. Den er tilgjengelig i vårt Github -depot.

Før du går videre til koden, må du lese instruksjonene i Readme -filen og konfigurere Raspberry Pi i henhold til den. Det vil bare ta et øyeblikk å gjøre det. En personlig værstasjon er et sett med måleinstrumenter som drives av en privatperson, klubb, forening eller til og med virksomhet. Personlige værstasjoner kan bare drives for å glede og utdanne eieren, men mange personlige værstasjonsoperatører deler også dataene sine med andre, enten ved å manuelt samle data og distribuere dem, eller ved bruk av internett eller amatørradio.

Koden er i den enkleste formen du kan forestille deg, og du bør ikke ha noe problem med den, men spør om du har. Selv om du vet tusen ting, kan du spørre noen som vet det.

Du kan også kopiere den fungerende java -koden for denne sensoren herfra.

// Distribuert med en fri viljelisens. // Bruk den på hvilken som helst måte du vil, fortjeneste eller gratis, forutsatt at den passer inn i lisensene til de tilhørende verkene. // BME280 // Denne koden er designet for å fungere med BME280_I2CS I2C Mini Module tilgjengelig fra ControlEverything.com. //

importer com.pi4j.io.i2c. I2CBus;

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

offentlig klasse BME280

{public static void main (String args ) kaster Unntak {// Lag I2C -buss I2CBus -buss = I2CFactory.getInstance (I2CBus. BUS_1); // Få I2C -enhet, BME280 I2C -adresse er 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Les 24 byte med data fra adresse 0x88 (136) byte b1 = ny byte [24]; enhet. lese (0x88, b1, 0, 24); // Konverter dataene // temp koeffisienter int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); hvis (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); hvis (dig_T3> 32767) {dig_T3 -= 65536; } // trykkoeffisienter int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); hvis (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); hvis (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); hvis (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); hvis (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); hvis (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); hvis (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); hvis (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); hvis (dig_P9> 32767) {dig_P9 -= 65536; } // Les 1 byte data fra adresse 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Les 7 byte med data fra adressen 0xE1 (225) device.read (0xE1, b1, 0, 7); // Konverter data // fuktighetskoeffisienter int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); hvis (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); hvis (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); hvis (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; hvis (dig_H6> 127) {dig_H6 -= 256; } // Velg kontrollfuktighetsregister // Fuktighet over samplingsfrekvens = 1 enhet. Skriv (0xF2, (byte) 0x01); // Velg kontrollmålingsregister // Normal modus, temperatur og trykk over samplingshastighet = 1 enhet. Skriv (0xF4, (byte) 0x27); // Velg konfigureringsregister // Standby -tid = 1000 ms device.write (0xF5, (byte) 0xA0); // Les 8 byte data fra adresse 0xF7 (247) // trykk msb1, trykk msb, trykk lsb, temp msb1, temp msb, temp lsb, fuktighet lsb, fuktighet msb byte data = ny byte [8]; device.read (0xF7, data, 0, 8); // Konverter trykk- og temperaturdata til 19-bits lange 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; // Konverter fuktighetsdata long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperaturforskyvningsberegninger dobbel var1 = (((dobbel) adc_t) / 16384.0 - ((dobbel) dig_T1) / 1024.0) * ((dobbel) 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); dobbel t_fine = (lang) (var1 + var2); dobbelt cTemp = (var1 + var2) / 5120,0; dobbelt fTemp = cTemp * 1,8 + 32; // Trykkforskyvningsberegninger var1 = ((dobbel) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dobbel) dig_P6) / 32768.0; var2 = var2 + var1 * ((dobbel) dig_P5) * 2,0; var2 = (var2 / 4.0) + (((dobbel) dig_P4) * 65536.0); var1 = (((dobbel) dig_P3) * var1 * var1 / 524288.0 + ((dobbel) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((dobbel) dig_P1); dobbel p = 1048576.0 - (dobbel) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dobbel) dig_P9) * p * p / 2147483648.0; var2 = p * ((dobbel) dig_P8) / 32768.0; dobbelt trykk = (p + (var1 + var2 + ((dobbelt) dig_P7)) / 16,0) / 100; // Beregninger av fuktighetsforskyvning dobbel var_H = (((dobbel) 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))); dobbel fuktighet = var_H * (1,0 - dig_H1 * var_H / 524288,0); hvis (fuktighet> 100,0) {fuktighet = 100,0; } annet hvis (fuktighet <0,0) {fuktighet = 0,0; } // Utdata til skjermen System.out.printf ("Temperatur i Celsius: %.2f C %n", cTemp); System.out.printf ("Temperatur i Fahrenheit: %.2f F %n", fTemp); System.out.printf ("Trykk: %.2f hPa %n", trykk); System.out.printf ("Relativ fuktighet: %.2f %% RH %n", fuktighet); }}

Trinn 4: Koden praktisk

Koden praktisk
Koden praktisk

Last ned (eller git pull) koden og åpne den i Raspberry Pi.

Kjør kommandoene for å kompilere og laste opp koden på terminalen og se utgangen på Monitor. Etter noen få øyeblikk vil den vise alle parameterne. For å sikre at du har en jevn kodeovergang og et rolig (ish) resultat, tenker du på flere ideer for å gjøre ytterligere endringer (Hvert prosjekt starter med en historie).

Trinn 5: Utnyttelse i konstruktiv verden

BME280 oppnår høy ytelse i alle applikasjoner som krever fuktighets- og trykkmåling. Disse nye applikasjonene er kontekstbevissthet, f.eks. Huddeteksjon, Romendringsdeteksjon, Fitnessovervåking / velvære, Advarsel angående tørrhet eller høye temperaturer, Måling av volum og luftstrøm, Hjemmeautomatiseringskontroll, Kontrollvarme, Ventilasjon, Klimaanlegg (HVAC), Tingenes internett (IoT), GPS-forbedring (f.eks. Forbedring av tid til første-reparasjon, dødsregning, deteksjon av skråninger), innendørs navigasjon (endring av gulvdeteksjon, heisdeteksjon), utendørs navigasjon, fritid og sport, værmeldinger og vertikal hastighetsindikasjon (stigning/synke) Hastighet).

Trinn 6: Konklusjon

Som du kan se, er dette prosjektet en god demonstrasjon av hva maskinvare og programvare er i stand til. På litt tid kan man bygge et så imponerende prosjekt! Selvfølgelig er dette bare begynnelsen. Å lage en mer sofistikert personlig værstasjon som automatiserte flyplass personlige værstasjoner kan involvere noen flere sensorer som vindmåler (vindhastighet), transmissometer (synlighet), pyranometer (solstråling) etc. Vi har en videoopplæring på Youtube som har den grunnleggende funksjonen til I²C -sensor med Rasp Pi. Det er virkelig fantastisk å se resultatene og arbeidet med I²C -kommunikasjonen. Sjekk det også. Ha det gøy å bygge og lære! Gi oss beskjed om hva du synes om dette instruerbare. Vi vil gjerne gjøre noen forbedringer om nødvendig.

Anbefalt: