Orodha ya maudhui:

Maktaba ya BMP280 na BME280: Hatua 7
Maktaba ya BMP280 na BME280: Hatua 7

Video: Maktaba ya BMP280 na BME280: Hatua 7

Video: Maktaba ya BMP280 na BME280: Hatua 7
Video: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, Novemba
Anonim
Maktaba ya BMP280 na BME280
Maktaba ya BMP280 na BME280
Maktaba ya BMP280 na BME280
Maktaba ya BMP280 na BME280
Maktaba ya BMP280 na BME280
Maktaba ya BMP280 na BME280

Utangulizi

Sikuamua kuandika maktaba hii. "Ilitokea" kama athari ya mradi niliyoanza ambayo hutumia BMP280. Mradi huo bado haujakamilika, lakini nadhani maktaba iko tayari kushiriki na wengine. Baadaye nilikuwa na hitaji la kutumia BME280, ambayo inaongeza kipimo cha unyevu kwa shinikizo na uwezo wa joto wa BMP280. BME280 "inaendana nyuma" na BMP280 - ambayo ni, sajili zote na hatua zinazohitajika kusoma shinikizo na joto kutoka BME280 ni sawa na zile zinazotumiwa kwa BMP280. Kuna rejista za ziada na hatua zinazohitajika kusoma unyevu, unaotumika kwa BME280 tu. Hii inaleta swali, maktaba moja kwa zote mbili, au maktaba mbili tofauti. Vifaa vya aina mbili za kifaa vinaweza kubadilishana kabisa. Hata moduli nyingi zinazouzwa (kwa mfano kwenye Ebay na AliExpress) zimeandikwa BME / P280. Ili kujua ni aina gani, lazima uangalie maandishi (miniscule) kwenye sensa yenyewe, au jaribu kitambulisho cha kitambulisho cha kifaa. Niliamua kwenda kwa maktaba moja. Inaonekana imefanya kazi sawa.

Maoni, haswa maoni yoyote ya maboresho, yatathaminiwa.

Makala na uwezo wa Maktaba

Maktaba ni kipande cha programu ambayo hutoa Interface Programming Interface (API) kwa programu ya kutumia uwezo wa kifaa, bila lazima kushughulika na maelezo yote ya nafaka nzuri. Inayotarajiwa, API inapaswa kuwa rahisi kwa Kompyuta na mahitaji rahisi ya kuanza, huku ikitoa unyonyaji kamili wa uwezo wa kifaa. Inayotakiwa maktaba inapaswa kufuata miongozo yoyote maalum kutoka kwa mtengenezaji wa vifaa, na vile vile mazoezi ya jumla ya programu nzuri. Nimejitahidi kufikia haya yote. Wakati wa kuanza na BMP280, nilipata maktaba 3 tofauti yake: Adafruit_BMP280; Seeed_BMP280; na inayoitwa BMP280 kutoka kwa mtengenezaji wa kifaa. Wala Adafruit wala Seeed hawakutoa uwezo uliopanuliwa, ingawa walifanya kazi vizuri na walikuwa rahisi kutumia kwa matumizi ya kimsingi. Sikuweza kujua jinsi ya kutumia ile iliyozalishwa na mtengenezaji wa kifaa (Bosch Sensortec). Hii inaweza kuwa upungufu wangu, badala yao. Walakini maktaba hiyo ilikuwa ngumu sana kuliko zile zingine mbili, sikuweza kupata maagizo au mifano ya matumizi (baadaye nikapata mifano katika faili "bmp280_support.c", hata hivyo hizi hazikunisaidia sana).

Kama matokeo ya mambo haya, niliamua kuandika maktaba yangu kwa BMP280.

Kuangalia hali ya maktaba ya BME280, nilipata maktaba tofauti Adafruit_BME280, Seed_BME280 na nyingine BME280_MOD-1022 iliyoandikwa na Advented Embedded. Hakuna hata mmoja aliyeunganisha kazi za BMP280 kwenye maktaba inayoweza kutumia BME280. Hakuna hata mmoja wao aliunga mkono kwa uwazi uwezo wa vifaa vya kuhifadhi data chache wakati kifaa na microprocessor yake inayodhibiti wamelala (uwezo huu unajidhihirisha katika jalada la data na unasaidiwa katika maktaba ambayo nimeandika na kuelezea hapa).

Maktaba ya pamoja inapaswa kuwa na msaada kwa uwezo wote wa BME280, lakini wakati inatumiwa na BMP280 haipaswi kulazimisha kichwa chochote kutoka kwa kazi ambazo hazijatumiwa. Faida za maktaba iliyojumuishwa ni pamoja na faili chache za maktaba za kudhibiti, mchanganyiko-na-mechi rahisi wa vifaa tofauti katika mradi huo huo, na mabadiliko yaliyorahisishwa kwa matengenezo au uboreshaji ambayo yanapaswa kufanywa tu katika sehemu moja badala ya mbili. Hizi labda zote ni ndogo, hata kidogo, lakini…

Uwezo wa kifaa

BMP280 na BME280 ni vifaa vya kuweka juu juu ya mraba 5mm na 1 mm juu. Kuna vidonge 8 vya kiolesura, pamoja na pedi mbili tofauti za kuingiza nguvu na pedi mbili za chini. Zinapatikana kwenye eBay kama moduli na pini 4 au 6 zilizoletwa. Moduli ya pini 4 ina anwani iliyowekwa ya I2C na haiwezi kusanidiwa kutumia itifaki ya SPI.

Moduli ya pini 6 au kifaa kilicho wazi inaweza kutumika na itifaki za I2C au SPI. Katika hali ya I2C inaweza kuwa na anwani mbili tofauti, zilizopatikana kwa kuunganisha pini ya SDO ama kwa Ardhi (kwa anwani ya msingi = 0x76) au kwa Vdd (kwa anwani ya msingi +1 = 0x77). Katika hali ya SPI ina mpangilio wa kawaida wa saa 1, data 2 (moja kwa kila mwelekeo) na pini ya kuchagua kifaa (CS).

Maktaba niliyoandika na kuelezea hapa inasaidia tu I2C. Adafruit_BMP280 na maktaba ya BME_MOD-1022 zina msaada kwa i2C na SPI.

Maktaba inaweza kupakuliwa hapa:

github.com/farmerkeith/BMP280-library

Hatua ya 1: Kuweka Vifaa

Kuweka Vifaa
Kuweka Vifaa

Kabla ya maktaba kuwa muhimu ni muhimu kuunganisha mdhibiti mdogo kwa BMP280 (au kwa mbili kati yao ikiwa unataka).

Nilitumia WeMos D1 mini pro, kwa hivyo nitaonyesha unganisho lake. Watawala wengine wadogo watafanana, unahitaji tu kupata pini za SDA na SCL zilizounganishwa kwa usahihi.

Katika kesi ya WeMos D1 mini pro, viunganisho ni:

Kazi WeMos siri BMP280 siri Vidokezo

SDA D2 SDA SCL D1 SCL Vdd 3V3 Vin Nominal 3.3V Ground GND Anwani ya kudhibiti SDO Ground au Vdd I2C chagua CSB Vdd (GND kuchagua SPI)

Kumbuka kuwa pini ya SDO kwenye moduli zingine za MP280 imeitwa SDD, na pini ya Vdd inaweza kuitwa VCC. Kumbuka: Mistari ya SDA na SCL inapaswa kuwa na vizuizi vya kuvuta kati ya laini na pini ya Vin. Kwa kawaida thamani ya 4.7K inapaswa kuwa sawa. Baadhi ya moduli za BMP280 na BME280 zina vipinzani 10K vya kuvuta vilivyojumuishwa kwenye moduli (ambayo sio mazoezi mazuri, kwani kuweka vifaa vingi kwenye basi ya I2C inaweza kuipakia kupita kiasi). Walakini kutumia moduli 2 za BME / P280 kila moja iliyo na kontena la 10K haipaswi kuwa shida katika mazoezi kwa muda mrefu kama hakuna vifaa vingine vingi kwenye basi moja pia na vizuizi vya kuvuta.

Mara tu ikiwa umeunganisha vifaa, unaweza kuangalia kwa urahisi ikiwa kifaa chako ni BMP280 au BME280 kwa kutumia mchoro I2CScan_ID ambayo unaweza kupata hapa:

Unaweza pia kuangalia ikiwa una BMP280 au BME280 kwa kuangalia kifaa chenyewe. Niliona ni muhimu kutumia darubini ya dijiti kufanya hivyo, lakini ikiwa macho yako ni mazuri sana unaweza kuifanya bila misaada yoyote. Kuna mistari miwili ya uchapishaji kwenye sanduku la kifaa. Muhimu ni barua ya kwanza kwenye laini ya pili, ambayo kwa vifaa vya BMP280 ni "K" na kwa vifaa vya BME280 ni "U".

Hatua ya 2: API Zinazotolewa na Maktaba

API Zinazotolewa na Maktaba
API Zinazotolewa na Maktaba
API Zinazotolewa na Maktaba
API Zinazotolewa na Maktaba

Ikiwa ni pamoja na maktaba katika mchoro

Maktaba imejumuishwa kwenye mchoro kwa njia ya kawaida kwa kutumia taarifa hiyo

# pamoja na "mkulima_bMP280.h"

Taarifa hii inahitaji kujumuishwa katika sehemu ya kwanza ya mchoro kabla ya kuanza kwa kazi ya kuanzisha ().

Kuunda kitu cha programu ya BME au BMP

Kuna viwango 3 vya kuunda kitu cha programu ya BMP280. Rahisi zaidi ni haki

bme280 kituName; au kitu cha bmp280Name;

kwa mfano, BMP280 bmp0;

Hii inaunda kitu cha programu na anwani chaguomsingi ya 0x76 (yaani kwa SDO iliyounganishwa na ardhi).

Kiwango kinachofuata cha kuunda kipengee cha programu cha BME280 au BMP280 kina parameter ya 0 au 1, kama ifuatavyo:

kitu cha bme280NameA (0);

kitu cha bmp280NameB (1);

Kigezo (0 au 1) kinaongezwa kwenye anwani ya msingi ya I2C, ili vifaa viwili vya BME280 au BMP280 viweze kutumika kwenye basi moja ya I2C (pamoja na moja ya kila moja).

Kiwango cha tatu cha kuunda programu ya BME au BMP280 ina vigezo viwili. Kigezo cha kwanza, ambacho ni 0 au 1, ni kwa anwani, kama kwa kesi ya hapo awali. Kigezo cha pili kinadhibiti uchapishaji wa utatuzi. Ikiwa imewekwa kwa 1, kila shughuli na kitu cha programu husababisha matokeo ya Serial.print ambayo inamwezesha programu kuona maelezo ya shughuli hiyo. Kwa mfano:

kitu cha bmp280NameB (1, 1);

Ikiwa parameter ya uchapishaji wa utatuzi imewekwa 0, kitu cha programu kinarudi kwa tabia ya kawaida (hakuna uchapishaji).

Taarifa hii au taarifa zinahitajika kujumuishwa baada ya # pamoja na kabla ya kazi ya kuanzisha ().

Kuanzisha kitu cha programu ya BME au BMP

Kabla ya kutumiwa, ni muhimu kusoma vigezo vya upimaji kutoka kwa kifaa, na kuisanidi kwa hali yoyote ya upimaji, upimaji mwingi, na mipangilio ya kichujio inafaa.

Kwa utangulizi rahisi, wa jumla, taarifa ni:

kituName.anza ();

Toleo hili la Start () linasoma vigezo vya upimaji kutoka kwa kifaa na huweka osrs_t = 7 (vipimo 16 vya joto), osrs_p = 7 (vipimo 16 vya shinikizo), mode = 3 (endelevu, Kawaida), t_sb = 0 (usingizi 0.5 ms kati seti za vipimo), filter = 0 (K = 1, kwa hivyo hakuna uchujaji) na spiw_en = 0 (SPI imezimwa, kwa hivyo tumia I2C). Katika kesi ya BME280, kuna parameter ya ziada osrs_h = 7 kwa vipimo 16 vya unyevu.

Kuna toleo jingine la Start () ambalo linachukua vigezo vyote sita (au 7). Sawa ya taarifa hapo juu ni

kituName.anza (7, 7, 3, 0, 0, 0); // osrs_t, osrs_p, mode, t_sb, chujio, spiw_en

au kituName.anza (7, 7, 3, 0, 0, 0, 7); // osrs_t, osrs_p, mode, t_sb, chujio, spiw_en, osrs_h

Orodha kamili ya nambari na maana yake iko kwenye karatasi ya data ya BME280 na BMP280, na pia kwenye maoni kwenye faili ya.cpp kwenye maktaba.

Joto rahisi na kipimo cha shinikizo

Ili kupata kipimo cha joto njia rahisi ni

joto mara mbili = objectName.readTemperature (); // kupima joto

Kupata kipimo cha shinikizo njia rahisi ni

shinikizo mara mbili = objectName.readPressure (); // kupima shinikizo

Kupata kipimo cha unyevu njia rahisi ni

unyevu mara mbili = objectName.readHumidity (); // kupima unyevu (BME280 tu)

Kupata joto na shinikizo taarifa mbili zilizo hapo juu zinaweza kutumika moja baada ya nyingine, lakini kuna chaguo jingine, ambayo ni:

joto mara mbili;

shinikizo mara mbili = objectName.read Pressure (joto); // kupima shinikizo na joto

Taarifa hii inasoma data kutoka kwa kifaa cha BME280 au BMP280 mara moja tu, na inarudisha joto na shinikizo. Hii ni matumizi bora zaidi ya basi ya I2C na inahakikisha kuwa usomaji huo unafanana na mzunguko huo wa kipimo.

Kwa BME 280, taarifa ya pamoja inayopata maadili yote matatu (unyevu, joto na shinikizo) ni:

joto mara mbili, shinikizo, unyevu mara mbili = kituName.read Unyevu (joto, shinikizo); // kupima unyevu, shinikizo na joto

Taarifa hii inasoma data kutoka kwa kifaa cha BMP280 mara moja tu, na inarudisha maadili yote matatu. Hii ni matumizi bora zaidi ya basi ya I2C na inahakikisha kuwa usomaji huo matatu unalingana na mzunguko huo wa kipimo. Kumbuka kuwa majina ya vigeugeu yanaweza kubadilishwa kuwa kitu chochote ambacho mtumiaji anapenda, lakini mpangilio wao umewekwa - joto huja kwanza, na shinikizo huja la pili.

Kesi hizi za utumiaji zimefunikwa kwa michoro ya mfano iliyotolewa na maktaba, kuwa msingiTemperature.ino, basicPressure.ino, basicHumidity.ino, basicTemperatureAndPressure.ino na basicHumidityAndTemperatureAndPressure.ino.

Joto la kisasa zaidi na kipimo cha shinikizo

Ingawa safu ya taarifa hapo juu itafanya kazi bila shida, kuna maswala kadhaa:

  1. kifaa kinaendelea kuendelea, na kwa hivyo kinatumia nguvu kwa kiwango chake cha juu. Ikiwa nishati inatoka kwa betri, inaweza kuwa muhimu kupunguza hii.
  2. kwa sababu ya nguvu inayotumiwa, kifaa kitapata joto, na kwa hivyo joto lililopimwa litakuwa kubwa kuliko joto la kawaida. Nitafunika hii zaidi katika hatua ya baadaye.

Matokeo ambayo hutumia nguvu kidogo, na hutoa hali ya joto ambayo iko karibu na mazingira, inaweza kupatikana kwa kutumia Start () na vigezo vinavyoiweka kulala (km mode = 0). Kwa mfano:

kituName.anza (1, 1, 0, 0, 0, 0 [, 1]); // osrs_t, osrs_p, mode, t_sb, filter, spiw_en [, osrs_h]

Halafu, wakati kipimo kinatakiwa, amsha kifaa na amri ya usanidi kusajili F2 (ikiwa inahitajika) na F4 ambayo inaweka maadili yanayofaa ya osrs_h, osrs_t na osrs_p, pamoja na mode = 1 (mode moja ya risasi). Kwa mfano:

[objectName.updateF2Control (1);] // osrs_h - haihitajiki kamwe kwa BMP280, // na haihitajiki kwa BME280 ikiwa Nambari ya vipimo haibadilishwa // kutoka kwa thamani iliyotolewa katika start (). kituName.updateF4Control (1, 1, 1); // osrs_t, osrs_p, hali

Baada ya kuamsha kifaa, itaanza kupima, lakini matokeo hayatapatikana kwa milliseconds zingine - angalau 4 ms, labda hadi 70 ms au zaidi, kulingana na idadi ya vipimo ambavyo vimeainishwa. Ikiwa amri ya kusoma inatumwa mara moja, kifaa kitarudisha maadili kutoka kwa kipimo kilichopita - ambacho kinaweza kukubalika katika programu zingine, lakini katika hali nyingi labda ni bora kuchelewesha hadi kipimo kipya kipatikane.

Ucheleweshaji huu unaweza kufanywa kwa njia kadhaa.

  1. subiri muda uliowekwa ili kufunika kucheleweshwa kwa muda mrefu zaidi
  2. subiri kiasi cha muda uliohesabiwa kutoka kwa kiwango cha juu cha kipimo kwa kila kipimo (yaani 2.3ms) mara idadi ya vipimo, pamoja na juu, pamoja na margin.
  3. subiri kiasi kifupi cha muda uliohesabiwa kama hapo juu, lakini ukitumia muda wa upimaji wa majina (yaani 2 ms) pamoja na juu, kisha uanze kuangalia "Ninapima" kidogo kwenye rejista ya hadhi. Wakati kiwango kinasoma 0 (yaani, sio kupima), pata usomaji wa joto na shinikizo.
  4. anza mara moja kuangalia daftari la hali, na upate usomaji wa joto na shinikizo wakati kiwango kinasoma 0,

Nitaonyesha mfano wa njia moja ya kufanya hivi baadaye.

Shughuli za usajili wa usanidi

Ili kufanya haya yote kutokea, tunahitaji zana kadhaa ambazo bado sijaanzisha. Wao ni:

kusoma kusomaJisajili (reg)

sasisha tupuJisajili (reg, thamani)

Kila moja ya haya ina maagizo kadhaa yanayotokana kwenye maktaba, ambayo hufanya programu ya vitendo maalum iwe rahisi.

Mfano PowerSaverPressureAndTemperature.ino hutumia njia Namba 3. Mstari wa nambari ambayo huangalia mara kwa mara ni

wakati (bmp0.readRegister (0xF3) >> 3); // kitanzi untl F3bit 3 == 0

Kumbuka kuwa mchoro huu ni wa EPR8266 microcontroller. Nilitumia pro mini ya WeMos D1. Mchoro hautafanya kazi na wadhibiti wadogo wa Atmega, ambao wana maagizo tofauti ya kulala. Mchoro huu unatumia maagizo mengine kadhaa, kwa hivyo nitawatambulisha wote kabla ya kuelezea mchoro huo kwa undani zaidi.

Wakati microcontoller imelala sambamba na sensorer ya BMP280, usanidi wa sensa kwa vipimo vinavyohitajika unaweza kufanywa kwa amri ya (), kwa kutumia vigezo 6. Walakini ikiwa mdhibiti mdogo hajalala, lakini sensor ni, basi wakati wa kipimo sensor inapaswa kuamshwa na kuambiwa usanidi wa kipimo. Hii inaweza kufanywa moja kwa moja na

sasishaJisajili (usajili, thamani)

lakini ni rahisi kidogo na amri tatu zifuatazo:

sasishaF2Control (osrs_h); // BME280 tu

sasishaF4Control (osrs_t, osrs_p, mode); sasishaF5Config (t_sb, filter, spi3W_en);

Baada ya kipimo kufanywa, ikiwa hali iliyotumiwa ni Risasi moja (Njia ya kulazimishwa), basi kifaa kitarudi kiotomati. Walakini, ikiwa kipimo kilichowekwa kinajumuisha vipimo kadhaa kwa kutumia hali ya kuendelea (Kawaida) basi BMP280 itahitaji kurudishwa kulala. Hii inaweza kufanywa na mojawapo ya amri mbili zifuatazo:

sasishaF4Control16xSleep ();

sasishaF4ControlSleep (thamani);

Zote hizi zinaweka biti za mode kuwa 00 (yaani mode ya kulala). Walakini wa kwanza huweka osrs_t na osrs_p hadi 111 (yaani vipimo 16) wakati ile ya pili inahifadhi vipande 6 vya chini kutoka "thamani" kuwa vipande 7: 2 vya rejista ya 0xF4.

Vile vile taarifa ifuatayo huhifadhi vipande sita vya "thamani" chini kwenye bits 7: 2 ya rejista ya 0xF5.

sasishaF5ConfigSleep (thamani);

Matumizi ya amri hizi za mwisho zinawezesha uhifadhi wa habari 12 kwenye sajili za BMP280 F4 na F5. Angalau katika kesi ya ESP8266, wakati mdhibiti mdogo akiamka baada ya kulala, huanza mwanzoni mwa mchoro bila kujua hali yake kabla ya amri ya kulala. Ili kuhifadhi ujuzi wa hali yake kabla ya amri ya kulala, data inaweza kuhifadhiwa kwenye kumbukumbu ya flash, kwa kutumia kazi za EEPROM au kwa kuandika faili kwa kutumia SPIFFS. Walakini kumbukumbu ndogo ina kiwango cha juu cha idadi ya mizunguko ya kuandika, ya mpangilio wa 10, 000 hadi 100, 000. Hii inamaanisha kwamba ikiwa mdhibiti mdogo anapitia mzunguko wa kulala kila baada ya sekunde chache, anaweza kuzidi kumbukumbu inayoruhusiwa kuandika kikomo katika miezi michache. Kuhifadhi data chache katika BMP280 hakina kikomo kama hicho.

Takwimu zilizohifadhiwa kwenye rejista F4 na F5 zinaweza kupatikana wakati mdhibiti mdogo anaamka akitumia amri

somaF4Sleep ();

somaF5Sleep ();

Kazi hizi zinasoma rejista inayofanana, badilisha yaliyomo ili kuondoa LSB 2 na kurudisha bits 6 zilizobaki. Kazi hizi hutumiwa katika mfano mchoro wa nguvuSaverPressureAndTemperatureESP.ino kama ifuatavyo:

// kusoma thamani ya EventCounter nyuma kutoka bmp0

byte bmp0F4value = bmp0.readF4Sleep (); // 0 hadi 63 byte bmp0F5value = bmp0.readF5Sleep (); // 0 to 63 eventCounter = bmp0F5value * 64 + bmp0F4value; // 0 hadi 4095

Kazi hizi zinasoma rejista inayofanana, badilisha yaliyomo ili kuondoa LSB 2 na urudishe bits 6 zilizobaki. Kazi hizi hutumiwa katika mfano mchoro wa nguvuSaverPressureAndTemperature.ino kama ifuatavyo:

// kusoma thamani ya EventCounter nyuma kutoka bmp1

byte bmp1F4value = bmp1.readF4Sleep (); // 0 hadi 63 byte bmp1F5value = bmp1.readF5Sleep (); // 0 to 63 eventCounter = bmp1F5value * 64 + bmp1F4value; // 0 hadi 4095

Joto mbichi na kazi za shinikizo

Joto la msingi la kusoma, Shinikizo la kusoma na kusomaHumidity zina vifaa viwili. Kwanza joto mbichi la joto-20-bit na shinikizo hupatikana kutoka kwa BME / P280, au thamani ghafi ya unyevu wa 16-bit hupatikana kutoka BME280. Halafu hesabu ya fidia hutumiwa kutengeneza maadili ya pato kwa digrii Celsius, hPa au% RH.

Maktaba hutoa kazi tofauti kwa vifaa hivi, ili hali ya joto ghafi, shinikizo na data ya unyevu ipatikane, na labda itumiwe kwa njia fulani. Algorithm ya kupata joto, shinikizo na unyevu kutoka kwa maadili haya mabichi pia hutolewa. Kwenye maktaba algorithms hizi zinatekelezwa kwa kutumia hesabu ya urefu wa mara mbili inayoelea. Inafanya kazi vizuri kwenye ESP8266 ambayo ni processor ya 32-bit na inatumia bits 64 kwa vigeugeu vya "mara mbili". Kufanya kazi hizi kupatikana inaweza kuwa muhimu kwa kutathmini na labda kubadilisha hesabu kwa majukwaa mengine.

Kazi hizi ni:

ReadRawPressure (joto ghafi); // inasoma shinikizo ghafi na data ya joto kutoka BME / P280readRawHumidity (rawTemperature, rawPressure); // inasoma unyevu unyevu, joto na data ya shinikizo kutoka BME280 calc Joto (Joto ghafi, t_fine); shinikizo la calc (malighafi ghafi, t_fine); calcUnyenyekevu (Unyevu mbichi, t_fine)

Hoja ya "t-faini" kwa kazi hizi inastahili maelezo kidogo. Shinikizo la fidia na unyevu ni pamoja na sehemu inayotegemea joto ambayo hupatikana kupitia tofauti ya t_fine. Kazi ya calcTemperature inaandika thamani katika t_fine kulingana na mantiki ya fidia ya joto, ambayo hutumiwa kama pembejeo katika calcPressure na calcHumidity.

Mfano wa matumizi ya kazi hizi unaweza kupatikana katika mfano mchoro rawPressureAndTemperature.ino, na pia kwenye nambari ya kazi ya kusomaHumidity () katika faili ya.cpp ya maktaba.

Urefu na kiwango cha Bahari

Kuna uhusiano unaojulikana kati ya shinikizo la anga na urefu. Hali ya hewa pia huathiri shinikizo. Wakati mashirika ya hali ya hewa yanapochapisha habari ya shinikizo la anga, kawaida hurekebisha kwa urefu na kwa hivyo "chati ya sanjari" inaonyesha isobars (mistari ya shinikizo la kila wakati) sanifu kumaanisha usawa wa bahari. Kwa hivyo kuna maadili 3 katika uhusiano huu, na kujua mbili kati yake kunawezesha kupatikana kwa ile ya tatu. Maadili 3 ni:

  • urefu juu ya usawa wa bahari
  • shinikizo halisi la hewa katika urefu huo
  • shinikizo sawa la hewa katika usawa wa bahari (zaidi, inamaanisha kiwango cha bahari, kwa sababu usawa wa bahari hubadilika kila wakati)

Maktaba hii hutoa kazi mbili kwa uhusiano huu, kama ifuatavyo:

Urefu (shinikizo, bahariLevelhPa);

Shinikizo la kawaida (shinikizo, urefu);

Pia kuna toleo rahisi, ambalo linachukua shinikizo la kiwango cha bahari la 1013.15 hPa.

Urefu (shinikizo); // kiwango cha shinikizo la bahari kudhaniwa

Hatua ya 3: Maelezo ya Kifaa cha BMP280

Maelezo ya Kifaa cha BMP280
Maelezo ya Kifaa cha BMP280

Uwezo wa vifaa

BMP280 ina ka 2 ya data ya usanidi (kwenye rejista anwani 0xF4 na 0xF5) ambayo hutumiwa kudhibiti chaguzi nyingi za upimaji na data. Pia hutoa 2 bits ya habari ya hadhi, na ka 24 za vigezo vya calibration ambazo hutumiwa katika kubadilisha joto ghafi na maadili ya shinikizo kuwa joto la kawaida na vitengo vya shinikizo. BME280 ina data ya ziada kama ifuatavyo:

  • 1 ziada ya data ya usanidi kwenye anwani ya rejista 0xF2 inayotumiwa kudhibiti vipimo vingi vya unyevu;
  • Baiti 8 za ziada za vigezo vya upimaji kutumika katika kubadilisha thamani ya unyevu ghafi kuwa asilimia ya unyevu.

Joto, shinikizo na rejista za hali ya BME280 ni sawa na BMP280 isipokuwa kidogo kama ifuatavyo:

  • bits "ID" ya BME280 imewekwa 0x60, kwa hivyo inaweza kutofautishwa na BMP280 ambayo inaweza kuwa 0x56, 0x57 au 0x58
  • udhibiti wa wakati wa kulala (t_sb) hubadilishwa ili nyakati mbili ndefu katika BMP280 (2000 ms na 4000 ms) zibadilishwe katika BME280 na nyakati fupi za 10 ms na 20 ms. Wakati wa kulala zaidi katika BME280 ni 1000 ms.
  • Katika BME280 viwango vya joto na shinikizo mbichi kila wakati ni bits 20 ikiwa kuchuja kunatumika. Matumizi ya nambari 16 hadi 19 kidogo imepunguzwa kwa visa visivyo na uchujaji (kichujio = 0).

Joto na shinikizo ni kila maadili 20 kidogo, ambayo yanahitaji kubadilishwa kuwa joto la kawaida na shinikizo kupitia hesabu ngumu badala ya kutumia vigezo 3 3 vya upimaji wa joto, na vigezo 9 16 vya upimaji pamoja na joto la shinikizo. Ukubwa wa kipimo cha joto ni digrii 0.0003 Celsius kwa mabadiliko kidogo (20 kusoma kidogo), ikiongezeka hadi digrii 0.0046 Celsius ikiwa kusoma 16 kidogo kunatumika.

Unyevu ni thamani kidogo ya 16 ambayo inahitaji kubadilishwa kuwa unyevu wa karibu kupitia algorithm nyingine ngumu kwa kutumia vigezo 6 vya upatanisho ambavyo ni mchanganyiko wa bits 8, 12 na 16.

Karatasi ya data inaonyesha usahihi kamili wa usomaji wa joto kama -0.5 C kwa 25 C na + -1 C kwa kiwango cha 0 hadi 65 C.

Uzito wa kipimo cha shinikizo ni Pasaka 0.15 (yaani 0.0015 hectoPascals) katika azimio la 20 bit, au Pascals 2.5 kwa azimio la 16 bit. Thamani ya shinikizo ghafi huathiriwa na joto, hivi kwamba karibu 25C, ongezeko la joto la digrii 1 C hupunguza shinikizo lililopimwa na Pascasi 24. Usikivu wa joto huhesabiwa katika hesabu ya hesabu, kwa hivyo viwango vya shinikizo vinavyotolewa vinapaswa kuwa sahihi kwa joto tofauti.

Karatasi ya data inaonyesha usahihi kamili wa kusoma shinikizo kama + -1 hPa kwa joto kati ya 0 C na 65 C.

Usahihi wa unyevu hutolewa kwenye karatasi kama + -3% RH, na + -1% hysteresis.

Inavyofanya kazi

Baiti 24 za data ya kiwango cha joto na shinikizo, na pia katika kesi ya BME280 baiti 8 za data ya upimaji unyevu, zinapaswa kusomwa kutoka kwa kifaa na kuhifadhiwa katika vigeuzi. Takwimu hizi zimepangwa kwenye kifaa kwenye kiwanda, kwa hivyo vifaa tofauti vina maadili tofauti - angalau kwa vigezo kadhaa. BME / P280 inaweza kuwa katika moja ya majimbo mawili. Katika hali moja ni kupima. Katika hali nyingine ni kusubiri (kulala).

Hali ambayo iko inaweza kuchunguzwa kwa kuangalia kidogo 3 ya rejista 0xF3.

Matokeo ya kipimo cha hivi karibuni yanaweza kupatikana wakati wowote kwa kusoma thamani inayofanana ya data, bila kujali ikiwa kifaa kimelala au kinapima.

Pia kuna njia mbili za kuendesha BME / P280. Moja ni Njia inayoendelea (iitwayo Hali ya kawaida kwenye karatasi ya data) ambayo huzunguka mara kwa mara kati ya Majimbo ya Kupima na Kulala. Katika hali hii kifaa hufanya seti ya vipimo, kisha hulala, kisha huamka kwa seti nyingine ya vipimo, na kadhalika. Idadi ya vipimo vya mtu binafsi na muda wa sehemu ya kulala ya mzunguko inaweza kudhibitiwa kupitia rejista za usanidi.

Njia nyingine ya kuendesha BME / P280 ni hali ya Shot Moja (inayoitwa mode ya kulazimishwa kwenye karatasi ya data). Katika hali hii kifaa kimeamshwa kutoka kwa usingizi kwa amri ya kupima, hufanya vipimo kadhaa, kisha kurudi kulala. Idadi ya vipimo vya mtu binafsi katika seti inadhibitiwa katika amri ya usanidi inayoamsha kifaa.

Katika BMP280, ikiwa kipimo kimoja kimefanywa, bits 16 muhimu zaidi katika dhamana zina idadi ya watu, na bits nne muhimu zaidi kwenye usomaji wa thamani zote ni zero. Idadi ya vipimo inaweza kuwekwa kwa 1, 2, 4, 8 au 16 na kadri idadi ya vipimo inavyoongezeka, idadi ya bits zilizo na data huongezeka, ili kwamba kwa vipimo 16 bits zote 20 zimejaa data ya kipimo. Karatasi ya data inahusu mchakato huu kama kupindukia.

Katika BME280, mpangilio huo unatumika kwa muda mrefu ikiwa matokeo hayachujwi. Ikiwa kuchuja kunatumiwa, maadili daima ni bits 20, bila kujali ni vipimo vingapi vinachukuliwa katika kila mzunguko wa kipimo.

Kila kipimo cha mtu binafsi huchukua karibu millisecond 2 (thamani ya kawaida, kiwango cha juu ni 2.3 ms). Ongeza kwa hii kichwa kilichowekwa cha karibu 2 ms (kawaida kidogo kidogo) inamaanisha kuwa mlolongo wa kipimo, ambao unaweza kuwa na vipimo 1 hadi 32 vya mtu binafsi, unaweza kuchukua kutoka 4 ms hadi 66 ms.

Karatasi ya data hutoa seti ya mchanganyiko uliopendekezwa wa joto na kupindukia shinikizo kwa matumizi anuwai.

Sajili za kudhibiti usanidi

Sajili mbili za udhibiti wa usanidi katika BMP280 ziko kwenye anwani za rejista 0xF4 na 0xF5, na zimepangwa kwa nambari 6 za udhibiti wa usanidi wa kibinafsi. 0xF4 inajumuisha:

  • Biti 3 osrs_t (pima joto 0, 1, 2, 4, 8 au mara 16);
  • Biti 3 osrs_p (pima shinikizo 0, 1, 2, 4, 8 au mara 16); na
  • Njia mbili za bits (Kulala, Kulazimishwa (yaani Risasi Moja), Kawaida (yaani kuendelea).

0xF5 inajumuisha:

  • 3 bits t_sb (muda wa kusubiri, 0.5ms hadi 4000 ms);
  • Chujio cha bits 3 (angalia chini); na
  • 1 spiw_en ambayo huchagua SPI au I2C.

Kigezo cha kichujio kinadhibiti aina ya hesabu ya kuoza ya kielelezo, au kichujio cha Infinite Impulse Response (IIR), kinachotumiwa kwa shinikizo ghafi na maadili ya kipimo cha joto (lakini sio kwa maadili ya unyevu). Mlingano hutolewa kwenye karatasi ya data. Uwasilishaji mwingine ni:

Thamani (n) = Thamani (n-1) * (K-1) / K + kipimo (n) / K

ambapo (n) inaonyesha kipimo cha hivi karibuni na thamani ya pato; na K ni kigezo cha kichujio. Kigezo cha kichungi K na inaweza kuwekwa kwa 1, 2, 4, 8 au 16. Ikiwa K imewekwa kwa 1 equation inakuwa Thamani (n) = kipimo (n). Uwekaji wa nambari ya kichungi ni:

  • chujio = 000, K = 1
  • chujio = 001, K = 2
  • chujio = 010, K = 4
  • chujio = 011, K = 8
  • chujio = 1xx, K = 16

BME 280 inaongeza rejista zaidi ya kudhibiti usanidi kwenye anwani 0xF2, "ctrl_hum" na parameter moja ya 3-bit osrs_h (pima unyevu 0, 1, 2, 4, 8 au mara 16).

Hatua ya 4: Upimaji na Muda wa Kusoma

Ninapanga kuongeza hii baadaye, kuonyesha wakati wa amri na majibu ya kipimo.

Iddt - sasa katika kipimo cha joto. Thamani ya kawaida 325 uA

Iddp - sasa kwa kipimo cha shinikizo. Thamani ya kawaida 720 uA, max 1120 uA

Iddsb - sasa katika hali ya kusubiri. Thamani ya kawaida 0.2 uA, max 0.5 uA

Iddsl - ya sasa katika hali ya kulala. Thamani ya kawaida 0.1 uA, max 0.3 uA

Hatua ya 5: Miongozo ya Programu

Miongozo ya Programu
Miongozo ya Programu
Miongozo ya Programu
Miongozo ya Programu

Njia ya kupasuka ya I2C

Karatasi ya data ya BMP280 hutoa mwongozo kuhusu usomaji wa data (kifungu 3.9). Inasema "inashauriwa sana kutumia kusoma kupasuka na sio kushughulikia kila rejista moja kwa moja. Hii itazuia mchanganyiko wa baiti za vipimo tofauti na kupunguza trafiki ya kiolesura." Hakuna mwongozo unaotolewa kuhusu usomaji wa vigezo vya fidia / calibration. Labda haya sio suala kwa sababu ni tuli na hayabadiliki.

Maktaba hii inasoma maadili yote yanayofanana katika operesheni moja ya kusoma - ka 24 kwa hali ya joto na shinikizo la vigezo vya fidia, ka 6 kwa joto na shinikizo pamoja, na ka 8 za unyevu, joto na shinikizo pamoja. Wakati joto peke yake linachunguzwa, ni ka 3 tu ndizo zinazosomwa.

Matumizi ya macros (#fafanua nk.)

Hakuna macros katika maktaba hii zaidi ya maktaba ya kawaida "ni pamoja na walinzi" jumla ambayo inazuia kurudia.

Viboreshaji vyote hufafanuliwa kwa kutumia neno kuu la const, na uchapishaji wa utatuzi unadhibitiwa na kazi za kawaida C.

Kimekuwa chanzo cha kutokuwa na uhakika kwangu, lakini ushauri ninaopata kutoka kwa kusoma machapisho mengi juu ya mada hii ni kwamba utumiaji wa #fasili kwa tangazo la mara kwa mara (angalau) na (labda) utatuzi wa uchapishaji wa utatuzi hauhitajiki na hauhitajiki.

Kesi ya utumiaji wa const badala ya #fasili iko wazi kabisa - const hutumia rasilimali sawa na #fasili (yaani nil) na maadili yanayofuata hufuata sheria za upeo, na hivyo kupunguza nafasi ya makosa.

Kesi ya udhibiti wa uchapishaji wa utatuzi iko wazi kidogo, kwa sababu njia niliyoifanya inamaanisha kuwa nambari ya mwisho ina mantiki ya taarifa za uchapishaji wa utatuzi, ingawa hazijatumika kamwe. Ikiwa maktaba itatumiwa katika mradi mkubwa kwenye mdhibiti mdogo na kumbukumbu ndogo sana, hii inaweza kuwa shida. Kwa kuwa maendeleo yangu yalikuwa kwenye ESP8266 na kumbukumbu kubwa, hii haikuonekana kuwa suala kwangu.

Hatua ya 6: Utendaji wa Joto

Ninapanga kuongeza hii baadaye.

Hatua ya 7: Utendaji wa Shinikizo

Ninapanga kuongeza hii baadaye.

Ilipendekeza: