- 2024-12-29
-
上传了资料:
Followme4-2代码
-
发表了主题帖:
【Follow me第二季第4期】任务提交帖
本帖最后由 Lucheni 于 2025-1-10 23:25 编辑
Hello大家好,我是Lucheni,很非常高兴能参加这次的活动,体验Arduino Nano RP2040 Connect开发板的乐趣。
本次活动我仅购买了单块Arduino Nano RP2040 Connect开发板,没有使用其他的模组。
本次我分别完成了任务一二三和选做一,接下来我会分别展示各个任务的实现过程。
任务一:搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!
代码流程图如下
本次的开发我依旧使用了熟悉的Arduino开发环境,毕竟是Arduino官方版本的开发板,当然用Arduino更为合适。如上图,此块Arduino和经典nano开发板略有区别,led为三色led,所以使用常规blink例程驱动三色led会有问题。
参考开发板官方Tutorials文件(https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-01-technical-reference/),RGB led是连接在W-102模块上的,所以要控制led,需要先安装WiFiNINA库。
#include <WiFiNINA.h>
然后需要在初始化函数中定义LED控制管脚
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
打开和关闭像素代码如下:
digitalWrite(LEDR, HIGH); //RED
digitalWrite(LEDG, HIGH); //GREEN
digitalWrite(LEDB, HIGH); //BLUE
digitalWrite(LEDR, LOW); //RED
digitalWrite(LEDG, LOW); //GREEN
digitalWrite(LEDB, LOW); //BLUE
串口操作则和常规Arduino完全一致
最后项目主要代码如下:实现了三色依次切换亮起,并在串口输出亮起的灯,最后三色同时亮起,同时串口输出Hello DigiKey & EEWorld!
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LEDR, HIGH); //RED
digitalWrite(LEDG, HIGH); //GREEN
digitalWrite(LEDB, HIGH); //BLUE
Serial.println("Hello DigiKey & EEWorld!");
delay(1000);
digitalWrite(LEDR, LOW); //RED
digitalWrite(LEDG, LOW); //GREEN
digitalWrite(LEDB, LOW); //BLUE
Serial.println("RED ON!");
digitalWrite(LEDR, HIGH); //RED
delay(1000);
digitalWrite(LEDR, LOW); //RED
Serial.println("GREEN ON!");
digitalWrite(LEDG, HIGH); //RED
delay(1000);
digitalWrite(LEDG, LOW); //GREEN
Serial.println("BLUE ON!");
digitalWrite(LEDB, HIGH); //RED
delay(1000);
}
任务二:调试IMU传感器,通过串口打印六轴数据
同样参考Tutorials可知,本块开发板使用了STM的LSM6DSOXTR,这是一颗IMU(惯性测量单元),具有3D数字加速度计和3D数字陀螺仪。除其他功能外,它还具有机器学习核心,可用于任何运动检测项目,例如自由落体、计步器、计步器、计步器。同时该芯片还具有嵌入式温度传感器。
代码流程图如下
要连接LSM6DSOX模块的数据,Arduino官方提供了Arduino_LSM6DSOX库(https://github.com/arduino-libraries/Arduino_LSM6DSOX),在Arudino中可以直接通过库管理器安装。
库的安装和初始化代码如下
#include <Arduino_LSM6DSOX.h>
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);
}
读取传感器数据可以使用如下代码:
加速度计数据:
float x, y, z;
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(x, y, z);
}
陀螺仪数据:
float x, y, z;
if (IMU.gyroscopeAvailable()) {
IMU.readGyroscope(x, y, z);
}
温度数据:
if (IMU.temperatureAvailable())
{
int temperature_deg = 0;
IMU.readTemperature(temperature_deg);
Serial.print("LSM6DSOX Temperature = ");
Serial.print(temperature_deg);
Serial.println(" °C");
}
因本次任务仅要求读取六轴数据,所以实际项目代码中并没有进行温度数据读取。
任务三+选做任务一:调试PDM麦克风,通过串口打印收音数据和音频波形,并体现在RGB LED上。
此开发板板载了MP34DT06JTR 麦克风,这是一款紧凑、低功耗的全向数字 MEMS 麦克风,带有 IC 接口。它具有 64 dB 的信噪比,能够感应声波,并且可以在 -40 °C 至 +85 °C 的温度下工作。
代码流程图如下
要从 MP34DT06JTR 访问数据,需要使用 Arduino Mbed OS Nano 板包中包含的 PDM 库。安装了主板包后,可以通过浏览文件 > 示例 > PDM > PDMSerialPlotter 找到PDM麦克风的工作示例。
Arudino官方为此麦克风单独写了一份Tutorial:https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-microphone-basics/
麦克风使用的主要代码如下:
static const char channels = 1;// 设置输出通道的数量。
static const int frequency = 20000;// 将采样频率设置为 20 KHz。
short sampleBuffer[512];// 读取样本,每个样本为 16 位。
PDM.begin(channels, frequency); 初始化 PDM 库。
Serial.print(sampleBuffer[i]);// 将样本打印到串行监视器/绘图仪。
选做任务一其实和任务三比较类似,任务三是将麦克风的数据输出,选做任务一则是通过led的颜色变化体现麦克风收到的声音大小。
代码中我使用了如下公式将声音大小转换为led亮度:
r=255-(abs(sampleBuffer[i])/10000)*255;
感谢DigiKey和EEWorld举办此次活动,让我有机会体验到Arduino官方开发板的乐趣!
Arudino为官方开发板开发的相关资料和教程非常细节和丰富,个人觉得这是国内相关厂商需要学习的。
代码下载链接如上:https://download.eeworld.com.cn/detail/Lucheni/635466
任务提交视频:https://training.eeworld.com.cn/video/42217
- 2024-11-01
-
回复了主题帖:
【2024 DigiKey 创意大赛】LED立方体
秦天qintian0303 发表于 2024-11-1 11:19
这个看着效果听炫酷的,这要是六面都带显示屏是不是会更好
目前是六面都是8*8的led,都是显示屏的话也行,不过tft屏幕亮度暗,可能效果反而不好
- 2024-10-31
-
发表了主题帖:
【2024 DigiKey 创意大赛】LED立方体
LED桌面立方体
作者:Lucheni
一、作品简介
本作品为led桌面立方体,类似的作品其实之前在中文互联网上出现过很多,但大多没有框架或需要外接电源。
如图左,骰子为6片pcb焊接而成,优点是集成了电池,但单面led密度仅为3*3,同时焊接的连接方式较为麻烦,若量产需要专门定制治具,外漏的金属焊接点也易与桌面的物品碰撞导致短路。
图右使用了6片RGB LED点阵屏,屏幕本身有塑料框架,屏幕间使用角码固定,使用树莓派驱动,优点为led密度高,但因为功耗大(全套设备最大功耗近60w),使用外部供电,led立方体只能固定在底座上(电源集成在底座内)
本次作品解决了一些上述的问题,基于ESP32 S3/C6,实现了6面8*8密度的立方体,体积仅为3.5*3.5cm,内置电池,可当骰子在柔软的表面扔着玩,也可放置于桌面当桌面RGB摆件。基于ESP32的WiFi功能无需重复烧录代码,通过Adafruit IO云平台即可实现显示内容更改。当然还有一些问题等待后续改进。
二、系统框图
项目流程图如上,主控为QT PY ESP32S3,板对板焊接了一片锂电池充电管理板,用于实现设备开关及锂电池充电管理功能。开发板外接了一片LIS3DH 3轴加速度传感器,用于判断姿态。项目实现过程中也测试了ICM20948,但LIS3DH成本更低,目前选择采用这款传感器。6片led屏幕分为3组,顶面和底面单独控制,中间的四面为一组串级控制。
三、各部分功能说明
代码基于CircuitPython实现,使用了如下cpy库
其中adafruit_io用于实现开发板与adafruit云平台的数据交互,adafruit_led_animation及adafruit_dotstar实现了led矩阵屏的显示控制,adafruit_lis3dh用于姿态解算。
while True:
x, y, z = lis3dh.acceleration
oriented = orientation(x, y, z)
主循环开始后先进行姿态判断,根据姿态选择当前的显示模式。
if oriented == orientations[5]: # "back" side
cube.clear_cube(True)
continue
if oriented == orientations[1]:
upside_down = True
else:
upside_down = False
若立方体被翻转,则显示翻转内容。
if not upside_down:
if cube.done_scrolling:
update_data()
cube.update(CUBE_WORD, TOP_PIXELS_COLOR, TOP_PIXELS_ON)
cube.scroll_word_and_update_top()
若正常放在桌面上,正常重Adafruit IO上更新数据,并显示。
四、作品源码
https://download.eeworld.com.cn/detail/Lucheni/634868
五、作品功能演示视频
https://training.eeworld.com.cn/video/41503
六、项目总结
感谢得捷电子和EEWORLD举办的本次活动,让我有动力实现这个想了很久的创意,后续我也会继续改进这套硬件,让他更易用。
七、其他
本次项目最大的缺点有两个
充电及下载代码需要打开顶面led板,使用type-c接口连接主控板进行充电。
成本高,使用的是带时钟信号的rgb led,成本约为0.5元一颗,全套设备用了近400颗led,光物料成本就冲着200去了
充电方式我还在试着想办法改进,led面板已经重新绘制,使用普通ws2812 led,成本会降低到100附近,同时因为项目需要的主控性能不强,目前也实现了基于esp32 c3及c6的控制,后续找到更好的充电方式后会发帖一起更新。
-
上传了资料:
LED立方体代码
- 2024-08-23
-
回复了主题帖:
【2024 DigiKey 创意大赛】物料开箱
后续补发商品已收到(手快先用了一个)
- 2024-08-15
-
回复了主题帖:
【2024 DigiKey 创意大赛】物料开箱
sipower 发表于 2024-8-15 09:25
购买的4片esp32 c6模组,这是要做分布式网络吗
没有没有,一个创意的物联网设备吧,然后原项目是基于s3的,想做到c6然后改点功能而已,c6板子要重画就备了几个
-
回复了主题帖:
【2024 DigiKey 创意大赛】物料开箱
Jacktang 发表于 2024-8-15 07:27
发货发错还不常见,给得捷联系一下吧
联系了,然后又遇到了bug,要提交附件但是文件不能超过4m,我提交了俩图片一个excel超了然后邮件一直被退回,刚刚打客服电话才搞清楚
- 2024-08-14
-
发表了主题帖:
【2024 DigiKey 创意大赛】物料开箱
感谢EEWORLD和Digikey联合举办的 【2024 DigiKey 创意大赛】,7/30公布名单两周后的今天,我终于收到了本次活动的使用物料
不过这次收到后发现物料寄错了,本来购买的4片esp32 c6模组给我发了别人订单的保险丝座(图片最右边),目前正在联系得捷官方看是补货还是作退货处理。