基于arduino的语音识别垃圾分类

简介: 这是好多年前自己的一份毕业设计,分享一下小成果-大佬勿喷!本设计结合社会垃圾分类知识,经过实际的需求分析,采用Arduino单片机技术以及LD3320非特定语音识别分析技术开发出的智能语音识别垃圾分类系统,实现了唤醒命令激活、实时的语音交互和自动感应打开桶盖的功能,达到了自动分类垃圾的目的。本文详细论述了智能语音垃圾分类系统的

1. 创作背景
目前,人们的生活正朝着便捷化、智能化方向发展。根据数据显示,我国每天产生的垃圾平均每人1.3kg左右,而且每日产生垃圾的量还在持续增长,而且每日产生的垃圾各式各样,种类很多。由于国民普遍性的存在垃圾分类意识浅薄,从而导致了我国垃圾分类政策难以推广。又由于垃圾分类的不明确,所以产生的污染环境、资源浪费、资源回收率低、资源可再生性若的一系列问题。
本设计就是结合人工智能的方式去宣传垃圾分类的意识,用直观、简洁、高效的方式科普国民对垃圾分类的意识。本设计也着重的针对老年人、青少年教育、文化程度较低的人群进行科普垃圾分类的重要性,以及每样垃圾的归类知识。
基于Arduino语音识别技术实现人机对话,当用户向单片机输入语音指令后,系统就会自动识别分析并执行垃圾分类操作。

2.创作思路
在Arduino单片机结合LD3320语音识别模块的基础上,实现了对垃圾分类语音智能识别系统的设计。其工作原理是通过LD3320语音识别模块的功能将用户发出的声音逐一转换成特定的字符串,字符串转换后通过模块中的串口发送到Arduino单片机的控制单元。控制单元接收到语音识别模块的字符串预置命令后,指引四个舵机开发板,控制舵机的旋转角度,实现垃圾桶的闭合状态。当过程结束后,Arduino单片机控制MP3语音播放模块播放相对应的指令。

第二章 关键技术

2.1Arduino单片机
2.1.1 Arduino开发板
Arduino单片机的储存空间也就是主控芯片所集成的储存空间。在储存空间中使用2kb的SRAM、1kb的EEPROM电可擦写编程只读储存器以及32kb flash。
Arduino单片机可通过USB接口与PC进行通讯,在PC中与ArduinoIDE进行衔接, 用于上传源程序,与此同时也给Arduino开发板提供电源。开发板对于供电要求也还是很苛刻的,所提供的电源必须是5V电压而VIN可以使用7至12伏特的电压。开发板一共有14个数字输出/输入的管脚,6个模拟输入。
同时也可以由程序的定义为输入或者输出;在管脚中2和3端口可以输入,外部中断信号3/5/6/9/10/11六个管脚可以提供8位(0-255)的滤波PWM输出;板载reset复位口,当按下reset复位键后Arduino将会恢复出产设置状态。
2.2 非特定语音识别分析技术
2.2.1LD3320语音识别模块
本产品采取LD3320语音识别模块。该模块是ICRoute公司生产的一款非特定语音识别芯片,它内置有非特定语音识别的DSP(Digital Signal Processing)算法。GND端用于接电源负极,vcc端接电源正极,ICR是识别模块状态显示。当收到语音是该处有绿灯闪烁,TXD用于串口的数据发送,RXD用于数据的接收。MIP,MIN是MIC的电源正负极,不同的接法MIC的识别率不同。同时与电脑上的LP—COMM串口调试工具配合可动态添加50条指令。LD3320识别模块无须外接其他设备,单一设备可完成语音识别。

第三章 需求分析

目前,人们的生活正朝着便捷化、智能化方向发展。根据数据显示,我国每天产生的垃圾平均每人1.3kg左右,而且每日产生垃圾的量还在持续增长,而且每日产生的垃圾各式各样,种类很多。由于国民普遍性的存在垃圾分类意识浅薄,从而导致了我国垃圾分类政策难以推广。又由于垃圾分类的不明确,所以产生的污染环境、资源浪费、资源回收率低、资源可再生性若的一系列问题。
本设计就是结合人工智能的方式去宣传垃圾分类的意识,用直观、简洁、高效的方式科普国民对垃圾分类的意识。本设计也着重的针对老年人、青少年教育、文化程度较低的人群进行科普垃圾分类的重要性,以及每样垃圾的归类知识。
基于Arduino语音识别技术实现人机对话,当用户向单片机输入语音指令后,系统就会自动识别分析并执行垃圾分类操作。
3.1系统目标
通过本系统的开发,应达到以下目标:
(1)系统具有一定的使用价值。
(2)系统操作简便,容易上手。
(3)具有对应数据库,可通过数据库录入垃圾分类信息。
(4)可通过语音识别技术达成人机交互。
(5)可通过抓取语音指令并分析执行相对应的操作。
3.2功能分析
系统最终实现的功能如下:
(1)语音识别交互。
(2)通过识别到的内容进行分析。
(3)通过已分析的内容进行归类。
(4)预留系统后期二次开发管脚以及I/O口。
(5)通过串口将两种硬件模块达成通讯。

第四章 系统设计
4.1 功能实现
4.1.1 功能设计
该系统软件的设计是基于Arduino IDE开发环境。该环境底层使用C/C++语言开发。当程序需要某一个模块驱动程序时,直接在IDE库函数中调用该模块的头文件加载到已有的文件中。在本系统设计采用头文件,专门驱动舵机的转动。
图4-1为系统的主流程图。当电源接通以后,机械臂要复位操作,如果语音识别模块识别到语音,该模块上面的绿灯闪烁,再判断内容是不是原先设定的指令,再执行相应操作,否则要下一次识别。

图片1.png

第五章 系统实现
5.1 物料准备
本设计主要硬件如下:
1.arduino单片机(图1):用于处理复杂的硬件动作以及指令。
image.png

2.LD3320语音识别模块(图2):用于采集语音信息以及分析语音信息。

image.png

3.MP3播放模块(图3):当系统做出判断后给用户反馈语音信息。
image.png

5.2 硬件焊接
将arduino的A1-A8焊接到LD3320语音识别模块中(图5-1),使两块硬件之间能达成通讯,再将MP3模块的RT与LD3320的XT引脚焊接(图5-2),RT对XT,XT对RT,将舵机焊接到arduino主板的I/O口,最后将扬声器焊接到MP3播放模块中。

image.png

5.3 程序设计
(1)引入舵机的支持库和软串口库

include <Servo.h>

include <SoftwareSerial.h>

(2)将LD3320板载管脚RX、TX和Arduino开发板的RX、TX交叉连接,使Arduino主板与LD3320达成串口通讯 :
A4(扩展板上SDA)为RX,接语音识别模块的TXD
A5(扩展板上SCL)为TX,接语音识别模块的RXD
(3)定义四个舵机,myservo1为可回收垃圾、myservo2为厨余垃圾、myservo3为有害垃圾、myservo4为其他垃圾。
SoftwareSerial softSerial(A4, A5);
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
(4)定义舵机管脚为int型 变量名最后一位数对应舵机编号,给变量赋予的值对应Arduino开发板管脚。每个管脚对应的值为:ms1对应可回收垃圾桶舵机、ms2对应厨余垃圾桶舵机、ms3对应有害垃圾桶舵机、ms4对应其他垃圾桶舵机。
int val;
int ms1 = 4;
int ms2 = 5;
int ms3 = 6;
int ms4 = 7;
(5)定义语音播报管脚,当返回管脚编号时:yy1“语音播报(这是可回收垃圾……)”、yy2=“语音播报(这是厨余垃圾……)”、yy3=“语音播报(这是有害垃圾……)”、yy4=“语音播报(这是其他垃圾……)”、yy5=“语音播报(我在的……)”、yy6=“语音播报(系统自我介绍播报……)”
int yy1 = 8;
int yy2 = 9;
int yy3 = 10;
int yy4 = 11;
int yy5 = 12;
int yy6 = 13;
(5)统一初始化串口波特率为9600。
void setup() {
Serial.begin(9600);
softSerial.begin(9600);
(6)初始化语音引脚,将yy1至yy6的管脚拉高,随后再次拉低。
pinMode(yy1, OUTPUT);
pinMode(yy2, OUTPUT);
digitalWrite(yy2, HIGH);
digitalWrite(yy3, HIGH);
(7)初始化舵机,将舵机1(ms1)至舵机4(ms4)的旋转角度初始化为90度。
myservo1.attach(ms1);
myservo2.attach(ms2);
myservo3.attach(ms3);
myservo4.attach(ms4);
myservo1.write(90);
delay(200);
(8)为了在初始化的过程中,防止舵机旋转角度发生抖动所以释放舵机角度,以解决多个舵机抖动。
myservo1.detach();
myservo2.detach();
myservo3.detach();
myservo4.detach();
}
(9)可回收垃圾桶盖开关操作,当接到指令初始化舵机后,舵机顺时针旋转90度,此时垃圾桶的状态为“开”,延时1秒后触发语音播报,当播报结束后舵机再次延时5秒,垃圾桶状态为关。
void khslj()
{
myservo1.attach(舵机1);
myservo1.write(舵机旋转90度);
delay(延时1秒);
digitalWrite(语音播报管脚为1, 低电平);
delay(延时1000毫秒);
digitalWrite(语音播报, 高电平);
delay(延时5秒);
ServoAction(开合状态码);
myservo1.detach(释放舵机);
}
(10)开盖,合盖动作函数
void ServoAction(int servo_num)
{
打开盖 舵机打开转向角度,用for语句,目的是减慢舵机的速度
循环 (int 引脚 = 90度; 引脚 > 0; 引脚 = 引脚 - 1)
{

如果 (servo_num == 1)  myservo1.write(引脚);
判断 (servo_num == 2)  myservo2.write(引脚);
判断(servo_num == 3)  myservo3.write(引脚);
判断(servo_num == 4)  myservo4.write(引脚);
延时(5);

}
延时(2000);
Serial.输出(servo_num);
Serial.输出("开");
(11)合盖舵机合上转向角度
判断 (servo_num == 1) myservo1.write(90);
判断(servo_num == 2) myservo2.write(90);
判断(servo_num == 3) myservo3.write(90);
判断 (servo_num == 4) myservo4.write(90);
delay(200);
Serial.println("合");
}
void loop()
{
val = softSerial.read(从软串口获得数据);
判断 (val > -1)
{

输出(val);

}
(12) 从串口读取语音识别模块的返回值,110是厨余垃圾,111是其他垃圾,112是有害垃圾,113是可回收垃圾

if (val == 254)

{

digitalWrite(yy5, LOW);
delay(1000);
digitalWrite(yy5, HIGH);
delay(50);

}
(13)如果识别到“介绍自己”指令后,播放预设的自我介绍文档,
if (val == 114)//254对应是唤醒语(“垃圾桶”)
{

digitalWrite(yy6, LOW);
delay(1000);
digitalWrite(yy6, HIGH);
delay(50);

}
(14)获取到串口数据后进行循环判断,110对应可回收垃圾、111对应厨余垃圾、112对应有害垃圾、113对应其他垃圾
if (val == 110)
{

cylj();   

}
if (val == 111)
{

qtlj();    

}
if (val == 112)
{

yhlj();   

}
if (val == 113)

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
机器学习/深度学习 传感器 人工智能
【仪酷LabVIEW目标检测插件】手把手教你在LabVIEW中使用深度学习实现产品检测(上)
【仪酷LabVIEW目标检测插件】手把手教你在LabVIEW中使用深度学习实现产品检测(上)
485 1
|
2月前
|
存储 监控 算法
动物目标检测——基于YOLOv5和树莓派4B平台
【10月更文挑战第1天】本文将详细介绍如何在性能更强的计算机上训练YOLOv5模型,并将训练好的模型部署到树莓派4B上,通过树莓派的摄像头进行实时动物目标检测。
|
7月前
|
数据采集 监控 算法
LabVIEW开发移动车辆的识别和特征提取
LabVIEW开发移动车辆的识别和特征提取
53 1
|
4月前
|
人工智能 C语言
【51单片机】让AI识别电路图,帮你进行编码(以51单片机为例)
【51单片机】让AI识别电路图,帮你进行编码(以51单片机为例)
171 0
|
6月前
|
机器学习/深度学习 人机交互 Python
基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】
基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】
基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】
|
5月前
|
数据采集 算法 计算机视觉
LabVIEW开发指针式压力仪表图像识别
LabVIEW开发指针式压力仪表图像识别
40 0
|
7月前
|
算法 计算机视觉
LabVIEW通过嘴唇图像识别为残疾人士开发文本输入系统
LabVIEW通过嘴唇图像识别为残疾人士开发文本输入系统
58 1
|
7月前
|
数据可视化 开发工具 计算机视觉
LabVIEW视觉采集软件(VAS)、视觉生成器(VB)和视觉开发模块(VDM)之间有什么不同
LabVIEW视觉采集软件(VAS)、视觉生成器(VB)和视觉开发模块(VDM)之间有什么不同
64 1
|
7月前
|
语音技术 C++
基于Qt的简易语音识别与合成系统设计与实现
基于Qt的简易语音识别与合成系统设计与实现
331 0
|
机器学习/深度学习 存储 算法
【使用深度学习的城市声音分类】使用从提取音频特征(频谱图)中提取的深度学习进行声音分类研究(Matlab代码实现)
【使用深度学习的城市声音分类】使用从提取音频特征(频谱图)中提取的深度学习进行声音分类研究(Matlab代码实现)
308 0
下一篇
DataWorks