基于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显示屏用于显示当前时间、温湿度信息,方便用户实时查看环境状态。
热门推荐
牙齿上的黑色刷不掉,轻松应对,保持口腔健康
牙齿上有黑色的线条怎么办
市盈率(PE)计算方法:市盈率的计算公式与投资评估
股市的市盈率如何进行深入的分析与研究?这种分析与研究有哪些重要意义?
朱高炽:短暂在位铸就"仁宗"之名
郑开城际铁路延长线建成通车!
进口车落地价的计算方法是什么?如何在购买进口车时合理控制成本?
漂白还是"白嫖"——数字时代,我们如何面对文艺创作"抄袭"困境?
以文化人,让孩子领略传统之美
Science Robotics综述论文:机器人技术如何帮助理解自我意识
冷热水交替洗澡的好处
亚洲运动会,亚洲体育精神的盛会
棉纱期货的价格影响因素是什么?棉纱期货如何反映纺织行业需求?
期货棉纱是什么意思?期货棉纱的市场前景如何?
Excel数据简洁化实用指南:从条件格式到公式简化
跨科收治、共享床位 能否解决住院难?
数学练习的方法与技巧
拖欠工资怎么投诉到劳动监察
春节将至,新型快递诈骗要警惕
三种养老保险到底有什么区别?一文看懂
如何选择优质的房地产开发商?这类开发商的优势和市场表现如何?
如何了解并评估一个房产项目的质量?这种评估的要点有哪些?
宝宝多大可以自主入睡
看到修复好的《圣教序》,字字清晰生动,王羲之看了都要愣两秒
“日值四离,大事勿用”,什么是离日?一年中哪些日子是离日?要了解
黄历中的“诸事不宜”:文化内涵与现代应用
长期接触“毒鸡汤”会带来哪些危害?
冠心病患者如何进行康复运动
擅自停药,危害可能比你想的更严重
猫咪简易医疗知识:必备的健康照护指南