Мазмуну:

BMP280 жана BME280 үчүн китепкана: 7 кадам
BMP280 жана BME280 үчүн китепкана: 7 кадам

Video: BMP280 жана BME280 үчүн китепкана: 7 кадам

Video: BMP280 жана BME280 үчүн китепкана: 7 кадам
Video: Lesson 34: Using MCP9808 Temperature Sensor with TM1637 screen | Arduino Step By Step Course 2024, Июль
Anonim
BMP280 жана BME280 үчүн китепкана
BMP280 жана BME280 үчүн китепкана
BMP280 жана BME280 үчүн китепкана
BMP280 жана BME280 үчүн китепкана
BMP280 жана BME280 үчүн китепкана
BMP280 жана BME280 үчүн китепкана

Киришүү

Мен бул китепкананы жазууну максат кылган жокмун. Бул BMP280ди колдонгон мен баштаган долбоордун кесепети катары "болду". Бул долбоор али бүтө элек, бирок китепкана башкалар менен бөлүшүүгө даяр деп ойлойм. Кийинчерээк мен BMP280дин басымына жана температурасына жөндөмдүүлүгүнө нымдуулукту өлчөөчү BME280ди колдонууга муктаж болдум. BME280 BMP280 менен "артка шайкеш келет", башкача айтканда, BME280ден басым менен температураны окуу үчүн керектүү болгон бардык регистрлер жана кадамдар BMP280 үчүн колдонулгандар менен бирдей. Нымдуулукту окуу үчүн керектүү кошумча регистрлер жана кадамдар бар, алар BME280 үчүн гана колдонулат. Бул суроо туулат, экөө үчүн бир китепкана же эки өзүнчө китепкана. Аппараттын эки түрү үчүн жабдуулар толугу менен алмаштырылат. Сатылып жаткан модулдардын көбү (мисалы, Ebay жана AliExpressте) BME/P280 деп белгиленген. Кайсы түр экенин билүү үчүн сенсордун өзүнө жазылган (кичине) жазууну карап көрүңүз же түзмөктүн идентификаторунун байтын текшериңиз. Мен жалгыз китепканага барууну чечтим. Макул болуп калды окшойт.

Пикирлер, айрыкча жакшыртуу боюнча ар кандай сунуштар ыраазы болот.

Китепкананын өзгөчөлүктөрү жана мүмкүнчүлүктөрү

Китепкана-бул программистке Аппараттын Интерфейсин (API) камсыз кылган, анын бардык майда-чүйдөсүнө чейин сөзсүз түрдө аппараттын мүмкүнчүлүктөрүн ишке ашыруусу. Каалооңуз боюнча, API баштоо үчүн жөнөкөй талаптары бар башталгыч үчүн оңой болушу керек, ошол эле учурда түзмөктүн мүмкүнчүлүктөрүн толук пайдаланууну камсыз кылат. Каалоо китепкана түзмөк өндүрүүчүнүн конкреттүү көрсөтмөлөрүнө, ошондой эле жалпы программалык камсыздоонун жакшы тажрыйбасына ылайык келиши керек. Мен мунун баарына жетишүүгө аракет кылдым. BMP280 менен баштаганда, мен ал үчүн 3 башка китепкананы таптым: Adafruit_BMP280; Seeed_BMP280; жана бири түзмөк өндүрүүчүсүнөн BMP280 деп аталат. Adafruit да, Seeed дагы кеңири мүмкүнчүлүктөрдү бербеди, бирок алар жакшы иштешти жана негизги колдонмолордо колдонуу оңой эле. Мен түзмөк өндүрүүчүсү (Bosch Sensortec) чыгарганды кантип колдонуу керектигин түшүнө алган жокмун. Бул менин кемчилигим болушу мүмкүн, тескерисинче. Бирок китепкана башка экөөнө караганда алда канча татаалыраак болчу, мен эч кандай көрсөтмөлөрдү же мисалдарды таба алган жокмун (кийин мисалдар "bmp280_support.c" файлында болгонун байкадым, бирок булар мага өзгөчө пайдалуу болгон жок).

Бул факторлордун натыйжасында BMP280 үчүн өз китепканамды жазууну чечтим.

BME280 үчүн китепкананын абалын карап, мен Adafruit_BME280, Seed_BME280 жана Embedded Adventures тарабынан жазылган башка BME280_MOD-1022 китепканаларын таптым. Алардын эч бири BME280ди колдонууга жөндөмдүү китепканада BMP280 үчүн функцияларды бириктирген эмес. Түзмөк жана анын башкаруучу микропроцессору уктап жатканда, алардын эч бири түзмөктөрдүн бир нече битти сактоо жөндөмүн ачык колдогон эмес (бул жөндөм маалымат барагынан көрүнүп турат жана мен жазган жана сүрөттөгөн китепканада колдоого алынган).

Биргелешкен китепкана BME280дин бардык мүмкүнчүлүктөрүн колдоого ээ болушу керек, бирок BMP280 менен колдонулганда, ал колдонулбаган функцияларга эч кандай кошумча чыгым келтирбеши керек. Биргелешкен китепкананын артыкчылыктары башкарууга аз китепкана файлдарын, бир эле долбоордо ар кандай түзмөктөрдү оңой аралаштырууну жана тейлөө же жаңылоо үчүн жөнөкөйлөштүрүлгөн өзгөртүүлөрдү камтыйт, аларды эки эмес, бир жерде жасоо керек. Булардын баары кичинекей, атүгүл анча маанилүү эмес, бирок…

Түзмөктүн мүмкүнчүлүктөрү

BMP280 жана BME280-5мм чарчы жана бийиктиги 1 мм болгон жер үстүнө орнотулган түзүлүштөр. 8 интерфейс аянтчасы бар, анын ичинде 2 өзүнчө күч киргизүү подкладкасы жана эки жер асты. Алар eBayде 4 же 6 казыгы бар модуль катары жеткиликтүү. 4-пин-модулда туруктуу I2C дареги бар жана SPI протоколун колдонуу үчүн конфигурацияланбайт.

6-пин модулу же жылаңач түзмөк I2C же SPI протоколдору менен колдонулушу мүмкүн. I2C режиминде, ал SDO пинди жерге (базалык дарек = 0x76 үчүн) же Vdd (базалык дарек үчүн +1 = 0x77) туташтыруу аркылуу жетишилген эки башка дарекке ээ болушу мүмкүн. SPI режиминде ал кадимкидей 1 саатты, 2 маалыматты (ар бир багыт үчүн) жана түзмөктү тандоо пинин (CS) камтыйт.

Мен жазган жана сүрөттөгөн китепкана I2Cди гана колдойт. Adafruit_BMP280 жана BME_MOD-1022 китепканалары i2C жана SPIди колдойт.

Китепкананы бул жерден көчүрүп алсаңыз болот:

github.com/farmerkeith/BMP280-library

1 -кадам: Аппаратты орнотуу

Аппаратты орнотуу
Аппаратты орнотуу

Китепкана пайдалуу боло электе BMP280ге микроконтроллерди туташтыруу керек (же кааласаңыз экөөнө).

Мен WeMos D1 mini pro колдонгом, андыктан анын байланыштарын көрсөтөм. Башка микроконтроллерлер окшош болот, сиз жөн гана SDA жана SCL казыктарын туура туташтырышыңыз керек.

WeMos D1 mini pro болгон учурда, байланыштар төмөнкүлөр:

Функция WeMos пин BMP280 пин ноталары

SDA D2 SDA SCL D1 SCL Vdd 3V3 Vin Номиналдуу 3.3V Ground GND Даректи башкаруу SDO Ground же Vdd I2C CSB Vddди тандап алат (GND SPIди тандайт)

Кээ бир MP280 модулдарындагы SDO пини SDD деп белгиленет, жана Vdd пини VCC деп белгилениши мүмкүн. Эскертүү: SDA жана SCL линиялары линия менен Вин пининин ортосунда тартылуучу резисторлорго ээ болушу керек. Адатта 4.7K мааниси жакшы болушу керек. Кээ бир BMP280 жана BME280 модулдарында модулга киргизилген 10K тартма каршылыгы бар (бул жакшы практика эмес, анткени I2C автобусуна бир нече түзмөктү коюу ашыкча жүктөлүшү мүмкүн). Бирок ар бири 10K каршылыгы бар 2 BME/P280 модулун колдонуу практикада эч кандай көйгөй жаратпашы керек, анткени бир эле автобуста башка түзүлүштөр да жок, каршылыгы бар.

Аппаратты туташтыргандан кийин, сиз бул жерден таба турган I2CScan_ID эскизин иштетүү менен түзмөгүңүздүн BMP280 же BME280 экендигин текшере аласыз:

Ошондой эле, сизде BMP280 же BME280 бар же жок экенин аппараттын өзүнө карап текшере аласыз. Бул үчүн санарип микроскопту колдонууну зарыл деп таптым, бирок эгерде сиздин көзүңүз абдан жакшы болсо, сиз аны эч кандай жардамсыз эле жасай аласыз. Түзмөктүн корпусуна эки сызык басуу бар. Ачкыч BMP280 түзмөктөрүндө "К" жана BME280 түзмөктөрүндө "U" болгон экинчи саптагы биринчи тамга.

2 -кадам: Китепкана тарабынан берилген APIлер

Китепкана тарабынан берилген APIлер
Китепкана тарабынан берилген APIлер
Китепкана тарабынан берилген APIлер
Китепкана тарабынан берилген APIлер

Китепкана эскизге кирет

Китепкана билдирмени колдонуу менен стандарттык түрдө эскизге киргизилген

#"farmerkeith_BMP280.h" кошуу

Бул билдирүү setup () функциясы башталганга чейин эскиздин биринчи бөлүгүнө киргизилиши керек.

BME же BMP программалык объектин түзүү

BMP280 программалык объектин түзүү үчүн 3 деңгээл бар. Эң жөнөкөйү - жөн эле

bme280 objectName; же bmp280 objectName;

мисалы, BMP280 bmp0;

Бул 0x76 демейки дареги менен программалык объектти түзөт (б.а. жерге туташкан SDO үчүн).

BME280 же BMP280 программалык объектин түзүүнүн кийинки деңгээли төмөнкүдөй 0 же 1 параметрине ээ:

bme280 objectNameA (0);

bmp280 objectNameB (1);

Параметр (0 же 1) I2C базалык дарегине кошулат, андыктан эки BME280 же BMP280 түзмөгүн ошол эле I2C автобусунда (ар бирин кошкондо) колдонууга болот.

BME же BMP280 программалык объектин түзүү үчүнчү деңгээл эки параметрге ээ. 0 же 1 болгон биринчи параметр, мурунку учурдагыдай эле, дарек үчүн. Экинчи параметр мүчүлүштүктөрдү оңдоону көзөмөлдөйт. Эгерде ал 1ге коюлса, программалык объект менен болгон ар бир транзакция программистке транзакциянын чоо -жайын көрүүгө мүмкүндүк берген Serial.print жыйынтыктарына алып келет. Мисалы:

bmp280 objectNameB (1, 1);

Эгерде мүчүлүштүктөрдү басуу параметри 0 деп коюлса, программалык объект кадимки жүрүм -турумуна кайтып келет (басып чыгаруу жок).

Бул билдирүүнү же билдирүүлөрдү #include кийин жана setup () функциясына чейин кошуу керек.

BME же BMP программалык объектин баштоо

Колдонулардан мурун, түзмөктөн калибрлөө параметрлерин окуп чыгышыңыз керек жана ар кандай өлчөө режимине ылайыкташтырып, ашыкча тандоо жана чыпка орнотуулары керек.

Жөнөкөй, жалпы максаттуу инициализация үчүн, билдирүү:

objectName.begin ();

Begin () бул версиясы түзмөктөн калибрлөө параметрлерин окуйт жана osrs_t = 7 (16 температура өлчөөсү), osrs_p = 7 (16 басым өлчөө), режим = 3 (үзгүлтүксүз, Нормалдуу), t_sb = 0 (ортосунда 0,5 мс уйку) өлчөө топтому), чыпка = 0 (K = 1, андыктан чыпкалоо жок) жана spiw_en = 0 (SPI өчүрүлгөн, ошондуктан I2C колдонуңуз). BME280 учурда, нымдуулуктун 16 өлчөөсү үчүн osrs_h = 7 кошумча параметр бар.

Баардык алты (же 7) параметрди камтыган begin () дагы бир версиясы бар. Жогорудагы билдирүүнүн эквиваленти болуп саналат

objectName.begin (7, 7, 3, 0, 0, 0); // osrs_t, osrs_p, режим, t_sb, чыпкасы, spiw_en

же objectName.begin (7, 7, 3, 0, 0, 0, 7); // osrs_t, osrs_p, режим, t_sb, чыпкасы, spiw_en, osrs_h

Коддордун жана алардын маанилеринин толук тизмеси BME280 жана BMP280 маалымат баракчасында, ошондой эле китепкананын.cpp файлындагы комментарийлерде.

Жөнөкөй температура жана басым өлчөө

Температураны өлчөө үчүн эң жөнөкөй жол

кош температура = objectName.readTemperature (); // температураны өлчөө

Басымды өлчөөнүн эң жөнөкөй жолу

кош басым = objectName.readPressure (); // басымын өлчөө

Нымдуулукту өлчөөнүн эң жөнөкөй жолу

кош нымдуулук = objectName.readHumidity (); // нымдуулукту өлчөө (BME280 гана)

Температураны жана басымды алуу үчүн жогорудагы эки билдирүүнү биринин артынан бирин колдонсо болот, бирок дагы бир вариант бар:

эки эсе температура;

кош басым = objectName.readPressure (температура); // басым менен температураны өлчөө

Бул билдирүүдө BME280 же BMP280 түзмөгүнөн алынган маалыматтар бир гана жолу окулат жана температураны да, басымды да кайтарат. Бул I2C автобустун бир аз эффективдүү колдонулушу жана эки окуунун бирдей өлчөө циклине туура келишин камсыз кылат.

BME 280 үчүн, үч маанини (нымдуулук, температура жана басым) алган курама билдирүү:

кош температура, басым; кош нымдуулук = objectName.readHumidity (температура, басым); // нымдуулукту, басымды жана температураны өлчөө

Бул билдирүү BMP280 түзмөгүндөгү маалыматтарды бир гана жолу окуйт жана үч маанини тең кайтарат. Бул I2C автобустун бир аз эффективдүү колдонулушу жана үч окуу бирдей өлчөө циклине туура келишин камсыз кылат. Көңүл бургула, өзгөрмөлөрдүн аттары колдонуучуга жаккан нерсеге өзгөртүлүшү мүмкүн, бирок алардын тартиби туруктуу - температура биринчи, басым экинчи орунда.

Бул колдонуу учурлары basicTemperature.ino, basicPressure.ino, basicHumidity.ino, basicTemperatureAndPressure.ino жана basicHumidityAndTemperatureAndPressure.ino болуу менен, китепкана менен камсыз кылынган мисал эскиздеринде камтылган.

Бир кыйла татаал температура жана басым өлчөө

Жогорудагы билдирүүлөр сериясы эч кандай көйгөйсүз иштесе да, бир -эки маселе бар:

  1. түзмөк үзгүлтүксүз иштеп жатат, демек, максималдуу деңгээлде электр энергиясын керектейт. Эгерде энергия батареядан келип жатса, анда муну азайтуу керек болушу мүмкүн.
  2. керектелген кубаттан улам, түзмөк жылынууну башынан өткөрөт, демек, өлчөнгөн температура айланадагы температурадан жогору болот. Мен муну кийинчерээк дагы бир кадамда карайм.

Күчтү азыраак пайдаланган жана айланага жакыныраак температураны берген натыйжаны баштоо () менен аны уктап жаткан параметрлер менен алууга болот (мисалы, режим = 0). Мисалы:

objectName.begin (1, 1, 0, 0, 0, 0 [, 1]); // osrs_t, osrs_p, режим, t_sb, чыпкалоо, spiw_en [, osrs_h]

Андан кийин, өлчөө керек болгондо, түзмөктү конфигурациялоо буйругу менен ойготуңуз F2 (эгер керек болсо) жана F4, ал osrs_h, osrs_t жана osrs_p, плюс режими = 1 (бир атуу режими). Мисалы:

[objectName.updateF2Control (1);] // osrs_h - BMP280 үчүн эч качан керек эмес, // жана BME280 үчүн кереги жок, эгерде өлчөөлөрдүн саны өзгөртүлбөсө // begin () ичинде берилген мааниден. objectName.updateF4Control (1, 1, 1); // osrs_t, osrs_p, режим

Түзмөктү ойготкондон кийин, ал өлчөй баштайт, бирок натыйжасы кээ бир миллисекундтар үчүн жеткиликтүү болбойт - көрсөтүлгөн өлчөөлөрдүн санына жараша жок дегенде 4 мс, балким 70 мс чейин же андан көп. Эгерде окуу буйругу дароо жөнөтүлсө, анда түзмөк мурунку өлчөөнүн маанилерин кайтарып берет - бул кээ бир тиркемелерде алгылыктуу болушу мүмкүн, бирок көпчүлүк учурда жаңы өлчөө жеткиликтүү болгонго чейин кечиктирүү жакшыраак.

Бул кечигүү бир нече жолдор менен жасалышы мүмкүн.

  1. эң күтүлгөн кечигүүнү жабуу үчүн белгиленген убакытты күтө туруңуз
  2. өлчөөнүн максималдуу өлчөө убактысынан (б.а. 2,3 мс) өлчөөлөрдүн санынан, кошумча чыгымдан тышкары маржа менен эсептелген убакытты күтө туруңуз.
  3. Кыска убакытты жогоруда эсептелгендей күтө туруңуз, бирок номиналдык өлчөө убактысын (б.а. 2 мс) жана кошумча чыгымдарды колдонуп, анан статустун реестриндеги "Мен өлчөп жатам" битин текшере баштаңыз. Статус битинде 0 (башкача айтканда, өлчөө эмес) окулганда, температуранын жана басымдын көрсөткүчтөрүн алыңыз.
  4. статус регистрин текшерүүнү дароо баштаңыз жана статус бит 0 деп окуганда температура жана басым көрсөткүчтөрүн алыңыз,

Мен бир аздан кийин муну жасоонун бир жолун көрсөтөм.

Конфигурация регистринин операциялары

Мунун баарын ишке ашыруу үчүн бизге азырынча тааныштыра элек бир нече куралдар керек. Алар:

байт окууRegister (reg)

void updateRegister (reg, value)

Булардын ар биринде китепканада белгилүү бир аракеттер үчүн программалык камсыздоону бир аз жөнөкөйлөткөн бир нече келип чыккан буйруктар бар.

Мисал powerSaverPressureAndTemperature.ino 3 -ыкманы колдонот. Кайталанган текшерүүнү жүргүзүүчү коддун линиясы

while (bmp0.readRegister (0xF3) >> 3); // loop untl F3bit 3 == 0

Бул эскиз ESP8266 микроконтроллери үчүн экенин эске алыңыз. Мен WeMos D1 мини про колдонгом. Эскиз уктоо үчүн ар кандай көрсөтмөлөрү бар Atmega микроконтроллери менен иштебейт. Бул эскиз бир нече башка буйруктарды аткарат, андыктан мен бул эскизди кененирээк сүрөттөөдөн мурун алардын бардыгын тааныштырам.

Микроконтроллер BMP280 сенсоруна параллель уктап жатканда, керектүү өлчөөлөр үчүн сенсордун конфигурациясы 6 параметрлерин колдонуу менен begin () буйругун аткарууга болот. Бирок, эгерде микроконтроллер уктай элек, бирок сенсор болсо, анда өлчөө учурунда сенсорду ойготуп, анын өлчөө конфигурациясын айтуу керек. Муну менен түздөн -түз жасаса болот

updateRegister (reg, value)

бирок төмөнкү үч буйрук менен бир аз оңой:

updateF2Control (osrs_h); // BME280 гана

updateF4Control (osrs_t, osrs_p, режим); updateF5Config (t_sb, чыпкасы, spi3W_en);

Өлчөө аяктагандан кийин, эгерде колдонулган режим Single shot (мажбурланган режим) болсо, анда түзмөк автоматтык түрдө кайра уктап калат. Бирок, эгер өлчөө топтому үзгүлтүксүз (Нормалдуу) режимди колдонуу менен бир нече өлчөөлөрдү камтыса, анда BMP280ди кайра уктап коюш керек. Бул төмөнкү эки буйруктун бири менен жасалышы мүмкүн:

updateF4Control16xSleep ();

updateF4ControlSleep (мааниси);

Бул экөө тең режим биттерин 00гө коюшат (б.а. уйку режими). Бирок биринчиси osrs_t жана osrs_pди 111ге (башкача айтканда 16 өлчөөгө) коёт, экинчиси "баалуулуктан" төмөн 6 битти 0xF4 регистринин 7: 2 биттерине сактайт.

Ошо сыяктуу эле, төмөнкү билдирүү "баалуулуктун" эң төмөнкү алты битин 0xF5 реестринин 7: 2 биттерине сактайт.

updateF5ConfigSleep (мааниси);

Бул акыркы буйруктарды колдонуу BMP280 F4 жана F5 регистрлеринде 12 бит маалыматты сактоого мүмкүндүк берет. Жок дегенде ESP8266да, микроконтроллер уктап жаткан мезгилден кийин ойгонгондо, эскиздин башында уйку буйругунан мурун анын абалы жөнүндө эч нерсе билбей башталат. Уйку буйругунан мурун анын абалы тууралуу маалыматты сактоо үчүн, маалыматтарды EEPROM функцияларын колдонуп же SPIFFSти колдонуу менен файлды жазуу менен флеш -эсте сактоого болот. Бирок флеш-эс жазуу циклдеринин санына чектөө киргизет, 10дон 100гө чейин, 000. Бул микроконтроллер ар бир нече секундда уйку-ойготуу циклинен өтүп жатса, анда ал жазуунун уруксат берилген чегинен ашып кетиши мүмкүн дегенди билдирет. бир нече айдын ичинде чектөө. BMP280де бир нече биттин маалыматын сактоодо мындай чектөө жок.

F4 жана F5 реестрлеринде сакталган маалыматтар микроконтроллер буйруктарды колдонуп ойгонгондо калыбына келтирилет.

readF4Sleep ();

readF5Sleep ();

Бул функциялар тиешелүү реестрди окуйт, мазмунун 2 LSB'ди алып салуу жана калган 6 битти кайтаруу үчүн жылдырат. Бул функциялар powerSaverPressureAndTemperatureESP.ino эскизинде төмөнкүчө колдонулат:

// EventCounterдин маанисин bmp0дон кайра окуу

байт bmp0F4value = bmp0.readF4Sleep (); // 0 ден 63 байтка чейин bmp0F5value = bmp0.readF5Sleep (); // 0дон 63кө чейин eventCounter = bmp0F5value*64+bmp0F4value; // 0ден 4095ке чейин

Бул функциялар тиешелүү реестрди окуйт, мазмунун 2 LSB'ди алып салуу жана калган 6 битти кайтаруу үчүн жылдырат. Бул функциялар powerSaverPressureAndTemperature.ino эскизинде төмөнкүчө колдонулат:

// EventCounterдин маанисин bmp1ден кайра окуу

байт bmp1F4value = bmp1.readF4Sleep (); // 0 ден 63 байтка чейин bmp1F5value = bmp1.readF5Sleep (); // 0дон 63кө чейин eventCounter = bmp1F5value*64+bmp1F4value; // 0ден 4095ке чейин

Чийки температура жана басым функциялары

Негизги readTemperature, readPressure жана readHumidity функциялары эки компоненттен турат. Адегенде чийки 20-бит температура жана басым баалуулуктары BME/P280ден алынат, же чийки 16-биттик нымдуулук мааниси BME280ден алынат. Андан кийин компенсация алгоритми Цельсий градусунда, hPa же %RH менен чыгуу баалуулуктарын түзүү үчүн колдонулат.

Китепкана бул компоненттер үчүн өзүнчө функцияларды камсыздайт, андыктан чийки температура, басым жана нымдуулук боюнча маалыматтарды алууга болот, балким кандайдыр бир жол менен башкарылат. Бул чийки баалуулуктардан температураны, басымды жана нымдуулукту алуу алгоритми да берилген. Китепканада бул алгоритмдер эки узундуктагы өзгөрмөлүү чекит арифметикасынын жардамы менен ишке ашырылат. Бул 32-бит иштетүүчү ESP8266де жакшы иштейт жана "кош" калкып жүрүүчү өзгөрмөлөр үчүн 64 битти колдонот. Бул функцияларды жеткиликтүү кылуу башка платформалар үчүн эсептөөнү баалоо жана балким өзгөртүү үчүн пайдалуу болушу мүмкүн.

Бул функциялар:

readRawPressure (rawTemperature); // BME/P280readRawHumidity (rawTemperature, rawPressure) чийки басым жана температура маалыматтарын окуйт; // BME280 calcTemperature чийки нымдуулугу, температурасы жана басымы боюнча маалыматтарды окуйт (rawTemperature, t_fine); calcPressure (rawPressure, t_fine); calcHumidity (rawHumidity, t_fine)

Бул функциялардын "t-fine" аргументи бир аз түшүндүрүүгө арзыйт. Кысымдын жана нымдуулуктун ордун толтуруу алгоритмдерине t_fine өзгөрмөсү аркылуу жетишилген температурага көз каранды компонент кирет. CalcTemperature функциясы температураны компенсациялоо алгоритминин логикасына негизделген t_fine маанисин жазат, андан кийин ал calcPressure жана calcHumidity'ке кирүү катары колдонулат.

Бул функцияларды колдонуунун мисалын rawPressureAndTemperature.ino эскизинде, ошондой эле китепкананын.cpp файлындагы readHumidity () функциясынын кодунда табууга болот.

Бийиктик жана деңиз деңгээлинин басымы

Атмосфералык басым менен бийиктиктин ортосунда белгилүү бир байланыш бар. Аба ырайы да басымга таасир этет. Аба ырайы уюмдары атмосфералык басымдын маалыматын жарыялаганда, адатта аны бийиктикке тууралашат, ошондуктан "синоптикалык диаграмма" деңиз деңгээлине карата стандартташтырылган изобарларды (туруктуу басым сызыктары) көрсөтөт. Демек, бул мамиледе чындыгында 3 баалуулук бар жана алардын экөөнү билүү үчүнчүсүн чыгарууга мүмкүндүк берет. 3 баалуулуктар төмөнкүлөр:

  • деңиз деңгээлинен бийиктик
  • бул бийиктиктеги чыныгы аба басымы
  • деңиз деңгээлиндеги эквиваленттүү аба басымы (тагыраак айтканда, деңиз деңгээлин билдирет, анткени деңиздин деңгээли дайыма өзгөрүп турат)

Бул китепкана бул байланыш үчүн эки функцияны камсыз кылат:

calcAltitude (басым, seaLevelhPa);

calcNormalised Pressure (басым, бийиктик);

Деңиз деңгээлинин 1013.15 гПа басымын болжолдогон жөнөкөйлөтүлгөн версия дагы бар.

calcAltitude (басым); // стандарт seaLevelPressure кабыл алынган

3 -кадам: BMP280 түзмөктүн чоо -жайы

BMP280 түзмөк чоо -жайы
BMP280 түзмөк чоо -жайы

Аппараттык мүмкүнчүлүктөр

BMP280де 2 байт конфигурация маалыматы бар (регистр даректеринде 0xF4 жана 0xF5), ал бир нече өлчөө жана маалымат чыгаруу параметрлерин көзөмөлдөө үчүн колдонулат. Ал ошондой эле 2 бит статус маалыматын жана 24 байт калибрлөө параметрлерин камсыз кылат, алар чийки температура менен басымдын маанилерин кадимки температура жана басым бирдиктерине айландырууда колдонулат. BME280де төмөнкүдөй кошумча маалыматтар бар:

  • 0xF2 регистр дарегиндеги конфигурация маалыматтарынын 1 кошумча байты нымдуулуктун бир нече өлчөөлөрүн көзөмөлдөө үчүн колдонулат;
  • Чийки нымдуулуктун маанисин салыштырмалуу нымдуулуктун пайызына айландырууда колдонулган калибрлөө параметрлеринин 8 кошумча байты.

BME280 үчүн температура, басым жана статустун регистри BMP280 менен бирдей, анча чоң эмес учурларды эске албаганда:

  • BME280дин "ID" биттери 0x60ка коюлган, андыктан BMP280ден айырмаланышы мүмкүн 0x56, 0x57 же 0x58
  • уйку убактысын башкаруу (t_sb) BMP280деги эки узак убакыт (2000 мс жана 4000 мс) BME280де 10 мс жана 20 мс кыска убакыттар менен алмаштырылгандай өзгөрөт. BME280де максималдуу уктоо убактысы 1000 мс.
  • BME280де чыпкалоо колдонулса, температура жана басым чийки мааниси ар дайым 20 бит болот. 16дан 19га чейинки баалуулуктарды колдонуу чыпкасы жок учурлар менен чектелет (б.а. чыпкасы = 0).

Температура жана басым - бул ар бир 20 биттик баалуулуктар, алар кадимки температурага жана басымга конверсияланышы керек, ал үчүн температура үчүн 3 16 бит калибрлөө параметрлери жана 9 16 бит калибрлөө параметрлери плюс басым үчүн температура колдонулат. Температураны өлчөөнүн гранулярдуулугу анча чоң эмес бит өзгөрүүсү үчүн 0.0003 градус Цельсий (20 бит окуу), эгерде 16 биттик окуу колдонулса, 0.0046 градуска чейин жогорулайт.

Нымдуулук 16 биттик мааниге ээ, ал 8, 12 жана 16 биттердин аралашмасынан турган 6 калибрлөө параметрин колдонуп, башка татаал алгоритм аркылуу салыштырмалуу нымдуулукка айландырылышы керек.

Маалымат баракчасы температуранын көрсөткүчтөрүнүн абсолюттук тактыгын 25 ° Сде +-0,5 С жана 0 ден 65 С диапазонунда +-1 С көрсөтөт.

Кысымдын өлчөө гранулярдуулугу 0,15 Паскаль (б.а. 0,0015 гектоПаскаль) 20 разрядда, же 2,5 Паскальда 16 разрядда. Чийки басымдын маанисине температура таасир этет, ошондуктан 25Стин тегерегинде, 1 градус С температуранын жогорулашы өлчөнгөн басымды 24 Паскальга төмөндөтөт. Температуранын сезгичтиги калибрлөө алгоритминде эсепке алынат, ошондуктан жеткирилген басымдын мааниси ар кандай температурада так болушу керек.

Маалымат баракчасы 0 С жана 65 С ортосундагы температура үчүн басымдын окуусунун абсолюттук тактыгын +-1 гПа катары көрсөтөт.

Нымдуулуктун тактыгы маалымат баракчасында +-3% RH, +-1% гистерезис катары берилген.

Бул кантип иштейт

24 байт температура жана басым калибрлөө маалыматтары, ошондой эле BME280 учурда 8 байт нымдуулукту калибрлөө маалыматтары түзмөктөн окулушу жана өзгөрмөлөрдө сакталышы керек. Бул маалыматтар фабрикада түзмөккө жекече программаланган, андыктан ар кандай аппараттар ар кандай баалуулуктарга ээ - жок дегенде кээ бир параметрлер үчүн. BME/P280 эки мамлекеттин биринде болушу мүмкүн. Бир штатта ал өлчөнөт. Башка штатта ал күтүп турат (уктап жатат).

Кайсы абалда экенин 0xF3 регистринин 3 битине карап текшерсе болот.

Эң акыркы өлчөөнүн жыйынтыгын каалаган убакта түзмөктүн уктап жатканына же өлчөгөнүнө карабай, тиешелүү маалыматтын маанисин окуу аркылуу алууга болот.

BME/P280 иштетүүнүн эки жолу бар. Алардын бири - Үзгүлтүксүз режим (маалымат баракчасында Кадимки режим деп аталат), ал Өлчөө жана Уйку абалынын ортосунда бир нече ирет цикл түзөт. Бул режимде аппарат өлчөөлөрдүн топтомун аткарат, андан кийин уктайт, андан кийин башка өлчөө топтому үчүн ойгонот ж.б.у.с. Жеке өлчөөлөрдүн саны жана циклдин уйку бөлүгүнүн узактыгы конфигурация регистрлери аркылуу башкарылышы мүмкүн.

BME/P280 иштетүүнүн башка жолу - Single Shot режими (маалымат баракчасында мажбурланган режим деп аталат). Бул режимде түзмөк өлчөө буйругу менен уйкудан ойгонот, ал өлчөөлөр топтомун аткарат, анан кайра уктайт. Топтомдогу жеке өлчөөлөрдүн саны түзмөктү ойготуучу конфигурация командасында көзөмөлдөнөт.

BMP280де, эгерде бир эле өлчөө жүргүзүлсө, мааниси боюнча 16 эң маанилүү биттер толтурулат, ал эми маанини окуудагы эң аз дегенде төрт бит нөлгө барабар. Өлчөөлөрдүн санын 1, 2, 4, 8 же 16 деп койсо болот жана өлчөөлөрдүн саны көбөйгөн сайын, маалыматтар менен толтурулган биттердин саны көбөйөт, ошондуктан 16 өлчөөдө бардык 20 биттер өлчөө маалыматтары менен толтурулат. Маалымат баракчасы бул жараянга ашыкча тандоо деп аталат.

BME280де, натыйжа чыпкаланбаганга чейин, ушул эле тартип колдонулат. Эгерде чыпкалоо колдонулса, ар бир өлчөө циклинде канча өлчөө жүргүзүлгөнүнө карабастан, маанилер ар дайым 20 битти түзөт.

Ар бир жеке өлчөө болжол менен 2 миллисекундка созулат (типтүү мааниси; максималдуу мааниси 2,3 мс). Буга болжол менен 2 мс (адатта бир аз азыраак) белгиленген кошумча чыгымдарды кошуу, 1ден 32ге чейин жеке өлчөөлөрдөн турган өлчөө ырааттуулугу 4 мстен 66 мске чейин созулушу мүмкүн экенин билдирет.

Маалымат баракчасы ар кандай тиркемелер үчүн температуранын жана басымдын ашыкча тандалышынын сунушталган айкалыштарынын топтомун берет.

Конфигурацияны башкаруу реестрлери

BMP280деги эки конфигурацияны башкаруу реестри 0xF4 жана 0xF5 регистрдик даректеринде жана 6 жеке конфигурацияны башкаруу баалуулугуна картага түшүрүлгөн. 0xF4 төмөнкүлөрдөн турат:

  • 3 бит osrs_t (температураны 0, 1, 2, 4, 8 же 16 жолу өлчөө);
  • 3 бит osrs_p (басымды 0, 1, 2, 4, 8 же 16 жолу өлчөө); жана
  • 2 бит Режим (Уйку, мажбурлоо (б.а. Бир жолку), Кадимки (б.а. үзгүлтүксүз).

0xF5 төмөнкүлөрдөн турат:

  • 3 бит t_sb (күтүү убактысы, 0,5 мстен 4000 мс чейин);
  • 3 бит чыпкасы (төмөндү караңыз); жана
  • SPI же I2C тандай турган 1 бит spiw_en.

Чыпка параметри экспоненциалдык ажыроо алгоритмин же чексиз импульстук жооптун (IIR) чыпкасын көзөмөлдөйт, чийки басым менен температураны өлчөө баалуулуктарына (бирок нымдуулуктун маанисине эмес) колдонулат. Теңдеме маалымат баракчасында берилген. Дагы бир презентация:

Мааниси (n) = Мааниси (n-1) * (K-1) / K + өлчөө (n) / K

мында (n) эң акыркы өлчөө жана чыгаруу маанисин көрсөтөт; жана K - чыпканын параметри. Чыпкалоо параметри K жана 1, 2, 4, 8 же 16. деп коюуга болот. Эгерде K 1ге коюлса, теңдеме жөн гана Value (n) = өлчөө (n) болуп калат. Чыпка параметринин коддолушу:

  • чыпкасы = 000, K = 1
  • чыпкасы = 001, K = 2
  • чыпкасы = 010, K = 4
  • чыпкасы = 011, K = 8
  • чыпкасы = 1xx, K = 16

BME 280 0xF2, "ctrl_hum" дарегине конфигурациянын дагы бир реестрин кошот, osrs_h бир 3-биттик параметр менен (нымдуулукту 0, 1, 2, 4, 8 же 16 жолу өлчөө).

4 -кадам: Өлчөө жана окуу убактысы

Мен муну кийинчерээк кошууну пландап жатам, буйруктардын убактысын жана өлчөө жоопторун көрсөтөм.

Iddt - температураны өлчөөдө ток. Типтүү мааниси 325 uA

Iddp - басым өлчөөдө учурдагы. Типтүү мааниси 720 uA, max 1120 uA

Iddsb - күтүү режиминде учурдагы. Типтүү мааниси 0,2 uA, максимум 0,5 uA

Iddsl - уйку режиминде учурдагы. Типтүү маани 0.1 uA, max 0.3 uA

5 -кадам: Программалык камсыздоонун көрсөтмөлөрү

Программалык камсыздоонун көрсөтмөлөрү
Программалык камсыздоонун көрсөтмөлөрү
Программалык камсыздоонун көрсөтмөлөрү
Программалык камсыздоонун көрсөтмөлөрү

I2C жарылуу режими

BMP280 маалымат баракчасы маалыматтарды окуу боюнча көрсөтмөлөрдү берет (бөлүм 3.9). Анда "ар бир реестрге жекече кайрылбоо керек. Бул ар кандай өлчөөлөргө таандык байттардын мүмкүн болгон аралашуусуна жол бербейт жана интерфейстин трафигин азайтат" деп айтылат. Компенсация/калибрлөө параметрлерин окуу боюнча эч кандай көрсөтмө берилбейт. Кыязы, бул маселе эмес, анткени алар статикалык жана өзгөрбөйт.

Бул китепкана бардык чектеш маанилерди бир окуу операциясында окуйт - температура жана басымдын компенсацияланган параметрлери боюнча 24 байт, температура менен басымдын бириккени үчүн 6 байт, нымдуулук, температура жана басым үчүн 8 байт. Жалгыз температура текшерилгенде, 3 байт гана окулат.

Макролорду колдонуу (#define ж.б.)

Бул китепканада кадимки китепканадан башка "кайтаруучу" макросунан башка макростар жок.

Бардык константалар const ачкыч сөзү аркылуу аныкталат жана мүчүлүштүктөрдү оңдоо стандарттык C функциялары менен көзөмөлдөнөт.

Бул мен үчүн кандайдыр бир белгисиздиктин булагы болду, бирок бул темадагы көптөгөн билдирүүлөрдү окуудан алган кеңешим, туруктуулуктарды жарыялоо үчүн #defineди колдонуу (жок дегенде) жана (балким) мүчүлүштүктөрдү оңдоону көзөмөлдөө керек эмес жана керексиз.

#Define эмес, const колдонуу маселеси абдан түшүнүктүү - const #define (б.а. нөл) менен бирдей ресурстарды колдонот жана натыйжада алынган баалуулуктар скопинг эрежелерине баш ийет, ошону менен каталардын ыктымалдыгын азайтат.

Мүчүлүштүктөрдү оңдоону көзөмөлдөө иши бир аз азыраак түшүнүктүү, анткени мен жасаган ыкма акыркы код мүчүлүштүктөрдү оңдоо басып чыгаруу логикасын камтыйт, бирок алар эч качан колдонулбайт. Эгерде китепкана эстутуму чектелген микроконтроллердеги чоң долбоордо колдонула турган болсо, бул маселе болуп калышы мүмкүн. Менин өнүгүүм чоң флэш эс тутуму бар ESP8266де болгондуктан, бул мен үчүн көйгөй деле болгон жок окшойт.

6 -кадам: Температуранын аткарылышы

Мен муну кийинчерээк кошууну пландап жатам.

7 -кадам: басымдын иштеши

Мен муну кийинчерээк кошууну пландап жатам.

Сунушталууда: