Digitale Barometer (BMP280)

Bosch heeft een prachtige sensor beschikbaar, de BMP280, die relatieve vochtigheid, barometrische druk en omgevingstemperatuur meet. Deze sensor is geweldig voor alle soorten weerwaarneming en kan worden gebruikt met zowel I2C als SPI. De afmetingen van de sensor zijn 2.5 x 2.5 mm.

Deze precisiesensor van Bosch is de beste en goedkoopste oplossing voor het meten van de barometerdruk met ± 1 hPa absolute nauwkeurigheid en temperatuur met nauwkeurigheid van ± 1,0 °C. Omdat de druk verandert met de hoogte en de drukmetingen zo goed zijn, kun je deze ook gebruiken als een hoogtemeter met een nauwkeurigheid van ± 1 meter.

Specificaties
– Drukbereik: 300 ~ 1100hPa (hoogte 9000 m ~ – 500 m)
– Werkspanning: 1,71 – 3,6 VDC
– Laag stroomverbruik: 4μA
– Hoge precisie: bij een energiebesparende modus is de resolutie 0.06hPa (0.5 meter)
– Temperatuur output
– Communicatie-interface: I2C of SPI

De module komt in meerdere vormen voor. Hieronder zie je twee verschillende uitvoeringen waarbij de pin aanduiding van de blauwe versie pas echt duidelijk wordt als je de paarse ernaast zet.

Aansluitschema
De module wordt als volgt met de Raspberry Pi verbonden.

Achtergrond
Hieronder wat achtergrond informatie van de signaalaansluitingen van de veelzijdige module.

Voedingsspanning
– VCC: voedingspin. De werkspanning voor de chip is 1,71-3,6V. Aangezien de module een spanningsregelaar van 3,3 volt integreert heeft, kan de voeding 3,3 V of 5 V zijn.
– GND: gemeenschappelijke basis voor vermogen en logica. BMP280 ondersteunt I2C- en SPI-communicatie. De module bevat beide poorten. Als je een eenvoudig circuit wil aansluiten, kun je de I2C-poort gebruiken. Wil je meerdere sensoren aansluiten, kun je het beste de SPI-poort gebruiken, dit voorkomt I2C-adres conflicten.

I2C-interface
De I2C-interface gebruikt de volgende pinnen:
– SCK: seriële klok (SCL)
– SDI: data (SDA)
– SDO: het I2C-adres bepaalt of de pin gebruikt wordt. Als SDO verbinding maakt met GND (0), is het adres 0x76, als het wordt verbonden met het Digital Interface supply VDDIO (1), is het adres 0x77.
-CSB: moet zijn aangesloten op VDDIO om de I2C-interface te selecteren.

SPI-interface
De SPI-interface gebruikt de volgende pinnen
– CSB: chip select, actief laag en heeft een geïntegreerde pull-up-weerstand
– SCK: seriële klok
– SDI: seriële gegevensinvoer; data invoer / uitvoer in 3-draadsmodus
– SDO: seriële gegevensuitvoer; hi-Z in 3-draadsmodus

I2C inschakelen
Om de module te kunnen gebruiken dien je I2C voor de Raspberry Pi in te schakelen als je dat nog niet hebt gedaan. De eenvoudigste manier is dit via de desktop te doen. Klik op het Start Menu en op Voorkeuren en Raspberry Pi-configuratie programma.

Raspi-config
Natuurlijk kun je de interface ook activeren met de SSH verbinding, zoals Putty. Type hiervoor achter de prompt: sudo raspi-config. Ga vervolgens naar Interfacing Options en selecteer I2C en vervolgens <Ja> en OK. Ga naar <FINISH> om het venster te sluiten. Reboot vervolgens de Raspberry Pi om de interfaces te activeren.

Kijk of de module door de Raspberry Pi gezien wordt met: i2cdetect -y 1

Als het goed is verschijnt de volgende tabel met daarin de interface op adres 76:

Download het BME280 Script
Matt Hawkins heeft weer een juweeltje geleverd die we kunnen gebruiken. Om het BME280 Python-script uit zijn Bitbucket-repository te downloaden, kun je het volgende commando gebruiken:

wget -O bme280.py http://bit.ly/bme280py

Het script gaat ervan uit dat het moduleadres 0x76 is. Je kunt dit wijzigen door de DEVICE-variabele in bme280.py met de teksteditor te bewerken.

Voer het script uit met:
python bme280.py

Als het goed is zie je het volgende verschijnen:

Opnemen in jouw eigen script
Je kunt de hoofdfunctie in het script kunnen wijzigen, maar misschien wil je deze in je eigen script opnemen. Hiertoe importeer je het script en verwijs je vervolgens naar de readBME280ID– en readBME280All-functies, zoals in het onderstaande voorbeeld:

import bme280
(chip_id, chip_version) = bme280.readBME280ID()
print "Chip ID :", chip_id
print "Version :", chip_version
temperature,pressure,humidity = bme280.readBME280All()
print "Temperature : ", temperature, "C"
print "Pressure : ", pressure, "hPa"
print "Humidity : ", humidity, "%"

De rest is aan je verbeelding.

Python script

from Adafruit_BME280 import *
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
degrees = sensor.read_temperature()
pascals = sensor.read_pressure()
hectopascals = pascals / 100
humidity = sensor.read_humidity()
print 'Temp = {0:0.3f} deg C'.format(degrees)
print 'Pressure = {0:0.2f} hPa'.format(hectopascals)
print 'Humidity = {0:0.2f} %'.format(humidity)

Have A Nice Day!