Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Цифровой датчик барометрического давления BMP180 I2C

Устройство BMP180 представляет собой цифровой датчик атмосферного давления. Это доступно в небольшом модуле, который обеспечивает доступ к датчику через интерфейс I2C. Это позволяет нам легко подключить его к Raspberry Pi с минимумом проводки.

Мой модуль представляет собой небольшую печатную плату размером 15x13 мм с 5-контактным разъемом. Порядок контактов может отличаться на других модулях, поэтому следите за этикетками, чтобы подключить правильные провода от Pi.

BMP180 производится Bosch, и официальное техническое описание BMP180 включает все технические детали.

Настроить интерфейс I2C

Чтобы использовать этот модуль, вы должны включить интерфейс I2C на Raspberry Pi, поскольку он не включен по умолчанию. Это довольно простой процесс, описанный в моем руководстве «Включение интерфейса I2C на Raspberry Pi».

Подключение оборудования

В таблице ниже показано, как модуль подключается к GPIO-заголовку Raspberyr Pi (P1). См. Схему в моем руководстве по заголовку GPIO.

Плата модуля Desc Контакты заголовка GPIO
VCC 3,3 В P1-01
GND Земля P1-06
SCL I2C SCL P1-05
SDA I2C SDA P1-03
3,3 В - -

Вот схема макета. Если вы подключаете четыре контакта модуля напрямую к Pi, вам понадобится только четыре провода типа мама-мама.

На макетной схеме используется пользовательская часть, которую я определил во Fritzing. Доступны и другие модули с другим расположением выводов, поэтому убедитесь, что вы подключаете правильные выводы к Pi, если ваш вывод отличается от показанного в этом руководстве.

Когда устройство подключено и Pi включен, команда «i2cdetect» должна показать устройство с адресом 0x77.

Пример скрипта Python

Вот пример сценария Python для считывания данных о давлении и температуре с датчика:

<Таблица граница ="0" CELLSPACING ="0" CELLPADDING ="0"> 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 #! / usr / bin / python импорт smbus импорт время из ctypes импорт c_short УСТРОЙСТВО = 0x77 # I2C-адрес устройства по умолчанию # bus =smbus.SMBus (0) # Rev 1 Pi использует 0 автобус = smbus.SMBus ( 1 ) # Rev 2 Pi использует 1 def convertToString (data): # Простая функция для преобразования двоичных данных в # строка возврат str ((данные [ 1 ] + ( 256 * данные [ 0 ])) / 1,2 ) def getShort (данные, индекс): # вернуть два байта из данных как 16-битное значение со знаком возврат c_short ((data [index] << 8 ) + данные [индекс + 1 ]). значение def getUshort (данные, индекс): # вернуть два байта из данных как 16-битное значение без знака возврат (данные [индекс] << 8 ) + данные [индекс + 1 ] def readBmp180Id (addr = УСТРОЙСТВО): # Зарегистрируйте адрес REG_ID = 0xD0 (chip_id, chip_version) = bus.read_i2c_block_data (addr, REG_ID, 2 ) возврат (chip_id, chip_version) def readBmp180 (addr = УСТРОЙСТВО): # Зарегистрируйте адреса REG_CALIB = 0xAA REG_MEAS = 0xF4 REG_MSB = 0xF6 REG_LSB = 0xF7 # Адрес контрольного регистра CRV_TEMP = 0x2E CRV_PRES = 0x34 # Настройка передискретизации НАДПИСЬ = 3 # 0–3 # Прочитать данные калибровки # Чтение данных калибровки из EEPROM cal = bus.read_i2c_block_data (addr, REG_CALIB, 22 ) # Преобразование байтовых данных в словарные значения 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 ) МБ = getShort (cal, 16 ) MC = getShort (cal, 18 ) MD = getShort (cal, 20 ) # Считать температуру 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 # Давление при чтении 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 ) ВВЕРХ = ((msb << 16 ) + (lsb << 8 ) + xsb)>> ( 8 - OVERSAMPLE) # Уточнить температуру X1 = ((UT - AC6) * AC5)>> 15 X2 = (MC << 11 ) / (X1 + MD) B5 = X1 + X2 температура = (B5 + 8 )>> 4 # Уточнить давление 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 = (ВВЕРХ - B3) * ( 50000 >> OVERSAMPLE) P = (B7 * 2 ) / B4 X1 = (P>> 8 ) * (P>> 8 ) X1 = (X1 * 3038 )>> 16 X2 = ( - 7357 * P)>> 16 давление = P + ((X1 + X2 + 3791 )>> 4 ) возврат (температура / 10.0 , давление / 100.0 ) def main (): (chip_id, chip_version) = readBmp180Id () печать "Chip ID:" , chip_id печать "Версия:" , chip_version печать (температура, давление) = readBmp180 () печать "Температура:" , температура, "C" печать "Давление:" , давление, "mbar" если __ name__ = = "__ main__" : main ()

Рекомендуется загрузить этот скрипт прямо на свой Pi, используя следующую команду:

 wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py 

или воспользуйтесь этой ссылкой в ​​браузере.

Для его запуска вы можете использовать следующую команду:

Подробнее:Цифровой датчик атмосферного давления BMP180 I2C


Производственный процесс

  1. Infineon:сверхмалый датчик атмосферного давления
  2. Infineon запускает высокоточный цифровой датчик Turbo MAP
  3. Основы цифровых магнитных датчиков
  4. Конструкторский комплект для измерения артериального давления с помощью оптического датчика
  5. Датчик атмосферного давления обеспечивает повышенную точность
  6. Регистратор температуры Raspberry Pi
  7. Цифровой датчик термометра Raspberry Pi 1-Wire (DS18B20)
  8. Цифровой датчик Холла Raspberry Pi в JAVA
  9. Цифровой датчик освещенности
  10. Износостойкий датчик давления из жидкого металла