一、实验前言:为什么要做火焰检测实验?
火焰检测是 Arduino传感器应用 + 异常报警的经典入门项目 —— 它不仅能让你掌握模拟 / 数字传感器的信号读取,还能学会 “传感器数据判断 + 执行器反馈” 的核心逻辑。在实际生活中,这种逻辑可延伸到火灾报警器、智能灭火装置等场景。本次实验将实现 “火焰检测→LED 报警 + 蜂鸣器鸣响” 的基础功能,进阶部分会拓展火焰距离判断、串口数据可视化等实用玩法,帮你快速入门传感器类项目。
二、实验准备:物料清单(新手友好版)
|
组件名称 |
数量 |
作用说明 |
|
Arduino UNO 主板 |
1 块 |
核心控制单元 |
|
火焰传感器模块 |
1 个 |
检测火焰(火焰会产生红外光,传感器接收后输出信号) |
|
LED 灯(红 / 黄) |
2 个 |
状态反馈(无火焰绿灯亮,有火焰红灯亮) |
|
220Ω 电阻 |
2 个 |
保护 LED 灯,防止烧毁 |
|
蜂鸣器(有源) |
1 个 |
声音报警(检测到火焰时鸣响) |
|
面包板 |
1 块 |
搭建临时电路,无需焊接 |
|
杜邦线(公对母) |
10 根左右 |
连接各组件 |
|
USB 数据线 |
1 根 |
供电 + 程序上传 |
小贴士:火焰传感器模块通常有 3 个引脚(VCC、GND、DO/AO):DO 是数字输出(高 / 低电平),适合简单报警;AO 是模拟输出(0-1023 数值),可判断火焰距离;新手建议先从 DO 引脚入手,难度更低。
三、电路连接:分模块清晰接线
核心逻辑:
- 火焰传感器:检测到火焰时,DO 引脚输出低电平(部分模块为高电平,需看模块手册,本次以低电平报警为例);未检测到火焰时,DO 引脚输出高电平;
- 反馈组件:无火焰时绿灯亮,蜂鸣器不响;有火焰时红灯亮,蜂鸣器鸣响,形成双重报警。
具体接线步骤:
1. 火焰传感器接线
|
火焰传感器引脚 |
Arduino 引脚 |
作用 |
|
VCC |
5V |
供电(模块工作电压 3.3V-5V) |
|
GND |
GND |
接地 |
|
DO |
2 |
数字信号输出(核心引脚) |
|
AO |
不接 |
模拟信号输出(进阶用) |
注意:若传感器模块有调节旋钮(灵敏度调节),可先顺时针拧到中间位置,后续根据实际情况微调。
2. LED 灯与蜂鸣器接线
|
组件 |
正极连接引脚 |
负极连接方式 |
|
绿色 LED(正常) |
4 |
串联 220Ω 电阻→GND |
|
红色 LED(报警) |
5 |
串联 220Ω 电阻→GND |
|
蜂鸣器 |
3 |
直接→GND(有源蜂鸣器) |
小贴士:有源蜂鸣器正负极区分(长脚正,短脚负),接反后不发声;LED 灯仍需遵循 “长脚正、短脚负”,电阻必须串联在负极一侧。
四、代码实现:核心逻辑逐行解析
完整代码(直接复制到 Arduino IDE):
// 定义各组件引脚
const int flameDO = 2; // 火焰传感器DO引脚
const int greenLed = 4; // 绿灯(正常状态)
const int redLed = 5; // 红灯(报警状态)
const int buzzer = 3; // 蜂鸣器
void setup() {
// 初始化引脚模式
pinMode(flameDO, INPUT); // 火焰传感器为输入模式(读取信号)
pinMode(greenLed, OUTPUT); // LED为输出模式(控制亮灭)
pinMode(redLed, OUTPUT);
pinMode(buzzer, OUTPUT);
// 初始化串口(调试用,可选)
Serial.begin(9600);
Serial.println("火焰检测系统已启动,等待检测...");
// 初始状态:绿灯亮,红灯灭,蜂鸣器不响
digitalWrite(greenLed, HIGH);
digitalWrite(redLed, LOW);
digitalWrite(buzzer, LOW);
}
void loop() {
// 读取火焰传感器DO引脚信号(HIGH=无火焰,LOW=有火焰)
int flameState = digitalRead(flameDO);
// 串口打印传感器状态(调试用)
Serial.print("传感器状态:");
Serial.println(flameState == HIGH ? "无火焰(HIGH)" : "有火焰(LOW)");
// 根据传感器状态控制反馈组件
if (flameState == LOW) { // 检测到火焰
digitalWrite(greenLed, LOW); // 绿灯灭
digitalWrite(redLed, HIGH); // 红灯亮
digitalWrite(buzzer, HIGH); // 蜂鸣器鸣响
Serial.println("报警!检测到火焰!");
} else { // 未检测到火焰
digitalWrite(greenLed, HIGH); // 绿灯亮
digitalWrite(redLed, LOW); // 红灯灭
digitalWrite(buzzer, LOW); // 蜂鸣器不响
}
delay(200); // 延时200ms,稳定信号,避免误触发
}
代码核心逻辑解析:
- 引脚定义:用const int定义各组件引脚,后续修改时只需调整此处,无需改动其他代码,提高可读性。
- setup () 函数:
-
- 引脚模式初始化:传感器引脚设为INPUT(读取信号),LED 和蜂鸣器设为OUTPUT(输出控制信号);
-
- 串口初始化:用于调试时查看传感器状态,新手建议保留,方便排查问题;
-
- 初始状态设置:绿灯亮表示系统正常运行,红灯和蜂鸣器关闭。
- loop () 函数:
-
- 读取传感器信号:digitalRead(flameDO)读取 DO 引脚电平,返回HIGH(无火焰)或LOW(有火焰);
-
- 状态判断与反馈:通过if-else语句判断传感器状态,控制 LED 和蜂鸣器的亮灭 / 鸣响;
-
- 延时稳定:delay(200)避免传感器信号波动导致的误触发,可根据实际情况调整延时时间(100-500ms 均可)。
五、上传程序与调试:避坑指南
上传步骤:
- 打开 Arduino IDE,粘贴上述代码,检查是否有语法错误(红色波浪线);
- 选择开发板(Arduino Uno)和对应端口(同之前实验);
- 点击上传按钮,等待 “Done uploading” 提示。
调试步骤与技巧:
- 打开串口监视器:工具→串口监视器,波特率选择 9600,可看到 “传感器状态” 和报警提示,方便判断传感器是否正常工作;
- 测试传感器:
-
- 用打火机(或火柴)点燃火焰,靠近传感器(距离 5-20cm),观察是否红灯亮、蜂鸣器响,串口显示 “报警!检测到火焰!”;
-
- 熄灭火焰后,观察是否恢复绿灯亮、蜂鸣器不响,串口显示 “无火焰(HIGH)”;
- 常见问题排查:
-
- 传感器无响应(始终显示无火焰):
-
-
- 检查传感器 VCC 和 GND 是否接对(5V 供电,勿接 3.3V 导致功率不足);
-
-
-
- 顺时针微调传感器上的灵敏度旋钮(增强检测灵敏度);
-
-
-
- 确认火焰是否靠近传感器的探测窗口(避免遮挡);
-
-
- 误报警(无火焰时也报警):
-
-
- 逆时针微调灵敏度旋钮(降低灵敏度);
-
-
-
- 避免传感器靠近灯光(尤其是白炽灯、红外灯),灯光中的红外光可能触发传感器;
-
-
- LED 不亮 / 蜂鸣器不响:
-
-
- 检查 LED 正负极和电阻是否串联;
-
-
-
- 蜂鸣器正负极是否接反;
-
-
-
- 引脚号是否与代码一致。
-
六、进阶拓展:3 种实用玩法
1. 模拟信号读取(判断火焰距离)
利用传感器的 AO 引脚(模拟输出),读取 0-1023 的数值(数值越小,火焰越近;数值越大,火焰越远),实现距离分级报警:
const int flameAO = 6; // 新增AO引脚定义
void setup() {
pinMode(flameAO, INPUT); // AO引脚设为输入
// 其他初始化不变...
}
void loop() {
int flameAnalog = analogRead(flameAO); // 读取模拟值
Serial.print("火焰模拟值:");
Serial.println(flameAnalog);
if (flameAnalog < 300) { // 近距离火焰(<10cm)
digitalWrite(redLed, HIGH);
digitalWrite(buzzer, HIGH);
Serial.println("近距离火焰!紧急报警!");
} else if (flameAnalog < 600) { // 中距离火焰(10-20cm)
digitalWrite(redLed, HIGH);
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
delay(500); // 蜂鸣器间歇鸣响
Serial.println("中距离火焰!报警!");
} else { // 无火焰或远距离
digitalWrite(redLed, LOW);
digitalWrite(buzzer, LOW);
}
// 其他代码不变...
}
2. 手机 APP 远程报警(结合蓝牙)
增加 HC-05 蓝牙模块,将火焰检测状态发送到手机,实现远程报警:
- 蓝牙模块接线:VCC→5V,GND→GND,TX→Arduino RX(引脚 0),RX→Arduino TX(引脚 1);
- 代码修改:在if (flameState == LOW)中添加Serial.println("FIRE_ALARM"),手机通过蓝牙 APP(如 Serial Bluetooth Terminal)接收报警信息。
3. 自动灭火(结合继电器 + 小风扇)
增加 5V 继电器模块和小风扇,检测到火焰时自动启动风扇灭火:
- 继电器接线:VCC→5V,GND→GND,IN→Arduino 引脚 6,继电器输出端接小风扇;
- 代码修改:在报警逻辑中添加digitalWrite(relay, HIGH)(启动风扇),无火焰时digitalWrite(relay, LOW)(关闭风扇)。
七、实验总结:从传感器到智能系统的入门
这个实验的核心是 **“传感器信号读取→逻辑判断→执行器反馈”** 的闭环流程 —— 火焰传感器是 “感知器官”,Arduino 是 “大脑”,LED 和蜂鸣器是 “响应器官”。这种流程是所有智能硬件(如智能家居、工业检测设备)的基础,掌握后可以轻松迁移到其他传感器项目(如烟雾检测、人体感应)。
新手建议先吃透基础功能,重点理解digitalRead()读取传感器信号的逻辑,以及if-else控制执行器的方法;有基础后可以尝试进阶玩法,比如结合蓝牙、继电器拓展实用功能。如果在实验中遇到具体问题(如传感器误触发、代码报错),可以在评论区留言,附上你的接线图和串口输出信息,一起交流解决!
748

被折叠的 条评论
为什么被折叠?



