Оглавление:

Расчет влажности, давления и температуры с использованием BME280 и взаимодействия с фотонами: 6 шагов
Расчет влажности, давления и температуры с использованием BME280 и взаимодействия с фотонами: 6 шагов

Видео: Расчет влажности, давления и температуры с использованием BME280 и взаимодействия с фотонами: 6 шагов

Видео: Расчет влажности, давления и температуры с использованием BME280 и взаимодействия с фотонами: 6 шагов
Видео: BME280 - Датчик атмосферного давления, температуры, влажности 2024, Ноябрь
Anonim
Расчет влажности, давления и температуры с использованием BME280 и Photon Interfacing
Расчет влажности, давления и температуры с использованием BME280 и Photon Interfacing

Мы сталкиваемся с различными проектами, в которых требуется мониторинг температуры, давления и влажности. Таким образом, мы понимаем, что эти параметры действительно играют жизненно важную роль в оценке эффективности работы системы при различных атмосферных условиях. Как на промышленном уровне, так и в индивидуальных системах для надлежащей работы системы требуются оптимальные уровни температуры, влажности и барометрического давления.

Вот почему мы предоставляем полное руководство по этому датчику, в этом руководстве мы собираемся объяснить работу датчика влажности, давления и температуры BME280 с фотоном частиц.

Шаг 1: Исследование BME280

BME280 Исследование
BME280 Исследование

Электронный сектор активизировал свою игру с датчиком BME280, датчиком окружающей среды с температурой, атмосферным давлением и влажностью! Этот датчик отлично подходит для всех видов зондирования погоды / окружающей среды и даже может использоваться в I2C.

Этот прецизионный датчик BME280 - лучшее решение для измерения влажности с точностью ± 3%, атмосферного давления с абсолютной точностью ± 1 гПа и температуры с точностью ± 1,0 ° C. Поскольку давление меняется с высотой, а измерения давления настолько хороши, вы также можете использовать его в качестве высотомера с точностью ± 1 метр или лучше! Датчик температуры оптимизирован для минимального шума и самого высокого разрешения и используется для температурной компенсации датчик давления, а также может использоваться для оценки температуры окружающей среды. Измерения с помощью BME280 могут выполняться пользователем или через регулярные интервалы времени.

Техническое описание: Нажмите, чтобы просмотреть или загрузить техническое описание датчика BME280.

Шаг 2: Список требований к оборудованию

Список требований к оборудованию
Список требований к оборудованию

Мы полностью использовали Dcube Store Parts, потому что они просты в использовании, и что-то во всем, что хорошо вписывается в сантиметровую сетку, действительно нас вдохновляет. Вы можете использовать все, что захотите, но схема подключения предполагает, что вы используете эти части.

  • Мини-модуль датчика BME280 I²C
  • I²C Shield для частиц фотона
  • Фотон частиц
  • Кабель 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 double cTemp = 0, fTemp = 0, давление = 0, влажность = 0; void setup () {// Устанавливаем переменную Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Particle.variable («давление», давление); 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.beginTransmission (Addr); // Выбираем регистр данных Wire.write ((136 + i)); // Остановка передачи I2C Wire.endTransmission (); // Запрос 1 байт данных Wire.requestFrom (Addr, 1); // Считываем 24 байта данных if (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.beginTransmission (Addr); // Выбираем регистр данных Wire.write ((225 + i)); // Остановка передачи I2C Wire.endTransmission (); // Запрос 1 байт данных Wire.requestFrom (Addr, 1); // Считываем 7 байтов данных if (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 байт данных if (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); // Время ожидания = 1000 мс Wire.write (0xA0); // Остановка передачи I2C Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Запустить провод передачи I2C.beginTransmission (Addr); // Выбираем регистр данных Wire.write ((247 + i)); // Остановка передачи I2C Wire.endTransmission (); // Запрос 1 байт данных Wire.requestFrom (Addr, 1); // Считываем 8 байтов данных if (Wire.available () == 1) {data = Wire.read (); }} // Преобразование данных давления и температуры в 19-битную длину adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (длинный) (данные [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Преобразование данных влажности long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [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 = ((double) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((двойной) dig_P6) / 32768.0; var2 = var2 + var1 * ((двойной) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((double) dig_P4) * 65536.0); var1 = (((двойной) dig_P3) * var1 * var1 / 524288.0 + ((двойной) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((двойной) dig_P1); double 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 + ((double) 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; } else if (влажность <0,0) {влажность = 0,0; } // Выводим данные на панель управления Particle.publish ("Температура в градусах Цельсия:", String (cTemp)); Particle.publish («Температура по Фаренгейту:», String (fTemp)); Particle.publish («Давление:», String (давление)); Particle.publish («Относительная влажность:», String (влажность)); задержка (1000); }

Шаг 5: Приложения:

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

Датчик температуры, давления и относительной влажности BME280 имеет различные промышленные применения, такие как мониторинг температуры, тепловая защита периферийных компьютеров, мониторинг давления в промышленности. Мы также использовали этот датчик в приложениях для метеостанций, а также в системах мониторинга теплиц.

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

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

Шаг 6: видеоурок

Посмотрите наш видеоурок, чтобы пройти все этапы сопряжения и завершения проекта.

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

Рекомендуемые: