Мазмуну:

BME280 жана Photon Interfacing колдонуу менен нымдуулук, басым жана температураны эсептөө: 6 кадам
BME280 жана Photon Interfacing колдонуу менен нымдуулук, басым жана температураны эсептөө: 6 кадам

Video: BME280 жана Photon Interfacing колдонуу менен нымдуулук, басым жана температураны эсептөө: 6 кадам

Video: BME280 жана Photon Interfacing колдонуу менен нымдуулук, басым жана температураны эсептөө: 6 кадам
Video: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, Ноябрь
Anonim
BME280 жана Photon Interfacing колдонуу менен нымдуулук, басым жана температураны эсептөө
BME280 жана Photon Interfacing колдонуу менен нымдуулук, басым жана температураны эсептөө

Биз температура, басым жана нымдуулуктун мониторингин талап кылган ар кандай долбоорлорго туш болобуз. Ошентип, биз бул параметрлер ар кандай атмосфералык шарттарда системанын иштөө эффективдүүлүгүн баалоодо маанилүү роль ойной турганын түшүнөбүз. Өнөр жай деңгээлинде да, жеке системада да системанын шайкеш иштеши үчүн оптималдуу температура, нымдуулук жана барометрдик басымдын деңгээли талап кылынат.

Мына ошондуктан биз бул сенсор боюнча толук окуу куралын беребиз, бул окуу куралында биз BME280 нымдуулук, басым жана температура сенсорунун бөлүкчө фотону менен иштешин түшүндүрөбүз.

1 -кадам: BME280 чалгындоо

BME280 чалгындоо
BME280 чалгындоо

Электрондук сектор BME280 сенсору, температурасы, барометрдик басымы жана нымдуулугу бар экологиялык сенсор менен оюнун күчөттү! Бул сенсор аба ырайынын бардык түрлөрү үчүн эң сонун/экологиялык сезгичтик жана ал тургай I2Cде колдонулушу мүмкүн.

Бул тактык сенсор BME280 ± 3% тактык менен нымдуулукту өлчөө үчүн эң жакшы сезгич чечим, ± 1 гПа абсолюттук тактык менен барометрдик басым жана ± 1.0 ° С тактык менен. Бийиктик менен басымдын өзгөрүшү жана басымдын өлчөөлөрү абдан жакшы болгондуктан, сиз аны ± 1 метр же жакшыраак тактык менен бийиктик катары колдоно аласыз! басым сенсору жана айлана -чөйрөнүн температурасын баалоо үчүн да колдонулушу мүмкүн. BME280 менен өлчөө колдонуучу тарабынан аткарылышы же үзгүлтүксүз аткарылышы мүмкүн.

Маалымат жадыбалы: BME280 сенсорунун маалымат барагын алдын ала көрүү же жүктөө үчүн чыкылдатыңыз.

2 -кадам: Аппараттык талаптардын тизмеси

Аппараттык талаптардын тизмеси
Аппараттык талаптардын тизмеси

Биз толугу менен Dcube дүкөнүнүн бөлүктөрүн колдондук, анткени аларды колдонуу оңой, жана сантиметрлик торго жакшы жабышкан нерселердин баары бизди чындап эле алга жылдырат. Сиз каалаган нерсеңизди колдонсоңуз болот, бирок электр схемасы бул бөлүктөрдү колдонуп жатканыңызды болжолдойт.

  • BME280 сенсор I²C Mini модулу
  • Бөлүкчө фотон үчүн I²C калканы
  • Бөлүкчө фотону
  • I²C кабели
  • Power адаптер

3 -кадам: Интерфейс

Interfacing
Interfacing

Интерфейс бөлүмү негизинен сенсор менен фотон бөлүкчөсүнүн ортосунда талап кылынган зым байланыштарын түшүндүрөт. Туура туташууларды камсыздоо каалаган өндүрүш үчүн кандайдыр бир системада иштеп жатканда негизги зарылчылык болуп саналат. Ошентип, керектүү байланыштар төмөнкүлөр:

BME280 I2C үстүндө иштейт. Бул жерде сенсордун ар бир интерфейсин кантип зым менен жабуу керектигин көрсөтүүчү зымдардын схемасы келтирилген. Кутудан тышкары, такта I2C интерфейси үчүн конфигурацияланган, андыктан эгер сиз агностик болсоңуз, бул интерфейсти колдонууну сунуштайбыз. Сизге болгону төрт зым керек! Vcc, Gnd, SCL жана SDA төөнөгүчтөрүнө төрт гана туташуу керек жана алар I2C кабелинин жардамы менен туташкан. Бул байланыштар жогорудагы сүрөттөрдө көрсөтүлгөн.

4 -кадам: Температура, басым жана нымдуулукту көзөмөлдөө коду

Температура, басым жана нымдуулукту көзөмөлдөө коду
Температура, басым жана нымдуулукту көзөмөлдөө коду
Температура, басым жана нымдуулукту көзөмөлдөө коду
Температура, басым жана нымдуулукту көзөмөлдөө коду

Муну иштетүү үчүн колдоно турган коддун таза версиясы БУЛ ЖЕРДЕ.

Сенсор модулун Arduino менен колдонуп жатканда, application.h жана spark_wiring_i2c.h китепканасын камтыйт. "application.h" жана spark_wiring_i2c.h китепканасы сенсор менен бөлүкчөнүн ортосундагы i2c байланышын жеңилдетүүчү функцияларды камтыйт.

Түзмөктү көзөмөлдөө үчүн веб -баракчаны ачуу үчүн БУЛ ЖЕРГЕ басыңыз

Тактаңызга кодду жүктөңүз, ал иштей баштайт! Бардык маалыматтарды сүрөттө көрсөтүлгөндөй веб -баракчадан алса болот.

Код төмөндө келтирилген:

// Эркин лицензия менен бөлүштүрүлгөн. // BME280 // Бул код BME280_I2CS I2C Mini Module менен иштөө үчүн ControlEverything.com жеткиликтүү. #include #include // BME280 I2C дареги 0x76 (108) #define Addr 0x76 кош cTemp = 0, fTemp = 0, басым = 0, нымдуулук = 0; void setup () {// Particle.variable өзгөрмөсүн коюу ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Бөлүкчө.өзгөрмөлүү ("басым", басым); Particle.variable ("нымдуулук", нымдуулук); // MASTER Wire.begin () катары I2C байланышын баштоо; // Serial байланышын баштоо, baud rate = 9600 Serial.begin (9600); кечигүү (300); } void loop () {unsigned int b1 [24]; кол коюлбаган int маалыматтары [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Wire.write маалымат регистрин тандоо ((136+i)); // Stop I2C Transmission Wire.endTransmission (); // Wire.requestFrom маалыматынын 1 байтын сурануу (Addr, 1); // 24 байт маалыматтарды окуңуз, эгерде (Wire.available () == 1) {b1 = Wire.read (); }} // Дайындарды которуу // темп коэффициенттери int dig_T1 = (b1 [0] & 0xff) + ((b1 [1] & 0xff) * 256); int dig_T2 = b1 [2] + (b1 [3] * 256); int dig_T3 = b1 [4] + (b1 [5] * 256); // басым коэффициенттери int dig_P1 = (b1 [6] & 0xff) + ((b1 [7] & 0xff) * 256); int dig_P2 = b1 [8] + (b1 [9] * 256); int dig_P3 = b1 [10] + (b1 [11] * 256); int dig_P4 = b1 [12] + (b1 [13] * 256); int dig_P5 = b1 [14] + (b1 [15] * 256); int dig_P6 = b1 [16] + (b1 [17] * 256); int dig_P7 = b1 [18] + (b1 [19] * 256); int dig_P8 = b1 [20] + (b1 [21] * 256); int dig_P9 = b1 [22] + (b1 [23] * 256); for (int i = 0; i <7; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Wire.write маалымат регистрин тандоо ((225+i)); // Stop I2C Transmission Wire.endTransmission (); // Wire.requestFrom маалыматынын 1 байтын сурануу (Addr, 1); // 7 байт маалыматтарды окуңуз, эгерде (Wire.available () == 1) {b1 = Wire.read (); }} // Маалыматты айландыруу // нымдуулуктун коэффициенттери int dig_H2 = b1 [0] + (b1 [1] * 256); int dig_H3 = b1 [2] & 0xFF; int dig_H4 = (b1 [3] * 16) + (b1 [4] & 0xF); int dig_H5 = (b1 [4] / 16) + (b1 [5] * 16); int dig_H6 = b1 [6]; // Start I2C Transmission Wire.beginTransmission (Addr); // Wire.write маалымат регистрин тандоо (161); // Stop I2C Transmission Wire.endTransmission (); // Wire.requestFrom маалыматынын 1 байтын сурануу (Addr, 1); // 1 байт маалыматтарды окуңуз, эгерде (Wire.available () == 1) {dig_H1 = Wire.read (); } // Start I2C Transmission Wire.beginTransmission (Addr); // Wire.write көзөмөлдөө нымдуулук регистрин тандоо (0xF2); // Сыноо ылдамдыгынан ашык нымдуулук = 1 Wire.write (0x01); // Stop I2C Transmission Wire.endTransmission (); // Start I2C Transmission Wire.beginTransmission (Addr); // Wire.write контролдук өлчөө реестрин тандаңыз (0xF4); // Кадимки режим, ылдамдык жана ылдамдык боюнча басым = 1 Wire.write (0x27); // Stop I2C Transmission Wire.endTransmission (); // Start I2C Transmission Wire.beginTransmission (Addr); // Wire.write конфигурация регистрин тандоо (0xF5); // Stand_by убактысы = 1000ms Wire.write (0xA0); // Stop I2C Transmission Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Wire.write маалымат регистрин тандоо ((247+i)); // Stop I2C Transmission Wire.endTransmission (); // Wire.requestFrom маалыматынын 1 байтын сурануу (Addr, 1); // 8 байт маалыматтарды окуңуз, эгерде (Wire.available () == 1) {data = Wire.read (); }} // Кысым жана температура маалыматтарын 19 битке айландырыңыз adc_p = (((узун) (маалымат [0] & 0xFF) * 65536) + ((узун) (маалымат [1] & 0xFF) * 256) + (узун) (маалыматтар [2] & 0xF0)) / 16; узун adc_t = (((узун) (маалыматтар [3] & 0xFF) * 65536) + ((узун) (маалыматтар [4] & 0xFF) * 256) + (узун) (маалыматтар [5] & 0xF0)) / 16; // Нымдуулук маалыматын узакка айландыруу adc_h = ((узун) (маалымат [6] & 0xFF) * 256 + (узун) (маалымат [7] & 0xFF)); // Температуранын ордун эсептөө кош var1 = (((кош) adc_t) / 16384.0 - ((кош) dig_T1) / 1024.0) * ((кош) dig_T2); кош var2 = ((((кош) adc_t) / 131072.0 - ((кош) dig_T1) / 8192.0) * (((кош) adc_t) /131072.0 - ((кош) dig_T1) /8192.0)) * ((кош) dig_T3); кош t_fine = (узун) (var1 + var2); кош cTemp = (var1 + var2) / 5120.0; кош fTemp = cTemp * 1.8 + 32; // Басымдын ордун эсептөө var1 = ((кош) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((кош) dig_P6) / 32768.0; var2 = var2 + var1 * ((кош) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((кош) dig_P4) * 65536.0); var1 = (((кош) dig_P3) * var1 * var1 / 524288.0 + ((кош) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((кош) dig_P1); кош p = 1048576.0 - (кош) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((кош) dig_P9) * p * p / 2147483648.0; var2 = p * ((кош) dig_P8) / 32768.0; кош басым = (p + (var1 + var2 + ((кош) dig_P7))) / 16.0) / 100; // Нымдуулуктун ордун толтуруу эсептери var_H = (((кош) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); кош нымдуулук = var_H * (1.0 - dig_H1 * var_H / 524288.0); if (нымдуулук> 100.0) {нымдуулук = 100.0; } else if (нымдуулук <0.0) {нымдуулук = 0.0; } // Маалыматтарды башкаруу панелине чыгаруу Particle.publish ("Цельсий боюнча температура:", String (cTemp)); Particle.publish ("Фаренгейттеги температура:", String (fTemp)); Particle.publish ("Басым:", Стринг (басым)); Particle.publish ("Салыштырмалуу нымдуулук:", String (нымдуулук)); кечигүү (1000); }

5 -кадам: Тиркемелер:

Колдонмолор
Колдонмолор

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

Башка колдонмолор төмөнкүлөрдү камтышы мүмкүн:

  1. Контексттен кабардар болуу, мис. терини аныктоо, бөлмөнүн өзгөрүшүн аныктоо.
  2. Дене -бойду чыңдоо / бакубаттуулук - Кургакчылык же жогорку температурага байланыштуу эскертүү.
  3. Көлөмдү жана аба агымын өлчөө.
  4. Үйдү автоматташтырууну башкаруу.
  5. Жылытууну, желдетүүнү, кондиционерди (HVAC) көзөмөлдөө.
  6. Интернет нерселер.
  7. GPS өркүндөтүү (мис., Убакытты биринчи оңдоону жакшыртуу, өлгөндөрдү эсепке алуу, жантаймаларды аныктоо).
  8. Үй ичиндеги навигация (полду аныктоо, лифтти аныктоо).
  9. Сыртта багыттоо, эс алуу жана спорттук тиркемелер.
  10. Аба ырайы.
  11. Тик ылдамдык көрсөткүчү (көтөрүлүү/чөгүү ылдамдыгы)..

6 -кадам: Видео үйрөткүч

Долбоорду интерфейстөө жана аяктоо боюнча бардык этаптардан өтүү үчүн биздин видео үйрөткүчтү көрүңүз.

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

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