Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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) < + 2 )>> 2    X1 = AC3 * B6>> 13    X2 = (B1 * B62)>> 16    X3 = ((X1 + X2) + 2 )>> 2    B4 = (AC4 * (X3 + 32768 ))>> 15    B7 = (UP - B3) * ( 50000 >> OVERSAMPLE)    P = (B7 * 2 ) / B4    X1 = (P>> 8 ) * (P>> 8 )    X1 = (X1 * 3038 )>> 16    X2 = ( - 7357 * P)>> 16    druk = P + ((X1 + X2 + 3791 )>> 4 )    retour (temperatuur / 10.0 ,druk / 100.0 ) def main():         (chip_id, chip_version) = readBmp180Id()    afdrukken "Chip-ID     :" , chip_id    afdrukken "Versie     :" , chip_version    afdrukken       (temperatuur,druk) = readBmp180()    afdrukken "Temperatuur:" , temperatuur, "C"    afdrukken "Druk    :" , druk, "mbar"    if __name__ = = "__main__" :     main()

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

  1. Infineon:ultrakleine luchtdruksensor
  2. Infineon lanceert zeer nauwkeurige digitale Turbo MAP-sensor
  3. Fundamenten van digitale magnetische sensoren
  4. Ontwerpkit meet bloeddruk met optische sensor
  5. Barometrische druksensor biedt verhoogde nauwkeurigheid
  6. Raspberry Pi Temperature Logger
  7. Raspberry Pi 1-draads digitale thermometersensor (DS18B20)
  8. Raspberry Pi digitale Hall-sensor in JAVA
  9. Digitale lichtsensor
  10. Draagbare druksensor van vloeibaar metaal
  11. Wat is een piëzoresistieve sensor?