基于Arduino的厨房安全检测系统:守护家庭的智能助手
在现代生活中,厨房是家庭中不可或缺的一部分,但同时也是安全隐患较高的区域。燃气泄漏、火灾等意外事故时有发生,给人们的生命和财产安全带来威胁。为了提高厨房的安全性,我决定利用Arduino开发一套智能厨房检测管理系统,实时监测环境状态,及时发出警报,为家庭安全保驾护航。
厨房是家庭中频繁使用燃气和明火的场所,稍有不慎就可能引发火灾或燃气泄漏事故。传统的安全措施往往依赖于人工检查和简单的报警设备,这些方法不仅效率低下,而且无法实时监测和快速响应。因此,开发一个能够自动监测厨房环境、及时发现潜在危险并发出警报的智能系统显得尤为重要。
硬件连接
-
OLED显示屏(I2C接口):
-
VCC → Arduino 5V
-
GND → Arduino GND
-
SDA → Arduino A4
-
SCL → Arduino A5
-
-
DHT11温湿度传感器:
-
VCC → Arduino 5V
-
DATA → Arduino 数字引脚2
-
GND → Arduino GND
-
-
MQ4气体传感器:
-
VCC → Arduino 5V
-
GND → Arduino GND
-
AOUT → Arduino 模拟引脚A0
-
-
火焰传感器:
-
VCC → Arduino 5V
-
GND → Arduino GND
-
OUT → Arduino 数字引脚3
-
-
红色LED:
-
阳极(IN) → Arduino 数字引脚4
-
阴极 → GND
-
-
绿色LED:
-
阳极(IN) → Arduino 数字引脚5
-
阴极 → GND
-
-
蜂鸣器(低电平触发):
-
正极 → Arduino 数字引脚6
-
负极 → GND
-
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include <DHT.h>
// 初始化OLED显示屏
#define SCREEN_WIDTH 128 // OLED显示屏幕的宽度,以像素为单位
#define SCREEN_HEIGHT 64 // OLED显示屏幕的高度,以像素为单位
#define OLED_RESET -1 // 重置引脚;不使用时设置为 -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// 初始化DHT11传感器
#define DHTPIN 2 // DHT11数据引脚连接到数字引脚2
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
// 定义传感器和输出设备的引脚
const int gasPin = A0; // MQ4模拟输出引脚连接到A0
const int flamePin = 3; // 火焰传感器引脚连接到数字引脚3
const int redLedPin = 4; // 红色LED连接到数字引脚4
const int greenLedPin = 5; // 绿色LED连接到数字引脚5
const int buzzerPin = 6; // 蜂鸣器连接到数字引脚6
// 定义阈值
float gasThreshold = 0.5; // 燃气浓度阈值(根据实际调整)
void setup() {
Serial.begin(9600); // 初始化串口通信
dht.begin(); // 初始化DHT11传感器
pinMode(flamePin, INPUT); // 设置火焰传感器引脚为输入模式
pinMode(redLedPin, OUTPUT); // 设置红色LED引脚为输出模式
pinMode(greenLedPin, OUTPUT); // 设置绿色LED引脚为输出模式
pinMode(buzzerPin, OUTPUT); // 设置蜂鸣器引脚为输出模式
// 初始化OLED显示屏
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 地址0x3C
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1); // 设置文本大小
display.setTextColor(SSD1306_WHITE); // 设置文本颜色
}
void loop() {
// 读取温湿度数据
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// 读取燃气浓度
float gasValue = analogRead(gasPin) / 1023.0; // 将模拟值转换为0-1范围
bool gasDetected = (gasValue > gasThreshold); // 检测燃气是否超标
// 检测火焰
bool flameDetected = (digitalRead(flamePin) == HIGH); // 检测火焰
// 显示信息到OLED
display.clearDisplay();
display.setCursor(0, 10);
display.print(F("Temp: "));
display.print(t); // 打印温度值
display.println(F("C"));
display.print(F("Humidity: "));
display.print(h); // 打印湿度值
display.println(F("%"));
display.print(F("Gas: "));
display.println(gasDetected ? F("High") : F("Low"));
display.print(F("Flame: "));
display.println(flameDetected ? F("Safe") : F("Detected"));
display.display();
// 报警逻辑
if (gasDetected || flameDetected) {
digitalWrite(redLedPin, LOW); // 关闭红色LED
digitalWrite(buzzerPin, HIGH); // 关闭蜂鸣器
digitalWrite(greenLedPin, HIGH); // 点亮绿色LED
// 如果检测到燃气泄漏或火焰,点亮红色LED并触发蜂鸣器
// digitalWrite(redLedPin, HIGH); // 点亮红色LED
// digitalWrite(buzzerPin, LOW); // 触发蜂鸣器(低电平触发)
// digitalWrite(greenLedPin, LOW); // 关闭绿色LED
} else {
// 如果没有检测到危险情况,点亮绿色LED并关闭蜂鸣器
// digitalWrite(redLedPin, LOW); // 关闭红色LED
// digitalWrite(buzzerPin, HIGH); // 关闭蜂鸣器
// digitalWrite(greenLedPin, HIGH); // 点亮绿色LED
digitalWrite(redLedPin, HIGH); // 点亮红色LED
digitalWrite(buzzerPin, LOW); // 触发蜂鸣器(低电平触发)
digitalWrite(greenLedPin, LOW); // 关闭绿色LED
}
delay(1000); // 每秒更新一次
}