厨房安全一直是生活中一种尖锐的问题,我们经常在新闻上看到某些厨房由于忘关煤气而失火,造成大量的生命财产损失。提高消防安全意识一直是非常重要的事情,我们要记得关闭煤气,消除安全隐患。除了自己注意用火用气安全之外,我们也可以为厨房添加第二种安全保障,让厨房变得更加安全,在本节课我们将一起来制作一个厨房安全卫士。
知识锦囊
火焰传感器

火焰传感器可用于检测波长在760nm-1100 nm范围内的火源或其他光源。它基于YG1006传感器,该传感器是一种高速,高灵敏度的NPN硅光电晶体管。由于其黑色环氧树脂的材质,该传感器对红外辐射即为敏感。在消防机器人系统中,传感器起着非常重要的作用,它可用作机器人的眼睛来寻找火源,最大检测距离为1米。当检测到前方有火焰时,则会输出高电平并且板载LED灯会点亮;当没有火焰时,则会输出低电平。
空气质量传感器

该传感器专为室内空气状况的综合监控而设计,它可以检测多种有害气体,例如一氧化碳,酒精,丙酮,稀释剂,甲醛等。
舵机

舵机为输出模块,由直流电机,传动齿轮,集成电路和输出转轴组成,通过控制传输到电路的编码信号,可以控制舵机转动,输出转轴到特定的角度并维持特定的位置。舵机常常被用在玩具和机器人设备中,角度范围为0-180°。
实践操作
任务一:使用火焰传感器控制舵机的转动
首先我们将火焰传感器和舵机分别通过Grove线连接到主控板的A0/D0和IIC接口上。
接下来先导入舵机的库文件,下载Servo.zip文件,然后解压到ardunio的库文件夹中(文件夹地址:此电脑/文档/Arduino/libraries)完成舵机库的导入。
打开Arduino IDE,新建一个程序文件,编写以下代码:
#include <Servo.h>#define FLAME_SENSOR 0 //设置火焰传感器接D0脚#define BAT_ENABLE 19 //Grove端口使能引脚Servo myservo;void setup(){pinMode(FLAME_SENSOR,INPUT);digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口myservo.attach(5);//设置舵机接D5脚(IIC接口的SCL也是D5接口)}void loop(){if(digitalRead(FLAME_SENSOR) == 1){myservo.write(0); //如果火焰传感器检测到信号舵机就转动到0度delay(100);}if(digitalRead(FLAME_SENSOR) == 0){myservo.write(90); //如果火焰传感器检测不到信号舵机就转动到90度delay(100);}}
然后,
- 单击工具>开发板> Wio LTE
- 单击工具>端口以选择正确的端口号。(不要选择COM1)
接下来单击Arduino IDE左上方的Upload按钮,几秒钟后,程序成功上传。程序上传成功之后,尝试用打火机在传感器前方点火,观察舵机是否转动。
任务二:使用空气质量传感器控制舵机的转动
接下来我们尝试使用空气质量传感器来控制舵机打开窗户,首先将传感器和舵机正确的接入开发板上,空气质量传感器接A2/D2接口,舵机接IIC接口。
下载传感器的库文件AirQuality_Sensor,然后解压到ardunio的库文件夹中,打开Arduino IDE,新建一个程序文件,编写以下代码:
#include "Air_Quality_Sensor.h"#define BAT_ENABLE 19 //Grove端口使能引脚AirQualitySensor sensor(A2);//设置空气质量传感器接A2引脚#include <Servo.h>Servo myservo;void setup(void) {digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口Serial.begin(9600);while (!Serial);myservo.attach(5);Serial.println("Waiting sensor to init...");delay(5000);//开机延时5秒钟,初始化空气质量传感器if (sensor.init()) {Serial.println("Sensor ready.");//传感器工作正常} else {Serial.println("Sensor ERROR!");//传感器工作错误}}void loop(void) {int quality = sensor.slope();Serial.print("Sensor value: ");Serial.println(sensor.getValue());if(sensor.getValue() < 100){Serial.println("Fresh air");//当空气质量值小于100则判断空气好,舵机转到0度myservo.write(0);delay(100);}else if(sensor.getValue() > 100){Serial.println("High pollution!");//当空气质量值大于100则判断空气有污染,舵机转到90度myservo.write(90);delay(100);}delay(1000);}
然后,
- 单击工具>开发板> Wio LTE
- 单击工具>端口以选择正确的端口号。(不要选择COM1)
然后,单击Arduino IDE左上方的Upload按钮,几秒钟后,程序成功上传。上传完成之后,尝试将传感器放入有害气体一段时间后,观察舵机是否正常转动。
任务三:使用火焰和空气质量同时控制舵机转动
完成火焰传感器和空气质量传感器分别控制舵机转动之后,我们是否可以同时使用两种传感器来监测信息呢?当其中任意一种检测到信号,那么就控制舵机转动打开窗户。这是当然可以的,我们可以用“逻辑或”语句来实现它。
首先正确连接传感器和舵机。
然后打开Arduino IDE,新建一个程序文件,编写以下代码:
#include "Air_Quality_Sensor.h"
#define BAT_ENABLE 19 //Grove端口使能引脚
#define FLAME_SENSOR 0 //设置火焰传感器接D0脚
AirQualitySensor sensor(2);//设置空气质量传感器接A2引脚
#include <Servo.h>
Servo myservo;
void setup(void) {
digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口
pinMode(FLAME_SENSOR,INPUT);//设置火焰传感器为输入模式
Serial.begin(9600);
while (!Serial);
myservo.attach(5);
Serial.println("Waiting sensor to init...");
delay(5000);//开机延时5秒钟,初始化空气质量传感器
if (sensor.init()) {
Serial.println("Sensor ready.");//传感器工作正常
} else {
Serial.println("Sensor ERROR!");//传感器工作错误
}
}
void loop(void) {
int quality = sensor.slope();
Serial.print("Sensor value: ");
Serial.println(sensor.getValue());
if((sensor.getValue() < 100) && (digitalRead(FLAME_SENSOR) == 1)){
Serial.println("Fresh air and no fire ");//当空气质量值小于100并且火焰传感器没有检测到火焰,则舵机转到0度
myservo.write(0);
delay(100);
}
else if((sensor.getValue() > 100) || (digitalRead(FLAME_SENSOR) == 0)){
Serial.println("High pollution or fire");//当空气质量值大于100或者火焰传感器检测到火焰,则舵机转到90度
myservo.write(90);
delay(100);
}
delay(1000);
}
然后,
- 单击工具>开发板> Wio LTE
- 单击工具>端口以选择正确的端口号。(不要选择COM1)
然后,单击Arduino IDE左上方的Upload按钮,几秒钟后,程序成功上传。
在该程序中我们用了两种逻辑符号分别是逻辑与(&&)和逻辑或(||)。当火焰传感器检测不到信号,同时空气质量传感器检测不到有害气体,那么控制舵机转动到0度关闭窗户;当火焰传感器或空气质量传感器检测到危险信号,都会控制舵机转动到90度打开窗户。
