第二十四篇、基于Arduino uno,获取(MQ-2、MQ-3、MQ-4、MQ-5、MQ-6、MQ-7、MQ-8、MQ-9、MQ-135)气体传感器的原始值——结果导向

0、结果

说明:先来看看串口调试助手显示的结果,前半部分没有吹气,后半部分吹气了。第一个值是上电自适应的平均值,第二个值是实时的模拟电压值,第三个值是平均值和实时值的差值,如果是你想要的,可以接着往下看。


1、外观

 说明:虽然气体传感器有很多种类,但是原理和代码都是适用的,都是通过A0获取原始模拟电压值。


2、连线

 说明:只需要连接三根线。

  • uno————气体传感器
  •     5V--------------VCC
  • GND--------------GND
  •     A0--------------A0

3、源程序

说明:采用非阻塞方式编写,一定时间检测一次气体值,上电有自适应,还写了自适应平均值和实时值的差值,并将对应功能进行函数化,方便移植。

/****************************************气体 part****************************************/
/*
  接线:
  VCC------VCC
  GND------GND
  A0------A0

  注意:这个代码适合用于很多气体传感器,长得像麦克风或者话筒的传感器都可以用;
  传感器需要上电预热,预热的时间大概在3分钟左右,预热后传感器会有点烫,是正常的情况。
*/
#define gasPin  A0                                                               //定义模拟口A0
#define gasTimesInterval 500                                                     //500ms检测一次气体
unsigned long gasTimes = 0;                                                      //记录设备运行时间,用来控制多少时间检测一次气体
int gasVal = 0;                                                                  //实时气体值
int gasStart = 0;                                                                //自适应检测到的值
int gasAverage = 0;                                                              //自适应平均值
int gasSum = 0;                                                                  //自适应总值
int gasDiff = 0;                                                                 //平均值和实时值的差值,用来判断是否超标
/****************************************set up and loop part*********************************/
void setup() {                                                                   //程序初始化
  Serial.begin(9600);                                                            //设置波特率9600

  for (int i = 0; i < 30; i++) {                                                 //自适应获取模拟量
    gasStart = analogRead(gasPin);
    gasSum = gasSum + gasStart;                                                  //将模拟量累加
  }
  gasAverage = gasSum / 30;                                                      //求自适应的平均值
  Serial.println("设备上线!");
}
void loop() {                                                                    //程序主体循环
  getGasData();                                                                  //获取气体的值
}
/****************************************气体 part****************************************/
/*获取气体的值*/
void getGasData() {
  if (millis() - gasTimes >= gasTimesInterval) {                                //一定时间检测一次
    gasTimes = millis();

    gasVal = analogRead(gasPin);                                                //获取实时的气体模拟值
    gasDiff = gasVal - gasAverage;                                              //求差值

    Serial.print("初始平均值:");                                                 //串口输出对应的值
    Serial.print(gasAverage);                                                   //串口输出对应的值

    Serial.print(" ,实时原始值:");                                              //串口输出对应的值
    Serial.print(gasVal);                                                       //串口输出对应的值

    Serial.print(" ,两者的差值:");                                              //串口输出对应的值
    Serial.println(gasDiff);                                                    //串口输出对应的值
  }
}

4、注意事项

说明:传感器需要上电预热,预热的时间大概在3分钟左右,预热后传感器会有点烫。获取到的值是没有经过转化的原始值,如果需要具体的气体含量,可以画一个表,来写转化公式。

5、基本原理

        检测原理:气体传感器通常是基于化学反应或物理效应来检测气体浓度的,其中化学传感器可以通过一定的化学反应来将气体与参照物质进行比较,从而得到气体浓度信息;而物理传感器则是通过测量气体对电磁的吸收、反射或者透过程度等物理效应来获得气体浓度信息。
        接口方式:气体传感器的输出通常包括模拟信号和数字信号两种接口方式,其中模拟信号通过变化的电压或电流来表示气体浓度的大小;而数字信号则是将气体浓度转换成二进制0和1,以便更好地与Arduino等控制器进行通信和处理。
        驱动电路:为了能够正常使用气体传感器,还需要设计相应的驱动电路,包括传感器的电源、信号调节、滤波和放大等功能,以便能够将传感器的信号调整到适当的范围内,并与控制器进行可靠的通信。

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值