语音识别智能分类垃圾桶

  • 基本介绍
  • 器件
    • 51单片机
    • LD3320语音模块
    • SYN6288语音合成
    • SG90舵机(4个)
    • usb-ttl模块
    • 垃圾桶四个(4个)
    • 面包板(建议用)
    • 其他
  • 实现思路与接线
    • 实现流程图
    • 呈现图
    • 接线
  • 代码编写
    • 语音模块(部分代码)
      • 语音模块串口调试结果
    • SYN6288语音播报
      • SYN6288资料
      • 51单片机控制SYN6288语音播报 程序代码
    • 舵机
      • 51单片机控制舵机 程序代码
    • 51单片机—智能垃圾桶 程序代码(部分)
      • main.c
      • syn6288.c
  • 项目展示
  • 基于 51单片机的其他项目
  • 总结

基本介绍

这个一个基于51单片机做的一个语音识别分类智能垃圾桶,我这里用的是STC89C52 通过我们说话来对垃圾词语进行分类。比如:垃圾桶(一级指令)易拉罐(垃圾词语),我们通过说话 说出关键字 让语音模块 接收到 —— 语音模块通过串口发指令给51单片机,针对指令 51单片机发指令和语音合成模块,让喇叭说话、 并且控制指令对应的舵机从而实现对垃圾桶开盖。实现起来其实不难。

器件

51单片机

LD3320语音模块

我用的是这个 飞音云店铺的 开源的。

SYN6288语音合成

SG90舵机(4个)

180°不带限位。

usb-ttl模块

垃圾桶四个(4个)

面包板(建议用)

其他

还有什么杜邦线啥的这里就不说了。

实现思路与接线

实现流程图

这图自己画的哈哈哈 也还行吧 美术生的功底没能展示出来。


人说话——语音模块识别——发指令给51单片机——51根据指令控制舵机 and 控制语音合成进行 播报。

呈现图

接线

注意供电问题 有时候供电不够会导致效果不太好
如果有多个 VCC 可以 分来接 舵机 和 语音 和 SYN6288。

语音模块:5V供电
SYN6288:5V供电
舵机: 5V 3.3V都可

51单片机 SYN6288语音播报
VCC(5V) VCC
GND GND
TX RX
51单片机 LD3320语音模块
VCC(5V) VCC
GND GND
RX TX
51单片机 舵机
VCC(5V / 3.3V) VCC
GND GND
P1.0 舵机1 信号线
P1.1 舵机2 信号线
P1.2 舵机3 信号线
P1.3 舵机4 信号线

代码编写

语音模块(部分代码)

语音模块 厂家是有给源码的,我们只需要改成我们需要的就行。
厂家给的文件:
LDChip.c

uint8 LD_AsrAddFixed()
{uint8 k, flag;uint8 nAsrAddLength;#define DATE_A 50   /*数组二维数值*/#define DATE_B 70      /*数组一维数值*/uint8 code sRecog[DATE_A][DATE_B] = {"la ji tong",\        "yan tou",\"jiao shui",\"jiao dai",\"fan qie",\"guo pi",\"sheng cai",\"fei jiu dian chi",\"guo qi yao pin",\"sha chong ji",\"kuang quan shui ping",\"bao zhi",\"yi la guan"};   /*添加关键词,用户修改*/uint8 code pCode[DATE_A] = {CODE_CMD,\                                                            CODE_YT,\ CODE_JS,\     CODE_JD,\   CODE_FQ,\   CODE_GP,\   CODE_SC,\   CODE_FJDC,\ CODE_GQYP,\ CODE_SCJ,\  CODE_KQSP,\ CODE_BZ,\   CODE_YLG};  /*添加识别码,用户修改*/
}

厂家给的文件:
main.c

void     User_handle(uint8 dat)
{//UARTSendByte(dat);//串口识别码(十六进制)if(0==dat){G0_flag=ENABLE;LED=0;UARTSendByte('1'); /*text.....*/}else if(ENABLE==G0_flag){  G0_flag=DISABLE;LED=1;switch(dat)        /*对结果执行相关操作,客户可删除Printcom 串口输出语句替换为其他需要控制的代码*/{/*干垃圾*/                                                                                   case  CODE_YT:UARTSendByte('G'); /*text.....*/    break;           case  CODE_JS: UARTSendByte('G'); /*text.....*/  break;          case  CODE_JD:  UARTSendByte('G'); /*text.....*/  break;          /*湿垃圾*/case  CODE_FQ:UARTSendByte('S'); /*text.....*/ break;      case  CODE_GP:UARTSendByte('S'); /*text.....*/    break;      case  CODE_SC:UARTSendByte('S'); /*text.....*/    break;      /*有害垃圾*/case  CODE_FJDC:UARTSendByte('Y'); /*text.....*/  break;      case  CODE_GQYP:UARTSendByte('Y'); /*text.....*/  break;      case  CODE_SCJ:UARTSendByte('Y'); /*text.....*/   break;      /*可回收垃圾*/   case  CODE_KQSP:UARTSendByte('K'); /*text.....*/break;    case  CODE_BZ:  UARTSendByte('K'); /*text.....*/break;case  CODE_YLG:UARTSendByte('K'); /*text.....*/break; default: //啥也不做break;}  }   }    
语音模块串口调试结果

测试:垃圾桶 易拉罐 垃圾桶 果皮

这边语音模块是没啥问题了,我们先单个模块这样编写代码,完事整合一起就是一个智能垃圾桶了。

SYN6288语音播报

SYN6288资料

SYN6288模块原理图:

语音合成命令:

51单片机控制SYN6288语音播报 程序代码

可以参考我写的这篇文章。

51单片机+SYN6288语音播报

舵机

51单片机控制舵机 程序代码

可以参考我写的这篇文章。

基于51单片机+SG90舵机

51单片机—智能垃圾桶 程序代码(部分)

部分代码

main.c
#include <reg52.h>
#include "syn6288.h"
#include "delay.h"
#include "uart.h"unsigned int count;      //次数标识
unsigned int angle=5;         //角度标识sbit pwmg = P1^0;       //PWM信号输出
sbit pwms = P1^1;      //PWM信号输出
sbit pwmy = P1^2;      //PWM信号输出
sbit pwmk = P1^3;      //PWM信号输出unsigned char value = 0;    //控制舵机 标志位
unsigned char send_flag_ok = 1;        //1 允许发送    0不允许发送
unsigned char receive_flag_ok = 0;  //0不允许接收   1 允许接收  /*****************SYN6288芯片设置命令*********************/
unsigned char SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
unsigned char SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暂停合成
unsigned char SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢复合成
unsigned char SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //状态查询
unsigned char SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //进入POWER DOWN 状态命令/*主函数入口*/
void main(void)
{uart_Init(); //启动串口receive_flag_ok = 1; //可以接收send_flag_ok = 0;   //禁止发送timer0_Init();   //启动定时器/*死循环*/while(1){switch(value){case 'e':{ET0 = 0;          //打开定时器0 中断send_flag_ok = 1;    //开发送              SYN_FrameInfo(0, "[v16][t5]我在");value = 0;/*禁发送 开接收*/                                                                                                        send_flag_ok = 0;   //禁发送   ET0 = 1;                  break;}case 0:/*禁发送 开接收*/send_flag_ok = 0;     receive_flag_ok = 1;break;  case 5:{send_flag_ok = 0;  //禁发送receive_flag_ok = 0;//开接收for(angle=14;angle>4;angle--)//开盖   {delay_ms(2);} send_flag_ok = 1;ET0 = 0;SYN_FrameInfo(0, "[v16][t5]这个是干垃圾");                                delay2s();ET0 = 1;send_flag_ok = 0;for(angle=4;angle<14;angle++)//关盖        从0到88度,步进11度{delay_ms(2);}       value = 0;receive_flag_ok = 1; break; }case 6:{send_flag_ok = 0;  receive_flag_ok = 0;for(angle=16;angle>4;angle--)//开盖 {delay_ms(2);}  send_flag_ok = 1;ET0 = 0;SYN_FrameInfo(0, "[v16][t5]这个是湿垃圾");delay2s();ET0 = 1;send_flag_ok = 0;for(angle=4;angle<16;angle++)//关盖       从0到88度,步进11度{delay_ms(2);}       value = 0;receive_flag_ok = 1;  break;                                }case 7:{send_flag_ok = 0;  receive_flag_ok = 0;for(angle=14;angle>4;angle--)//开盖 {delay_ms(2);}send_flag_ok = 1;ET0 = 0;SYN_FrameInfo(0, "[v16][t5]这个是有害垃圾");delay2s();ET0 = 1;send_flag_ok = 0;for(angle=4;angle<14;angle++)//关盖        从0到88度,步进11度{delay_ms(2);}       value = 0;receive_flag_ok = 1; break; }case 8:{send_flag_ok = 0;  receive_flag_ok = 0;for(angle=4;angle<14;angle++)//开盖       从0到88度,步进11度{delay_ms(2);}send_flag_ok = 1;ET0 = 0;  SYN_FrameInfo(0, "[v16][t5]这个是可回收垃圾");delay2s();ET0 = 1;send_flag_ok = 0;for(angle=14;angle>4;angle--)//关盖    {delay_ms(2);} value = 0; receive_flag_ok = 1;break;      }default: send_flag_ok = 0;        receive_flag_ok = 1;break; }                 }
}
syn6288.c
#include <reg52.h>
#include <string.h>
#include "uart.h"
#include "syn6288.h"/**************芯片设置命令*********************/
/*外部声明*/
extern unsigned char SYN_StopCom[];
extern unsigned char SYN_SuspendCom[];
extern unsigned char SYN_RecoverCom[];
extern unsigned char SYN_ChackCom[];
extern unsigned char SYN_PowerDownCom[];//Music:  0:无背景音乐  1~15:选择背景音乐
void SYN_FrameInfo(unsigned char Music, unsigned char *HZdata)
{/****************需要发送的文本**********************************/unsigned char  Frame_Info[50];unsigned char  HZ_Length;unsigned char  ecc  = 0;            //定义校验字节unsigned int i = 0;HZ_Length = strlen((char*)HZdata);             //需要发送文本的长度/*****************帧固定配置信息**************************************/Frame_Info[0] = 0xFD ;          //构造帧头FDFrame_Info[1] = 0x00 ;             //构造数据区长度的高字节Frame_Info[2] = HZ_Length + 3;       //构造数据区长度的低字节Frame_Info[3] = 0x01 ;            //构造命令字:合成播放命令Frame_Info[4] = 0x01 | Music << 4 ; //构造命令参数:背景音乐设定/*******************校验码计算***************************************/for(i = 0; i < 5; i++)                 //依次发送构造好的5个帧头字节{ecc = ecc ^ (Frame_Info[i]);      //对发送的字节进行异或校验}for(i = 0; i < HZ_Length; i++)         //依次发送待合成的文本数据{ecc = ecc ^ (HZdata[i]);                //对发送的字节进行异或校验}/*******************发送帧信息***************************************/memcpy(&Frame_Info[5], HZdata, HZ_Length);Frame_Info[5 + HZ_Length] = ecc;UART1_SendString(Frame_Info, 5 + HZ_Length + 1);
}

项目展示

基于 51单片机的其他项目

基于51单片机+遥控灯
基于51单片机+SG舵机
基于51单片机+LCD1602显示
基于51单片机+红外遥控解码+LCD1602显示
基于51单片机+DHT11温湿度+LCD1602显示
基于51单片机+DS18B20温度测温器+LCD1602显示
基于51单片机+SYN6288语音播报
基于51单片机+ESP8266模块(HTTP)上传温湿度到oneNET APP显示+LCD1602显示

总结

我做一个一开始是用的 普中的51单片机 2.0板子 ,供电啥的都还可以,如果是用最小系统的板子 如果程序没问题要看板子的供电是不是不太稳的 ,如果两个或者多个 接到单片机的同一个VCC 可能会引起供电不稳定,导致项目有时候没啥反应。总的来说 垃圾桶这个实现是不算难的,应该是属于简单的了,会点51的小伙伴可以来做做一个智能垃圾桶,可以用来比赛的,可以优化,增加新的功能啥的 这都是可以的。最近实在太忙了,用的几天的的时候,每天抽时间写下了这篇文章,觉得好的可以点赞哈。还得继续加油!

如果觉得这篇文章对你有用。欢迎大家点赞、评论哈哈

需要整个工程代码和 模块的相关资料,私信我 或者 +我扣扣:844797079。或者评论区留下的你的联系方式。

继续加油!!!

基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶相关推荐

  1. 基于ArduinoUNO的LD3320语音识别+SYN6288语音合成的智能分类垃圾桶

    文章目录 写在前面 器件 连接 部分代码 运行结果 小结 写在前面 接上一篇文章,这次是集合了语音识别+语音合成(就是语音播报实现一种反馈)+SG90舵机实现垃圾桶的开与闭,给出上篇文章链接,如果对L ...

  2. 基于51单片机和四位数码管的智能计算器算法

    前段时间,本人写了基于51单片机和四位数码管的智能计算器算法,由于时间关系,算法没能实现小数部分,但已为小数部分留出空间,有兴趣的可以添加进去 下面是源代码(矩阵键盘的检测部分参考了普中科技的实验例程 ...

  3. 基于51单片机的水族箱温度水质监测智能宠物金鱼喂食器补氧换水proteus仿真原理图

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统实时监测水族箱温度及水质,并定时向WIFI串口发送监测信息 2.当水质超过设定阈值时,启动换水继电器 3.按键可设定阈值,可手动换水,喂食 ...

  4. 基于51单片机的水温水位测控智能热水器系统方案原理图仿真

    硬件系统设计 单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM.RAM.I/O.定时器/计数器.中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适 ...

  5. 最简单DIY基于51单片机的舵机控制器

    51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车 第四篇:最简单DI ...

  6. B47 - 基于51单片机的RFID停车计费系统

    任务摘要 当今社会,交通压力不断增加,智能停车场管理系统是人们对便捷高效交通的一种追求.本智能停车场管理系统运用RFID技术,采用STC8H8K64U单片机.RC522.串口屏.光电传感器实现系统设计 ...

  7. 基于51单片机的语音采集系统设计(录音笔选择方案)

    功能: 基于51单片机的语音实时采集系统 系统由STC89C52单片机+ISD4004录音芯片+LM386功放模块+小喇叭+LCD1602+按键+指示灯+电源构成 具体实现功能: (1)可通过按键随时 ...

  8. 基于51单片机万年历

    目录 一.项目功能概述 二.原理图设计 三.PCB设计 四.仿真实现 五.程序设计 六.设计资料 资料下载地址:基于51单片机万年历 一.项目功能概述 1.可以显示年.月.日.时.分.秒.星期.农历 ...

  9. 基于51单片机的多功能智能语音循迹避障小车

    目录 一.功能介绍及硬件准备 二.电机控制及调速 三.小车循迹方案 四.跟随功能实现 五.测速功能实现 六.OLED显示车速 七.摇头避障功能实现 八.SU-03T语音模块介绍 九.语音切换小车模式+ ...

  10. 基于51单片机的智能家居的设计(一)

    基于51单片机的智能家居的设计初级版本 项目简介: 该项目可以通过单片机烧写软件发送指令并实现大厅灯跟卧室灯的亮灭.该项目分为四个等级: 1.在单片机烧写软件上面发送指令实现灯的亮灭: 2.用语音模块 ...

最新文章

  1. 多任务训练的模式结构扩散
  2. android中方法调用super(..)的相关知识
  3. 2019展望:超级智能崛起,人类智慧与机器智能将深度融合
  4. 《突破C#编程实例五十讲》源文件下载(2)
  5. 非常棒的jQuery排版用插件
  6. AI开发者大会之AI学习与进阶实践:2020年7月3日《如何转型搞AI?》、《基于AI行业价值的AI学习与进阶路径》、《自动机器学习与前沿AI开源项目》、《使用TensorFlow实现经典模型》
  7. Python3实现打家劫舍问题
  8. 微信小程序之 3d轮播(swiper来实现)
  9. 德国精品软件推荐   压缩软件 WINRAR 个人版终于免费了。
  10. 【例题 7-2 UVA - 11059】Maximum Product
  11. Linux+gcc设置断点,gcc/g++常用编译选项和gdb常用调试命令
  12. 李宏毅机器学习——结构化学习(一)
  13. java 汉字 char_char 类型如何存储一个汉字的?
  14. An internal error occurred during: Launching MVC on Tomcat 7.x.
  15. Unity快速安装教程
  16. 面向接口编程与面向实现编程
  17. imac下修改本地hosts文件解决react项目中的跨域问题
  18. hadoop 结合zookeeper 高可用 优化新特性
  19. u盘安装计算机系统,U盘系统_详细教您将系统安装到U盘
  20. 计算机vb2级知识点,2020年全国计算机二级VB复习知识点:VB编码规则

热门文章

  1. python如何批量下载大文件(支持断点续传)
  2. CAD2010安装→注册
  3. SpringMVC解决POST和GET请求中文乱码问题
  4. WebSSH神器sshwifty的安装与使用
  5. Sentaurus TCAD 2013 在RedHat7.0 Linux系统的安装教程
  6. kafka及可视化工具offset explorer
  7. java 加密解密,编码解码工具类
  8. 记录一下,关于Instagram
  9. 读书笔记:《人工智能》
  10. TXT文本去重 TXT去重 TXT文本合并去重工具 —— 20亿行130GB的数据只需60分钟