基于Arduino的语音识别垃圾箱

来源:so.csdn.net 发布时间:Dec 10, 2020, 6:33:24 AM 原地址:https://blog.csdn.net/ronin___/article/details/106525598

前言:

Arduino是一块极易入门的单片机开发版,让小白也能体验单片机的快乐,下面我简单介绍一下该语音控制垃圾桶。

1、功能

实现集语音控制、红外感应为一体的语音识别垃圾分类垃圾桶。

2、材料清单

材料清单 数量
Arduino Uno 1
Arduino Mega2560 1
SG90舵机 2
HC-05蓝牙模块 1
ld3320模块 1
RFID-RC522 1
DHT11数字温湿度传感器 2
E18-D80N光电传感器 1
蜂鸣器 1
LED灯 3
杜邦线 若干

3、总体方案

整体系统由Arduino UNO板和Arduino Mega2560板控制,使用语音识别模块进行垃圾分类,具体所使用硬件如图所示:
硬件系统组成框图1
硬件系统组成框图2

4、系统原理图

1.控制器I/O口分配

Arduino Mega I/O口分配表

名称 传感器引脚 I/O地址
HC-05蓝牙模块 TX 0
RX 1
LD3320语音识别芯片 MISO 50
MOSI 51
SCK 52
NSS D4
RST D9
IRQ D2
WR GND
光电传感器 OUT 5
SG90 OUT 10 / 11
LED OUT 44 / 46

Arduino UNO I/O口分配表

名称 传感器引脚 I/O地址
安全警报LED灯 OUT 5
蜂鸣器 OUT 6
DHT11数字温湿度传感器 OUT 7
RFID-RC522 MISO 12
MOSI 11
SCK 13
RST 9
SDA 10

2.系统仿真图

系统仿真
3.系统原理图
系统原理图

5、程序设计

1、语音识别部分源码

 Voice.init();                              //初始化VoiceRecognition模块 
  //不可回收垃圾词汇库 //添加指令,参数(指令内容,指令标签(可重复))
  Voice.addCommand("ping guo",0);            //苹果
  Voice.addCommand("xiang jiao",1);          //香蕉
  Voice.addCommand("shui guo",2);            //水果
  Voice.addCommand("dian chi",3);            //电池
  Voice.addCommand("chu yu la ji",4);        //厨余垃圾
  Voice.addCommand("deng pao",5);            //灯泡
  Voice.addCommand("yao pin",6);             //药品
  //可回收垃圾词汇库
  Voice.addCommand("zhi xiang",7);           //纸箱
  Voice.addCommand("ping zi",8);             //瓶子
  Voice.addCommand("su liao",9);             //塑料
  Voice.addCommand("jin shu",10);            //金属
  Voice.addCommand("fei zhi",11);            //废纸
  Voice.addCommand("bo li",12);              //玻璃
  Voice.addCommand("yi fu",13);              //衣服
  Voice.addCommand("guan yi",14);            //关闭不可回收垃圾箱
  Voice.addCommand("guan er",15);            //关闭可回收垃圾箱
  Voice.addCommand("csdn",16);               //无关代码示例
  Voice.start();                             //开始识别

  switch(Voice.read())                          //判断识别
    {
   
      case 0:                                     
          digitalWrite(Led,HIGH);                 //点亮LED
          Servo_one_open();
          Serial.println("苹果");
          break;
      case 1:                                     
          digitalWrite(Led2,HIGH);
          Servo_two_open();
          Serial.println("瓶子");
          break;  
      case 2//...以此类推 
      default:
          break;
  }

2、RFID部分源码

//该段程序烧于UNO,做卡片识别用,并发送指引
rfid.isCard();                      //找卡 
  if (rfid.readCardSerial())          //读卡号
  {
   
    Serial.print("您的卡号是 : ");
    Serial.print(rfid.serNum[0],HEX);

    if(rfid.serNum[0]==host[0][0] && rfid.serNum[1]==host[0][1] && rfid.serNum[2]==host[0][2] && rfid.serNum[3]==host[0][3])    //卡1
    {
   
      Serial.println("Welcome Card 1");
      Serial.print('o');
      Serial.println();
    }
//该段程序烧于Mega,接收指引,并驱动舵机
void rfid_test()                      //RFID接收指令
{
   
  if (Serial1.available()) 
  {
   
   order = Serial1.read(); 
    if (order == 'o') 
    {
   
      Serial.println("打开所有垃圾箱");
      digitalWrite(Led,HIGH);
      digitalWrite(Led2,HIGH);
      Servo_one_open();
      Servo_two_open();
    }
  } 
}

6、实物展示

实物展示
源码太长,已放到资源下载中心。第一次写博客,瞎写写哈,有什么不好的地方请各位大佬指正^ _ ^