基于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灯,实现多种灯光变换效果。
硬件组件
- Arduino Uno:作为项目的控制核心。
- 0.96英寸OLED显示屏(I2C接口):显示时间、温湿度信息。
- DS3231实时时钟模块:提供准确的时间信息。
- DHT11温湿度传感器:监测环境的温度和湿度。
- 红色、黄色、绿色、蓝色、白色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;
}
}
项目功能
- 温湿度监测:通过DHT11传感器实时监测环境的温度和湿度,并将结果显示在OLED显示屏上。
- 时间显示:DS3231实时时钟模块提供准确的时间信息,并将当前时间显示在OLED显示屏上。
- LED灯光秀:
- 顺序点亮:依次点亮红色、黄色、绿色、蓝色和白色LED。
- 交替闪烁:红色、绿色、白色LED交替闪烁,黄色、蓝色LED交替闪烁。
- 全部点亮:所有LED同时点亮。
- 全部关闭:所有LED同时关闭。
- 随机闪烁:每个LED随机点亮或关闭,实现随机闪烁效果。
- OLED显示:OLED显示屏用于显示当前时间、温湿度信息,方便用户实时查看环境状态。
热门推荐
海关编码:企业通关的秘密武器
2025年十二生肖运势全解析:谁将乘风破浪?
文化中国行|春晚惊艳背后的传统文化密码,你懂了吗?
2025央视春晚:科技重构与文明共融的非遗新篇
科学罐头电路积木:让孩子轻松玩转电学!
HSE综合管理系统如何实现定制化
一套可落地的 HSE 管理系统,能够为化工企业安全管理带来什么?
桂林全州重走长征路,800余人开启4天红色之旅
业绩长虹:职场祝福语大集合
研究发现:每日碳水摄入量达到这个比例,能有效对抗衰老
《主持人大赛》教你写好嘉宾介绍串词
冬天洗澡的正确方式:5个注意事项+8种不宜洗澡的情况
一天洗一次澡,与一周洗一次澡的人,哪种更健康?
中老年人洗澡指南:5个关键点,守护健康与安全
葱爆羊肉的营养密码:高蛋白、低脂肪的健康之选
肖战:在批评与争议中成长
肖战新片领跑春节档,角色突破引期待
肖战新片票房夺冠,口碑却翻车?
《哪吒2》能否超越《星战7》,创造票房奇迹?
心学问心理教育,兴趣导向学习:以孩子的兴趣为驱动力,激发学习潜能
长白山G331沿线:一条公路串起的生态守护
揭秘朱棣八字:从命理看靖难之役与永乐盛世
山东东营:志愿者开展情暖环卫工,爱心送汤圆活动
媒体:中国电影国际竞争路还很长 续拍与共鸣是关键
冬季养生新选择:糯米食谱助力防感冒
感冒期间必吃的食物清单:医生推荐的饮食指南
多个热门概念傍身引机构热炒 岩山科技股价“四连板”
全人教育:关注孩子全面发展,培养综合素质人才
从‘听话’到‘对话’:构建平等尊重的亲子沟通模式
景区濒临破产和络绎不绝只差一个文旅AI技术?