Arduino智能语音识别分类垃圾桶

一、项目介绍

1、语音识别功能

    该功能主要是通过ASRpro语音识别模块来实现,结合舵机部分,通过天问block编程,以达到用户输入语音指令,通过正确识别后控制舵机打开相应垃圾桶盖子,实现垃圾分类(可回收垃圾、其他垃圾、厨余垃圾、有害垃圾)。

2、满溢警示功能

该功能是利用Arduino Uno开发板结合红外对管和LED灯等器件实现,红外模块时刻发送红外信号,当检测到的反射的信号值高于红外阈值,判定垃圾桶已经盈满,红外模块向Arduino输出低电平信号,Arduino控制相应的LED灯亮起,实现垃圾桶满载提醒功能。

3、短信提醒功能

该功能是通过SIM900A模块发送短信实现,通过红外模块识别垃圾桶盈满情况,当垃圾桶盈满时,红外模块向Arduino返回低电平信号,经过单片机识别,向SIM900A模块发送指令,令其将相应短信发送给管理人员,以达到提醒目的。

二、硬件准备

序号

器、耗材名称

规格型号

数量

链接

1

ASRPRO语音识别开发板

CZ0001

1

https://m.tb.cn/h.56j1hZM?tk=0MuEW0oS87q

2

迷你分类垃圾桶

13cm*9cm

1

https://m.tb.cn/h.UrCU9S7?tk=iTu7d9VqZPF

3

舵机

SG90

4

https://m.tb.cn/h.UIvmdom?tk=quCqd9VpVHD

4

ArduinoUNO单片机

1

https://m.tb.cn/h.5gAgjWo?tk=YaSgW0oidft

5

短信发送模块

SIM900A模块

1

https://m.tb.cn/h.UrC47rq?tk=vqred9VKJpl

6

红外避障模块  

4

https://m.tb.cn/h.5gAgjWo?tk=YaSgW0oidft

7

LED灯

4

三、线路连接

1、ASRPRO控制舵机

2、Arduino控制红外

3、 Arduino控制短信发送模块

注意:具体接口以代码为准

四、代码

1、烧写软件为天问BLOCK,请联系淘宝客服下载使用。录入ASRpro语音开发板的代码,用于识别语音指令并控制舵机。代码中包含以下几个部分:初始化ASRpro语音识别开发板;设置语音识别库识别语音指令;控制舵机打开或关闭垃圾桶盖子。

ASRpro语音开发板的代码:

#include "asr.h"
extern "C"{ void * __dso_handle = 0 ;}
#include "setup.h"
#include "myLib/asr_servo.h"

uint32_t snid;
Servo servo_2;
Servo servo_3;
Servo servo_5;
Servo servo_6;
void ASR_CODE();

//{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}
//{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}
//{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}
/*描述该功能...
*/
void ASR_CODE(){
  if(((snid) > 1) && ((snid) <= 37)){
    servo_2.write(180);
  }
  if(((snid) > 37) && ((snid) <= 69)){
    servo_3.write(90);
  }
  if(((snid) > 69) && ((snid) <= 106)){
    servo_5.write(180);
  }
  if(((snid) > 106) && ((snid) <= 138)){
    servo_6.write(90);
  }
  if((snid) == 139){
    servo_2.write(90);
    servo_3.write(0);
    servo_5.write(90);
    servo_6.write(0);
  }
}
void setup()
{
  //{speak:程程-标准男童,vol:18,speed:10,platform:haohaodada}
  //{playid:10001,voice:欢迎使用智能垃圾桶,请用小群唤醒我。}
  //{playid:10002,voice:我退下了,用小群唤醒我}
  //{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:"可回收,马上打开垃圾桶"}
  //{ID:17,keyword:"命令词",ASR:"纸袋",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:18,keyword:"命令词",ASR:"夹子",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:19,keyword:"命令词",ASR:"勺子",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:20,keyword:"命令词",ASR:"镜子",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:21,keyword:"命令词",ASR:"书包",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:22,keyword:"命令词",ASR:"手提包",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:23,keyword:"命令词",ASR:"牛奶盒",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:24,keyword:"命令词",ASR:"书",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:25,keyword:"命令词",ASR:"垃圾桶",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:26,keyword:"命令词",ASR:"帽子",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:27,keyword:"命令词",ASR:"玩具",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:28,keyword:"命令词",ASR:"罐头",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:29,keyword:"命令词",ASR:"期刊",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:30,keyword:"命令词",ASR:"油桶",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:31,keyword:"命令词",ASR:"酒瓶",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:32,keyword:"命令词",ASR:"广告单",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:33,keyword:"命令词",ASR:"塑料瓶",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:34,keyword:"命令词",ASR:"玻璃",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:35,keyword:"命令词",ASR:"易拉罐",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:36,keyword:"命令词",ASR:"数码产品",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:37,keyword:"命令词",ASR:"塑料玩具",ASRTO:"可回收,马上打开垃圾桶"}
  //{ID:38,keyword:"命令词",ASR:"药片",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:39,keyword:"命令词",ASR:"药品",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:40,keyword:"命令词",ASR:"胶囊",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:41,keyword:"命令词",ASR:"油漆",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:42,keyword:"命令词",ASR:"油漆桶",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:43,keyword:"命令词",ASR:"医用棉签",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:44,keyword:"命令词",ASR:"纱布",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:45,keyword:"命令词",ASR:"注射器",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:46,keyword:"命令词",ASR:"调色板",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:47,keyword:"命令词",ASR:"农药瓶",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:48,keyword:"命令词",ASR:"相纸",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:49,keyword:"命令词",ASR:"溶剂",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:50,keyword:"命令词",ASR:"杀虫剂",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:51,keyword:"命令词",ASR:"消毒",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:52,keyword:"命令词",ASR:"节能灯",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:53,keyword:"命令词",ASR:"蚊香片",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:54,keyword:"命令词",ASR:"创可贴",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:55,keyword:"命令词",ASR:"水银温度计",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:56,keyword:"命令词",ASR:"血压计",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:57,keyword:"命令词",ASR:"香水瓶",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:58,keyword:"命令词",ASR:"荧光",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:59,keyword:"命令词",ASR:"电池",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:60,keyword:"命令词",ASR:"发胶",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:61,keyword:"命令词",ASR:"医用手套",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:62,keyword:"命令词",ASR:"水彩笔",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:63,keyword:"命令词",ASR:"化妆品",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:64,keyword:"命令词",ASR:"药品包装物",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:65,keyword:"命令词",ASR:"溶剂包装物",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:66,keyword:"命令词",ASR:"消毒剂包装物",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:67,keyword:"命令词",ASR:"口服液瓶",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:68,keyword:"命令词",ASR:"煤气罐",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:69,keyword:"命令词",ASR:"酒精",ASRTO:"有害,马上打开垃圾桶"}
  //{ID:70,keyword:"命令词",ASR:"豆",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:71,keyword:"命令词",ASR:"鱼",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:72,keyword:"命令词",ASR:"草莓",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:73,keyword:"命令词",ASR:"葱",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:74,keyword:"命令词",ASR:"蘑菇",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:75,keyword:"命令词",ASR:"巧克力",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:76,keyword:"命令词",ASR:"土豆",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:77,keyword:"命令词",ASR:"番茄酱",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:78,keyword:"命令词",ASR:"骨头",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:79,keyword:"命令词",ASR:"梨",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:80,keyword:"命令词",ASR:"茄子",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:81,keyword:"命令词",ASR:"甘蔗",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:82,keyword:"命令词",ASR:"豌豆",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:83,keyword:"命令词",ASR:"西瓜",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:84,keyword:"命令词",ASR:"西红柿",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:85,keyword:"命令词",ASR:"玉米",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:86,keyword:"命令词",ASR:"橙皮",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:87,keyword:"命令词",ASR:"辣椒",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:88,keyword:"命令词",ASR:"蟹壳",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:89,keyword:"命令词",ASR:"水果",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:90,keyword:"命令词",ASR:"虾",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:91,keyword:"命令词",ASR:"香蕉",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:92,keyword:"命令词",ASR:"洋葱",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:93,keyword:"命令词",ASR:"茶渣",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:94,keyword:"命令词",ASR:"菜叶",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:95,keyword:"命令词",ASR:"剩饭",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:96,keyword:"命令词",ASR:"剩菜",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:97,keyword:"命令词",ASR:"面包",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:98,keyword:"命令词",ASR:"鸡肉",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:99,keyword:"命令词",ASR:"蔬菜",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:100,keyword:"命令词",ASR:"蛋糕",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:101,keyword:"命令词",ASR:"饼干",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:102,keyword:"命令词",ASR:"苹果核",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:103,keyword:"命令词",ASR:"蛋壳",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:104,keyword:"命令词",ASR:"动物内脏",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:105,keyword:"命令词",ASR:"中药药渣",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:106,keyword:"命令词",ASR:"宠物饲料",ASRTO:"厨余,马上打开垃圾桶"}
  //{ID:107,keyword:"命令词",ASR:"陶瓷",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:108,keyword:"命令词",ASR:"烟蒂",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:109,keyword:"命令词",ASR:"贝壳",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:110,keyword:"命令词",ASR:"砧板",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:111,keyword:"命令词",ASR:"海绵",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:112,keyword:"命令词",ASR:"花盆",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:113,keyword:"命令词",ASR:"花瓶",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:114,keyword:"命令词",ASR:"宠物粪便",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:115,keyword:"命令词",ASR:"篮球",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:116,keyword:"命令词",ASR:"马桶",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:117,keyword:"命令词",ASR:"尿片",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:118,keyword:"命令词",ASR:"坛子",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:119,keyword:"命令词",ASR:"扫把",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:120,keyword:"命令词",ASR:"桃核",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:121,keyword:"命令词",ASR:"瓦片",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:122,keyword:"命令词",ASR:"卫生纸",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:123,keyword:"命令词",ASR:"化妆刷",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:124,keyword:"命令词",ASR:"烟蒂",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:125,keyword:"命令词",ASR:"烟头",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:126,keyword:"命令词",ASR:"一次性",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:127,keyword:"命令词",ASR:"浴缸",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:128,keyword:"命令词",ASR:"餐巾纸",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:129,keyword:"命令词",ASR:"砖块",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:130,keyword:"命令词",ASR:"尿不湿",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:131,keyword:"命令词",ASR:"抹布",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:132,keyword:"命令词",ASR:"湿巾纸",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:133,keyword:"命令词",ASR:"塑料袋",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:134,keyword:"命令词",ASR:"食品包装",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:135,keyword:"命令词",ASR:"渣土",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:136,keyword:"命令词",ASR:"保鲜膜",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:137,keyword:"命令词",ASR:"头发",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:138,keyword:"命令词",ASR:"纸尿裤",ASRTO:"其他,马上打开垃圾桶"}
  //{ID:139,keyword:"命令词",ASR:"关闭",ASRTO:"好的,马上关闭垃圾桶"}
  servo_2.attach(2);
  servo_3.attach(3);
  servo_5.attach(5);
  servo_6.attach(6);
}

另外有一个帖子写的就是这个程序,还有教程。其中包含天问block的下载和所需程序的下载地址。

参考链接:

分享案例~ASRPRO语音控制垃圾桶 - 扩展库 - 好好搭搭论坛 - 好好搭搭在线

2、录入Arduino开发板的代码,用于控制LED灯和sim900a模块。代码中包含以下几个部分:初始化红外模块和LED灯;读取红外模块的输出信号;根据红外模块的输出信号控制LED灯的亮灭初始化sim900a模块;检测sim900a准备情况;根据红外模块输出信号控制短信发送。以下是Arduino开发板的代码:

#include <SoftwareSerial.h>
// 红外对管引脚定义
int irPin1 = 2;
int irPin2 = 3;
int irPin3 = 4;
int irPin4 = 5;
int ledPin1 = 6;
int ledPin2 = 7;
int ledPin3 = 8;
int ledPin4 = 9;
// SIM900A 模块串口通信引脚定义
SoftwareSerial sim900a(10, 11);
void setup()
{
  // 初始化串口
  Serial.begin(9600);
  sim900a.begin(9600);
  // 设置红外对管引脚为输入模式
  pinMode(irPin1, INPUT);
  pinMode(irPin2, INPUT);
  pinMode(irPin3, INPUT);
  pinMode(irPin4, INPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  // 等待SIM900A模块准备就绪
  Serial.print("等待 SIM900A 模块准备就绪...");
  while(!sim900a.available()) 
  {
    sim900a.println("AT");
    delay(1000);
    Serial.print(".");
  }
  Serial.println(" SIM900A 模块准备就绪");
}
void loop() {
  // 读取红外对管状态
  int irState1 = digitalRead(irPin1);
  int irState2 = digitalRead(irPin2);
  int irState3 = digitalRead(irPin3);
  int irState4 = digitalRead(irPin4);
  if (irState1 == LOW)
   {
    digitalWrite(ledPin1, HIGH);
    Serial.println("可回收垃圾箱已满");
    // 发送短信
    sim900a.println("AT+CMGF=1");
    delay(1000);
    sim900a.println("AT+CMGS=\"15623288697\"");
    delay(1000);
    sim900a.println("Recyclable waste can is full!");
    delay(1000);
    sim900a.write(26);
    delay(1000);
    // 检查短信是否发送成功
    String response = sim900a.readString();
    if (response.indexOf("+CMGS:") != -1)
    {
      Serial.println("短信发送成功");
    } 
    else 
    {
      Serial.println("短信发送失败");
    }
  } 
  else 
  {
    digitalWrite(ledPin1, LOW);
    //Serial.println("可回收垃圾箱正常");
  }
  if (irState2== LOW) 
  {
    digitalWrite(ledPin2, HIGH);
    Serial.println("有害垃圾箱已满");
    // 发送短信
    sim900a.println("AT+CMGF=1");
    delay(1000);
    sim900a.println("AT+CMGS=\"15623288697\"");
    delay(1000);
    sim900a.println("Hazardous waste can is full!");
    delay(1000);
    sim900a.write(26);
    delay(1000);
    // 检查短信是否发送成功
    String response = sim900a.readString();
    if (response.indexOf("+CMGS:") != -1) 
    {
      Serial.println("短信发送成功");
    } 
    else 
    {
      Serial.println("短信发送失败");
    }
  } 
  else 
  {
    digitalWrite(ledPin2, LOW);
    //Serial.println("有害垃圾箱正常");
  }
if (irState3== LOW) 
  {
    digitalWrite(ledPin3, HIGH);
    Serial.println("其他垃圾箱已满");
    // 发送短信
    sim900a.println("AT+CMGF=1");
    delay(1000);
    sim900a.println("AT+CMGS=\"15623288697\"");
    delay(1000);
    sim900a.println("Other waste can is full!");
    delay(1000);
    sim900a.write(26);
    delay(1000);
    // 检查短信是否发送成功
    String response = sim900a.readString();
    if (response.indexOf("+CMGS:") != -1) 
    {
      Serial.println("短信发送成功");
    } 
    else 
    {
      Serial.println("短信发送失败");
    }
  } 
  else 
  {
    digitalWrite(ledPin3, LOW);
    //Serial.println("其他垃圾箱正常");
  }
  if (irState4== LOW) 
  {
    digitalWrite(ledPin4, HIGH);
    Serial.println("厨余垃圾箱已满");
    // 发送短信
    sim900a.println("AT+CMGF=1");
    delay(1000);
    sim900a.println("AT+CMGS=\"15623288697\"");
    delay(1000);
    sim900a.println("Kitchen waste can is full!");
    delay(1000);
    sim900a.write(26);
    delay(1000);
    // 检查短信是否发送成功
    String response = sim900a.readString();
    if (response.indexOf("+CMGS:") != -1) 
    {
      Serial.println("短信发送成功");
    } 
    else 
    {
      Serial.println("短信发送失败");
    }
  } 
  else 
  {
    digitalWrite(ledPin4, LOW);
    //Serial.println("厨余垃圾箱正常");
  }  
}


 

 

 

 

### 天问 ASRPRO 语音识别模块与单片机之间串口通讯实现 #### 配置硬件连接 为了使天问 ASRPRO 语音识别模块能够通过串口与单片机通信,需确保两者间正确连线。通常情况下,ASRPRO 的 TXD 和 RXD 脚分别对应于单片机的接收端(RXD)和发送端(TXD),GND 进行共地处理[^1]。 #### 初始化串口参数配置 在软件层面初始化串口时,应设定波特率、停止位数以及校验方式等基本属性,这些设置必须匹配两端设备的要求才能正常工作。对于 ASRPRO 来说,默认波特率为9600bps,在实际应用中可根据需求调整此数值[^2]。 ```c void UART_Init(void){ // 设置波特率为9600 bps,无奇偶校验,一位停止位 USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1,&USART_InitStructure); } ``` #### 数据收发函数设计 定义专门的数据接收和发送子程序来管理来自 ASRPRO 模块的信息交换过程。下面给出了一种简单的字符读取方法作为例子: ```c char UART_ReadChar(void){ while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE)==RESET); return USART_ReceiveData(USART1); } void UART_SendString(char *str){ while(*str != '\0'){ while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)== RESET); USART_SendData(USART1,*str++); } } ``` #### 测试命令交互逻辑构建 最后一步是创建测试用例验证整个系统的连通性和稳定性。可以通过向 ASRPRO 发送特定指令并等待回应的方式来进行初步的功能检测。比如尝试让其返回版本信息或状态报告等。 ```c int main(){ char response[32]; UART_Init(); // 初始化串口 UART_SendString("AT+VERSION\r\n"); // 请求版本号 Delay_ms(500); // 短暂延时以便接收到回复 memset(response,'\0',sizeof(response)); gets(response,sizeof(response),UART_ReadChar); printf("Received Response:%s",response); while(1){} // 循环保持运行 } ``` 以上即为利用 C 语言编写的 STM32 单片机平台下与天问 ASRPRO 语音识别模块建立稳定可靠串行通信链路的方法概述及其部分核心代码片段展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值