基于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显示屏用于显示当前时间、温湿度信息,方便用户实时查看环境状态。
热门推荐
国内外油气管道防腐新技术发展现状!
如何让校园足球"热"起来实现持续发展?多地积极实践交出精彩"答卷"
香港车位购买流程及按揭攻略:按揭成数、年期、入息要求详解
中国新战机引发多国关注,俄专家:这是中国军事技术的重大进步
揭秘咖啡提神的黄金法则:何时喝、怎么喝、喝多少
冠状动脉狭窄有危险吗
γ-氨基丁酸助力成长:效果、成分与日常建议
属兔与属羊的婚配情况分析:性格、属相与婚姻配对指南
水晶和玉石有没有辐射:辟邪与人体健康的综合分析
牙贴面可以改善牙齿不整齐的问题吗?我的牙齿不齐能通过牙贴面来解决吗?不建议!
QB/T 5363-2019《除螨机》行业标准试验方法简介
降低血脂时是否可以食用猪蹄?
Windows 10电脑联网但无法打开网页的解决方法
世纪好书·月榜丨《庄子:迈向超俗之境》:写给现代人的《庄子》的入门读物
文成公主《西藏镇魔图》
杏子成熟上市时间及采摘技巧(了解杏子成熟期及采摘方法,享受新鲜健康的夏日味道)
如何让理智与情感和谐共舞?
卫生间地漏哪种类型好,装修设计的关键选择
芹菜榨汁喝有什么功效?能减肥吗?为什么?
Windows 外接显示器如何消除黑边
3D技术与虚拟现实如何提升口腔解剖教学效果
思忆是什么意思?诗词中回忆主题的情感表达方式
氮化铝陶瓷是金属材料吗?
清朝末年的社会动荡
茼蒿露天种植技术
大叶茼蒿种植全攻略:掌握关键步骤,规避常见问题
JumpServer堡垒机用户角色及安全设置最佳实践
股指期货主力合约的选择标准是什么?这些标准对投资策略有何影响?
有的有的兄弟有的:不同家庭中的兄弟情谊与成长故事
元宵节起源浅析:灯火祭神与农业祭祀的双重脉络