气体传感器阈值报警

news/2024/11/25 21:42:29/

一氧化碳气体无色、无臭、无味,无法感觉它的存在,但它却有着致命的威胁,一氧化碳中毒的事件时常发生,我们又该如何避免悲剧的发生。
于是有了基于开源平台,使用DFRobot推出的Gravity气体传感器,搭建的气体检测报警系统。

一氧化碳阈值报警

材料清单:

  • DFRduino UNO R3
  • 一氧化碳传感器
  • 传感器扩展板
  • LCD 1602显示屏
  • 蜂鸣器

PS:所需硬件均可在DF创客商城找到

一氧化碳传感器

 PS:这是一款能够检测气体浓度的气体传感器,具有CO、O2、H2S、SO2等十余种型号,可以快速、准确的测量环境中对应气体的浓度,支持模拟量、I2C和UART三种输出方式,探头采用电化学原理,具有抗干扰能力强、稳定性高、灵敏度高等特点。广泛适用于工厂、矿井、废气处理系统等需要进行有害气体浓度检测的场景。

电路连接:
UNO R3      一氧化碳传感器
SDA   ————  D/T
SCL    ————  C/R
GND  ————  GND
5V      ————  VCC
4        ————  ALA

UNO R3      LCD 1602显示屏
A4     ————  SDA
A5     ————  SCL
GND  ————  GND
5V      ————  VCC

UNO R3       蜂鸣器
3        ————  输入
GND  ————  GND
5V      ————  VCC

电路连接

 

关键函数:

模式选择函数changeAcquireMode()

“INITIATIVE”主动上传模式,传感器1秒1次上传参数。
“PASSIVITY”被动应答模式,只有在调用数据读取函数时,传感器才会反馈一次参数。
gas.changeAcquireMode(gas.INITIATIVE)
/*gas.INITIATIVE            // 主动上传模式gas.PASSIVITY             // 被动应答模式
*/

读取气体浓度函数readGasConcentrationPPM()
通过该函数,读取气体传感器的反馈气体浓度数值。
gas.readGasConcentrationPPM();

读取探头类型函数queryGasType()
可以获取当前气体探头的类型,返回
gas.queryGasType();

阈值报警函数setThresholdAlarm()
可以配置阈值报警,当气体浓度超过设定阈值时ALA引脚跳转为设定电平。
gas.setThresholdAlarm(gas.ON, 200, gas.LOW_THRESHOLD_ALA ,gas.queryGasType());
/*gas.ON      开启gas.OFF        关闭200            设置阈值gas.LOW_THRESHOLD_ALA 报警时跳转低电平gas.HIGH_THRESHOLD_ALA 报警时跳转高电平
*/

传感器与uno通信:
使用I2C通信,将传感器上的拨码开关SEL拨到0。I2C地址默认为0x74。如果需要修改I2C地址,可通过模块上的拨码开关配置硬件I2C地址。
拨码开关与I2C地址参数对应关系如下:
  • ADDRESS_0:0x74, A0=0, A1=0
  • ADDRESS_1:0x75, A0=0, A1=1
  • ADDRESS_2:0x76, A0=1, A1=0
  • ADDRESS_3:0x77, A0=1, A1=1

 

检测报警效果:
串口监视器显示对应的气体类型/浓度/报警。当一氧化碳浓度超过阈值,屏幕显示“warning!!!”提示,同时蜂鸣器报警。

 

 

总结:
搭配传感器扩展板可以避免复杂的接线,更方便、更快速的完成项目搭建。
为保证数据精准,初次通电需要预热5分钟以上,切换通信方式和改变I2C地址后系统需要全部断电重新通电。
确保所需库文件已安装,否则程序无法通过编译。

所需要的库以及程序:
DFRobot_GasSensor库

#include "DFRobot_MultiGasSensor.h"#include <Wire.h>
#include "DFRobot_LCD.h"
#include <LiquidCrystal_I2C.h>
DFRobot_LCD lcd(16,2);
int k=0;
//默认打开,此时使用IIC通信,屏蔽之后使用软串口通信
#define I2C_COMMUNICATION#ifdef  I2C_COMMUNICATION
#define I2C_ADDRESS    0x74DFRobot_GAS_I2C gas(&Wire ,I2C_ADDRESS);
#else
#if (!defined ARDUINO_ESP32_DEV) && (!defined __SAMD21G18A__)
/**UNO:pin_2-----RXpin_3-----TX
*/SoftwareSerial mySerial(2, 3);DFRobot_GAS_SoftWareUart gas(&mySerial);
#else
/**ESP32:IO16-----RXIO17-----TX
*/DFRobot_GAS_HardWareUart gas(&Serial2); //ESP32HardwareSerial
#endif
#endif/**设置与报警引脚连接的主控引脚
*/
#define ALA_pin 4
#define IR_DETEC_PIN 3
void setup() {
/**串口初始化,用作查看打印输出
*/Serial.begin(115200);lcd.init();lcd.setCursor(2, 0);lcd.print(":");/**传感器初始化,用作初始化串口或者初始化IIC,由此时使用的通信方式来决定
*/while(!gas.begin()){Serial.println("NO Deivces !");delay(1000);}
/**获取数据模式为:主控需要向传感器请求
*/while (!gas.changeAcquireMode(gas.PASSIVITY))   //被动应答{delay(1000);}Serial.println("change acquire mode success!");/**设置传感器报警的阈值
*/while (!gas.setThresholdAlarm(gas.ON, 20, gas.HIGH_THRESHOLD_ALA ,gas.queryGasType())){                       //阈值报警开启          跳转高电平               设置气体类型Serial.println("Failed to open alarm!");delay(1000);}pinMode(ALA_pin,INPUT);pinMode(IR_DETEC_PIN,OUTPUT);digitalWrite(IR_DETEC_PIN,LOW);
}void loop() {
/**循环获取环境气体浓度,到阈值则报警
*/Serial.print(gas.queryGasType());//获取气体类型Serial.print(":");Serial.println(gas.readGasConcentrationPPM());k= gas.readGasConcentrationPPM();if (digitalRead(ALA_pin) == 1){Serial.println("warning!!!");lcd.setCursor(4, 1);lcd.print("warning!!!");digitalWrite(IR_DETEC_PIN,HIGH);}else{Serial.println("nolmal!!!");lcd.setCursor(4, 1);lcd.print("nolmal!!!");digitalWrite(IR_DETEC_PIN,LOW);}delay(200);lcd.setCursor(0, 0);lcd.print(gas.queryGasType());lcd.setCursor(4, 0);lcd.print(gas.readGasConcentrationPPM());if(k>=10)
{lcd.setCursor(9, 0);lcd.print("% vol");
}else{lcd.setCursor(8, 0);lcd.print("% vol");
}delay(1000);lcd.setCursor(0, 1);lcd.print("                       ");lcd.setCursor(4, 0);lcd.print("      ");
}


http://www.ppmy.cn/news/287830.html

相关文章

【复习笔记】FreeRTOS(四) 列表项的插入和删除

本文是FreeRTOS复习笔记的第四节&#xff0c;列表项的插入和删除。 上一篇文章&#xff1a; 【复习笔记】FreeRTOS(三)任务挂起和恢复 文章目录 一、列表和列表项1.1. 列表1.2. 列表项1.3. 迷你列表项 二、实验目的三、测试例程四、实验效果 一、列表和列表项 列表和列表项是F…

雨量水位报警站声光报警仪,水位点按需设置

雨量水位报警站由水位探测器、雨量传感器、报警灯、扩音器、太阳能板和采集传输控制器组成。实时采集水位等级&#xff0c;三个水位探测器对应3个水位等级&#xff0c;当现场水面浸没相应探测器时&#xff0c;本机会实时发出语音报警&#xff0c;同时可发送相应的预警/报警等级…

Bosun 预警配置

表达式 数据类型 Scalar: This is the simplest type, it is a single numeric value with no group associated with it. Keep in mind that an empty group, “{}” is still a group.NumberSet: A number set is a group of tagged numeric values with one value per uniq…

SPL06-001 气压计

歌尔是全球领先的MEMS厂家&#xff0c;最新推出新款气压传感器SPL06-001&#xff0c;定位精度可达5cm 手册地址 https://download.csdn.net/download/zhangxuechao_/10548473 寄存器 计算方法 举例 //气压测量速率(sample/sec),Background 模式使用 #define PM_RATE_…

立宏智能安全-Al 成像预警安全眼/安全眼/区域入侵视觉仪

Al 成像预警安全眼/安全眼/区域入侵视觉仪 AI安全成像预警 •人员入侵检测&#xff0c;检测距离6-10米 • 人员识别 • 人数识别 • 电子围栏区域设置 • 人/机分离检测 • 预警报警监控 产品选型 产品名称 产品编号 说明 其它 AI 安全成像预警眼 AIEY-1001 3E人…

钉钉预警步骤

步骤一&#xff1a;获取自定义机器人Webhook 1、选择需要添加机器人的群聊&#xff0c;然后依次单击群设置 > 智能群助手。 2、在机器人管理页面选择自定义机器人&#xff0c;输入机器人名字并选择要发送消息的群&#xff0c;同时可以为机器人设置机器人头像。 3、完成必要的…

电池报警温度客制化

电池报警温度客制化 https://www.jianshu.com/p/2d1d83c4aab8/ 1. LK启动阶段&#xff0c;有些平台会显示CHARGER_OV_INDEX \vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo\rules.mk 1 2 3 4 5 RESOURCE_OBJ_LIST \ $(BOOT_LOGO_DIR)/$(1)/$(…

SCJ-LD40 雷达水位计(平板雷达水位计)

产品简介 SCJ-LD40 雷达水位计是一款使用微波雷达技术的设备&#xff0c;可实现水位的精确的非接触式测量,设备小巧轻便&#xff0c;便于安装&#xff0c;可用于河流、明渠、水库、排污管网、水箱等液位非接触测量。 雷达水位计采用24G微带平面阵列天线&#xff0c;调频连续波…