一板网电子技术论坛

风筝
发表于: 2018-8-7 11:10:04 | 显示全部楼层

在本篇文章中,我们通过将火焰传感器与Arduino开发板连接起来,一步步学习使用Arduino和火焰传感器搭建火灾报警系统。火焰传感器模块包含一个用于检测光照的光电二极管和一个用于控制灵敏度的运算放大器。该模块用于检测火灾,一旦检测到火情时,它将输出高电平信号。 Arduino读取到该信号,然后打开蜂鸣器和LED报警。这里使用的火焰传感器是基于IR的火焰传感器。


火焰传感器

火焰探测器是一种设计用于探测和响应火焰或火灾的传感器。对检测到的火焰的响应方式取决于加装的设备,可以包括发出警报、停用燃料管线(例如丙烷或天然气管线),以及启动灭火系统。

Fire-or-flame-sensor-module.jpg


火焰检测有很多种不同的方法。其中一些是:紫外线探测器、近红外阵列探测器、红外(IR)探测器、红外热像仪、紫外/红外探测器等。


当火焰燃烧时,它会发出少量的红外线,这些红外线被传感器模块上的光电二极管(红外接收器)接收。然后我们使用运算放大器来检查IR接收器两端的电压变化,这样如果检测到火灾,输出引脚(DO)将输出0V(低电平),如果没有火灾,输出引脚将输出5V(高)。


在这个项目中,我们使用的是基于红外的火焰传感器。它基于YG1006传感器,是一种高速和高灵敏度的NPN硅光电晶体管。它可以检测波长范围为700nm至1000nm的红外光,其检测角度约为60°。火焰传感器模块由光电二极管(IR接收器)、电阻、电容、电位器和LM393比较器组成。可以通过改变板载电位器来调节灵敏度。工作电压介于3.3v和5v DC之间,带有数字输出。输出高电平代表发生火灾。输出低电平代表没有火灾。


以下是火焰传感器模块的引脚说明:

引脚名称
说明
VCC
3.3 - 5V电源
GND
DOUT
数字信号输出

火焰传感器的应用场所

●    氢站

●    锅炉的燃烧监视器

●    石油和天然气管道

●    汽车制造设施

●    核设施

●    飞机库

●    涡轮机罩


需要的组件

●    Arduino Uno开发板

●    火焰传感器

●    LED指示灯

●    蜂鸣器

●    电阻

●    连接导线


电路原理图

Circuit-Diagram-for-Flame-Sensor-Interfacing-with-Arduino.png


Arduino和火焰传感器的工作过程

Arduino Uno开发板是一款基于ATmega328p微控制器的开源微控制器板。它有14个数字引脚(其中6个引脚可用作PWM输出)、6个模拟输入、板载稳压器等。Arduino Uno具有32KB闪存、2KB SRAM和1KB EEPROM。它的工作频率为16MHz。 Arduino Uno支持串行、I2C、SPI通信,用于与其他设备通信。


火焰传感器根据火焰发出的红外(IR)波长检测火灾是否存在。如果检测到火焰,它将输出逻辑1,否则它将输出逻辑0。 Arduino Uno检测传感器输出引脚上的逻辑电平状态,然后执行进一步的任务,如激活蜂鸣器和LED、发送警报信息。

Circuit-Hardware-for-Flame-Sensor-Interfacing-with-Arduino.jpg


代码说明

在本文的末尾处将给出完整的Arduino代码。代码被分成小块,接下来进行详细说明。


在以下代码中,我们将定义连接到Arduino的Flame传感器、LED和蜂鸣器的引脚。火焰传感器连接到Arduino的数字引脚4。蜂鸣器连接到Arduino的数字引脚8。 LED连接到Arduino的数字引脚7。

flame_detected”变量用于存储从火焰传感器读出的数字值。基于此值,我们将检测火焰是否存在。

  1. int buzzer = 8 ;
  2. int LED = 7 ;
  3. int flame_sensor = 4 ;
  4. int flame_detected ;
复制代码

void setup()中,我们将设置Arduino的数字引脚的状态并配置与PC串行通信的波特率,用于显示火焰检测电路的状态。

  1. void setup()
  2. {
  3.   Serial.begin(9600) ;
  4.   pinMode(buzzer, OUTPUT) ;
  5.   pinMode(LED, OUTPUT) ;
  6.   pinMode(flame_sensor, INPUT) ;
  7. }
复制代码

这行代码读取火焰传感器的数字输出并将其存储在变量“flame_detected”中。

  1. flame_detected = digitalRead(flame_sensor) ;
复制代码

根据保存在“flame_detected”中的值,我们需要打开蜂鸣​​器和LED。在这部分代码中,我们将存储在“flame_detected”中的值与0或1进行比较。

如果它等于1,则表示已检测到火焰。我们需要打开蜂鸣​​器和LED,然后在Arduino IDE的串行监视器中显示警告消息。

如果它等于0,则表示没有检测到火焰,因此我们需要关闭蜂鸣器和LED。每秒重复该过程以检测火焰是否存在。

  1. if (flame_detected == 1)
  2.   {
  3.     Serial.println("Flame detected...! take action immediately.");
  4.     digitalWrite(buzzer, HIGH);
  5.     digitalWrite(LED, HIGH);
  6.     delay(200);
  7.     digitalWrite(LED, LOW);
  8.     delay(200);
  9.   }
  10.   else
  11.   {
  12.     Serial.println("No flame detected. stay cool");
  13.     digitalWrite(buzzer, LOW);
  14.     digitalWrite(LED, LOW);
  15.   }
  16.   delay(1000);
复制代码

将代码上传到Arduino开发板中,并运行程序。一个简单的火灾报警系统就搭建完成了。


代码

本文使用的完整代码如下所示:

  1. int buzzer = 8;
  2. int LED = 7;
  3. int flame_sensor = 4;
  4. int flame_detected;

  5. void setup()
  6. {
  7.   Serial.begin(9600);
  8.   pinMode(buzzer, OUTPUT);
  9.   pinMode(LED, OUTPUT);
  10.   pinMode(flame_sensor, INPUT);
  11. }

  12. void loop()
  13. {
  14.   flame_detected = digitalRead(flame_sensor);
  15.   if (flame_detected == 1)
  16.   {
  17.     Serial.println("Flame detected...! take action immediately.");
  18.     digitalWrite(buzzer, HIGH);
  19.     digitalWrite(LED, HIGH);
  20.     delay(200);
  21.     digitalWrite(LED, LOW);
  22.     delay(200);
  23.   }
  24.   else
  25.   {
  26.     Serial.println("No flame detected. stay cool");
  27.     digitalWrite(buzzer, LOW);
  28.     digitalWrite(LED, LOW);
  29.   }
  30.   delay(1000);
  31. }
复制代码
跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 123 | 回复: 162



Archiver|手机版|小黑屋|

GMT+8, 2018-8-20 01:13 , Processed in 0.031250 second(s), 32 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表