- 2025-01-15
-
回复了主题帖:
新年新挑战,任务打卡赢好礼!
-
加入了学习《运算放大器视频教程》,观看 OPAMP运算放大器之反相输入端,共射极反相放大电路
-
回复了主题帖:
《Linux内核深度解析》-内存管理
内存管理最重要,要不都找不到目标地址或者内存泄漏
-
回复了主题帖:
[树莓派5测评]⑤安装SSD并从SSD启动+闭坑指南
没有风扇散热,纯被动散热?
-
回复了主题帖:
为什么单片机会有3.3V和5V电压等级的区分?
5V一般都是一些8位16位单片机居多,3.3V是现在最主流的
-
回复了主题帖:
【回家】你们抢到回老家的票了吗?
坚持到最后一班岗然后走回家去
-
回复了主题帖:
DIY 耳机盒爆改随身音响(一)
不如根据开发板从新打印一个结构
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
⑸立一个新年Flag
新年Flag:在2025年,我将深入学习物联网和边缘计算技术,以提升自己的专业水平和行业影响力。
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
⑷最想要什么支持?
我最希望得到更多关于物联网安全和边缘计算技术的教程和资料,以及参加相关技术论坛和交流活动的机会,以拓宽视野和深化理解。
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
⑶在崭新的2025年,最想关注什么技术?
在2025年,我最想关注物联网(IoT)和边缘计算技术
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
⑵实现了哪些目标,达成了什么成就?
完成了多个硬件开发项目,超额完成业绩指标
-
回复了主题帖:
【回顾2024,展望2025】新年抢楼活动来啦!
⑴遇到过什么技术问题,是否解决了?怎么解决的。没解决需要帮助也可以说说。
在24年的工作中,我遇到过信号干扰问题,通过优化电路布局和增加屏蔽层解决了
- 2024-12-07
-
上传了资料:
【Follow me第二季第4期】代码合集
-
发表了主题帖:
【Follow me第二季第4期】一步一步学习Arduino Nano RP2040 Connect
一、前情介绍
本次活动是DigiKey联合EEWorld发起的Follow me活动的第二季的第四期,本次活动的主角是Arduino® Nano RP2040 Connect搭载功能丰富的Raspberry Pi RP2040微控制器,将其融入到Nano尺寸封装中。充分利用双核32位Arm® Cortex®-M0+处理器,通过U-blox® Nina W102模块实现蓝牙和WiFi连接,集速度计、陀螺仪、RGB LED和麦克风于一体,是物联网应用的不错选择。
二、任务分析
本次必须使用的板卡是Arduino® Nano RP2040 Connect开发板,任务如下:
必做任务一:搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!;
必做任务二:学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据;
必做任务三:学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。
选做任务一(非必做):通过RGB LED不同颜色、亮度显示PDM麦克风收到的声音大小;
选做任务二(非必做):通过IMU数据结合机器学习算法,识别运动状态,并通过串口打印。
通过自身的情况结合任务的难易程度,本次活动选择必做任务三项,接下来我们进行一下整体的任务分析:
任务一是搭建环境和并控制三色LED和和串口打印,这一部分设计到的硬件是板载的RGB和串口接口,任务二是IMU传感器的调试和串口,任务三是PDM麦克风和串口,综合上面的硬件需求都可以通过一块开发板来实现,具体任务的详细分析在下面具体实现时候进行介绍。
三、硬件连接
本次采购的商品除了一个Arduino® Nano RP2040 Connect还有一个扩展板的底座,这个开发板还是太小了,本开发板使用的是个MicroUSB,这个有点跟不上形势了。
四、任务实现
1、任务一:搭建环境并Blink三色LED / 串口打印
环境搭建:
Arduino的官方推荐开发环境是Arduino IDE,推荐下载最新版本,注意可以下载免安装版本,也可以用网页边进行调试,我这里选择的是免安装版本:
注意版本支持!
硬件情况:
咱们先看一下板载的LED情况:
这个是本次任务控制的三色LED,通过查找发现这个LED的控制引脚连接到的是W102模块上,也就是说不是直接通过RP2040进行控制,不过Arduino内的封装控制还是一样的,我们需要额外调用一个 <WiFiNINA.h>的库文件。
串口情况:
串口打印使用的是USB的虚拟串口,这个在我们连接设备上电的时候就能看到开发板的USB串行设备。
任务目标:
本次实现的任务目标是控制三色LED的blink,如果三个灯同步的话实际上就是一个白灯(RGB混合)的亮灭,这里我们将初始状态改为蓝色,让红绿同步,同时通过串口循环打印Hello DigiKey & EEWorld!
软件实现:
首先我们要添加一下板卡支持:
然后就可以开始我们软件编写了,整体的软件流程如下:
具体测试代码如下:
#include <WiFiNINA.h>
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("Hello DigiKey & EEWorld!");
pinMode(LEDB,OUTPUT);
pinMode(LEDR,OUTPUT);
pinMode(LEDG,OUTPUT);
digitalWrite(LEDB,LOW);
digitalWrite(LEDR,LOW);
digitalWrite(LEDG,LOW);
}
void loop() {
digitalWrite(LEDB, HIGH);
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, LOW);
delay(1000);
digitalWrite(LEDB, LOW);
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, HIGH);
delay(1000);
Serial.println("Hello DigiKey & EEWorld!");
}
效果展现:
心得体会:
在初次使用基于RP2040的arduino时,可以感受到其与其他版本的部分差异,就是调试部分,我们下载到开发办的程序并没有直接运行,通过打开串口监视器后才正式运行,目前还不清楚具体原理,不过不影响我们的使用,在下载过程中可以看到像开发板的盘符写文件的操作,这个和我们调试RP2040单片机的效果也很相似的,只不过IDE帮助咱们完成了。初步体验了这款开发板的控制过程,也就是以此开始本次的学习之旅。
2、任务二:调试IMU传感器,通过串口打印六轴原始数据
硬件情况:
IMU,即惯性测量单元(Inertial Measurement Unit),是一种用于测量和报告物体的三个基本线性运动(加速度)和三个基本角运动(角速度)的电子设备,本开发板板载的IMU传感器如下:
这里使用的是ST的 LSM6DSOXTR 6轴惯性测量单元(IMU),IMU 原理是采用惯性定律实现的。本传感器包括一组加速度计和陀螺仪,他们是惯性系统的核心部件,是影响惯性系统性能的主要因素。
任务目标:
本任务主要学习IMU传感器相关知识,并通过arduino的便捷性快速调试IMU传感器,通过串口打印六轴原始数据
软件实现:
需要安装新的库支持:
IMU传感器的应用其实arduino中有详细的例程代码,我们主要学习一下具体的事项方法,软件流程如下:
具体的测试代码:
#include <Arduino_LSM6DSOX.h>
float Ax, Ay, Az;
float Gx, Gy, Gz;
void setup() {
Serial.begin(115200);
while(!Serial);
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);
}
Serial.print("Accelerometer sample rate = ");
Serial.print(IMU.accelerationSampleRate());
Serial.println("Hz");
Serial.println();
Serial.print("Gyroscope sample rate = ");
Serial.print(IMU.gyroscopeSampleRate());
Serial.println("Hz");
Serial.println();
}
void loop() {
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(Ax, Ay, Az);
Serial.print(' ');
Serial.print(Ax);
Serial.print(' ');
Serial.print(Ay);
Serial.print(' ');
Serial.println(Az);
}
if (IMU.gyroscopeAvailable()) {
IMU.readGyroscope(Gx, Gy, Gz);
Serial.print(' ');
Serial.print(Gx);
Serial.print(' ');
Serial.print(Gy);
Serial.print(' ');
Serial.println(Gz);
}
delay(100);
}
效果展现:
串口打印效果:
心得体会:
6轴IMU中包含了两个3轴传感器,由于IDE的绘图功能最多显示三个数据,我们在进行效果测试的时候需要将两个三轴的数据分别进行效果展示,而且对于姿态的解锁这一部分是不太栋的,只能将动作和数据进行简单的关联,效果还是很明显的。
3、任务三:调试PDM麦克风,通过串口打印收音数据和音频波形,对声音的音量进行一下处理
硬件情况:
Arduino Nano RP2040 Connect 板载了 MP34DT06 PDM 数字麦克风,它是一种基于脉冲密度调制(PDM)的麦克风。通过采样 PDM 信号可以获取音频数据,适用于语音识别、音频采集等场景。PDM(Pulse Density Modulation)是一种以高频率表示声音强度的调制方式,相比于传统的模拟麦克风,PDM 麦克风输出的是数字信号,适合直接处理数字音频。
原理图如下:
任务目标:
本次的任务目标主要是看一下PDM麦克风采集到的声音波形,并通过数学方法岁音量进行一下转化,在这里我们将任务四融合的到了任务三中,毕竟都是对声音数据的处理。
软件实现:
本次一共实现两个数据的波形展示,整体的软件流程如下:
具体测试代码如下:
#include <WiFiNINA.h>
#include <PDM.h>
bool LED_SWITCH = false;
// default number of output channels
static const char channels = 1;
// default PCM output frequency
static const int frequency = 20000;
// Buffer to read samples into, each sample is 16-bits
short sampleBuffer[512];
// Number of audio samples read
volatile int samplesRead;
void onPDMdata() {
// Query the number of available bytes
int bytesAvailable = PDM.available();
// Read into the sample buffer
PDM.read(sampleBuffer, bytesAvailable);
// 16-bit, 2 bytes per sample
samplesRead = bytesAvailable / 2;
}
int16_t getMaxAmplitude(short *buffer, int length) {
int16_t maxAmplitude = 0;
for (int i = 0; i < length; i++) {
int16_t amplitude = abs(buffer[i]);
if (amplitude > maxAmplitude) {
maxAmplitude = amplitude;
}
}
return maxAmplitude; // 返回最大振幅
}
void setup() {
Serial.begin(115200);
while (!Serial);
pinMode(LEDR, OUTPUT); // 设置红色 LED 引脚为输出
pinMode(LEDG, OUTPUT); // 设置绿色 LED 引脚为输出
digitalWrite(LEDG,LOW);
digitalWrite(LEDR,LOW);
// Configure the data receive callback
PDM.onReceive(onPDMdata);
if (!PDM.begin(channels, frequency)) {
Serial.println("Failed to start PDM!");
while (1);
}
}
void loop() {
int16_t maxAmplitude = 0;
// Wait for samples to be read
if (samplesRead) {
// Print samples to the serial monitor or plotter
for (int i = 0; i < samplesRead; i++) {
maxAmplitude = getMaxAmplitude(sampleBuffer, samplesRead);
Serial.print(sampleBuffer[i]);
// Clear the read count
Serial.print(' ');
Serial.println(maxAmplitude);
if(maxAmplitude > 1000)
{
digitalWrite(LEDG,LOW);
digitalWrite(LEDR,HIGH);
}
else
{
digitalWrite(LEDG,HIGH);
digitalWrite(LEDR,LOW);
}
samplesRead = 0;
}
}
}
效果展现:
这里是单声音数据的采集效果展示,IDE自带的显示的不明显。
这是两个数据效果(原始数据+峰值):
心得体会:
可以看到声音波形的效果图,实际上是个类似交流信号的波形,其幅值实际上可以反应音量的大小,原始数据我们用第三方串口工具进行的查看,是在是IDE显示的数据数据量调小的,不过通过两天数据的对比还是效果比较好的。
五、代码合集
六、视频讲解
[localvideo]7265ab4f10cb3af3177ae70fa75f2b01[/localvideo]
- 2024-10-07
-
回复了主题帖:
第一次经历召回(摩托车)
汽车召回也经常是检查一下,换个器件,这还是比较正常的
- 2024-06-22
-
加入了学习《PI PowiGaN 系列视频》,观看 氮化镓进化史 - PI 高层座谈 - PowerUP Expo 2023
- 2024-03-30
-
回复了主题帖:
FAE的记忆力真强
FAE的服务对象还是比较专业的,而且都会和各个公司能关联上
- 2024-03-29
-
回复了主题帖:
去华强北买东西有什么技巧?
二手显卡怕都是矿卡啊
-
回复了主题帖:
【复刻瀚文键盘】1、初步工作规划
1nnocent 发表于 2024-3-28 13:17
键盘pcb主体长度是32厘米左右
挺便携的
-
回复了主题帖:
大家签保密协议之后当回事吗?
qwqwqw2088 发表于 2024-3-28 12:40
签保密协议的公司,还不少呢
特别是公司有保密认证的,跟技术签保密协议必须要签的
动不动就要签,有时候有来审核的,就得签