цифровая электроника
вычислительная техника
встраиваемые системы

 



Arduino и первый интеллектуальный датчик газа BME688

Автор: Mike(admin) от 13-02-2022, 23:55

BME688 (производство Bosch Sensortec) представляет собой первый датчик газа с искусственным интеллектом (ИИ) и встроенными высоколинейными и высокоточными датчиками влажности и температуры. Данный высокоинтегрированный датчик газа способен обнаруживать летучие органические соединения, летучие соединения серы и другие газы, такие как монооксид углерода (CO) и водород в диапазоне ppb (частей на миллиард).


Arduino и первый интеллектуальный датчик газа BME688

В данном материале мы рассмотрим, как подключить датчик BME688 к Arduino и считывать соответствующую информацию.


Новый датчик BME688 обратно совместим с BME680. В дополнение ко всем функциям BME680, BME688 имеет функцию газового сканера. В стандартной конфигурации наличие летучих соединений серы обнаруживается индикаторным образом. Газовый сканер также можно настроить в отношении чувствительности, селективности, скорости передачи данных и энергопотребления. Инструмент BME AI-Studio позволяет клиентам обучать газовый сканер BME688 их конкретному применению, например, в бытовой технике, продуктах Интернета вещей (IoT) или умном доме.


Датчик газа в BM688 имеет широкую чувствительность и реагирует на большинство летучих соединений, а также на многие другие газы, загрязняющие воздух в помещении. Интенсивность сигнала обычно зависит от химической активности газов. В отличие от датчиков, селективных для одного конкретного компонента, BME688 способен измерять сумму ЛОС/загрязняющих веществ в окружающем воздухе. Это позволяет BME688 обнаруживать, например, выделение газов краской, мебелью и/или мусором, высокие уровни летучих органических соединений из-за приготовления пищи, потребления пищи, выдыхаемого воздуха и/или потоотделения.


На основе датчика BME688 выпускается плата SS-BME688#I2C SKU, которую мы будем использовать в рамках данного проекта.


Arduino и первый интеллектуальный датчик газа BME688

Подключение данной платы к Arduino производится с помощью интерфейса I2C согласно следующей схеме.


Arduino и первый интеллектуальный датчик газа BME688

Для организации работы Arduino с датчиком BM688 загрузите библиотеку BME68x Arduino отсюда: https://itbrainpower.net/downloadables/sSense_BME680.zip. Распакуйте библиотеку и установите в папку с библиотеками Arduino. Перезагрузите Arduino IDE.


Создайте папку с именем «ssense_BME688_example». Скопируйте код из BME688, приведенный далее, и вставьте его в один новый файл и сохраните файл как «ssense_BME688_example.ino» в папке, созданной ранее.



#include "sSense_BME680.h"

#define SERIAL_SPEED  19200//;

BME680_Class BME680;


float altitude(const float seaLevel=1013.25) 
{
  static float Altitude;
  int32_t temp, hum, press, gas;
  BME680.getSensorData(temp,hum,press,gas);
  Altitude = 44330.0*(1.0-pow(((float)press/100.0)/seaLevel,0.1903));
  return(Altitude);
}

float calculate_altitude( float pressure, bool metric = true, float seaLevelPressure = 101325)
{
  float altitude = NAN;
  if (!isnan(pressure) && !isnan(seaLevelPressure)){
    altitude = 1000.0 * ( seaLevelPressure - pressure ) / 3386.3752577878;
  }
  return metric ? altitude * 0.3048 : altitude;
}

float temperatureCompensatedAltitude(int32_t pressure, float temp=21.0 /*Celsius*/, float seaLevel=1013.25) 
{
  float Altitude;
  Altitude = (pow((seaLevel/((float)pressure/100.0)), (1/5.257))-1)*(temp + 273.15) / 0.0065;
  return(Altitude);
} 


void setup()
{
  DebugPort.begin(SERIAL_SPEED);
  while(!DebugPort) {delay(10);}

  //delay(1000);

  DebugPort.println("s-Sense BME68x I2C sensor.");
  DebugPort.print("- Initializing BME68x sensor\n");
  while (!BME680.begin(I2C_STANDARD_MODE))
  {
    DebugPort.println("-  Unable to find BME68x. Waiting 1 seconds.");
    delay(1000);
  }
  DebugPort.println("- Setting 16x oversampling for all sensors");
  BME680.setOversampling(TemperatureSensor,Oversample16);
  BME680.setOversampling(HumiditySensor,   Oversample16);
  BME680.setOversampling(PressureSensor,   Oversample16);
  DebugPort.println("- Setting IIR filter to a value of 4 samples");
  BME680.setIIRFilter(IIR4);
  DebugPort.println("- Setting gas measurement to 320C for 150ms");
  BME680.setGas(320,150);
  DebugPort.println();
}

void loop() 
{
  //static uint8_t loopCounter = 0;
  static int32_t temperature, humidity, pressure, gas;
  BME680.getSensorData(temperature,humidity,pressure,gas);
  DebugPort.print("\r\nSensor data >>\t\t");
  DebugPort.print(temperature/100.0,2);
  DebugPort.print("C\t");                          
  DebugPort.print(humidity/1000.0,2);
  DebugPort.print("%\t");
  DebugPort.print(pressure/100.0,2);
  DebugPort.print("hPa\t");
  //DebugPort.print(pressure);
  //DebugPort.print("Pa ");
  DebugPort.print(gas/100.0,2);
  DebugPort.println("mOhm");

  DebugPort.println("\r\nCalculated altitude");

  DebugPort.print("temp comp [CASIO equation]: ");

  //temperatureCompensatedAltitude(int32_t pressure, float temp =21.0, const float seaLevel=1013.25)
  DebugPort.print(temperatureCompensatedAltitude(pressure, temperature/100.0/*, 1022.0*/),2); 
  DebugPort.print("m\t");


  DebugPort.print("NOAA equation: ");

  //float calculate_altitude( float pressure, bool metric = true, float seaLevelPressure = 101325)
  DebugPort.print(calculate_altitude((long)pressure,true),2);
  //DebugPort.print(calculate_altitude((long)pressure,true, (long)102200.0),2);
  DebugPort.print("m\t");

  DebugPort.print("WIKI equation: ");
  DebugPort.print(altitude(),2); 
  DebugPort.println("m \r\n");

  delay(1000);
}

Скомпилируйте и загрузите код на плату Arduino. Данные датчика можно увидеть в последовательном мониторе Arduino (установите скорость на 19200 бит/с).


В код мы включили некоторую интерпретацию данных датчика (расчет высоты тремя способами): очень простой алгоритм, алгоритм на основе NOAA (функция перенесена из библиотеки BME280/BMP280 Arduino) и реализация расчета высоты CASIO – наиболее точный расчет высоты с алгоритмом температурной компенсации.


И последнее, но не менее важное: IAQ (индекс качества воздуха), селективность сканера целевого газа, данные VOC, VSC и другие функции BME688 могут быть доступны с помощью библиотеки «BSEC fusion library» и других связанных библиотек от Bosch Sensortec.




© digitrode.ru


Теги: Arduino, датчик газа




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий