
minecraft信标蓝牙音箱-智能硬件挑战赛
简介
基于天问asrpro核心板和hm-m18的蓝牙音响,音质一般,相当于拼好响,但是当个可以声控灯光的摆件还是不错的
简介:基于天问asrpro核心板和hm-m18的蓝牙音响,音质一般,相当于拼好响,但是当个可以声控灯光的摆件还是不错的开源协议
:GPL 3.0
描述
灵感来源:
【[DIY]能语音控制的全彩氛围灯·蓝牙音箱·夜光·信标!【ACG_Create第五期】】
这位up主是直接飞线把各个模块接起来之后塞到底座里面,然后再用额外的下载器烧录程序,本项目对此进行了一些改进:
1.设计了pcb板,使用asrpro控制背板上3颗WS2812发出不同颜色光。
2.pcb上自带串口转typec电路以及天问asrpro的手动复位烧录电路,焊好板子后无需购买额外的下载器,直接使用数据线连接电脑下载即可。
3.增大了音箱的尺寸,整体的尺寸为150 x 150 x 150mm
4.亚克力底板,底座合板,底座之间使用m3平头螺丝与螺母联接,四角加装防撞垫。
!!!务必要注意!!!
虽然整体都是正方形设计,但是电路板,黑色底座,底座合板,以及亚克力底板上开的螺丝孔洞并不是正方形对称设计,而是长方形,就是说有一边长有一边短,在3d打印或者pcb打样的时候请务必确认好,有必要可以自己重新设计!!
项目简介
使用天问asrpro作为主控,控制背板的3颗ws2812进行发光,hm-m18蓝牙模块接收音乐信息,通过pam8406dr功放后从喇叭输出,共有三个喇叭和一个mic,包括输出的左右声道和asrpro的spk和mic,注意!!本项目开发时基于手头现有的1.25接口喇叭和mic,如果有其他接口的需要,请在立创eda中自行重新更换接口端子
项目功能
1.语音控制灯光切换颜色或彩灯;
2.连接蓝牙播放音乐;
原理解析(硬件说明)
1--电源电路:
采用TYPE-C-16P接口作为供电接口,在CC1和CC2引脚处加入5.1K下拉电阻,便于不同主机识别和配置,在没有typec供电的时候,使用5v可充电锂电池供电,加入二极管防止反向电压破坏电池。!!注意!!滤波电容前面的两个xh2.54贴片立贴母座,CN7为电池接口,CN6为自锁开关接口,我这里把一个自锁开关焊接到2.54端口线上作为飞线开关。5v供电正常时,LED1亮起。5v随后通过ldo芯片转为3.3v供给ch340c芯片。

2--主控与复位烧录电路:
使用天问asrpro-core作为主控,该型号在烧录时需要给asrpro的供电在短时间内重启一次(天问官网有详细的教程),这里使用AO3041作为复位核心,自复位开关按键按下时,三极管截止,asrpro的5v供电断开,板上其他模块的电压供电不变,松开按键恢复上电,实现烧录

3--灯光电路:
使用3颗级联的ws2812-5050(50mmx50mm封装),焊接在背板,通过黑色底座的上的开孔,将灯光投射给匀光碗

4.蓝牙与功放电路
使用hm-m18蓝牙模块和pam8406dr功放,m18的key引脚连接到asrpro以实现控制,静音脚不连接,这部分基本是抄手册,没有什么重点


软件代码

使用天问block开发,可以直接烧录的固件已发在附件中,,代码源文件也在附件中,使用了"newS2812.h"库来方便的更改灯光颜色,编程非常简单,大家有兴趣可以自行设置语音指令以及回复的声音,自由度很高,上手很简单
注意!使用我的固件烧录出来直接就是曼波的语音,如果自己重新编译再烧录的话是程序中的默认语音,但是换语音很简单,请大家自行去天问51的论坛上学习,评论区就不回复类似问题了。
#define N_PIXELS 1
#include "asr.h"
extern "C"{ void * __dso_handle = 0 ;}
#include "setup.h"
#include "newS2812.h"
uint32_t snid;
WS2812 ws2812 = WS2812(6,3,255);//初始化3个ws2812在PA_6端口
uint8_t rainbows = 1;
uint8_t var;
void rainbow(){
randomSeed(millis());
while(rainbows == 1){
ws2812.rainbow(10);//修改这个函数调用以修改ID91效果
}
ws2812.clear();
vTaskDelete(NULL);
}
void welcome(){
ws2812.pixel_set_all_color(255,0,0);
ws2812.pixel_show();
delay(300);
ws2812.pixel_set_all_color(0,255,0);
ws2812.pixel_show();
delay(300);
ws2812.pixel_set_all_color(0,0,255);
ws2812.pixel_show();
delay(300);
ws2812.pixel_set_all_color(0,0,0);
ws2812.pixel_show();
//上电欢迎,RGB闪一次
}
void ASR_CODE();
//{speak:小蝶-清新女声,vol:10,speed:10,platform:haohaodada}
//{playid:10001,voice:}
//10001欢迎语音
//{playid:10002,voice:}
//10002退出语音
void ASR_CODE(){
set_state_enter_wakeup(120000);
//case后面的是语音识别的ID
switch (snid) {
case 0:
ws2812.pixel_set_all_color(255,255,255);
ws2812.pixel_show();
delay(300);
ws2812.pixel_set_all_color(0,0,0);
ws2812.pixel_show();
delay(300);
ws2812.pixel_set_all_color(255,255,255);
ws2812.pixel_show();
delay(300);
ws2812.pixel_set_all_color(0,0,0);
ws2812.pixel_show();
break;
case 1:
ws2812.pixel_set_all_color(0,255,255);
ws2812.pixel_show();
break;
case 2:
rainbows = 0;
ws2812.pixel_set_all_color(0,0,0);
ws2812.pixel_show();
break;
case 3:
digitalWrite(3,1);
delay(500);
digitalWrite(3,0);
delay(500);
digitalWrite(3,1);
ws2812.pixel_set_all_color(255,0,0);
ws2812.pixel_show();
delay(400);
ws2812.pixel_set_all_color(0,0,255);
ws2812.pixel_show();
delay(800);
ws2812.pixel_set_all_color(0,0,0);
ws2812.pixel_show();
break;
case 4:
digitalWrite(3,1);//上电默认蓝牙为关
delay(500);
digitalWrite(3,0);
delay(500);
digitalWrite(3,1);
ws2812.pixel_set_all_color(0,0,255);
ws2812.pixel_show();
delay(400);
ws2812.pixel_set_all_color(255,0,0);
ws2812.pixel_show();
delay(800);
ws2812.pixel_set_all_color(0,0,0);
ws2812.pixel_show();
break;
case 5:
ws2812.pixel_set_all_color(255,0,0);
ws2812.pixel_show();
break;
case 6:
ws2812.pixel_set_all_color(0,255,0);
ws2812.pixel_show();
break;
case 7:
ws2812.pixel_set_all_color(0,0,255);
ws2812.pixel_show();
break;
case 8:
ws2812.pixel_set_all_color(0,255,255);
ws2812.pixel_show();
break;
case 9:
ws2812.pixel_set_all_color(255,0,255);
ws2812.pixel_show();
break;
case 10:
ws2812.pixel_set_all_color(255,100,0);
ws2812.pixel_show();
break;
case 11:
ws2812.pixel_set_all_color(255,255,0);
ws2812.pixel_show();
break;
case 12:
ws2812.pixel_set_all_color(255,255,255);
ws2812.pixel_show();
break;
case 13:
ws2812.pixel_set_all_color(random(0,255),random(0,255),random(0,255));
ws2812.pixel_show();
break;
case 14:
rainbows = 1;
xTaskCreate(rainbow,"rainbow",128,NULL,4,NULL);
break;
case 15:
rainbows = 0;
break;
case 16:
ws2812.demo_11(65);
break;
}
}
void hardware_init(){
vol_set(1);
setPinFun(3,FIRST_FUNCTION);
pinMode(3,output);
vTaskDelete(NULL);
welcome();
}
void setup()
{
//{ID:0,keyword:"唤醒词",ASR:"信标",ASRTO:"干嘛"}
//{ID:1,keyword:"命令词",ASR:"打开灯光",ASRTO:"好"}
//{ID:2,keyword:"命令词",ASR:"关闭灯光",ASRTO:"好"}
//{ID:3,keyword:"命令词",ASR:"打开蓝牙",ASRTO:"好"}
//{ID:4,keyword:"命令词",ASR:"关闭蓝牙",ASRTO:"好"}
//{ID:5,keyword:"命令词",ASR:"红色",ASRTO:"行"}
//{ID:6,keyword:"命令词",ASR:"绿色",ASRTO:"行"}
//{ID:7,keyword:"命令词",ASR:"蓝色",ASRTO:"行"}
//{ID:8,keyword:"命令词",ASR:"青色",ASRTO:"行"}
//{ID:9,keyword:"命令词",ASR:"紫色",ASRTO:"行"}
//{ID:10,keyword:"命令词",ASR:"橙色",ASRTO:"行"}
//{ID:11,keyword:"命令词",ASR:"黄色",ASRTO:"行"}
//{ID:12,keyword:"命令词",ASR:"白色",ASRTO:"行"}
//{ID:13,keyword:"命令词",ASR:"随机颜色",ASRTO:"行"}
//{ID:14,keyword:"命令词",ASR:"打开彩灯",ASRTO:"哦耶"}
//{ID:15,keyword:"命令词",ASR:"关闭彩灯",ASRTO:"哦耶"}
//{ID:16,keyword:"命令词",ASR:"打开呼吸灯",ASRTO:"哦耶"}
}
注意事项
外壳的亚克力板如工程中的文件所示,厚度3mm,可以去淘宝上定制,我这边的价格是6片12元,定制之前请在立创eda中仔细检查每边的长度和宽度,想明白了怎么拼成一个150mm的立方体再去定制

亚克力之间使用亚克力无影胶进行粘接,然后使用10mm宽的蓝色荧光胶带贴在边上来构成游戏中的玻璃质感,注意一定要买蓝色的胶带,这样有光时看起来是白色的,其他颜色的荧光胶带日光下会显示偏黄偏绿或者其他颜色
!!!注意,不要超级拼装上头了直接把六片全拼起来了,要留着底板和底座,用螺丝链接,最后再贴底边的胶带!!不然你会得到一个玻璃块而不是信标!别问为什么有这条提示!!
匀光碗和黑色底座的连接使用黑色双面胶粘接即可,我买的是3mm黑色双面胶,不拿近了仔细看看不出来,效果比较美观
虽然整体都是正方形设计,但是电路板,黑色底座,底座合板,以及亚克力底板上开的螺丝孔洞并不是正方形对称设计,而是长方形,就是说有一边长有一边短,在3d打印或者pcb打样的时候请务必确认好,有必要可以自己重新设计!!
组装流程
过程忘记拍照了,只有很简单的几张照片,组装有问题请发在评论区吧,看到了就回复

实物图
详细的演示请看演示视频
八个角我加装了T型防撞角,更加稳固安全,当然也可以不装,去淘宝上直接搜“T型防撞角”就能搜到。

抽风图

附件中的压缩包工程文件不需要下载,仅作评奖依据
3d打印部件为自行打印,无链接,文件请见附件
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










