X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
DigiKey得捷技术专区
[作品提交] 【Follow me第二季第1期】 创意任务(有创意的可穿戴装饰)
iexplore123
2024-8-24 23:00
楼主
# 【Follow me第二季第1期】 创意任务(有创意的可穿戴装饰) 大家好,这里是iex123。这次我来尝试一下创意任务一,制作一个有创意的可穿戴装饰。我选择使用麦克风传感器和板载LED,来制作一个可以根据环境声音的大小和音调,展示不同灯光效果的可穿戴装饰。 ## 可穿戴装饰的制作 ### 材料准备 - Adafruit Circuit Playground Express - 挂绳 - 电池 ### 制作过程 1. 将Adafruit Circuit Playground Express用挂绳钩住,如下图所示:
2. 将Adafruit Circuit Playground Express连接到电脑,然后上传下面的代码: ```cpp #include
#include "Adafruit_ZeroFFT.h" #include
#include
#define DATA_SIZE 256 #define NUM_PIXELS 10 #define FS 22000 //要收集的最低频率 #define FREQ_MIN 600 //要收集的最高频率 #define FREQ_MAX 3000 #define MIN_INDEX FFT_INDEX(FREQ_MIN, FS, DATA_SIZE) #define MAX_INDEX FFT_INDEX(FREQ_MAX, FS, DATA_SIZE) #define SCALE_FACTOR 32 int16_t inputData[DATA_SIZE]; #define SAMPLE_WINDOW 10 //取样窗口 #define PEAK_HANG 24 //LED停留时间 #define PEAK_FALL 4 //LED动画下降速度 #define INPUT_FLOOR 60 //最低检测分贝值 #define INPUT_CEILING 95 byte peak = 16; // 颜色条的峰值位置 unsigned int sample; byte dotCount = 0; // LED衰落动画计数变量 byte dotHangCount = 0; // LED停留动画计数变量 float mapf(float x, float in_min, float in_max, float out_min, float out_max); void setup() { CircuitPlayground.begin(); Serial.begin(115200); Serial.println("FFT Test"); } void loop() { int numPixels = CircuitPlayground.strip.numPixels(); float peakToPeak = 0; //峰峰值 unsigned int c, y; int i; CircuitPlayground.mic.capture(inputData, DATA_SIZE); //fft预处理 int32_t avg = 0; for(i=0; i
; avg /= DATA_SIZE; for(i=0; i
= (inputData
- avg) * SCALE_FACTOR; //FFT变换 ZeroFFT(inputData, DATA_SIZE); int sum = 0; Serial.println("FFT Output:"); for(i=MIN_INDEX; i<=MAX_INDEX; i++){ sum += inputData
; Serial.print(inputData
); Serial.print(" "); } Serial.print("Sum: "); Serial.println(sum); //获取声音响度 peakToPeak = CircuitPlayground.mic.soundPressureLevel(SAMPLE_WINDOW); peakToPeak = max(INPUT_FLOOR, peakToPeak); Serial.print("Peak to Peak: "); Serial.println(peakToPeak); uint8_t r = map(sum, 50, 100, 0, 255); uint8_t g = map(peakToPeak, 0, 100, 255, 0); uint8_t b = 255; for (int i=0;i<=numPixels-1;i++){ CircuitPlayground.strip.setPixelColor(i,r,g,b); } c = mapf(peakToPeak, INPUT_FLOOR, INPUT_CEILING, numPixels, 0); // LED动画 if(c < peak) { peak = c; // Keep dot on top dotHangCount = 0; // make the dot hang before falling } if (c <= numPixels) { // Fill partial column with off pixels drawLine(numPixels, numPixels-c, CircuitPlayground.strip.Color(0, 0, 0)); } y = numPixels - peak; CircuitPlayground.strip.setPixelColor(y-1,r,g,b); CircuitPlayground.strip.show(); if(dotHangCount > PEAK_HANG) { //Peak pause length if(++dotCount >= PEAK_FALL) { //Fall rate peak++; dotCount = 0; } } else { dotHangCount++; } } //用来根据指定的颜色填充LED void drawLine(uint8_t from, uint8_t to, uint32_t c) { uint8_t fromTemp; if (from > to) { fromTemp = from; from = to; to = fromTemp; } for(int i=from; i<=to; i++){ CircuitPlayground.strip.setPixelColor(i, c); } } float mapf(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } ``` 在这段代码中,我们使用了`CircuitPlayground.mic.capture()`函数来获取麦克风传感器的数据,然后使用`ZeroFFT()`函数来进行FFT变换,获取音频频谱数据,然后根据频谱数据和音量大小来控制板载LED的颜色。 >研究了好几天的音调识别,知识储备还不够扎实,实在做不出来,就把人耳能听到的大致范围的变换结果加起来凑合了下,让各位大佬见笑了 ### 效果展示 当我们将可穿戴装饰戴在身上,然后说话或者唱歌时,板载LED的颜色会根据声音的大小和音调发生变化,如下图所示:
挂饰
## 任务进度 - [x] 入门任务:开发环境搭建,板载LED点亮 - [x] 基础任务一:控制板载炫彩LED,跑马灯点亮和颜色变换 - [X] 基础任务二:监测环境温度和光线,通过板载LED展示舒适程度 - [X] 基础任务三:接近检测——设定安全距禀并通过板载LED展示,检测到入侵时,发起声音报警 - [x] 进阶任务:制作不倒翁——展示不倒翁运动过程中的不同灯光效果 - [x] 创意任务一:有创意的可穿戴装饰——可结合多种传感器和灯光效果展示
点赞
回复评论 (2)
沙发
Jacktang
板载LED的颜色可以随声音的大小和音调发生变化是效果还行
点赞
(1)
2024-8-25 21:39
板凳
wangerxian
带个电池+壳是不是街上最靓的仔
点赞
(1)
2024-8-27 09:05
最新活动
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
TI 有奖直播 | 使用基于 Arm 的 AM6xA 处理器设计智能化楼宇
Follow me第二季第3期来啦!与得捷一起解锁高性能开发板【EK-RA6M5】超能力!
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
随便看看
TI 电源设计小贴士 43
中嵌学院--FPGA (IC前端)Verilog 数字系统设计工程师培训班
收上次团购的dk-lm3s9b96开发板
【EEWORLD模块整理】+开关电源
error C2061: syntax error : identifier 'IAuthenticate'
12f675 IO问题
U盘问题
Cannot launch the remote executable 如何解决???大家帮帮忙吧
硬件设计问题。。
请问内行人,学习嵌入开发需要哪些基础课?比如模电需要吗?
SATA AHCI模式怎么读硬盘序列号?
星巴克的赚钱利器——Embedded for Point of Service
求助老师,加装自适应巡航通讯故障的问题,
求救!!!!!!!!!1
printf()函数是不是将需要打印的数据送到打印机啊?
请问车规BMS里的AFE模组跟一般的计量芯片有什么区别?
多重反馈滤波器设计问题
有关“特性阻抗”和“阻抗匹配”这对兄弟
5年后的手机,你能想象到是什么样么?
WINCE芯片的驱动怎么做?
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复