查看: 331|回复: 5

利用AsrPro和TW32F003做一个床头灯控制器(一)

[复制链接]

5

主题

12

帖子

161

积分

注册会员

Rank: 2

积分
161
发表于 2024-9-27 23:42:08 | 显示全部楼层 |阅读模式
本帖最后由 xuzhengkai666 于 2024-10-6 18:56 编辑

你有没有想过,在冬天或者你上完一天半很累的情况下不想用手开灯,只想通过说话或者人体传感器的检测来实现开关灯?但由于目前的能力有限,只能通过一个语音模块来实现开关灯。在制作之前,我们先准备以下表格中的材料(点击图片放大图片)

image.png


准备完毕后,开始对HC-05模块进行配置,具体的配置参考HC-05蓝牙模块学习(两个蓝牙模块连接互发信息)_usb转ttl怎么跟蓝牙模块连接-CSDN博客,我就不再叙述了,这里面讲的很详细,如果你还是不会配置HC-05模块,那我建议你还是放弃吧,直接用Asr-Pro控制继电器实现具体的语音控制床头灯功能,也是一样的,只不过少了个按钮控制的功能,仅此而已,后面我还附赠控制HC-05的指令集,是以STC-ISP软件为基础的,到时候你只需要添加就行。

HC-05蓝牙模块配置完成后,一个作为从,另一个作为主,然后分别接入两个USB-TTL串口模块进行通讯测试,确保模块正常工作,如果不正常通讯,请检查自己的硬件接线以及参数配置相关问题,这是非常重要,关乎到后面能否正常使用。排除故障后,就开始我们的编程环节,首先我们编程的开发环境就是天问Block了(版本是夏季正式版),只不过板卡选用TW32F003和ASR-PRO两个板卡了。以下就是两份Demo,我会分别写出来。

TW32F003的Demo(我是直接进入天问Block的字符编程模式进行CV的,下面的ASR-PRO的Demo也是一样,结尾会发.hd文件)

  1. #define Light_Power PF1
  2. #define Light_LED PA12

  3. #include <TWEN32F0xx.h>
  4. #include "HardwareSerial.h"

  5. String SerialRead = "";

  6. int main(void)
  7. {
  8.   TW32F0xx_init();
  9.   Serial2.begin(9600);
  10.   pinMode(Light_Power, GPIO_Mode_Out_PP);
  11.   pinMode(Light_LED, GPIO_Mode_Out_PP);
  12.   digitalWrite(Light_Power, 1);
  13.   digitalWrite(Light_LED, 1);
  14.   while(1){
  15.     if(Serial2.available() > 0){
  16.       SerialRead = Serial2.readString();
  17.       if(SerialRead == "01"){
  18.         //打开卧室灯
  19.         digitalWrite(Light_Power, 0);
  20.         digitalWrite(Light_LED, 0);
  21.       }
  22.       else if(SerialRead == "02"){
  23.         //关闭卧室灯
  24.         digitalWrite(Light_Power, 1);
  25.         digitalWrite(Light_LED, 1);
  26.       }
  27.     }
  28.   }
  29.   return 1;
  30. }
复制代码

ASR-PRO的Demo

  1. #include "asr.h"
  2. extern "C"{ void * __dso_handle = 0 ;}
  3. #include "setup.h"
  4. #include "HardwareSerial.h"

  5. uint32_t snid;
  6. uint8_t Delay_Time = 500;
  7. void ASR_CODE();
  8. void Light_Control();

  9. //{speak:小蝶-清新女声,vol:10,speed:10,platform:haohaodada}
  10. //{playid:10001,voice:欢迎使用卧室灯,用卧室灯唤醒我。}
  11. //{playid:10002,voice:我退下了,用卧室灯唤醒我}

  12. /*描述该功能...
  13. */
  14. void ASR_CODE(){
  15.   //本函数是语音识别成功钩子程序
  16.   //运行时间越短越好,复杂控制启动新线程运行
  17.   //唤醒时间设置必须在ASR_CODE中才有效
  18.   set_state_enter_wakeup(10000);
  19.   //用switch分支选择,根据不同的识别成功的ID执行相应动作,点击switch左上齿轮
  20.   //可以增加分支项
  21.   switch (snid) {
  22.    case 1:
  23.     Serial1.write("01");
  24.     break;
  25.    case 2:
  26.     Serial1.write("02");
  27.     break;
  28.   }

  29. }

  30. void Light_Control(){
  31.   while (1) {
  32.     if(digitalRead(0) == 0){
  33.       delay(Delay_Time);
  34.       if(digitalRead(0) == 0){
  35.         Serial1.write("01");
  36.         while (!false) {
  37.           delay(Delay_Time);
  38.           break;
  39.         }
  40.       }
  41.     }
  42.     if(digitalRead(1) == 0){
  43.       delay(Delay_Time);
  44.       if(digitalRead(1) == 0){
  45.         Serial1.write("02");
  46.         while (!false) {
  47.           delay(Delay_Time);
  48.           break;
  49.         }
  50.       }
  51.     }
  52.   }
  53.   vTaskDelete(NULL);
  54. }

  55. void hardware_init(){
  56.   //需要操作系统启动后初始化的内容
  57.   //音量范围1-7
  58.   vol_set(7);
  59.   setPinFun(2,FORTH_FUNCTION);
  60.   setPinFun(3,FORTH_FUNCTION);
  61.   Serial1.begin(9600);
  62.   xTaskCreate(Light_Control,"Light_Control",128,NULL,4,NULL);
  63.   vTaskDelete(NULL);
  64. }

  65. void setup()
  66. {
  67.   //需要操作系统启动前初始化的内容
  68.   //播报音下拉菜单可以选择,合成音量是指TTS生成文件的音量
  69.   //欢迎词指开机提示音,可以为空
  70.   //退出语音是指休眠时提示音,可以为空
  71.   //{ID:0,keyword:"唤醒词",ASR:"卧室灯",ASRTO:"我在"}
  72.   //{ID:1,keyword:"命令词",ASR:"打开灯光",ASRTO:"好的,马上打开灯光"}
  73.   //{ID:2,keyword:"命令词",ASR:"关闭灯光",ASRTO:"好的,马上关闭灯光"}
  74.   setPinFun(0,FIRST_FUNCTION);
  75.   pinMode(0,input);
  76.   dpmu_set_adio_reuse(PA0,DIGITAL_MODE);
  77.   dpmu_set_io_pull(pinToFun[0],DPMU_IO_PULL_UP);
  78.   setPinFun(1,FIRST_FUNCTION);
  79.   pinMode(1,input);
  80.   dpmu_set_adio_reuse(PA1,DIGITAL_MODE);
  81.   dpmu_set_io_pull(pinToFun[1],DPMU_IO_PULL_UP);
  82. }
复制代码

ASR-PRO必须在登录账户的前提下必须先生成模型,然后再进行下载到ASR-PRO中!一定要注意!

TW32F003却不是,只要编译就行。

这下软硬件都弄好了,然后根据程序Demo进行硬件搭建,测试是否能够行得通,至于搭建过程我也懒得叙述,只能说有相对应能力的人看到我这个就觉得不是很难,而刚入门的,我就不能保证了。

既然硬件会搭建了,那么洞洞板焊接我觉得应该也不是很难,我也就不再赘述了。到最后,你就获得了一个开关灯控制器,从此你就再也不用爬起来进行开关灯了,岂不是美滋滋?到时候你可以装在卧室,也可以装在客厅,更可以装在卫生间,具体怎么安装要看你怎么使用,我是装在卧室里面,一般用于控制卧室。

今天的项目分享到此结束,下次会再分析更多有趣的作品。






image.png
image.png

灯控制器.zip

6.49 KB, 下载次数: 3

里面有对应的AT参数配置指令,两份单片机Demo

回复

使用道具 举报

1

主题

13

帖子

103

积分

注册会员

Rank: 2

积分
103
发表于 2024-9-29 16:02:39 | 显示全部楼层
谢谢分享资料
回复

使用道具 举报

0

主题

68

帖子

1342

积分

金牌会员

Rank: 6Rank: 6

积分
1342
发表于 2024-9-30 21:26:22 | 显示全部楼层
单用ASRPRO 不就行了?
回复

使用道具 举报

5

主题

12

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2024-10-6 18:56:18 | 显示全部楼层

谢谢朋友的点赞
回复

使用道具 举报

5

主题

12

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 7 天前 | 显示全部楼层
mbli1511 发表于 2024-9-30 21:26
单用ASRPRO 不就行了?

你用ASR-PRO也不是不可以。但是不可进行按键操作,当然都随你
回复

使用道具 举报

0

主题

12

帖子

152

积分

注册会员

Rank: 2

积分
152
发表于 3 天前 | 显示全部楼层
xuzhengkai666 发表于 2024-10-12 21:14
你用ASR-PRO也不是不可以。但是不可进行按键操作,当然都随你

asr pro 按键功能 可以有的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-10-19 00:15 , Processed in 0.107338 second(s), 26 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表