电子技术与创新实践基地
《电子创新实践》
课程设计报告
系统方案设计及主控模块的介绍
系统基本设计思路
通过一个软件和硬件的开源电子平台,输入和调试代码进入微控制器,通过语音识别模块和超声波测距模块来控制led灯和垃圾桶。
控制器模块的选择
方案1:采用arduino为系统的微控制器
清晰的编程环境Arduino软件(IDE)对初学者来说易于使用,但足够灵活,高级用户也可以利用。Arduino软件(IDE)在Windows,MacintoshOSX和Linux操作系统上运行。大多数微控制器系统限于Windows。
方案2:采用stm32为系统的微控制器
资料开源,教程丰富,开发板购买渠道多;STM32是基于ARMCortexM处理器内核的32位闪存微控制器,ARM在数字电子产品的开发中处于核心地位;性能稳定,适合各种学习开发;使用简单,快速上手完善的库,不用配置寄存器,缩短开发周期
选择:方案1
原因:与其他微控制器平台相比,Arduino板相对便宜,某宝ArduinoUNO单件15元左右,对于新手极其友好。也可以手动组装最便宜的Arduino模块版本,甚至预组装的Arduino模块的价格也不到50元。且更易上手。
语音识别模块的选择
我们采用的是ld模块。
原因:LDA基于ASR语音识别技术,是基于关键词语列表识别的技术。只需要设定好要识别的关键词语列表,并把这些关键词语以字符的形式传送到LDA内部,就可以对用户说出的关键词语进行识别。不需要用户作任何地录音训练。
超声波传感器模块的选择
我们采用的HC-SR04是模块。
原因:HC-SR04超声波测距模块可提供2cm-cm的非接触式距离感测功能,测距精度可达高到的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。简单且经典。
最终方案
元器件:LD语音识别模块、led灯、CH-SR04超声波测距模块、G90舵机。
平台:Arduino。
其他材料:木棍、皮筋、垃圾桶、热熔胶、杜邦线。
主控模块的介绍(arduinounoR3)
1.6.1电源(UNO有三种供电方式)
1.6.2指示灯
1.6.3复位按键
按下该按键可以使Arduino重新启动,从头开始运行程序
1.6.4存储空间
1.6.5输入输出端口
UART通信:为RX和TX引脚,被用于接收和发送串口数据。这两个引脚通过连接到ATmega16U2来与计算机进行串口通信。
外部中断:为2、3引脚,可以输入外部中断信号
PWM输出:为3、5、6、10、11引脚,可用于输出PWM波
SPI通信:为SS,MOSI,MISO,SCK引脚。可用于SPI通信
TWI通信:为SDA,SCL引脚和TWI接口,可用于TWI通信,兼容IIC
AREF:模拟输入参考电压的输入端口
RESET:接低电平时会使Arduino复位,当复位键被按下时,会使该端口接到低电平,从而使Arduino复位。
电路接线和设计
2.1设计内容
2.1.1设计思想
基于的超声波垃圾桶:
当人靠近垃圾桶时,超声波传感器测出两者之间的距离,当距离小于设定的阈值是,舵机转动,垃圾桶盖打开。(这里设置的阈值是15cm)
基于的智能语音控制:
对准lcd模块的咪头说话,“开灯”,则灯亮,“关灯”则灯暗。
2.1.2led灯电路
语音模块介绍
采用SPI通信接口,板载咪头和有源晶振,方便在电子产品中实现语音识别、声控和人机对话等功能。
注意事项:
由于该模块使用3.3V电压,所以将其和Arduino连接时,请务必注意供电电压(如配合ArduinoUNOR3使用,建议加上电平转换模块);对于使用UNOPLUS开发板来说,切换电压很简单,只需将电压跳线帽配置为3.3V即可。
语音识别的过程:如下图
Ld接线对照表
LED灯与ArduinoUNO开发板接线
2.1.3超声波垃圾桶电路
超声波模块介绍
基本工作原理
(1)采用IO口TRIG触发测距,给最少10us的高电平信呈。
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声
波从发射到返回的时间。测试距离=(高电平时间*声速(M/S))/2;
实物图
模块引脚:
Vcc:+5V电源供电
Trig:输入触发信号(可以触发测距)
Echo:传出信号回响(可以传回时间差)
Gnd:接地
模块参数:
使用电压:DC---5V
静态电流:小于2mA
电平输出:高5V
电平输出:低0V
感应角度:不大于15度
探测距离:2cm-cm
高精度可达0.2cm
原理图:
工作流程:
arduino引脚触发Trig测距,给至少10us的高电平信号;
模块自动发送8个40khz的方波,自动检测是否有信号返回;
有信号返回,通过IO输出一高电平,并单片机定时器计算高电平持续的时间;
超声波从发射到返回的时间.
接线图:
实物接线图:
软件调试和焊接
这是本设计较为困难的一部分,需要经过反反复复的调试,才能达到理想中的效果,以下将分文硬件与软件两部分介绍此次调试的过程,以及调试过程中遇到的困难和解决办法。
软件调试:基于arduino系统在网上的大量资料,因此比较轻易的得到相应两个电路的程序,但我们的项目是将两组电路合并为一组电路。因此,其中的难点在于把握引脚个数的合理分布和线路的合理布局,同时也要考虑程序的合理分布,否则会出现电路功能不完整实现的情况。在最后的合理布局下,解决了上述问题。
硬件调试:
1)元器件的装插焊接应遵循先小后大,先轻后重,先低后高,先里后外的原则,这样有利于装配顺利进行。
2)集成电路的焊接,在焊接时,首先要弄清引线脚的排列顺序,并与线路板上的焊盘引脚对准,核对无误后,先固定arduino,然后再重复检查,确认后再焊接其余脚位。由于arduino引线脚较密,焊接完后要检查有无虚焊,连焊等现象,确保焊接质量。
3)焊锡之前应该先插上电烙铁的插头,给电烙铁加热。
4)焊接时,焊锡与电路板、电烙铁与电路板的夹角最好成45度,这样焊锡与电烙铁夹角成90度。
5)焊接时,焊锡与电烙铁接触时间不要太长,以免焊锡过多或是造成漏锡;也不要过短,以免造成虚焊。
6)元件的腿尽量要直,而且不要伸出太长,以1毫米为好,多余的可以剪掉。
7)焊完时,焊锡最好呈圆滑的圆锥状,而且还要有金属光泽
8)设计装上3节5号电池,确保电压在4.5v~5.5v之间,首先检测电路板有无焊接短路,然后通电。确保万无一失!
焊接最终结果图:
设计总结
1、准备越充分,实验越顺利。
磨刀不误砍柴工,前期的知识储备、文献储备、材料准备、方法准备能够避免手忙脚乱,充分的预实验使你充满信心。一步一个脚印,就不必“从头再来”。最不能容忍的是在开始的几步偷懒,造成后面总有一些无法排除的障碍。
2、交流是最好的老师
做实验遇到困难是家常便饭。你的第一反应是什么?反复尝试?放下?看书?这些做法都有道理,但首先就应想到的是交流。对有身份的人,私下的请教体现你对他的尊重;对同年资的人,公开的讨论能够使大家畅所欲言,而且出言谨慎。千万不能闭门造车。一个实验折腾半年,之后别人告诉你那是死路,岂不冤大头?
3、一半时刻做实验,一半时刻看文献。
千万不能把时刻全部消耗在实验台上。看文献、看书、看别人的操作、听别人的经验、研究别人的思路,边做边思考。要学会比较,不好盲从。否则,会被一些小小的问题困扰许久。
附录1实物图
附录2代码:
#includeServo.h
#includeld.h//LD语音识别模块的头文件
constintTrigPin=3;
constintEchoPin=5;
floatdistance;
VoiceRecognitionVoice;//声明一个语音识别对象
Servomyservo;
#defineLed8//定义LED控制引脚
voidsetup()
{
pinMode(Led,OUTPUT);//初始化LED引脚为输出模式
digitalWrite(Led,LOW);//LED引脚低电平
Voice.init();//初始化VoiceRecognition模块
Voice.addCommand("kaideng",0);//添加指令,参数(指令内容,指令标签(可重复))
Voice.addCommand("guandeng",1);//添加指令,参数(指令内容,指令标签(可重复))
Voice.start();//开始识别
Serial.begin();
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
myservo.attach(6);
}
voidloop()
{
switch(Voice.read())//判断识别
{
case1://若是指令“guandeng”
digitalWrite(Led,LOW);//熄灭LED
break;
case0://若是指令“kaideng”-
digitalWrite(Led,HIGH);//点亮LED
break;
default:
break;
}
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
distance=pulseIn(EchoPin,HIGH)/58.00;
Serial.print(distance);
Serial.print("cm");
Serial.println();
if(distance15)
{
go();
}
if(distance15)
{
back();
}
}
voidgo()
{
myservo.write(0);
delay();
}
voidback()
{
myservo.write();
delay(15);
}
转载请注明:http://www.0431gb208.com/sjszjzl/1357.html