Indholdsfortegnelse:

Personlig vejrstation ved hjælp af Raspberry Pi med BME280 i Java: 6 trin
Personlig vejrstation ved hjælp af Raspberry Pi med BME280 i Java: 6 trin

Video: Personlig vejrstation ved hjælp af Raspberry Pi med BME280 i Java: 6 trin

Video: Personlig vejrstation ved hjælp af Raspberry Pi med BME280 i Java: 6 trin
Video: Guardians in the Wilderness: Joey & Shannon Hodgson's Journey as Remote Forest Fire Tower Lookouts 2024, Juli
Anonim
Image
Image
Bill of Essential Equipment
Bill of Essential Equipment

Dårligt vejr ser altid værre ud gennem et vindue

Vi har altid været interesseret i at overvåge vores lokale vejr og hvad vi ser ud af vinduet. Vi ønskede også bedre kontrol over vores varme- og klimaanlæg. At bygge en personlig vejrstation er en fantastisk læringsoplevelse. Når du er færdig med at bygge dette projekt, får du en bedre forståelse af, hvordan trådløs kommunikation fungerer, hvordan sensorer fungerer, og hvor kraftfuld Raspberry Pi -platformen kan være. Med dette projekt som base og den opnåede erfaring, vil du let kunne bygge mere komplekse projekter i fremtiden.

Trin 1: Regning for vigtigt udstyr

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 Raspberry Pi

Det første trin er at få fingrene i et Raspberry Pi -bord. Raspberry Pi er en Linux -drevet enkelt bordcomputer. Dets mål er at forbedre programmeringsevner og hardware -forståelse. Det blev hurtigt vedtaget af hobbyfolk og elektronikentusiaster til innovative projekter.

2. I²C Shield til Raspberry Pi

INPI2 (I2C -adapteren) giver Raspberry Pi 2/3 en I²C -port til brug med flere I²C -enheder. Den er tilgængelig på Dcube Store

3. Digital fugtigheds-, tryk- og temperatursensor, BME280

BME280 er en fugtigheds-, tryk- og temperatursensor, der har hurtig responstid og høj samlet nøjagtighed. Vi købte denne sensor fra Dcube Store

4. I²C tilslutningskabel

Vi havde I²C -tilslutningskablet tilgængeligt i Dcube Store

5. Micro USB -kabel

Micro USB -kablet Strømforsyning er et ideelt valg til strømforsyning til Raspberry Pi.

6. Fortolk internetadgang via EthernetCable/WiFi -adapter

En af de første ting, du vil gøre, er at få din Raspberry Pi tilsluttet internettet. Vi kan tilslutte ved hjælp af et Ethernet -kabel. En anden mulighed er, at du kan oprette forbindelse til et trådløst netværk ved hjælp af en trådløs USB -adapter.

7. HDMI -kabel (Display & tilslutningskabel)

Enhver HDMI/DVI -skærm og ethvert tv skal fungere som skærm til Pi. Men det er valgfrit. Mulighed for fjernadgang (som-SSH) kan heller ikke udelukkes. Du kan også få adgang med PUTTY -software.

Trin 2: Hardwareforbindelser til opsætning

Hardwareforbindelser til opsætning
Hardwareforbindelser til opsætning
Hardwareforbindelser til opsætning
Hardwareforbindelser til opsætning

Lav kredsløbet i henhold til skematisk vist.

Mens vi lærte, fik vi grundigt med det grundlæggende inden for elektronik vedrørende hardware og software viden. Vi ønskede at udarbejde en simpel elektronisk skema for dette projekt. Elektroniske skemaer er som en blueprint for elektronik. Tegn en plan og følg designet omhyggeligt. Vi har brugt nogle grundlæggende elementer inden for elektronik her. Logik får dig fra A til B, fantasi tager dig overalt!

Tilslutning af Raspberry Pi og I²C Shield

Først og fremmest skal du tage Raspberry Pi og placere I²C -skjoldet (med indadvendt I²C -port) på det. Tryk forsigtigt på skærmen over GPIO -benene på Pi, og vi er færdige med dette trin lige så let som en tærte (se billedet).

Tilslutning af sensoren og Raspberry Pi

Tag sensoren og tilslut I²C -kablet med den. Sørg for, at I²C Output ALTID forbinder til I²C Input. Det samme skal følges for Raspberry Pi med I²C -skjoldet monteret over GPIO -benene. Vi har I²C -skjoldet og forbindelseskablerne på vores side som en meget stor lettelse og en meget stor fordel, da vi kun står tilbage med plug and play mulighed. Ikke flere pins og ledningsproblemer, og derfor er forvirringen væk. Forestil dig bare dig selv i ledningen og komme ind i det. En lettelse fra det. Det gør tingene ukomplicerede.

Bemærk: Den brune ledning skal altid følge jordforbindelsen (GND) mellem output fra en enhed og input fra en anden enhed

Internetforbindelse er et behov

Du har faktisk et valg her. Du kan tilslutte Raspberry Pi med LAN -kablet eller den trådløse Nano USB -adapter til WIFI -forbindelse. Uanset hvad, er manifestet at oprette forbindelse til internettet, som opnås.

Strømforsyning af kredsløbet

Sæt Micro USB -kablet i strømstikket på Raspberry Pi. Slå op og voila! Alt er godt, og vi starter med det samme.

Tilslutning til skærm

Vi kan enten have HDMI -kablet tilsluttet en skærm eller et tv. Vi kan få adgang til en Raspberry Pi uden at forbinde den til en skærm ved hjælp af -SSH (Få adgang til kommandolinjen for Pi fra en anden computer). Du kan også bruge PUTTY -softwaren til det. Denne mulighed er for avancerede brugere, så vi vil ikke dække det i detaljer her.

Jeg har hørt, at der kommer en recession, jeg har besluttet ikke at deltage

Trin 3: Raspberry Pi -programmering i Java

Hindbær Pi programmering i Java
Hindbær Pi programmering i Java

Java -koden til Raspberry Pi og BME280 -sensoren. Det er tilgængeligt i voresGithub -depot.

Inden du går videre til koden, skal du læse instruktionerne i Readme -filen og konfigurere din Raspberry Pi i henhold til den. Det vil tage lige et øjeblik at gøre det. En personlig vejrstation er et sæt vejrmåleinstrumenter, der drives af en privatperson, klub, forening eller endda virksomhed. Personlige vejrstationer kan udelukkende betjenes til nydelse og uddannelse af ejeren, men mange personlige vejrstationsoperatører deler også deres data med andre, enten ved manuelt at indsamle data og distribuere dem, eller ved brug af internettet eller amatørradio.

Koden er i den enkleste form, du kan forestille dig, og du bør ikke have problemer med den, men spørg, hvis du har. Selvom du ved tusind ting, skal du stadig spørge en, der ved det.

Du kan også kopiere den fungerende java -kode til denne sensor herfra.

// Distribueret med en fri vilje-licens. // Brug den, som du vil, profit eller gratis, forudsat at den passer ind i licenserne til de tilhørende værker. // BME280 // Denne kode er designet til at fungere med BME280_I2CS I2C Mini -modulet tilgængeligt fra ControlEverything.com. //

importer com.pi4j.io.i2c. I2CBus;

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

offentlig klasse BME280

{public static void main (String args ) kaster Undtagelse {// Opret I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Hent I2C -enhed, BME280 I2C -adresse er 0x76 (108) I2CDevice -enhed = bus.getDevice (0x76); // Læs 24 bytes data fra adresse 0x88 (136) byte b1 = ny byte [24]; device.read (0x88, b1, 0, 24); // Konverter data // temp koefficienter 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; } // trykkoefficienter 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; } // Læs 1 byte data fra adresse 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Læs 7 byte data fra adresse 0xE1 (225) device.read (0xE1, b1, 0, 7); // Konverter data // fugtighedskoefficienter 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; } // Vælg kontrolfugtighedsregister // Fugtighed over prøvehastighed = 1 enhed. Skriv (0xF2, (byte) 0x01); // Vælg kontrolmåleregister // Normal tilstand, temp og tryk over samplingshastighed = 1 enhed. Skriv (0xF4, (byte) 0x27); // Vælg konfigurationsregister // Standby -tid = 1000 ms device.write (0xF5, (byte) 0xA0); // Læs 8 byte data fra adresse 0xF7 (247) // tryk msb1, tryk msb, tryk lsb, temp msb1, temp msb, temp lsb, luftfugtighed lsb, luftfugtighed msb byte data = ny byte [8]; device.read (0xF7, data, 0, 8); // Konverter tryk- og temperaturdata til 19-bit 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 fugtighedsdataene lange adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperaturforskydningsberegninger dobbelt var1 = (((dobbelt) adc_t) / 16384.0 - ((dobbelt) dig_T1) / 1024.0) * ((dobbelt) dig_T2); dobbelt var2 = ((((dobbelt) adc_t) / 131072.0 - ((dobbelt) dig_T1) / 8192.0) * (((dobbelt) adc_t) /131072.0 - ((dobbelt) dig_T1) /8192.0)) * ((dobbelt) dig_T3); dobbelt t_fine = (lang) (var1 + var2); dobbelt cTemp = (var1 + var2) / 5120,0; dobbelt fTemp = cTemp * 1,8 + 32; // Trykforskydningsberegninger var1 = ((dobbelt) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dobbelt) dig_P6) / 32768,0; var2 = var2 + var1 * ((dobbelt) dig_P5) * 2,0; var2 = (var2 / 4,0) + (((dobbelt) dig_P4) * 65536,0); var1 = (((dobbelt) dig_P3) * var1 * var1 / 524288.0 + ((dobbelt) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((dobbelt) dig_P1); dobbelt p = 1048576.0 - (dobbelt) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dobbelt) dig_P9) * p * p / 2147483648.0; var2 = p * ((dobbelt) dig_P8) / 32768,0; dobbelt tryk = (p + (var1 + var2 + ((dobbelt) dig_P7)) / 16,0) / 100; // Fugtighedsforskydningsberegninger dobbelt var_H = (((dobbelt) 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))); dobbelt luftfugtighed = var_H * (1,0 - dig_H1 * var_H / 524288,0); hvis (fugtighed> 100,0) {luftfugtighed = 100,0; } ellers hvis (fugtighed <0,0) {luftfugtighed = 0,0; } // Outputdata til skærm System.out.printf ("Temperatur i Celsius: %.2f C %n", cTemp); System.out.printf ("Temperatur i Fahrenheit: %.2f F %n", fTemp); System.out.printf ("Tryk: %.2f hPa %n", tryk); System.out.printf ("Relativ luftfugtighed: %.2f %% RH %n", fugtighed); }}

Trin 4: Kodepraktikken

Koden praktisk
Koden praktisk

Download nu (eller git pull) koden og åbn den i Raspberry Pi.

Kør kommandoerne for at kompilere og uploade koden på terminalen og se output på Monitor. Efter få øjeblikke vil det vise alle parametre. For at sikre, at du har en gnidningsløs kodeovergang og et roligt (ish) resultat, tænker du på flere ideer til at foretage yderligere ændringer (Hvert projekt starter med en historie).

Trin 5: Udnyttelse i konstruktiv verden

BME280 opnår høj ydeevne i alle applikationer, der kræver fugtigheds- og trykmåling. Disse nye applikationer er kontekstbevidsthed, f.eks. Hudregistrering, registrering af rumskifte, fitnessovervågning / velvære, advarsel vedrørende tørhed eller høje temperaturer, måling af volumen og luftstrøm, hjemmeautomatiseringskontrol, kontrolvarme, ventilation, aircondition (HVAC), tingenes internet (IoT), GPS-forbedring (f.eks. Forbedring af tid til første-reparation, dødtælling, detektion af hældninger), indendørs navigation (ændring af gulvregistrering, elevatordetektion), udendørs navigation, fritid og sport, vejrudsigter og lodret hastighedsindikation (stigning/håndvask) Hastighed).

Trin 6: Konklusion

Som du kan se, er dette projekt en god demonstration af, hvad hardware og software er i stand til. På lidt tid kan man bygge et så imponerende projekt! Selvfølgelig er dette kun begyndelsen. At lave en mere sofistikeret personlig vejrstation som automatiserede lufthavns personlige vejrstationer kan involvere nogle flere sensorer som vindmåler (vindhastighed), transmissometer (synlighed), pyranometer (solstråling) osv. Vi har en videotutorial på Youtube, der har den grundlæggende funktion af I²C sensor med Rasp Pi. Det er virkelig fantastisk at se resultaterne og arbejdet med I²C -kommunikationen. Tjek det også. God fornøjelse med at bygge og lære! Fortæl os venligst, hvad du synes om dette instruerbare. Vi vil gerne lave nogle forbedringer, hvis det er nødvendigt.

Anbefalede: