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

知识锦囊

火焰传感器

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

空气质量传感器

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

舵机

image.png
舵机为输出模块,由直流电机,传动齿轮,集成电路和输出转轴组成,通过控制传输到电路的编码信号,可以控制舵机转动,输出转轴到特定的角度并维持特定的位置。舵机常常被用在玩具和机器人设备中,角度范围为0-180°。

实践操作

任务一:使用火焰传感器控制舵机的转动

首先我们将火焰传感器和舵机分别通过Grove线连接到主控板的A0/D0和IIC接口上。
image.png
接下来先导入舵机的库文件,下载Servo.zip文件,然后解压到ardunio的库文件夹中(文件夹地址:此电脑/文档/Arduino/libraries)完成舵机库的导入。

打开Arduino IDE,新建一个程序文件,编写以下代码:

  1. #include <Servo.h>
  2. #define FLAME_SENSOR 0 //设置火焰传感器接D0脚
  3. #define BAT_ENABLE 19 //Grove端口使能引脚
  4. Servo myservo;
  5. void setup()
  6. {
  7. pinMode(FLAME_SENSOR,INPUT);
  8. digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口
  9. myservo.attach(5);//设置舵机接D5脚(IIC接口的SCL也是D5接口)
  10. }
  11. void loop(){
  12. if(digitalRead(FLAME_SENSOR) == 1){
  13. myservo.write(0); //如果火焰传感器检测到信号舵机就转动到0度
  14. delay(100);
  15. }
  16. if(digitalRead(FLAME_SENSOR) == 0){
  17. myservo.write(90); //如果火焰传感器检测不到信号舵机就转动到90度
  18. delay(100);
  19. }
  20. }

然后,

  • 单击工具>开发板> Wio LTE
  • 单击工具>端口以选择正确的端口号。(不要选择COM1

接下来单击Arduino IDE左上方的Upload按钮,几秒钟后,程序成功上传。程序上传成功之后,尝试用打火机在传感器前方点火,观察舵机是否转动。
image.png

任务二:使用空气质量传感器控制舵机的转动

接下来我们尝试使用空气质量传感器来控制舵机打开窗户,首先将传感器和舵机正确的接入开发板上,空气质量传感器接A2/D2接口,舵机接IIC接口。
image.png
下载传感器的库文件AirQuality_Sensor,然后解压到ardunio的库文件夹中,打开Arduino IDE,新建一个程序文件,编写以下代码:

  1. #include "Air_Quality_Sensor.h"
  2. #define BAT_ENABLE 19 //Grove端口使能引脚
  3. AirQualitySensor sensor(A2);//设置空气质量传感器接A2引脚
  4. #include <Servo.h>
  5. Servo myservo;
  6. void setup(void) {
  7. digitalWrite(BAT_ENABLE, HIGH);//启用Grove端口
  8. Serial.begin(9600);
  9. while (!Serial);
  10. myservo.attach(5);
  11. Serial.println("Waiting sensor to init...");
  12. delay(5000);//开机延时5秒钟,初始化空气质量传感器
  13. if (sensor.init()) {
  14. Serial.println("Sensor ready.");//传感器工作正常
  15. } else {
  16. Serial.println("Sensor ERROR!");//传感器工作错误
  17. }
  18. }
  19. void loop(void) {
  20. int quality = sensor.slope();
  21. Serial.print("Sensor value: ");
  22. Serial.println(sensor.getValue());
  23. if(sensor.getValue() < 100){
  24. Serial.println("Fresh air");//当空气质量值小于100则判断空气好,舵机转到0度
  25. myservo.write(0);
  26. delay(100);
  27. }
  28. else if(sensor.getValue() > 100){
  29. Serial.println("High pollution!");//当空气质量值大于100则判断空气有污染,舵机转到90度
  30. myservo.write(90);
  31. delay(100);
  32. }
  33. delay(1000);
  34. }

然后,

  • 单击工具>开发板> Wio LTE
  • 单击工具>端口以选择正确的端口号。(不要选择COM1

然后,单击Arduino IDE左上方的Upload按钮,几秒钟后,程序成功上传。上传完成之后,尝试将传感器放入有害气体一段时间后,观察舵机是否正常转动。
image.png

任务三:使用火焰和空气质量同时控制舵机转动

完成火焰传感器和空气质量传感器分别控制舵机转动之后,我们是否可以同时使用两种传感器来监测信息呢?当其中任意一种检测到信号,那么就控制舵机转动打开窗户。这是当然可以的,我们可以用“逻辑或”语句来实现它。
首先正确连接传感器和舵机。
image.png
然后打开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度打开窗户。
image.png