Inhoudsopgave:

Weerstation met Raspberry Pi met BME280 in Python - Ajarnpa
Weerstation met Raspberry Pi met BME280 in Python - Ajarnpa

Video: Weerstation met Raspberry Pi met BME280 in Python - Ajarnpa

Video: Weerstation met Raspberry Pi met BME280 in Python - Ajarnpa
Video: #17 Mise en place de la station météo domotisée -- partie 2 -- 2024, Juli-
Anonim
Image
Image
Dwingende apparatuurrekening
Dwingende apparatuurrekening

is maith an scéalaí an aimir (The Weather is a Good Storyteller)

Met de opwarming van de aarde en de klimaatverandering, wordt het wereldwijde weerpatroon in onze wereld grillig, wat leidt tot een aantal weergerelateerde natuurrampen (droogte, extreme temperaturen, overstromingen, stormen en bosbranden), lijkt een weerstation een noodzakelijke noodzaak te zijn. kwaad in huis. Je leert veel over basiselektronica van een weerstationproject met behulp van een aantal goedkope onderdelen en sensoren. Het is vrij eenvoudig in te stellen en in een mum van tijd heb je het.

Stap 1: Dwingende apparatuurrekening

Dwingende apparatuurrekening
Dwingende apparatuurrekening
Dwingende apparatuurrekening
Dwingende apparatuurrekening
Dwingende apparatuurrekening
Dwingende apparatuurrekening

1. Een Raspberry Pi

Krijg een Raspberry Pi-bord in handen. Raspberry Pi is een door Linux aangedreven computer met één bord. De Raspberry Pi is echt goedkoop, klein en veelzijdig gebouwd van een toegankelijke en functionele computer voor leerlingen om de basisprincipes van programmeren en softwareontwikkeling te oefenen.

2. I2C-schild voor Raspberry Pi

De INPI2 (I2C-adapter) biedt de Raspberry Pi 2/3 een I²C-poort voor gebruik met meerdere I2C-apparaten. Het is beschikbaar in de DCUBE Store.

3. Digitale vochtigheids-, druk- en temperatuursensor, BME280

De BME280 is een vochtigheids-, druk- en temperatuursensor met een snelle responstijd en een hoge algehele nauwkeurigheid. We hebben deze sensor gekocht bij DCUBE Store.

4. I2C-verbindingskabel

We gebruikten de I²C-kabel die hier verkrijgbaar is DCUBE Store.

5. Micro-USB-kabel

De micro-USB-kabel Voeding is een ideale keuze voor het voeden van de Raspberry Pi.

6. Internettoegang interpreteren via Ethernet-kabel/WiFi-adapter

Internettoegang kan worden ingeschakeld via een Ethernet-kabel die is aangesloten op een lokaal netwerk en internet. Als alternatief kunt u verbinding maken met een draadloos netwerk met behulp van een draadloze USB-dongle, waarvoor configuratie vereist is.

7. HDMI-kabel (beeldscherm- en verbindingskabel)

Elke HDMI/DVI-monitor en elke tv zou moeten werken als een display voor de Pi. Als alternatief kunt u op afstand toegang krijgen tot de Pi via SSH, zodat u geen monitor meer nodig heeft (alleen geavanceerde gebruikers).

Stap 2: Hardwareverbindingen voor circuit

Hardware-aansluitingen voor circuit
Hardware-aansluitingen voor circuit
Hardware-aansluitingen voor circuit
Hardware-aansluitingen voor circuit

Maak het circuit volgens het getoonde schema. Over het algemeen zijn de verbindingen heel eenvoudig. Blijf kalm en volg de instructies en afbeeldingen hierboven, en u zou geen problemen moeten hebben. Tijdens het leren hebben we ons grondig verdiept in de basis van elektronica met betrekking tot hardware- en softwarekennis. Voor dit project wilden we een eenvoudig elektronicaschema maken. Elektronische schema's zijn als blauwdrukken. Maak een blauwdruk en volg het ontwerp nauwkeurig. Een paar basisconcepten van elektronica kunnen hierbij van pas komen!

Aansluiting van de Raspberry Pi en I2C Shield

Pak eerst de Raspberry Pi en plaats de I²C Shield erop. Druk zachtjes op het schild en we zijn klaar met deze stap, zo eenvoudig als taart (zie de foto).

Aansluiting van de Sensor en Raspberry Pi

Pak de sensor en sluit de I²C-kabel ermee aan. Zorg ervoor dat de I²C-uitgang ALTIJD wordt aangesloten op de I²C-ingang. Hetzelfde moet worden gevolgd voor de Raspberry Pi met het I²C-schild erop gemonteerd, de GPIO-pinnen. We raden het gebruik van de I²C-kabels aan, omdat het de noodzaak van het lezen van pinouts, solderen en malaise veroorzaakt door zelfs de geringste slip-up teniet doet. Met deze eenvoudige plug-and-play-kabel kunt u eenvoudig kaarten installeren, verwisselen of meer kaarten aan een toepassing toevoegen.

Opmerking: de bruine draad moet altijd de massaverbinding (GND) volgen tussen de uitgang van het ene apparaat en de ingang van een ander apparaat

Internetverbinding is de sleutel

Je hebt hier twee keuzes. Ofwel U kunt de Raspberry Pi met het netwerk verbinden via een ethernetkabel of een USB naar WiFi-adapter gebruiken voor WIFI-connectiviteit. Hoe dan ook, zolang het is verbonden met internet, bent u gedekt.

Het circuit aanzetten

Steek de micro-USB-kabel in de stroomaansluiting van de Raspberry Pi. Opschieten en voila! Onze ploeg is informatie.

Verbinding met scherm

We kunnen de HDMI-kabel op een monitor of op een tv aansluiten. Bovendien hebben we toegang tot een Raspberry Pi zonder deze via externe toegang op een monitor aan te sluiten. SSH is een handig hulpmiddel voor veilige toegang op afstand. U kunt daarvoor ook de PUTTY-software gebruiken. Deze optie is voor gevorderde gebruikers, dus we zullen het hier niet in detail behandelen.

Het is een voordelige methode als u niet veel wilt uitgeven

Stap 3: Raspberry Pi programmeren in Python

Raspberry Pi programmeren in Python
Raspberry Pi programmeren in Python

De Python-code voor de Raspberry Pi en BME280-sensor. Het is beschikbaar in onze Github-repository.

Voordat u verder gaat met de code, moet u ervoor zorgen dat u de instructies in het Readme-bestand leest en uw Raspberry Pi volgens de code instelt. Met een beetje tijd bent u klaar voor de installatie. Een weerstation is een faciliteit, zowel op het land als op zee, met instrumenten en apparatuur voor het meten van atmosferische omstandigheden om informatie te verstrekken voor weersvoorspellingen en om het weer en klimaat te bestuderen.

De code ligt duidelijk voor je en is in de eenvoudigste vorm die je je kunt voorstellen en je zou geen problemen moeten hebben. Vraag nog steeds of er iets is (zelfs als je duizend dingen weet, vraag het nog steeds aan iemand die het weet).

Je kunt hier ook de werkende Python-code voor deze sensor kopiëren.

# Gedistribueerd met een vrije licentie. # Gebruik het zoals je wilt, winst of gratis, op voorwaarde dat het past in de licenties van de bijbehorende werken. # BME280 # Deze code is ontworpen om te werken met de BME280_I2CS I2C Mini Module die verkrijgbaar is via ControlEverything.com. #

import smbus

import tijd

# Krijg I2C-bus

bus = smbus. SMBus(1)

# BME280 adres, 0x76 (118)

# Lees gegevens terug van 0x88 (136), 24 bytes b1 = bus.read_i2c_block_data (0x76, 0x88, 24)

# Converteer de gegevens

# Temp coëfficiënten dig_T1 = b1[1] * 256 + b1[0] dig_T2 = b1[3] * 256 + b1[2] als dig_T2 > 32767: dig_T2 -= 65536 dig_T3 = b1[5] * 256 + b1[4] als dig_T3 > 32767: dig_T3 -= 65536

# Drukcoëfficiënten

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

# BME280 adres, 0x76 (118)

# Lees gegevens terug van 0xA1 (161), 1 byte dig_H1 = bus.read_byte_data (0x76, 0xA1)

# BME280 adres, 0x76 (118)

# Lees data terug van 0xE1(225), 7 bytes b1 = bus.read_i2c_block_data(0x76, 0xE1, 7)

# Converteer de gegevens

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

# BME280 adres, 0x76 (118)

# Selecteer controle vochtigheidsregister, 0xF2(242) # 0x01(01) Vochtigheid Oversampling = 1 bus.write_byte_data(0x76, 0xF2, 0x01) # BME280 adres, 0x76(118) # Selecteer Controle meetregister, 0xF4(244) # 0x27(39) Oversampling-snelheid van druk en temperatuur = 1 # Normale modus bus.write_byte_data (0x76, 0xF4, 0x27) # BME280-adres, 0x76 (118) # Select Configuration register, 0xF5 (245) # 0xA0(00) Stand-by-tijd = bus 1000 ms.write_byte_data(0x76, 0xF5, 0xA0)

tijd.slaap(0.5)

# BME280 adres, 0x76 (118)

# Lees data terug van 0xF7(247), 8 bytes # Druk MSB, Druk LSB, Druk xLSB, Temperatuur MSB, Temperatuur LSB # Temperatuur xLSB, Vochtigheid MSB, Vochtigheid LSB data = bus.read_i2c_block_data (0x76, 0xF7, 8)

# Converteer druk- en temperatuurgegevens naar 19-bits

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

# Converteer de vochtigheidsgegevens

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

# Berekeningen temperatuur offset

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) / 512,0 fTemp = cTemp * 1,8 + 32

# Drukcompensatieberekeningen

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

# Vochtigheidscompensatieberekeningen

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 + var_H3 / 67108864.0))) vochtigheid = var_H * (1,0 - dig_H1 * var_H / 524288,0) als vochtigheid > 100,0: vochtigheid = 100,0 elif vochtigheid < 0,0: vochtigheid = 0,0

# Gegevens uitvoeren naar scherm

print "Temperatuur in Celsius: %.2f C" %cTemp print "Temperatuur in Fahrenheit: %.2f F" %fTemp print "Druk: %.2f hPa" %druk print "Relatieve vochtigheid: %.2f %%" %vochtigheid

Stap 4: De hardloopcode

De hardloopcode
De hardloopcode

Download nu (of git pull) de code en open deze in de Raspberry Pi.

Voer de opdrachten uit om de code te compileren en te uploaden op de terminal en bekijk de uitvoer op het display. Na enkele seconden worden alle parameters weergegeven. Nadat je ervoor hebt gezorgd dat alles goed werkt, kun je nog meer interessante ontwikkelen.

Stap 5: Gebruik in de praktische wereld

De BME280 bereikt hoge prestaties in alle toepassingen die vochtigheids- en drukmeting vereisen. Deze opkomende toepassingen zijn Contextbewustzijn, b.v. Huiddetectie, detectie van kamerverandering, fitnessmonitoring / welzijn, waarschuwing met betrekking tot droogte of hoge temperaturen, meting van volume en luchtstroom, domoticaregeling, regeling van verwarming, ventilatie, airconditioning (HVAC), internet der dingen (IoT), GPS-verbetering (bijv. Time-to-First-Fix-verbetering, gegist bestek, hellingsdetectie), binnennavigatie (wijziging van vloerdetectie, liftdetectie), buitennavigatie, vrijetijds- en sporttoepassingen, weersvoorspelling en verticale snelheidsindicatie (stijgen/zinken Snelheid).

Stap 6: Conclusie

Ik hoop dat dit project inspireert tot verdere experimenten. Het maken van een meer geavanceerd weerstation kan wat meer sensoren omvatten, zoals regenmeter, lichtsensor, anemometer (windsnelheid) enz. Je kunt ze toevoegen en de code wijzigen. We hebben een video-tutorial op YouTube met de basiswerking van de I²C-sensor met Rasp Pi. Het is echt verbazingwekkend om de resultaten en werking van de I²C-communicatie te zien. Controleer het ook. Veel plezier met bouwen en leren! Laat ons weten wat je van deze instructable vindt. We zouden graag enkele verbeteringen aanbrengen indien nodig.

Aanbevolen: