BMP180 I2C digitale luchtdruksensor
Het BMP180-apparaat is een digitale luchtdruksensor. Deze is beschikbaar op een kleine module die via de I2C-interface toegang geeft tot de sensor. Hierdoor kunnen we hem eenvoudig en met een minimum aan bedrading aansluiten op de Raspberry Pi.
Mijn module is een kleine pcb van 15x13mm met een 5-pins header. De volgorde van de pinnen kan bij andere modules verschillen, dus houd de labels in de gaten zodat je de juiste draden van de Pi aansluit.
De BMP180 is gemaakt door Bosch en de officiële BMP180-datasheet bevat alle technische details.
I2C-interface configureren
Om deze module te gebruiken, moet u de I2C-interface op de Raspberry Pi inschakelen, aangezien deze standaard niet is ingeschakeld. Dit is een vrij eenvoudig proces en wordt beschreven in mijn tutorial De I2C-interface inschakelen op de Raspberry Pi.
Hardware aansluiten
De onderstaande tabel laat zien hoe de module is aangesloten op de GPIO-header (P1) van de Raspberyr Pi. Raadpleeg mijn GPIO-headergids voor een diagram.
Module PCB | Beslis | GPIO Header Pins |
---|---|---|
VCC | 3,3V | P1-01 |
GND | Grond | P1-06 |
SCL | I2C SCL | P1-05 |
SDA | I2C-SDA | P1-03 |
3,3V | – | – |
Hier is een diagram van een breadboard-opstelling. Als je de vier pinnen van de module rechtstreeks op de Pi aansluit, heb je alleen vier vrouwelijke-vrouwelijke draden nodig.
Het breadboard-diagram gebruikt een aangepast onderdeel dat ik in Fritzing heb gedefinieerd. Er zijn andere modules beschikbaar die verschillende pin-arrangementen hebben, dus zorg ervoor dat je de juiste pinnen op de Pi aansluit als die van jou anders is dan die in deze tutorial.
Als het apparaat is aangesloten en de Pi is ingeschakeld, moet de opdracht "i2cdetect" het apparaat met adres 0x77 tonen.
Voorbeeld Python-script
Hier is een voorbeeld van een Python-script om druk- en temperatuurgegevens van de sensor te lezen:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656747869707981728711861061069797079817287 | #!/usr/bin/python importeren smbus importeren tijd van ctypes importeren c_short APPARAAT = 0x77 # Standaard I2C-adres van het apparaat #bus =smbus.SMBus(0) # Rev 1 Pi gebruikt 0 bus = smbus.SMBus( 1 ) # Rev 2 Pi gebruikt 1 def convertToString(data): # Eenvoudige functie om binaire gegevens om te zetten in # a string retour str ((data[ 1 ] + ( 256 * data[ 0 ])) / 1.2 ) def getShort(data, index): # retourneer twee bytes van gegevens als een ondertekende 16-bits waarde retour c_short((data[index]<< 8 ) + data[index + 1 ]).waarde def getUshort(data, index): # retourneer twee bytes van gegevens als een niet-ondertekende 16-bits waarde retour (data[index]<< 8 ) + data[index + 1 ] def readBmp180Id(addr = APPARAAT): # Registeradres REG_ID = 0xD0 (chip_id, chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2 ) retour (chip_id, chip_version) def readBmp180(addr = APPARAAT): # Registeradressen REG_CALIB = 0xAA REG_MEAS = 0xF4 REG_MSB = 0xF6 REG_LSB = 0xF7 # Control Register Address CRV_TEMP = 0x2E CRV_PRES = 0x34 # Oversample-instelling OVERSAMPLE = 3 # 0 - 3 # Kalibratiegegevens lezen # Lees kalibratiegegevens uit EEPROM cal = bus.read_i2c_block_data(addr, REG_CALIB, 22 ) # Converteer bytegegevens naar woordwaarden 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 ) # Lees temperatuur 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 # Leesdruk 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 - OVERSAMPLE) # Temperatuur verfijnen X1 = ((UT - AC6) * AC5)>> 15 X2 = (MC << 11 ) / (X1 + MD) B5 = X1 + X2 temperatuur = (B5 + 8 )>> 4 # Druk verfijnen B6 = B5 - 4000 B62 = B6 * B6>> 12 X1 = (B2 * B62)>> 11 X2 = AC2 * B6>> 11 X3 = X1 + X2 B3 = (((AC1 * 4 + X3) < |
Het wordt aanbevolen dat u dit script rechtstreeks naar uw Pi downloadt met behulp van de volgende opdracht:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
of gebruik deze link in een browser.
Om het uit te voeren kunt u het volgende commando gebruiken:
Voor meer details:BMP180 I2C digitale luchtdruksensor
Productieproces
- Infineon:ultrakleine luchtdruksensor
- Infineon lanceert zeer nauwkeurige digitale Turbo MAP-sensor
- Fundamenten van digitale magnetische sensoren
- Ontwerpkit meet bloeddruk met optische sensor
- Barometrische druksensor biedt verhoogde nauwkeurigheid
- Raspberry Pi Temperature Logger
- Raspberry Pi 1-draads digitale thermometersensor (DS18B20)
- Raspberry Pi digitale Hall-sensor in JAVA
- Digitale lichtsensor
- Draagbare druksensor van vloeibaar metaal
- Wat is een piëzoresistieve sensor?