亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于粒子探测器的火灾报警系统

发布时间:2021-05-11
分享到:

基于粒子探测器的火灾报警系统

发布时间:2021-05-11
分享到:

该火灾报警系统使用两个传感器,一个火焰传感器和一个按钮开关。当火焰存在于火焰传感器中时,它通过第一个氩发出信号,点亮两个氩上的红色LED。第二个氩有一个可以按下的按钮,可以触发第二个氩上的蓝色指示灯和第一个氩上的绿色指示灯。此按钮可通过粒子发送消息,即“帮助正在路上”。这就完成了两个氩之间的双向通信。

硬件组件:

  • 粒子氩
  • 火焰传感器
  • 通用串行总线到微型通用串行总线电缆
  • 试验板
  • SparkFun COM-10969
  • 电阻器套件- 1/4W(总计500)-0、100Ω电阻器
  • 发光二极管
  • 跳线
  • 火花开关按钮

电路图:

  • 红线-正电压
  • 黑色电线-接地
  • 黄线-模拟信号
  • 蓝线-混合信号
  • 红色圆圈-红色发光二极管
  • 绿色圆圈-绿色发光二极管
  • 带有黑色圆圈的红色条-火焰传感器
  • 灰色正方形,带黑色圆形按钮
  • 带标记的黄色矩形-电阻器

代码:

1)Argon1 -火焰探测器C/C++

//这是Argon1,探测火灾的房间里使用的氩气,它向外部操作员(Argon2)发送警报,操作员可以在其中发送帮助。
int ledAlert = D0; //红色LED
int ledStandby = D7; //内置蓝色LED
int ledHelp = D4; //绿色LED

int sensor = A5; //火焰探测器的模拟引脚排列

int detect = 0; //将火灾的初始模拟值设置为零
 
bool fire = false; //将初始火灾状态设置为无火灾

void setup(){ //设置引脚排列并订阅信息
    Serial.begin(9600); //代码运行所必需的
    pinMode(ledAlert, OUTPUT); //红色LED 提醒受害者发生火灾
    pinMode(ledStandby, OUTPUT); //当没有火时,蓝色指示灯保持亮起,以确保系统正常工作
    pinMode(sensor, INPUT); //火焰传感器的模拟输入
    pinMode(ledHelp,OUTPUT); //帮助的帮助信号在路上(绿色LED)
    Particle.variable("detect",detect); //声明火焰强度值的变量
    Particle.subscribe("ActionLine",actionLine); //在控制台订阅Argon2的消息
}


void loop(){ //反复循环这段代码
    detect = analogRead(sensor); //读取火焰探测器的模拟输入
    if(detect <= 2000 && fire == false){//如果现在检测到新的火灾,打开报警指示灯并向控制台发送消息。Argon2将对这些信息进行交互,并提醒操作员 
        String num = String(detect); //整数变成字符串以满足发布要求
        digitalWrite(ledAlert, HIGH); //打开红色指示灯
        digitalWrite(ledStandby, LOW); //关闭待机指示灯,再次保证系统正常运行,红色指示灯亮起不是玩笑或故障
        Particle.publish("Fire_Sensor","on_fire",PRIVATE);//向控制台发送发生火灾的消息
        Particle.publish("Fire_Value",num,PRIVATE); //通过模拟输入提供火灾强度
        fire = true; //对于fire,将变量设置为true
        delay(2000); //2秒延迟,防止控制台因消息而过载
    }
    if(fire == true && detect >= 2000){ //如果不再发生火灾,请关闭所有设备/返回待机状态
        Particle.publish("Fire_Sensor", "not_on_fire", PRIVATE); //通知控制台没有火
        digitalWrite(ledAlert, LOW); //关闭红色发光二极管
        digitalWrite(ledStandby, HIGH); //打开待机指示灯
        fire = false;  //为非火灾设置变量
    }
}

void actionLine(const char *event, const char *data){ //提取数据以供使用
    if(strcmp(data,"Help_is_on_the_way")==0){ //检查数据集,查看是否发送了消息“帮助在路上”
        digitalWrite(ledHelp, HIGH); //如果是,打开绿色LED告诉受害者
        delay(5000); //指示灯持续亮起5秒钟
        digitalWrite(ledHelp,LOW); //关闭发光二极管,防止它永远亮着
    }
}   

2)Argon2 -操作员C/C++

//这是Argon2,安全操作员为了发送帮助而使用的氩气

int ledRed = D2;//d输出-红色的发光二极管提醒操作人员房间里的氩气检测到有火灾
int button = D0;//d输入(d端口侧最底部的输入)

void setup() {
    Particle.subscribe("Fire_Sensor",isThereFire); //从火灾传感器获取发布的数据
    pinMode(ledRed, OUTPUT); //建立引出线的目的
    pinMode(button, INPUT);  //按钮脉冲接收器。还有一个蓝色LED,当按下按钮时,它会打开,以向操作员确认它是否工作。
    Serial.begin(9600); //代码工作所必需的
}

void loop() {
    if(digitalRead(button) == HIGH){ //如果按钮被按下
        Particle.publish("ActionLine","Help_is_on_the_way",PRIVATE); //向控制台发送消息,Argon1读取后打开Argon1的绿色LED
        delay(2000); //等待2秒钟,然后再次运行循环。这防止了系统从单个按钮脉冲发送垃圾消息
    }
}


void isThereFire(const char *event, const char *data){ //选择我们之前订阅的数据目录
    if(strcmp(data,"on_fire")==0){//检查数据提供的值是否与“on_fire”匹配
        digitalWrite(ledRed, HIGH); //如果数值匹配,打开发光二极管告诉操作员有火灾
    }else if(strcmp(data,"not_on_fire")==0){ //如果上述情况不成立,则运行此命令
        digitalWrite(ledRed,LOW); //灯亮了就关灯
    }
}

概述:

第一个氩包含火焰传感器模块。火焰传感器(允许在有环境光源的情况下使用)仅接收特定波长的光,该传感器通过使用0Ω电阻与氩气相连。这些电阻适用于简单的电线,仅用于传输电流。

第一块试验板上有两个LED灯。红色发光二极管用于传输信号,绿色发光二极管用于指示信号被第二氩气接收。

当火焰点燃时,第一个面包板上的红色LED会亮起。

火焰传感器在粒子中创建一个标记为“着火”的文件。

当火焰传感器被触发时,第二个面包板上的红色LED也会亮起。

第二个氩包含一个12毫米的按钮。该按钮允许实现双向通信。一个蓝色的发光二极管作为信息已发送的指示器。

收到消息,即“Help _ is _ on _ way”,表明信号已被接收。

在按下按钮的同时,第一氩打开它的绿色LED,该LED保持打开一段延迟时间,然后关闭。这就完成了两个氩的双向通信。

当处于停滞模式或没有检测到更多的火时,连接到两个氩的红色发光二极管关闭。粒子上发布了一个文件,即“不着火”。

数据图表化:

上面显示的图表是代码中定义的触发距离和强度阈值之间的线性相关性的表示。所需的模拟信号值越高,触发传感器的火焰就必须越大或越近。

项目演示:

这个视频是一个火灾报警系统的概述,这个系统是为IOT项目设计的,使用了粒子探测器。

 

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论