【花雕学编程】Arduino动手做(233)---ADXL345控制WS2812灯珠

2024-10-062331
AI 快速预览详细 收起
本文介绍了如何使用ESP32-S3 UNO开发板和ADXL345加速度计控制WS2812灯珠。通过具体的硬件连接和编程示例,展示了如何利用加速度计数据动态改变LED灯的颜色。适合物联网和机器人项目的复杂应用,支持Python和C语言编程。
【花雕学编程】Arduino动手做(233)---ADXL345控制WS2812灯珠图1

ESP32-S3 UNO 开发板是基于 ESP32-S3-WROOM-1-N16R8 微控制器的扩展板,基于 Arduino 开发板架构。凭借 2.4GHz Wi-Fi 和集成蓝牙 5.0 等高级功能,它为开发各种项目提供了一个强大的平台。ESP32-S3 UNO 配备 16MB 闪存和 8MB RAM,特别适用于物联网 (IoT)、机器人和其他工程项目的复杂应用。该开发板支持 Python 和 C 等流行的编程语言,可以在 Arduino IDE 开发环境中轻松编程和使用。该板的高级功能,包括对多种通信协议的支持和高处理能力,使其成为专业工程师和开发人员的理想工具。

【花雕学编程】Arduino动手做(233)---ADXL345控制WS2812灯珠图2

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(7)
驴友花雕
驴友花雕
作者
代码要点解读
[list=1]
[*]初始化ADXL345传感器:在setup()函数中,使用accel.begin()初始化ADXL345传感器,并设置测量范围为±16G。
[*]初始化LED灯带:使用strip.begin()初始化WS2812 LED灯带,并通过strip.setBrightness(128)设置固定亮度。
[*]读取加速度数据:在loop()函数中,通过accel.getEvent(&event)读取ADXL345传感器的加速度数据。
[*]映射加速度数据到LED位置:使用map()函数将加速度数据从-16到16映射到0到7的范围,以便用于计算LED在8x8矩阵中的位置。
[*]设置LED颜色:清除所有LED后,使用strip.setPixelColor(ledIndex, strip.Color(255, 0, 0))设置目标LED的颜色为红色。
[/list]
驴友花雕
驴友花雕
作者
实验记录视频
【【花雕学编程】Arduino动手做(233)---ESP32-S3 UNO读取ADXL345的XY轴控制WS2812灯屏的单个灯珠】
https://www.bilibili.com/video/BV11f1eY8E43/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987
[media=x,500,375]https://www.bilibili.com/video/BV11f1eY8E43/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987[/media]
驴友花雕
驴友花雕
作者
实验场景图

驴友花雕
驴友花雕
作者
实验串口返回情况

驴友花雕
驴友花雕
作者
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十三:ESP32-S3 UNO开发板 双核16M+8M+Wi-Fi+蓝牙5.0+45个GPIO
{花雕动手做}项目之十四:ESP32-S3 UNO读取ADXL345的XY轴控制
WS2812灯屏的单个灯珠
实验开源代码
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十三:ESP32-S3 UNO开发板 双核16M+8M+Wi-Fi+蓝牙5.0+45个GPIO
{花雕动手做}项目之十四:ESP32-S3 UNO读取ADXL345的XY轴控制
WS2812灯屏的单个灯珠
*/
#include
#include
#include
#include
// 创建ADXL345对象
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
// 定义LED灯带
#define LED_PIN 2
#define LED_COUNT 64
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200); // 初始化串口通信,波特率为115200
Wire.begin(4, 5); // 初始化I2C总线,设置SDA为GPIO4,SCL为GPIO5
Serial.println(" ");
Serial.println("ESP32-S3 UNO准备就绪");
if (!accel.begin()) {
Serial.println("无法找到ADXL345传感器");
while (1);
}
Serial.println("ADXL345传感器初始化成功");
// 设置测量范围
accel.setRange(ADXL345_RANGE_16_G);
// 初始化LED灯带
strip.begin();
strip.setBrightness(255); // 设置固定亮度
strip.show(); // 初始化所有像素为'关'
}
void loop() {
sensors_event_t event;
accel.getEvent(&event);
// 根据加速度数据计算LED位置
int x = map(event.acceleration.x, -16, 16, 0, 7);
int y = map(event.acceleration.y, -16, 16, 0, 7);
// 计算LED在64位屏幕上的位置
int ledIndex = y * 8 + x;
// 清除所有LED
strip.clear();
// 设置目标LED颜色
strip.setPixelColor(ledIndex, strip.Color(0, 255, 0)); // 红色
// 显示LED
strip.show();
// 串口输出LED位置
Serial.print("X: ");
Serial.print(x);
Serial.print(" Y: ");
Serial.print(y);
Serial.print(" LED Index: ");
Serial.println(ledIndex);
delay(500); // 延迟100毫秒
}[/code]
驴友花雕
驴友花雕
作者
安装必要的库:
1、在Arduino IDE中安装Adafruit_Sensor和Adafruit_ADXL345_U库,用于ADXL345加速度计。
2、安装Adafruit_NeoPixel库,用于控制WS2812 LED灯带。

驴友花雕
驴友花雕
作者


- 没有更多了 -