#include <DHT.h>
// 定义 DHT 传感器连接的引脚
#define DHTPIN1 2 // 第一个传感器连接到数字引脚 2
#define DHTPIN2 3 // 第二个传感器连接到数字引脚 3
#define RELAY_PIN D5 // 继电器控制引脚连接到 Arduino 引脚 7
// 设置传感器类型为 DHT22
#define DHTTYPE DHT22
// 定义蜂鸣器连接的引脚
#define BUZZER_PIN D4 // 假设蜂鸣器连接到数字引脚 4
// 创建两个 DHT 实例
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
float calculateAverage(float val1, float val2) {
return (val1 + val2) / 2.0; // 返回两个值的平均值,使用浮点数以保留小数部分
}
void setup() {
// 启动串口通信
Serial.begin(9600);
// 初始化两个 DHT 传感器
dht1.begin();
dht2.begin();
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
}
void loop() {
delay(1000); // 每个传感器读取之间增加一些延时
// 读取第一个传感器的湿度和温度
float humidity1 = dht1.readHumidity();
float temperature1 = dht1.readTemperature();
// 读取第二个传感器的湿度和温度
float humidity2 = dht2.readHumidity();
float temperature2 = dht2.readTemperature();
// 检查是否读取失败
if (isnan(humidity1) || isnan(temperature1) || isnan(humidity2) || isnan(temperature2)) {
Serial.println("读取失败!");
return;
}
// 打印第一个传感器的温度和湿度
Serial.print("传感器 1 - 温度: ");
Serial.print(temperature1);
Serial.print(" °C 湿度: ");
Serial.print(humidity1);
Serial.println(" %");
// 打印第二个传感器的温度和湿度
Serial.print("传感器 2 - 温度: ");
Serial.print(temperature2);
Serial.print(" °C 湿度: ");
Serial.print(humidity2);
Serial.println(" %");
float temperatureAvg = calculateAverage(temperature1,temperature2);
float humidityAvg = calculateAverage(humidity1,humidity2);
Serial.print("平均 1 - 温度: ");
Serial.print(temperatureAvg);
Serial.print(" °C 湿度: ");
Serial.print(humidityAvg);
Serial.println(" %");
// 根据温湿度值控制蜂鸣器
if (temperatureAvg > 50 || humidityAvg < 30) { // 如果第一个传感器温度超过30°C 或湿度小于20%
Serial.println("1位置警告 %");
digitalWrite(RELAY_PIN, HIGH); // 启动风扇(继电器闭合)
digitalWrite(BUZZER_PIN, HIGH); // 启动蜂鸣器
delay(250); // 蜂鸣器持续时间
digitalWrite(BUZZER_PIN, LOW); // 关闭蜂鸣器
}
else {
digitalWrite(RELAY_PIN, LOW); // 继电器关闭(风扇关闭)
noTone(BUZZER_PIN); // 否则关闭蜂鸣器
}
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6