问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Arduino Uno温湿度监测项目:用LED灯和OLED屏打造智能环境提示器

创作时间:
作者:
@小白创作中心

Arduino Uno温湿度监测项目:用LED灯和OLED屏打造智能环境提示器

引用
CSDN
1.
https://blog.csdn.net/2301_78925693/article/details/145205140

在日常生活中,了解环境的温湿度对于许多场景都至关重要,比如家庭、办公室、温室种植等。通过监测温湿度,我们可以更好地调节环境,确保舒适度和适宜的生长条件。今天,我将向大家介绍一个基于Arduino Uno的简单而实用的温湿度监测项目。这个项目不仅能实时监测温湿度,还能通过LED灯和OLED显示屏直观地展示环境状态,让我们对周围环境的温湿度情况一目了然。

所需硬件

  • Arduino Uno:作为项目的控制核心,负责协调各个元件的工作。
  • 红色LED:当温湿度超过设定的高阈值时亮起,提醒我们环境过热或湿度过高。
  • 蓝色LED:当温湿度低于设定的低阈值时亮起,提示环境过冷或湿度过低。
  • DHT11温湿度传感器:用于精确测量环境的温度和湿度。
  • 0.96英寸OLED显示屏(I2C接口):清晰地显示温湿度数值及相关信息,让我们能够实时了解环境状态。

硬件连接

DHT11温湿度传感器

将DHT11的数据引脚连接到Arduino Uno的数字引脚2。

LED灯

  • 红色LED:将红色LED的IN连接到Arduino Uno的数字引脚3。
  • 蓝色LED:将蓝色LED的IN连接到Arduino Uno的数字引脚。

OLED(IIC)显示屏

  • SDA连接到Arduino Uno的A4引脚。
  • SCL引脚连接到A5引脚。
  • VCC连接到5V。
  • GND连接到GND。

编写代码

在开始编写代码之前,确保你已经安装了DHT11和OLED显示屏所需的库,如Adafruit Unified Sensor库、DHT库和Adafruit SSD1306库等。这些库可以帮助我们更方便地操作传感器和显示屏。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

#define SCREEN_WIDTH 128 // OLED显示屏幕的宽度,以像素为单位
#define SCREEN_HEIGHT 64 // OLED显示屏幕的高度,以像素为单位
#define OLED_RESET     -1 // 重置引脚,如果不使用可以设置为 -1
#define DHTPIN 2     // DHT11的数据引脚连接到数字引脚2
#define DHTTYPE DHT11   // DHT 11
#define RED_LED_PIN 3  // 红色LED连接到数字引脚3
#define BLUE_LED_PIN 4 // 蓝色LED连接到数字引脚4

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(BLUE_LED_PIN, OUTPUT);
  dht.begin();
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 这里的0x3C是OLED的I2C地址,根据实际情况调整
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // 进入无限循环,无法初始化显示屏
  }
  display.display(); // 显示启动画面
  delay(2000); // 等待2秒
  display.clearDisplay(); // 清除画面
}

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;
  }
  display.clearDisplay(); // 清除画面
  display.setTextSize(1); // 设置文本大小
  display.setTextColor(SSD1306_WHITE); // 设置文本颜色
  display.setCursor(0,10); // 设置文本开始的坐标
  display.cp437(true); // 使用扩展字符集
  display.println(F("DHT11 Test!")); // 显示标题
  display.print(F("Humidity: "));
  display.print(h);
  display.print(F("%     Temp: "));
  display.print(t);
  display.println(F("*C ")); // 显示温湿度值
  display.display(); // 将以上内容显示出来

  // 设置温湿度的高低阈值
  float tempHighThreshold = 30.0;
  float tempLowThreshold = 15.0;
  float humHighThreshold = 80.0;
  float humLowThreshold = 30.0;

  // 根据温湿度值控制LED灯
  if(t > tempHighThreshold || h > humHighThreshold){
    digitalWrite(RED_LED_PIN, HIGH);
    digitalWrite(BLUE_LED_PIN, LOW);
  }else if(t < tempLowThreshold || h < humLowThreshold){
    digitalWrite(RED_LED_PIN, LOW);
    digitalWrite(BLUE_LED_PIN, HIGH);
  }else{
    digitalWrite(RED_LED_PIN, LOW);
    digitalWrite(BLUE_LED_PIN, LOW);
  }
  delay(2000); // 等待2秒再进行下一次读取和显示
}

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号