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

基于Arduino Uno的多彩LED灯光秀与环境监测系统

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

基于Arduino Uno的多彩LED灯光秀与环境监测系统

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

在这个项目中,我们将构建一个集成了多彩LED灯光秀和环境监测功能的系统。该系统将使用Arduino Uno作为核心控制器,结合0.96英寸OLED显示屏、DS3231实时时钟模块和DHT11温湿度传感器。系统将通过OLED显示屏显示当前时间和温湿度信息,同时控制红色、黄色、绿色、蓝色和白色LED灯,实现多种灯光变换效果。

硬件组件

  1. Arduino Uno:作为项目的控制核心。
  2. 0.96英寸OLED显示屏(I2C接口):显示时间、温湿度信息。
  3. DS3231实时时钟模块:提供准确的时间信息。
  4. DHT11温湿度传感器:监测环境的温度和湿度。
  5. 红色、黄色、绿色、蓝色、白色LED:用于灯光秀。

硬件连接

1. OLED显示屏(I2C接口)

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

2. DS3231实时时钟模块(I2C接口)

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

3. DHT11温湿度传感器

  • VCC连接到 Arduino Uno 的 5V 引脚
  • DATA连接到 Arduino Uno 的数字引脚 2
  • GND连接到 Arduino Uno 的 GND 引脚

4. LED

  • 红色LED: 连接到 Arduino Uno 的数字引脚 3
  • 黄色LED:连接到 Arduino Uno 的数字引脚 4
  • 绿色LED:连接到 Arduino Uno 的数字引脚 5
  • 蓝色LED:连接到 Arduino Uno 的数字引脚 6
  • 白色LED:连接到 Arduino Uno 的数字引脚 7
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include <RTClib.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
#define YELLOW_LED_PIN 4
#define GREEN_LED_PIN 5
#define BLUE_LED_PIN 6
#define WHITE_LED_PIN 7

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

void setup() {
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(YELLOW_LED_PIN, OUTPUT);
  pinMode(GREEN_LED_PIN, OUTPUT);
  pinMode(BLUE_LED_PIN, OUTPUT);
  pinMode(WHITE_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(); // 清除画面
  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // 使用编译日期和时间
  }
}

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;
  }
  DateTime now = rtc.now();
  display.clearDisplay(); // 清除画面
  display.setTextSize(1); // 设置文本大小
  display.setTextColor(SSD1306_WHITE); // 设置文本颜色
  display.setCursor(0,10); // 设置文本开始的坐标
  display.cp437(true); // 使用扩展字符集
  display.println(F("LED Light Show & Env Monitor")); // 显示标题
  display.print(F("Time: "));
  display.print(now.hour(), DEC);
  display.print(':');
  display.print(now.minute(), DEC);
  display.print(':');
  display.print(now.second(), DEC);
  display.println(F(" "));
  display.print(F("Temp: "));
  display.print(t);
  display.print(F("*C        Humidity: "));
  display.print(h);
  display.println(F("%"));
  display.display(); // 将以上内容显示出来
  // LED灯光秀
  ledShow();
  delay(100); // 每0.1秒更新一次
}

void ledShow() {
  static unsigned long lastTime = 0;
  static int patternIndex = 0;
  const int patternDelay = 100; // 每个模式的持续时间(毫秒)
  if (millis() - lastTime > patternDelay) {
    lastTime = millis();
    patternIndex = (patternIndex + 1) % 10; // 10种模式
  }
  switch (patternIndex) {
    case 0: // 顺序点亮
      digitalWrite(RED_LED_PIN, HIGH);
      digitalWrite(YELLOW_LED_PIN, LOW);
      digitalWrite(GREEN_LED_PIN, LOW);
      digitalWrite(BLUE_LED_PIN, LOW);
      digitalWrite(WHITE_LED_PIN, LOW);
      break;
    case 1:
      digitalWrite(RED_LED_PIN, LOW);
      digitalWrite(YELLOW_LED_PIN, HIGH);
      digitalWrite(GREEN_LED_PIN, LOW);
      digitalWrite(BLUE_LED_PIN, LOW);
      digitalWrite(WHITE_LED_PIN, LOW);
      break;
    case 2:
      digitalWrite(RED_LED_PIN, LOW);
      digitalWrite(YELLOW_LED_PIN, LOW);
      digitalWrite(GREEN_LED_PIN, HIGH);
      digitalWrite(BLUE_LED_PIN, LOW);
      digitalWrite(WHITE_LED_PIN, LOW);
      break;
    case 3:
      digitalWrite(RED_LED_PIN, LOW);
      digitalWrite(YELLOW_LED_PIN, LOW);
      digitalWrite(GREEN_LED_PIN, LOW);
      digitalWrite(BLUE_LED_PIN, HIGH);
      digitalWrite(WHITE_LED_PIN, LOW);
      break;
    case 4:
      digitalWrite(RED_LED_PIN, LOW);
      digitalWrite(YELLOW_LED_PIN, LOW);
      digitalWrite(GREEN_LED_PIN, LOW);
      digitalWrite(BLUE_LED_PIN, LOW);
      digitalWrite(WHITE_LED_PIN, HIGH);
      break;
    case 5: // 交替闪烁
      digitalWrite(RED_LED_PIN, HIGH);
      digitalWrite(YELLOW_LED_PIN, LOW);
      digitalWrite(GREEN_LED_PIN, HIGH);
      digitalWrite(BLUE_LED_PIN, LOW);
      digitalWrite(WHITE_LED_PIN, HIGH);
      break;
    case 6:
      digitalWrite(RED_LED_PIN, LOW);
      digitalWrite(YELLOW_LED_PIN, HIGH);
      digitalWrite(GREEN_LED_PIN, LOW);
      digitalWrite(BLUE_LED_PIN, HIGH);
      digitalWrite(WHITE_LED_PIN, LOW);
      break;
    case 7: // 全部点亮
      digitalWrite(RED_LED_PIN, HIGH);
      digitalWrite(YELLOW_LED_PIN, HIGH);
      digitalWrite(GREEN_LED_PIN, HIGH);
      digitalWrite(BLUE_LED_PIN, HIGH);
      digitalWrite(WHITE_LED_PIN, HIGH);
      break;
    case 8: // 全部关闭
      digitalWrite(RED_LED_PIN, LOW);
      digitalWrite(YELLOW_LED_PIN, LOW);
      digitalWrite(GREEN_LED_PIN, LOW);
      digitalWrite(BLUE_LED_PIN, LOW);
      digitalWrite(WHITE_LED_PIN, LOW);
      break;
    case 9: // 随机闪烁
      digitalWrite(RED_LED_PIN, random(2));
      digitalWrite(YELLOW_LED_PIN, random(2));
      digitalWrite(GREEN_LED_PIN, random(2));
      digitalWrite(BLUE_LED_PIN, random(2));
      digitalWrite(WHITE_LED_PIN, random(2));
      break;
  }
}  

项目功能

  1. 温湿度监测:通过DHT11传感器实时监测环境的温度和湿度,并将结果显示在OLED显示屏上。
  2. 时间显示:DS3231实时时钟模块提供准确的时间信息,并将当前时间显示在OLED显示屏上。
  3. LED灯光秀:
  • 顺序点亮:依次点亮红色、黄色、绿色、蓝色和白色LED。
  • 交替闪烁:红色、绿色、白色LED交替闪烁,黄色、蓝色LED交替闪烁。
  • 全部点亮:所有LED同时点亮。
  • 全部关闭:所有LED同时关闭。
  • 随机闪烁:每个LED随机点亮或关闭,实现随机闪烁效果。
  1. OLED显示:OLED显示屏用于显示当前时间、温湿度信息,方便用户实时查看环境状态。

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