BMP180 I2C Digitaler barometrischer Drucksensor
Das Gerät BMP180 ist ein digitaler barometrischer Drucksensor. Diese steht auf einem kleinen Modul zur Verfügung, das den Zugriff auf den Sensor über die I2C-Schnittstelle ermöglicht. Dadurch können wir es mit einem Minimum an Verkabelung einfach an den Raspberry Pi anschließen.
Mein Modul ist eine kleine Platine mit den Maßen 15x13mm mit einem 5-Pin-Header. Die Reihenfolge der Pins kann bei anderen Modulen variieren, also behalte die Etiketten im Auge, damit du die richtigen Drähte vom Pi anschließt.
Der BMP180 wird von Bosch hergestellt und das offizielle Datenblatt des BMP180 enthält alle technischen Details.
I2C-Schnittstelle konfigurieren
Um dieses Modul verwenden zu können, müssen Sie die I2C-Schnittstelle auf dem Raspberry Pi aktivieren, da sie standardmäßig nicht aktiviert ist. Dies ist ein ziemlich einfacher Vorgang und wird in meinem Tutorial zum Aktivieren der I2C-Schnittstelle auf dem Raspberry Pi beschrieben.
Hardware anschließen
Die Tabelle unten zeigt, wie das Modul mit dem GPIO-Header (P1) des Raspberyr Pi verbunden ist. Ein Diagramm finden Sie in meiner GPIO-Header-Anleitung.
Modul PCB | Beschreibung | GPIO-Header-Pins |
---|---|---|
VCC | 3,3V | P1-01 |
GND | Boden | P1-06 |
SCL | I2C-SCL | P1-05 |
SDA | I2C-SDA | P1-03 |
3,3 V | – | – |
Hier ist ein Diagramm eines Steckbrett-Setups. Wenn Sie die vier Pins des Moduls direkt mit dem Pi verbinden, benötigen Sie nur vier weibliche-weibliche Drähte.
Das Steckbrettdiagramm verwendet einen benutzerdefinierten Teil, den ich in Fritzing definiert habe. Es sind auch andere Module mit unterschiedlichen Pin-Anordnungen verfügbar. Stellen Sie also sicher, dass Sie die richtigen Pins an den Pi anschließen, wenn sich Ihr Pin von dem in diesem Tutorial gezeigten unterscheidet.
Wenn das Gerät angeschlossen und der Pi eingeschaltet ist, sollte der Befehl „i2cdetect“ das Gerät mit der Adresse 0x77 anzeigen.
Beispiel-Python-Skript
Hier ist ein Python-Beispielskript zum Lesen von Druck- und Temperaturdaten vom Sensor:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606616263646566768697071720879691091 | #!/usr/bin/python importieren smbus importieren Zeit von ctypes importieren c_short GERÄT = 0x77 # Standard-I2C-Adresse des Geräts #bus =smbus.SMBus(0) # Rev 1 Pi verwendet 0 Bus = smbus.SMBus( 1 ) # Rev 2 Pi verwendet 1 def convertToString(data): # Einfache Funktion zum Konvertieren von Binärdaten in # eine Zeichenfolge zurück str ((Daten[ 1 ] + ( 256 * Daten[ 0 ])) / 1.2 ) def getShort(data, index): # gibt zwei Byte aus Daten als 16-Bit-Wert mit Vorzeichen zurück zurück c_short((data[index]<< 8 ) + data[index + 1 ]).value def getUshort(data, index): # gibt zwei Byte aus Daten als 16-Bit-Wert ohne Vorzeichen zurück zurück (data[index]<< 8 ) + data[index + 1 ] def readBmp180Id(addr = GERÄT): # Adresse registrieren REG_ID = 0xD0 (chip_id, chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2 ) zurück (chip_id, chip_version) def readBmp180(addr = GERÄT): # Adressen registrieren REG_CALIB = 0xAA REG_MEAS = 0xF4 REG_MSB = 0xF6 REG_LSB = 0xF7 # Kontrollregisteradresse CRV_TEMP = 0x2E CRV_PRES = 0x34 # Oversample-Einstellung ÜBERSAMPLE = 3 # 0 - 3 # Kalibrierdaten lesen # Kalibrierdaten aus dem EEPROM lesen cal = bus.read_i2c_block_data(addr, REG_CALIB, 22 ) # Byte-Daten in Wortwerte umwandeln AC1 = getShort(cal, 0 ) AC2 = getShort(cal, 2 ) AC3 = getShort(cal, 4 ) AC4 = getUshort(cal, 6 ) AC5 = getUshort(cal, 8 ) AC6 = getUshort(cal, 10 ) B1 = getShort(cal, 12 ) B2 = getShort(cal, 14 ) MB = getShort(cal, 16 ) MC = getShort(cal, 18 ) MD = getShort(cal, 20 ) # Temperatur lesen bus.write_byte_data(addr, REG_MEAS, CRV_TEMP) time.sleep( 0,005 ) (msb, lsb) = bus.read_i2c_block_data(addr, REG_MSB, 2 ) UT = (msb << 8 ) + lsb # Lesedruck bus.write_byte_data(addr, REG_MEAS, CRV_PRES + (OVERSAMPLE << 6 )) time.sleep( 0.04 ) (msb, lsb, xsb) = bus.read_i2c_block_data(addr, REG_MSB, 3 ) UP = ((msb << 16 ) + (lsb << 8 ) + xsb)>> ( 8 - ÜBERSAMPLE) # Temperatur verfeinern X1 = ((UT - AC6) * AC5)>> 15 X2 = (MC << 11 ) / (X1 + MD) B5 = X1 + X2 Temperatur = (B5 + 8 )>> 4 # Druck verfeinern B6 = B5 - 4000 B62 = B6 * B6>> 12 X1 = (B2 * B62)>> 11 X2 = AC2 * B6>> 11 X3 = X1 + X2 B3 = (((AC1 * 4 + X3) < |
Es wird empfohlen, dieses Skript mit dem folgenden Befehl direkt auf Ihren Pi herunterzuladen:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
oder verwenden Sie diesen Link in einem Browser.
Um es auszuführen, können Sie den folgenden Befehl verwenden:
Für weitere Details:BMP180 I2C Digitaler barometrischer Drucksensor
Herstellungsprozess
- Infineon:ultrakleiner Luftdrucksensor
- Infineon bringt hochpräzisen digitalen Turbo-MAP-Sensor auf den Markt
- Grundlagen digitaler Magnetsensoren
- Design-Kit misst den Blutdruck mit optischem Sensor
- Luftdrucksensor bietet erhöhte Genauigkeit
- Himbeer-Pi-Temperaturlogger
- Raspberry Pi 1-Draht digitaler Thermometersensor (DS18B20)
- Raspberry Pi digitaler Hall-Sensor in JAVA
- Digitaler Lichtsensor
- Tragbarer Drucksensor aus Flüssigmetall