Innholdsfortegnelse:

Værstasjon som bruker Raspberry Pi med BME280 i Python: 6 trinn
Værstasjon som bruker Raspberry Pi med BME280 i Python: 6 trinn

Video: Værstasjon som bruker Raspberry Pi med BME280 i Python: 6 trinn

Video: Værstasjon som bruker Raspberry Pi med BME280 i Python: 6 trinn
Video: Hardware Build of LoRa Transmitter, BME280 Sensor based on Arduino ESP32 (EP08) 2024, November
Anonim
Image
Image
Lov om imperativ utstyr
Lov om imperativ utstyr

is maith an scéalaí an aimir (Været er en god historieforteller)

Med problemer med global oppvarming og klimaendringer, blir det globale værmønsteret uberegnelig over hele verden, noe som fører til en rekke værrelaterte naturkatastrofer (tørke, ekstreme temperaturer, flom, stormer og skogbranner), en værstasjon ser ut til å være en nødvendig onde hjemme. Du lærer mye om grunnleggende elektronikk fra et værstasjonsprosjekt ved hjelp av en haug med billige deler og sensorer. Det er ganske enkelt å sette opp, og du kan få det på kort tid.

Trinn 1: Lov om imperativ utstyr

Lov om imperativ utstyr
Lov om imperativ utstyr
Lov om imperativ utstyr
Lov om imperativ utstyr
Lov om imperativ utstyr
Lov om imperativ utstyr

1. En bringebær Pi

Få tak i et Raspberry Pi -brett. Raspberry Pi er en Linux -drevet enkeltbordsmaskin. Raspberry Pi er veldig billig, liten og allsidig bygget av en tilgjengelig og funksjonell datamaskin for elever å trene grunnleggende om programmering og programvareutvikling.

2. I2C Shield for Raspberry Pi

INPI2 (I2C -adapteren) gir Raspberry Pi 2/3 en I²C -port for bruk med flere I2C -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. I2C -tilkoblingskabel

Vi brukte I²C -kabelen som er tilgjengelig her 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

Internett -tilgang kan aktiveres via en Ethernet -kabel koblet til et lokalt nettverk og internett. Alternativt kan du koble til et trådløst nettverk ved hjelp av en trådløs USB -dongle, noe som krever konfigurasjon.

7. HDMI -kabel (skjerm og tilkoblingskabel)

Enhver HDMI/DVI -skjerm og hvilken som helst TV skal fungere som en skjerm for Pi. Alternativt kan du få ekstern tilgang til Pi via SSH og nekte behovet for en skjerm (bare avanserte brukere).

Trinn 2: Maskinvaretilkoblinger for krets

Maskinvaretilkoblinger for krets
Maskinvaretilkoblinger for krets
Maskinvaretilkoblinger for krets
Maskinvaretilkoblinger for krets

Lag kretsen i henhold til skjematikken som vises. Generelt er tilkoblingene veldig enkle. Hold deg rolig og følg instruksjonene og bildene ovenfor, og du bør ikke ha noen problemer. 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 tegninger. Lag en plan og følg designet nøye. Noen få grunnleggende begreper innen elektronikk kan være nyttige her!

Tilkobling av Raspberry Pi og I2C Shield

Ta først Raspberry Pi og legg I²C -skjoldet på den. Trykk forsiktig på skjoldet, og vi er ferdige med dette trinnet så enkelt som en pai (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 anbefaler bruk av I²C-kablene, da det negerer behovet for å lese pinouts, lodding og ubehag forårsaket av selv den minste glidning. Med denne enkle plug and play -kabelen kan du enkelt installere, bytte ut brett eller legge til flere brett i et program.

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 nøkkelen

Du har to valg her. Enten kan du koble Raspberry Pi til nettverket ved hjelp av en ethernet -kabel eller bruke en USB til WiFi -adapter for WIFI -tilkobling. Uansett, så lenge den er koblet til internett du er dekket.

Slå på kretsen

Koble Micro USB -kabelen til strømkontakten på Raspberry Pi. Punch opp og voila! Vår tropp er informasjon.

Tilkobling til skjerm

Vi kan enten ha HDMI -kabelen koblet til en skjerm eller til en TV. I tillegg kan vi få tilgang til en Raspberry Pi uten å koble den til en skjerm ved hjelp av ekstern tilgang. SSH er et praktisk verktøy for sikker ekstern tilgang. Du kan også bruke PUTTY -programvaren til det. Dette alternativet er for avanserte brukere, så vi vil ikke dekke det i detalj her.

Det er en økonomisk metode hvis du ikke vil bruke mye

Trinn 3: Raspberry Pi -programmering i Python

Raspberry Pi -programmering i Python
Raspberry Pi -programmering i Python

Python -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. Bare en liten stund gjør deg klar til oppsett. En værstasjon er et anlegg, enten på land eller sjø, med instrumenter og utstyr for måling av atmosfæriske forhold for å gi informasjon om værmeldinger og for å studere været og klimaet.

Koden er tydelig foran deg, og den er i den enkleste formen du kan forestille deg, og du bør ikke ha noen problemer. Spør fortsatt om noen (Selv om du vet tusen ting, må du fortsatt spørre noen som vet).

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

# Distribuert med en fri viljelisens.# Bruk den som du vil, profitt 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 smbus

importtid

# Få I2C -buss

buss = smbus. SMBus (1)

# BME280 -adresse, 0x76 (118)

# Les data tilbake fra 0x88 (136), 24 byte b1 = bus.read_i2c_block_data (0x76, 0x88, 24)

# Konverter dataene

# Temp koeffisienter dig_T1 = b1 [1] * 256 + b1 [0] dig_T2 = b1 [3] * 256 + b1 [2] hvis dig_T2> 32767: dig_T2 -= 65536 dig_T3 = b1 [5] * 256 + b1 [4] hvis dig_T3> 32767: dig_T3 -= 65536

# Trykk -koeffisienter

dig_P1 = b1 [7] * 256 + b1 [6] dig_P2 = b1 [9] * 256 + b1 [8] hvis dig_P2> 32767: dig_P2 -= 65536 dig_P3 = b1 [11] * 256 + b1 [10] hvis dig_P3 > 32767: dig_P3 -= 65536 dig_P4 = b1 [13] * 256 + b1 [12] hvis dig_P4> 32767: dig_P4 -= 65536 dig_P5 = b1 [15] * 256 + b1 [14] hvis dig_P5> 32767: dig_P5 -= 65536 dig_P6 = b1 [17] * 256 + b1 [16] if dig_P6> 32767: dig_P6 -= 65536 dig_P7 = b1 [19] * 256 + b1 [18] if dig_P7> 32767: dig_P7 -= 65536 dig_P8 = b1 [21] * 256 + b1 [20] hvis dig_P8> 32767: dig_P8 -= 65536 dig_P9 = b1 [23] * 256 + b1 [22] hvis dig_P9> 32767: dig_P9 -= 65536

# BME280 -adresse, 0x76 (118)

# Les data tilbake fra 0xA1 (161), 1 byte dig_H1 = bus.read_byte_data (0x76, 0xA1)

# BME280 -adresse, 0x76 (118)

# Les data tilbake fra 0xE1 (225), 7 byte b1 = bus.read_i2c_block_data (0x76, 0xE1, 7)

# Konverter dataene

# Fuktighetskoeffisienter dig_H2 = b1 [1] * 256 + b1 [0] hvis dig_H2> 32767: dig_H2 -= 65536 dig_H3 = (b1 [2] & 0xFF) dig_H4 = (b1 [3] * 16) + (b1 [4] & 0xF) hvis dig_H4> 32767: dig_H4 -= 65536 dig_H5 = (b1 [4] / 16) + (b1 [5] * 16) hvis dig_H5> 32767: dig_H5 -= 65536 dig_H6 = b1 [6] hvis dig_H6> 127: dig_H6 -= 256

# BME280 -adresse, 0x76 (118)

# Velg kontrollfuktighetsregister, 0xF2 (242) # 0x01 (01) Fuktighetsoversampling = 1 buss.write_byte_data (0x76, 0xF2, 0x01) # BME280 -adresse, 0x76 (118) # Velg Kontrollmålingsregister, 0xF4 (244) # 0x27 (39) Trykk og temperatur Oversampling rate = 1 # Normal modus buss.write_byte_data (0x76, 0xF4, 0x27) # BME280 adresse, 0x76 (118) # Velg konfigurasjonsregister, 0xF5 (245) # 0xA0 (00) Standby -tid = 1000 ms buss.write_byte_data (0x76, 0xF5, 0xA0)

time.sleep (0,5)

# BME280 -adresse, 0x76 (118)

# Les data tilbake fra 0xF7 (247), 8 byte # Trykk MSB, trykk LSB, trykk xLSB, temperatur MSB, temperatur LSB # temperatur xLSB, fuktighet MSB, fuktighet LSB data = bus.read_i2c_block_data (0x76, 0xF7, 8)

# Konverter trykk- og temperaturdata til 19-bits

adc_p = ((data [0] * 65536) + (data [1] * 256) + (data [2] & 0xF0)) / 16 adc_t = ((data [3] * 65536) + (data [4] * 256) + (data [5] & 0xF0)) / 16

# Konverter fuktighetsdataene

adc_h = data [6] * 256 + data [7]

# Temperaturforskyvningsberegninger

var1 = ((adc_t) / 16384.0 - (dig_T1) / 1024.0) * (dig_T2) var2 = (((adc_t) / 131072.0 - (dig_T1) / 8192.0) * ((adc_t) /131072.0 - (dig_T1) /8192.0)) * (dig_T3) t_fine = (var1 + var2) cTemp = (var1 + var2) / 5120.0 fTemp = cTemp * 1.8 + 32

# Trykkforskyvningsberegninger

var1 = (t_fine / 2.0) - 64000.0 var2 = var1 * var1 * (dig_P6) / 32768.0 var2 = var2 + var1 * (dig_P5) * 2.0 var2 = (var2 / 4.0) + ((dig_P4) * 65536.0) var1 = (((dig_P3) * var1 * var1 / 524288.0 + (dig_P2) * var1) / 524288.0 var1 = (1.0 + var1 / 32768.0) * (dig_P1) p = 1048576.0 - adc_p p = (p - (var2 / 4096.0)) * 6250.0 / var1 var1 = (dig_P9) * p * p / 2147483648.0 var2 = p * (dig_P8) / 32768.0 trykk = (p + (var1 + var2 + (dig_P7)) / 16.0) / 100

# Fuktighetsforskyvning av beregninger

var_H = ((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_))) fuktighet = var_H * (1,0 - dig_H1 * var_H / 524288,0) hvis fuktighet> 100,0: fuktighet = 100,0 elif fuktighet <0,0: fuktighet = 0,0

# Utdata til skjermen

print "Temperatur i Celsius: %.2f C" %cTemp utskrift "Temperatur i Fahrenheit: %.2f F" %fTemp utskrift "Trykk: %.2f hPa" %trykk trykk "Relativ fuktighet: %.2f %%" %fuktighet

Trinn 4: Running Code

Running Code
Running Code

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å displayet. Etter noen få sekunder vil alle parametrene vises. Etter å ha sørget for at alt fungerer bra, kan du utvikle noen flere interessante.

Trinn 5: Utnyttelse i praktisk 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

Håper dette prosjektet inspirerer til ytterligere eksperimentering. Å lage en mer sofistikert værstasjon kan innebære flere sensorer som Rain Gauge, Light sensor, anemometer (vindhastighet) etc. Du kan legge dem til og endre koden. Vi har en videoopplæring på YouTube som har den grunnleggende funksjonen til I²C -sensoren 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: