在现代生活中,厨房是家庭中不可或缺的一部分,但同时也是安全隐患较高的区域。燃气泄漏、火灾等意外事故时有发生,给人们的生命和财产安全带来威胁。为了提高厨房的安全性,我决定利用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)) { // 地址0x3CSerial.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); // 检测火焰// 显示信息到OLEDdisplay.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); // 关闭红色LEDdigitalWrite(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); // 点亮绿色LEDdigitalWrite(redLedPin, HIGH); // 点亮红色LEDdigitalWrite(buzzerPin, LOW); // 触发蜂鸣器(低电平触发)digitalWrite(greenLedPin, LOW); // 关闭绿色LED}delay(1000); // 每秒更新一次
}