智能语音识别垃圾桶

主要采用Arduino单片机与LD3320语音模块结合,实现垃圾分类。

目录

设计方案

详细设计

总结

设计方案

简介:传统垃圾桶都是采用不封口,手动或者脚踩的方式打开桶盖投递垃圾,不但操作麻烦,而且对人体的卫生健康有不利的影响,对空气环境也会造成污染。针对以上存在的问题,本文提出了一种简单实用的智能语音识别垃圾桶的设计方案,能够通过人们需要的时候说出要扔的垃圾自动开合垃圾桶盖的垃圾桶,在一定时间后自动关闭垃圾桶。垃圾桶通过及时的关闭垃圾桶,可以有效的抑制异味的散发,当人们需要扔垃圾的时候能自动开合,避免直接接触,从而抑制病菌的传播。

详细设计

  1. 作品功能特色:本作品节能环保,干净卫生,具有一定的娱乐性,运用广泛,可适用于各种中高级办公楼等公共场合,其原理也可运用至其他领域,如防盗作用等,具有很强的市场竞争力。作品采用了Arduino uno 作为主控,以LD3320语音识别模块完成。

(1)节能环保。本作品有休眠唤醒功能,在长时间没有人来投垃圾,自动的将电路电源关闭,之后进入休眠,从而大大减少能源的浪费;而且通过语音提示让投垃圾者将垃圾分类投放,做到了节能环保。当有人来时,又通过该电路部分唤醒,重通电进入正常工作状态。

(2)干净卫生。智能垃圾桶顺应了现代社会的追求,突破了传统带盖垃圾桶用手或脚开盖的思维屏障,感应开、关桶盖让人们在丢时少了份担心,减少了活中各种病菌交叉感染的机率。同时具有良好的密封性好,无垃圾异味溢出,确保四週空气清新。

(3)娱乐性。本作品的语音系统会根据不同情况发出一些幽默诙谐的话语,娱乐大众的同时也吸引人们有意识地将垃圾丢进桶内,更能吸引小孩去捡垃圾往里丢,从而使人们养成不乱扔垃圾的好习惯,让我们周围的环境更加美丽。

(4)运用广泛。本作品可有多种色彩、多种容量、多种材料选择,提升了公共场合及居家档次,满足了人们崇尚人性和时尚,不断塑造个性和魅力的生 活品味;是办公、家用、公用、会议、医疗等使用的理想选择。

2.系统原理图:

(1)舵机 I/O口分配表

舵机1

Arduino

红线

5V

棕线

GND

橙线

D9

舵机2

Arduino

红线

5V

棕线

GND

橙线

D10

舵机3

Arduino

红线

5V

棕线

GND

橙线

D11

舵机4

Arduino

红线

5V

棕线

GND

橙线

D12

(2)LD3320语音模块I/O口分配表

LD3320

Arduino

5v

5V

GND

GND

RXD

D0

TXD

D1

3.智能垃圾桶整体架构流程图:

4.系统电路仿真:

5.模块功能

(1)语音模块:在对语音模块中,自定义Pin脚功能,设置分类来语音指令。LD3320语音识别芯片的驱动是靠模块上自带的STC11L08单片机驱动的,我们可以修改模块自带工程的Demo程序,修改里面的关键词,然后将识别的结果通过串口打印出来,我们使用另外一个MCU与该模块进行串口通信,解析收到的串口指令,进而做响应的指令动作。例如 我们说口令模块识别之后,串口输出MCU接收串口信息之后,对该串口指令进行解析(可以使用cJSON解析此字符串);然后通过TTS文字转语音模块播放当前时间,即完成本次语音识别控制过程。

识别原理:就是你说一句话,然后模块用拼音去和你的发音做比较,在关键词中找出哪些预设值的词语与发音的接近程度大于多少的(假定50%),然后再从一堆大于(50% )里面输出一个最接近的。

  

(2)舵机:接收到指令,伺服舵机旋转打开垃圾桶。

(3)喇叭:语音模块接收到指令后进行回复播报

代码实现:

#include <Servo.h>
#include <SoftwareSerial.h>            //软串口库
// 0RX,接语音识别模块的TXD
// 1TX,接语音识别模块的RXD
SoftwareSerial softSerial(0, 1);//定义软串口
int a=0;//定义一个全局变量a,用来存放串口接收到的数据的。
int pos=0;
Servo myservo;    // 定义Servo对象来控制   有害垃圾舵机
Servo myservo_1;  // 定义Servo对象来控制   厨余垃圾舵机
Servo myservo_2;  // 定义Servo对象来控制   其它垃圾舵机
Servo myservo_3;  // 定义Servo对象来控制   可回收垃圾舵机

void setup()
{
  Serial.begin(9600);//设置串口波特率为9600buad
  softSerial.begin(9600);
  /**************************舵机初始化********************************/
  myservo.attach(9);     // 控制线连接数字9    厨余垃圾舵机
  myservo_1.attach(10);  // 控制线连接数字10   可回收物舵机
  myservo_2.attach(11);  // 控制线连接数字11   其它垃圾舵机
  myservo_3.attach(12);  // 控制线连接数字12   有害垃圾舵机
  myservo.write(180);
  myservo_1.write(180);
  myservo_2.write(180);
  myservo_3.write(180);
  delay(200);
  myservo.detach();
  myservo_1.detach();
  myservo_2.detach();
  myservo_3.detach();
  /*****************************************************************/
}
//把十进制转换为十六进制

char  buffer [2]; 
char  * inttohex( int  aa)
{
  sprintf (buffer, "%x" , aa);
  return  (buffer);
}
void loop()//循环执行
{
    a = softSerial.read();//读取串口接收到的值,并且存放在a中保存起来
    
    if(1== a)//舵机0-厨余垃圾
    {
      myservo.attach(9);
      myservo.write(180);
      delay(100);
      //打开盖  舵机打开转向角度
      for (pos= 180; pos > 0; pos--)
      {
        myservo.write(pos);
        delay(5);
      }
      delay(2000);//延时2秒
      

      //合上盖 舵机合上转向角度
      myservo.write(180);
      delay(500);
      myservo.detach();//释放
     
    }
    if(2 == a)//舵机1-可回收垃圾
    {
      myservo_1.attach(10);
      myservo_1.write(180);
      delay(100);
      //打开盖  舵机打开转向角度
      for (pos = 180; pos > 0; pos--)
      {
        myservo_1.write(pos);
        delay(5);
      }
      delay(2000);//延时2秒
      

      //合上盖 舵机合上转向角度
      myservo_1.write(180);
      delay(500);
      myservo_1.detach();//释放,以解决多个舵机抖动
    }
    if(3 == a)//舵机2-其它垃圾
    {
        myservo_2.attach(11);
      myservo_2.write(180);
      delay(100);
      //打开盖  舵机打开转向角度
      for (pos = 180; pos > 0; pos--)
      {
        myservo_2.write(pos);
        delay(5);
      }
     delay(2000);//延时2秒
      myservo_2.write(180);//合上盖 舵机合上转向角度
      delay(500);
     myservo_2.detach();//释放 
    }
    if(4 == a)//舵机3-有害垃圾
    {
      myservo_3.attach(12);
      myservo_3.write(180);
      delay(100);
      //打开盖  舵机打开转向角度
      for (pos = 180; pos > 0; pos--)
      {
        myservo_3.write(pos);
        delay(5);
      }
      delay(2000);//延时2秒
     //合上盖 舵机合上转向角度
      myservo_3.write(180);
      delay(500);
      myservo_3.detach();//释放,以解决多个舵机抖动
      
  }
}

总结

文章实现了用户口述垃圾名称,对应的垃圾类别自动开合桶盖,实现垃圾分类,增加了乐趣性。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年6月5日
下一篇 2023年6月5日

相关推荐