Indholdsfortegnelse:

Vejrstation ved hjælp af Raspberry Pi med BME280 i Python: 6 trin
Vejrstation ved hjælp af Raspberry Pi med BME280 i Python: 6 trin

Video: Vejrstation ved hjælp af Raspberry Pi med BME280 i Python: 6 trin

Video: Vejrstation ved hjælp af Raspberry Pi med BME280 i Python: 6 trin
Video: Raspberry Pi Weather Station 2024, Juli
Anonim
Image
Image
Lov om imperativt udstyr
Lov om imperativt udstyr

er maith an scéalaí an aimir (Vejret er en god historiefortæller)

Med global opvarmning og problemer med klimaændringer bliver det globale vejrmønster uberegneligt i hele vores verden, hvilket fører til en række vejrrelaterede naturkatastrofer (tørke, ekstreme temperaturer, oversvømmelser, storme og naturbrande), en vejrstation synes at være en nødvendig onde derhjemme. Du lærer meget om grundlæggende elektronik fra et vejrstationsprojekt ved hjælp af en masse billige dele og sensorer. Det er ret let at konfigurere, og du kan få det på ingen tid.

Trin 1: Lov om imperativt udstyr

Lov om imperativt udstyr
Lov om imperativt udstyr
Lov om imperativt udstyr
Lov om imperativt udstyr
Lov om imperativt udstyr
Lov om imperativt udstyr

1. En Raspberry Pi

Få fingrene i et Raspberry Pi -bord. Raspberry Pi er en Linux -drevet enkelt bordcomputer. Raspberry Pi er virkelig billig, lille og alsidig bygget af en tilgængelig og funktionel computer, hvor eleverne kan udøve det grundlæggende inden for programmering og softwareudvikling.

2. I2C Shield til Raspberry Pi

INPI2 (I2C -adapteren) giver Raspberry Pi 2/3 en I²C -port til brug med flere I2C -enheder. Den er tilgængelig i 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. I2C -tilslutningskabel

Vi brugte I²C -kablet, der er tilgængeligt her 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

Internetadgang kan aktiveres via et Ethernet -kabel, der er tilsluttet et lokalt netværk og internettet. Alternativt kan du oprette forbindelse til et trådløst netværk ved hjælp af en trådløs USB -dongle, hvilket kræver konfiguration.

7. HDMI -kabel (Display & tilslutningskabel)

Enhver HDMI/DVI -skærm og ethvert tv skal fungere som skærm til Pi. Alternativt kan du få fjernadgang til Pi'en via SSH og negere behovet for en skærm (kun avancerede brugere).

Trin 2: Hardwareforbindelser til kredsløb

Hardwareforbindelser til kredsløb
Hardwareforbindelser til kredsløb
Hardwareforbindelser til kredsløb
Hardwareforbindelser til kredsløb

Lav kredsløbet i henhold til det viste skema. Generelt er forbindelserne meget enkle. Hold ro og følg instruktionerne og billederne ovenfor, og du bør ikke have problemer. 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 tegninger. Tegn en plan og følg designet omhyggeligt. Et par grundlæggende begreber inden for elektronik kan være nyttige her!

Tilslutning af Raspberry Pi og I2C Shield

Tag først Raspberry Pi og placer I²C Shield på den. Tryk forsigtigt på skjoldet, og vi er færdige med dette trin så let som 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 anbefaler brugen af I²C-kablerne, da det negerer behovet for aflæsning af pinout, lodning og utilpashed forårsaget af selv den mindste slip-up. Med dette enkle plug and play -kabel kan du nemt installere, skifte kort eller tilføje flere tavler til en applikation.

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

Internetforbindelse er nøglen

Du har to valg her. Enten kan du slutte Raspberry Pi til netværket ved hjælp af et ethernet -kabel eller bruge en USB til WiFi -adapter til WIFI -forbindelse. Uanset hvad, så længe det er forbundet til internettet, er du dækket.

Tænd for kredsløbet

Sæt Micro USB -kablet i strømstikket på Raspberry Pi. Slå op og voila! Vores hold er information.

Tilslutning til skærm

Vi kan enten have HDMI -kablet tilsluttet en skærm eller et tv. Derudover kan vi få adgang til en Raspberry Pi uden at forbinde den til en skærm ved hjælp af fjernadgang. SSH er et praktisk værktøj til sikker fjernadgang. Du kan også bruge PUTTY -softwaren til det. Denne mulighed er for avancerede brugere, så vi vil ikke dække det i detaljer her.

Det er en økonomisk metode, hvis du ikke vil bruge meget

Trin 3: Raspberry Pi -programmering i Python

Raspberry Pi programmering i Python
Raspberry Pi programmering i Python

Python -koden til Raspberry Pi og BME280 -sensoren. Den er tilgængelig i vores Github -lager.

Inden du går videre til koden, skal du læse instruktionerne i Readme -filen og konfigurere din Raspberry Pi i henhold til den. Bare lidt tid gør dig klar til opsætning. En vejrstation er en facilitet, enten på land eller til søs, med instrumenter og udstyr til måling af atmosfæriske forhold for at give oplysninger om vejrudsigter og for at studere vejret og klimaet.

Koden er klart foran dig, og den er i den enkleste form, som du kan forestille dig, og du bør ikke have problemer. Spørg stadig hvis nogen (Selvom du ved tusind ting, så spørg stadig en der ved).

Du kan også kopiere den fungerende Python -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. #

import smbus

importtid

# Få I2C -bus

bus = smbus. SMBus (1)

# BME280 adresse, 0x76 (118)

# Læs data tilbage fra 0x88 (136), 24 bytes b1 = bus.read_i2c_block_data (0x76, 0x88, 24)

# Konverter dataene

# Temp koefficienter 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

# Trykkoefficienter

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)

# Læs data tilbage fra 0xA1 (161), 1 byte dig_H1 = bus.read_byte_data (0x76, 0xA1)

# BME280 adresse, 0x76 (118)

# Læs data tilbage fra 0xE1 (225), 7 bytes b1 = bus.read_i2c_block_data (0x76, 0xE1, 7)

# Konverter dataene

# Fugtighedskoefficienter 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)

# Vælg kontrolfugtighedsregister, 0xF2 (242) # 0x01 (01) Fugtighedsoversampling = 1 bus.write_byte_data (0x76, 0xF2, 0x01) # BME280 -adresse, 0x76 (118) # Vælg kontrolmåleregister, 0xF4 (244) # 0x27 (39) Tryk og temperatur Oversampling rate = 1 # Normal mode bus.write_byte_data (0x76, 0xF4, 0x27) # BME280 adresse, 0x76 (118) # Vælg konfigurationsregister, 0xF5 (245) # 0xA0 (00) Stand_by tid = 1000 ms bus.write_byte_data (0x76, 0xF5, 0xA0)

time.sleep (0,5)

# BME280 adresse, 0x76 (118)

# Læs data tilbage fra 0xF7 (247), 8 bytes # Tryk MSB, tryk LSB, tryk xLSB, temperatur MSB, temperatur LSB # temperatur xLSB, luftfugtighed MSB, luftfugtighed LSB data = bus.read_i2c_block_data (0x76, 0xF7, 8)

# Konverter tryk- 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 fugtighedsdata

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

# Temperaturforskydningsberegninger

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

# Beregninger af trykforskydninger

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 tryk = (p + (var1 + var2 + (dig_P7)) / 16.0) / 100

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

# Output data til skærmen

print "Temperatur i Celsius: %.2f C" %cTemp print "Temperatur i Fahrenheit: %.2f F" %fTemp udskrift "Tryk: %.2f hPa" %tryk print "Relativ luftfugtighed: %.2f %%" %luftfugtighed

Trin 4: Løbekoden

Løbekoden
Løbekoden

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å displayet. Efter få sekunder viser det alle parametre. Når du har sørget for, at alt fungerer godt, kan du udvikle nogle mere interessante.

Trin 5: Udnyttelse i praktisk 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

Håber dette projekt inspirerer til yderligere eksperimenter. At lave en mere sofistikeret vejrstation kan involvere nogle flere sensorer som regnmåler, lyssensor, vindmåler (vindhastighed) osv. Du kan tilføje dem og ændre koden. Vi har en video -tutorial på YouTube, der har den grundlæggende funktion af I²C -sensoren med Rasp Pi. Det er virkelig fantastisk at se resultaterne og arbejdet med I²C -kommunikationen. Tjek det også. Hav det sjovt 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: