Съдържание:

Изчисляване на влажност, налягане и температура с помощта на BME280 и фотонен интерфейс .: 6 стъпки
Изчисляване на влажност, налягане и температура с помощта на BME280 и фотонен интерфейс .: 6 стъпки

Видео: Изчисляване на влажност, налягане и температура с помощта на BME280 и фотонен интерфейс .: 6 стъпки

Видео: Изчисляване на влажност, налягане и температура с помощта на BME280 и фотонен интерфейс .: 6 стъпки
Видео: Симов Желязко Илиев Технология получение сыров и их сертификации 2024, Ноември
Anonim
Изчисляване на влажност, налягане и температура с помощта на BME280 и фотонен интерфейс
Изчисляване на влажност, налягане и температура с помощта на BME280 и фотонен интерфейс

Попадаме на различни проекти, които изискват мониторинг на температурата, налягането и влажността. Така осъзнаваме, че тези параметри всъщност играят жизненоважна роля за оценката на ефективността на работа на системата при различни атмосферни условия. Както на промишлено ниво, така и на персонални системи, оптималната температура, влажност и барометрично налягане са необходими за адекватната работа на системата.

Ето защо предоставяме пълен урок за този сензор, в този урок ще обясним работата на сензора за влажност, налягане и температура BME280 с фотон на частици.

Стъпка 1: BME280 Проучване

BME280 Проучване
BME280 Проучване

Електронният сектор засили играта си със сензора BME280, сензор за околната среда с температура, барометрично налягане и влажност! Този сензор е чудесен за всякакви метеорологични условия/околна среда и дори може да се използва в I2C.

Този прецизен сензор BME280 е най -доброто сензорно решение за измерване на влажност с ± 3% точност, барометрично налягане с ± 1 hPa абсолютна точност и температура с ± 1,0 ° C точност. Тъй като налягането се променя с надморската височина и измерванията на налягането са толкова добри, можете да го използвате и като висотомер с ± 1 метър или по -добра точност! Температурният сензор е оптимизиран за най -ниския шум и най -високата разделителна способност и се използва за температурна компенсация на сензора за налягане и може да се използва и за оценка на температурата на околната среда. Измерванията с BME280 могат да се извършват от потребителя или да се извършват на редовни интервали.

Информационен лист: Щракнете, за да визуализирате или изтеглите листа с данни на сензора BME280.

Стъпка 2: Списък на хардуерните изисквания

Списък на хардуерните изисквания
Списък на хардуерните изисквания

Използвахме изцяло части от Dcube Store, защото са лесни за използване и нещо за всичко, което се вписва добре на сантиметрова решетка, наистина ни кара да работим. Можете да използвате каквото искате, но електрическата схема ще приеме, че използвате тези части.

  • BME280 сензор I²C мини модул
  • I²C щит за частичен фотон
  • Фотон от частици
  • I²C кабел
  • Захранващ адаптер

Стъпка 3: Взаимодействие

Взаимодействие
Взаимодействие

Разделът за свързване основно обяснява необходимите кабелни връзки между сензора и фотона на частиците. Осигуряването на правилни връзки е основната необходимост, докато работите върху всяка система за желания изход. И така, необходимите връзки са както следва:

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 мини модул, достъпен от 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 ("влажност", влажност); // Инициализира I2C комуникацията като MASTER Wire.begin (); // Инициализиране на серийна комуникация, зададена скорост на предаване = 9600 Serial.begin (9600); забавяне (300); } void loop () {unsigned int b1 [24]; беззнакови int данни [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Стартиране на I2C предаване Wire.beginTransmission (Addr); // Изберете регистър на данни Wire.write ((136+i)); // Спиране на I2C предаване Wire.endTransmission (); // Заявка за 1 байт данни Wire.requestFrom (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 ++) {// Стартиране на I2C предаване Wire.beginTransmission (Addr); // Изберете регистър на данни Wire.write ((225+i)); // Спиране на I2C предаване Wire.endTransmission (); // Заявка за 1 байт данни Wire.requestFrom (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]; // Стартиране на I2C предаване Wire.beginTransmission (Addr); // Изберете регистър на данни Wire.write (161); // Спиране на I2C предаване Wire.endTransmission (); // Заявка за 1 байт данни Wire.requestFrom (Addr, 1); // Прочетете 1 байт данни, ако (Wire.available () == 1) {dig_H1 = Wire.read (); } // Стартиране на I2C предаване Wire.beginTransmission (Addr); // Изберете регистър за влажност на контрола Wire.write (0xF2); // Влажност над честотата на дискретизация = 1 Wire.write (0x01); // Спиране на I2C предаване Wire.endTransmission (); // Стартиране на I2C предаване Wire.beginTransmission (Addr); // Изберете регистър за контролно измерване Wire.write (0xF4); // Нормален режим, температура и налягане над честотата на вземане на проби = 1 Wire.write (0x27); // Спиране на I2C предаване Wire.endTransmission (); // Стартиране на I2C предаване Wire.beginTransmission (Addr); // Изберете конфигурационен регистър Wire.write (0xF5); // Време на изчакване = 1000ms Wire.write (0xA0); // Спиране на I2C предаване Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Стартиране на I2C предаване Wire.beginTransmission (Addr); // Изберете регистър на данни Wire.write ((247+i)); // Спиране на I2C предаване Wire.endTransmission (); // Заявка за 1 байт данни Wire.requestFrom (Addr, 1); // Прочетете 8 байта данни, ако (Wire.available () == 1) {data = Wire.read (); }} // Преобразуване на данни за налягане и температура в 19-битови дълги adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (дълго) (данни [2] & 0xF0)) / 16; дълъг adc_t = (((дълъг) (данни [3] & 0xFF) * 65536) + ((дълъг) (данни [4] & 0xFF) * 256) + (дълъг) (данни [5] & 0xF0)) / 16; // Конвертираме данните за влажността дълги adc_h = ((дълги) (данни [6] & 0xFF) * 256 + (дълги) (данни [7] & 0xFF)); // Изчисления на изместване на температурата double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); double var2 = ((((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * (((double) adc_t) /131072.0 - ((double) dig_T1) /8192.0)) * ((double) 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; // Изчисления на изместване на влажността double var_H = (((double) 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); ако (влажност> 100,0) {влажност = 100,0; } иначе if (влажност <0.0) {влажност = 0.0; } // Извеждане на данни към таблото за управление Particle.publish ("Температура в Целзий:", String (cTemp)); Particle.publish ("Температура по Фаренхайт:", String (fTemp)); Particle.publish ("Налягане:", Низ (налягане)); Particle.publish ("Относителна влажност:", низ (влажност)); забавяне (1000); }

Стъпка 5: Приложения:

Приложения
Приложения

BME280 сензор за температура, налягане и относителна влажност има различни индустриални приложения като мониторинг на температурата, компютърна периферна термична защита, мониторинг на налягането в промишлеността. Ние също използваме този сензор в приложенията на метеорологичните станции, както и в системата за наблюдение на оранжерии.

Други приложения могат да включват:

  1. Осъзнаване на контекста, напр. откриване на кожата, откриване на промени в стаята.
  2. Контрол на физическото състояние / благосъстояние - Предупреждение относно сухота или високи температури.
  3. Измерване на обема и въздушния поток.
  4. Управление на домашната автоматизация.
  5. Управление на отоплението, вентилацията, климатизацията (ОВК).
  6. Интернет на нещата.
  7. Подобрение на GPS (напр. Подобряване на времето до първото поправяне, мъртви сметки, откриване на наклон).
  8. Вътрешна навигация (промяна на откриване на пода, откриване на асансьор).
  9. Външна навигация, приложения за отдих и спорт.
  10. Прогноза за времето.
  11. Индикация за вертикална скорост (покачване/потъване)..

Стъпка 6: Видео урок

Гледайте нашия видеоурок, за да преминете през всички стъпки в свързването и завършването на проекта.

Следете за взаимодействащите и работещи блогове на други сензори.

Препоръчано: