ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:360.98KB ,
资源ID:21072568      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21072568.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北京工业大学电子信息工程课程设计结题报告含有代码Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北京工业大学电子信息工程课程设计结题报告含有代码Word文件下载.docx

1、篇幅不够可加页研究设计方案、预期结果:1、选择合适的超声波发生模块,和其他硬件如舵机、电机等,开发平台采用Arduino.超声波模块使用HC-SRO42、设计系统原理图和流程图初步设计的原理图如下:初步设计的系统流程图如下:3、开发平台的调试,基础循迹模块可以对车前目标作出反应 开发平台使用 Arduino IDE。循迹模块是开发平台订购好的,测试即可。但是需要调试循迹距离4、完成系统的硬件电路连接图的设计和电路实物的连接 硬件包括车体组装,AVR单片机的安装,两个减速电机的安装,舵机安装五、开发平台Arduino对各个部分的控制第一阶段预期可以实现控制小车前进,停止第二阶段在安装舵机后,实现

2、控制舵机转动第三阶段完成超声模块的调试六、系统整体调试 基础功能是通过车体上的红外接收头进行普通的循迹,最后课题目标是在舵机控制超声模块转动的前提下,小车可以扫描周围障碍搜索前进。 实验内容1、主要部分设计(1)、电机驱动部分电机驱动原理图如下所示L293D根据网上查到的芯片手册有如下的功能L293和L293D四倍高电流H桥驱动程序。 L293是提供双向驱动电流高达1 A,电压是从4.5 V至36 V的;L293D提供双向驱动电流高达600毫安,电压是从4.5 V至36 V的。两个设备是专为驱动等感性负载继电器,电磁阀,直流双极步进和马达,也可以给其他高电流/高电压提供电源负载。兼容所有的TT

3、L输入。每个输出都是推拉式驱动电路,与达林顿三极管和伪达林源。启用1,2 EN驱动器和3,4 EN驱动器。当使能输入为高电平时,相关联的驱动器被启用和他们的输出处于活动状态,并在其输入端的同相。当使能输入为低,这些驱动器被禁用其输出关闭,在高阻抗状态。【PS:1,2EN为1和2的使能端(高电平使能);3,4EN同理】用适当的数据输入端,每对驱动程序的形式一个完整的H桥可逆驱动器适用于电磁阀或电机应用。L293,外部输出为高速钳位二极管,应使用电感的瞬态抑制。VCC1和VCC2分开,提供逻辑输入,以尽量减少设备功耗。L293和 L293D的工作温度是从0C至70C由此设计的电机驱动电路如下:真值

4、表为 输入 输出电机转动方向A1EN1A2EN2Y1Y2*1正转反转停XZ注:EN1,EN2出现低电平无论A1,A2是什么电平都是高阻(2)红外循迹模块的设计红外循迹需要分成两部分设计,一部分是红外检测,一部分是发送接收。首先应由红外发送接收部分把是否检测到前方有物体转换成模拟信号,再送给红外检测部分判断出是否前方有物体红外发送接收部分原理图:图中的RPR220是反光型光电探测器:其中发射器是一个红外二极管,接收器是一个硅平面光电三极管。内部电路图如下:当得到上一个模块的电平信号后,需要到红外检测模块检测,原理图如下、其中LM324芯片是一个电压比较器,由于比较简单,不再附加芯片资料。原理图中

5、还应注意OUT1、2、3、4除了接到LED灯还接到了单片机的8、9、10、11数字管脚。(3)超声波避障模块设计超声波避障模块采用的是HC-SR04超声波传感器它的工作原理是:基本工作原理:(1)采用IO口TRIG触发测距,给最少10us的高电平信呈。(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S)/22、电路搭接由于是网上购买的套件,采用的是面包板杜邦线插接,所以不需要焊接。基本接线结果如下面包板上是一个按键开关和蜂鸣器,按键是放置程序

6、烧录完小车自主运动,蜂鸣器是用于检测程序是不是已经启动,比较简单不再赘述其设计。3、程序设计附录中有完全的程序代码。编译环境使用的是基于JAVA开发环境的IDE,语言逻辑和C语言基本一样。程序设计流程图因为开始设计的太简易所以我重新设计了一下。流程解释:因为自己加了一个按键启动,所以首先要按键扫描判断是否有按键按下,启动后会听到蜂鸣器的启动音。之后小车自主前进,首先第一级避障是红外避障。之所以把红外避障选为第一级是因为红外避障反应速度快,收到信号以后直接就能反应。而超声需要获取左右两边的距离然后比较。但是红外避障死角比较多,而且由于小车有一定的速度红外经常来不及反应,最重要的一点就是红外避障受

7、外界光线,地面的反光灯影响准确性不可靠。红外避障的下移级判断就是超声避障: 刚才上面已经说过超声波避障其实就是测量物体到小车的距离。人为的给它一个距离值,小于这个值就回避。至于如何回避,像哪里回避就需要舵机带着它转动,分别测量左、右、中三个距离数值然后作比较,车头转向距离较大的一侧。如果左右距离都小于规定值,则后退。实验结果:实验结果小车完整达成目标。(见展示视频)附完整程序代码:/ 智能小车超声波避障实验/=/#include int Echo = A1; / Echo回声脚(P2.0)int Trig =A0; / Trig 触发脚(P2.1)int Front_Distance = 0;

8、/int Left_Distance = 0;int Right_Distance = 0;int Left_motor_back=8; /左电机后退(IN1)int Left_motor_go=9; /左电机前进(IN2)int Right_motor_go=10; / 右电机前进(IN3)int Right_motor_back=11; / 右电机后退(IN4)int key=12;/定义按键 A2 接口int beep=13;/定义蜂鸣器 A3 接口const int SensorRight = 3; /右循迹红外传感器(P3.2 OUT1)const int SensorLeft =

9、4; /左循迹红外传感器(P3.3 OUT2)const int HongLeft=5;const int HongRight=6;int SL; /左循迹红外传感器状态int SR; /右循迹红外传感器状态int SL1;int SR1;int servopin=2;/设置舵机驱动脚到数字口2int myangle;/定义角度变量int pulsewidth;/定义脉宽变量int val;void setup() Serial.begin(9600); / 初始化串口 /初始化电机驱动IO为输出方式 pinMode(Left_motor_go,OUTPUT); / PIN 8 (PWM) p

10、inMode(Left_motor_back,OUTPUT); / PIN 9 (PWM) pinMode(Right_motor_go,OUTPUT);/ PIN 10 (PWM) pinMode(Right_motor_back,OUTPUT);/ PIN 11 (PWM) pinMode(key,INPUT);/定义按键接口为输入接口 pinMode(beep,OUTPUT); pinMode(SensorRight, INPUT); /定义右循迹红外传感器为输入 pinMode(SensorLeft, INPUT); /定义左循迹红外传感器为输入 pinMode(HongLeft,IN

11、PUT); pinMode(HongRight,INPUT); /初始化超声波引脚 pinMode(Echo, INPUT); / 定义超声波输入脚 pinMode(Trig, OUTPUT); / 定义超声波输出脚 pinMode(servopin,OUTPUT);/设定舵机接口为输出接口/=智能小车的基本动作=void start() int i; for(i=0;i80;i+)/输出一个频率的声音 digitalWrite(beep,HIGH);/发声音 delay(1);/延时1ms digitalWrite(beep,LOW);/不发声音/延时ms 100;i+)/输出另一个频率的声

12、音 delay(2);/延时2ms delay(3); delay(4);void run() / 前进 digitalWrite(Right_motor_go,HIGH); / 右电机前进 digitalWrite(Right_motor_back,LOW); analogWrite(Right_motor_go,100);/PWM比例0255调速,左右轮差异略增减 analogWrite(Right_motor_back,0); digitalWrite(Left_motor_go,HIGH); / 左电机前进 digitalWrite(Left_motor_back,LOW); anal

13、ogWrite(Left_motor_go,97); analogWrite(Left_motor_back,0); /delay(time * 100); /执行时间,可以调整 void brake(int time) /刹车,停车 digitalWrite(Right_motor_go,LOW); digitalWrite(Left_motor_go,LOW); delay(time * 100);/执行时间,可以调整 void left(int time) /左转(左轮不动,右轮前进) analogWrite(Right_motor_go,200);/PWM比例0255调速 /左轮后退

14、analogWrite(Left_motor_go,0);void spin_left(int time) /左转(左轮后退,右轮前进) analogWrite(Right_motor_go,150); digitalWrite(Left_motor_back,HIGH); analogWrite(Left_motor_back,150);void right(int time) /右电机后退 analogWrite(Right_motor_go,0);/左电机前进 analogWrite(Left_motor_go,200);void spin_right(int time) /右转(右轮后

15、退,左轮前进) digitalWrite(Right_motor_back,HIGH); analogWrite(Right_motor_back,150); analogWrite(Left_motor_go,150);void back(int time) /后退 /右轮后退 analogWrite(Right_motor_back,200); analogWrite(Left_motor_back,200);/=void keysacn()/按键扫描 int val; val=digitalRead(key);/读取数字7 口电平值赋给val while(!digitalRead(key

16、)/当按键没被按下时,一直循环 /此句可省略,可让循环跑空 while(digitalRead(key)/当按键被按下时 delay(10); /延时10ms if(val=HIGH) /第二次判断按键是否被按下 /蜂鸣器响digitalRead(key) /判断按键是否被松开 /蜂鸣器停止 else /蜂鸣器停止float Distance_test() / 量出前方距离 digitalWrite(Trig, LOW); / 给触发脚低电平2s delayMicroseconds(2); digitalWrite(Trig, HIGH); / 给触发脚高电平10s,这里至少是10s dela

17、yMicroseconds(10); / 持续给触发脚低电 float Fdistance = pulseIn(Echo, HIGH); / 读取高电平时间(单位:微秒) Fdistance= Fdistance/58; /为什么除以58等于厘米, Y米=(X秒*344)/2 / X秒=( 2*Y米)/344 =X秒=0.0058*Y米 =厘米=微秒/58 return Fdistance; void servopulse(int servopin,int myangle)/*定义一个脉冲函数,用来模拟方式产生PWM值*/ pulsewidth=(myangle*11)+500;/将角度转化为

18、500-2480 的脉宽值 digitalWrite(servopin,HIGH);/将舵机接口电平置高 delayMicroseconds(pulsewidth);/延时脉宽值的微秒数 digitalWrite(servopin,LOW);/将舵机接口电平置低 delay(20-pulsewidth/1000);/延时周期内剩余时间void front_detection() /此处循环次数减少,为了增加小车遇到障碍物的反应速度 for(int i=0;=5;i+) /产生PWM个数,等效延时以保证能转到响应角度 servopulse(servopin,90);/模拟产生PWM Front_

19、Distance = Distance_test();void left_detection()/测试左侧距离=15; servopulse(servopin,175); Left_Distance = Distance_test();void right_detection() servopulse(servopin,5); Right_Distance = Distance_test();/=void loop() start(); keysacn(); /调用按键扫描函数 while(1) SR = digitalRead(SensorRight);/有信号表明在白色区域,车子底板上L3亮;没信号表明压在黑线上,车子底板上L3灭 SL = digitalRead(SensorLeft); SR1=digitalRead(HongRight); SL1=digitalRead(HongLeft); if(SL = LOW&SR=LOW&SL1=HIGH&SR1=HIGH) front_detection();/测量前方距离 if(Front_Distance 32)/当遇到障碍物时 back(2);/后退减速 brake(2);/停下来做测距 left_dete

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1