毕业论文
您现在的位置: 电子琴 >> 电子琴优势 >> 正文 >> 正文

电子琴实验报告

来源:电子琴 时间:2022/8/30

电子技术与创新实践基地

《电子创新实践》

课程设计报告

系统方案设计及主控模块的介绍

系统基本设计思路

通过一个软件和硬件的开源电子平台,输入和调试代码进入微控制器,通过语音识别模块和超声波测距模块来控制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

  • 上一篇文章:
  • 下一篇文章: 没有了