| 在本篇文章中,您将学习到如何使用Arduino开发板校准和连接MQ9气体传感器。 
  
 什么是气体传感器及其工作原理? 气体传感器(Gas Sensor)是检测环境中一种或多种气体的存在的装置。这些传感器具有广泛的应用,例如炼油厂、工业中心甚至家庭的安全系统。这些传感器可以检测可燃气体、有毒气体、污染气体等。有几种气体检测方法,最常用的是电化学传感器。这些传感器通过在其加热电极上进行化学反应并测量所产生的电流来测量特定气体的浓度。 
 MQ气体传感器系列 MQ气体传感器系列是最常用的气体传感器。这些传感器具有各种用于检测各种气体的型号,其中一些列于下表中: | 传感器名称 | 可检测气体 |  | MQ2 | 甲烷、丁烷、液化石油气、烟雾 |  | MQ3 | 酒精、甲醇、烟雾 |  | MQ8 | 氢气 |  | MQ9 | 一氧化碳、易燃气体 |  | MQ131 | 臭氧 |  | MQ135 | 空气质量 |  | MQ216 | 天然气、煤气 |  | MQ137 | 氨气 | 
 在本文中,我们将了解如何连接MQ9传感器,但它们工作的方式几乎以相同。 
  
 MQ9传感器对一氧化碳和易燃气体敏感。它可以检测出检测到浓度从10ppm到1000ppm的一氧化碳和密度从100ppm到10000ppm的可燃气体。 MQ9有一个内部加热器,如果施加5V电压,它会开始预热。 
 该传感器的内阻随着可检测气体的密度变化而变化。该值可以通过简单的电路读取。市场上的MQ9传感器模块已经实现了必要的电路,您不需要任何额外的电路。 
 连接MQ9气体传感器和Arduino 为了获得正确和准确的数据,您需要先执行以下操作: 1.    MQ9传感器需要24-48小时的预热时间。连接电源并离开所需的时间,直到准备就绪。 2.    您需要校准传感器。 
 电路连接 该模块有4个引脚。将Vcc连接到5V,GND连接到GND。 AO引脚根据气体浓度返回模拟值。如果气体浓度高于某个值,则DO引脚返回HIGH。该值可通过电路板上的电位器设置。 
  
  注意事项: 1.    请勿将此传感器暴露在水和霜中。 2.    施加高于5V的电压或将电压施加到错误的引脚可能会损坏传感器。 3.    将传感器长时间暴露在高浓度气体中可能会对其性能产生负面影响。 4.    摇晃或振动传感器可能会降低其精度。 
 如何校准MQ9气体传感器? 在使用模块之前,您必须进行校准。该传感器基于电阻比测量气体浓度。该比率包括R0(1000ppm浓度的LPG中的传感器电阻)和Rs(传感器的内部电阻随气体浓度而变化)。在洁净空气中,预热后,上传以下代码并等待约15分钟,直到R0达到固定值。 复制代码/* 
 
MQ9 Calibration 
*/ 
 
void setup() { 
  Serial.begin(9600); 
} 
  
void loop() { 
  float sensor_volt;  
  float RS_air; //  Rs in clean air 
  float R0;  // R0 in 1000 ppm LPG 
  float sensorValue; 
 
//Average   
    for(int x = 0 ; x < 100 ; x++) 
  { 
    sensorValue = sensorValue + analogRead(A0); 
  } 
  sensorValue = sensorValue/100.0; 
//-----------------------------------------------/ 
 
  sensor_volt = (sensorValue/1024)*5.0; 
  RS_air = (5.0-sensor_volt)/sensor_volt; // Depend on RL on yor module 
  R0 = RS_air/9.9; // According to MQ9 datasheet table 
   
  Serial.print("sensor_volt = "); 
  Serial.print(sensor_volt); 
  Serial.println("V");
  
  Serial.print("R0 = "); 
  Serial.println(R0); 
  delay(1000); 
}
 正如您在代码中看到的那样,我们平均从100个数据中获得了稳定的值。 然后我们测量传感器电压并根据RL阻值(例子中为5K),我们计算Rs。 然后根据数据手册中的表格,可以找到R0。 
 代码 在以下代码中,将R0替换为您在上一步中获得的值。 复制代码/* 
 
  MQ9 
 
*/ 
 
const int LED = 2; 
const int DO = 8; 
 
void setup() { 
  Serial.begin(9600); 
  pinMode(LED, OUTPUT); 
  pinMode(DO, INPUT); 
} 
 
void loop() { 
 
  int alarm = 0; 
  float sensor_volt; 
  float RS_gas; 
  float ratio; 
 //-Replace the name "R0" with the value of R0 in the demo of First Test -/ 
  float R0 = 0.91; 
 
  int sensorValue = analogRead(A0); 
  sensor_volt = ((float)sensorValue / 1024) * 5.0; 
 RS_gas = (5.0 - sensor_volt) / sensor_volt; // Depend on RL on yor module 
 
 
  ratio = RS_gas / R0; // ratio = RS/R0 
 //------------------------------------------------------------/ 
 
  Serial.print("sensor_volt = "); 
  Serial.println(sensor_volt); 
  Serial.print("RS_ratio = "); 
  Serial.println(RS_gas); 
  Serial.print("Rs/R0 = "); 
  Serial.println(ratio); 
 
  Serial.print("\n\n"); 
 
  alarm = digitalRead(DO); 
  if (alarm == 1) digitalWrite(LED, HIGH); 
  else if (alarm == 0) digitalWrite(LED, LOW); 
 
  delay(1000); 
 
}
  
 以上就是本篇文章的全部内容。接下来,您可以制作一个智能的CO泄漏通知程序。如果遇到问题,请随时在本帖下面进行回复。 |