循迹小车的设计与调测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京邮电大学实习报告
实习名称循迹机器人学院信通院学生姓名班级学号
实习时间7月1日至7月12日实习地点主楼522
实习内容题目:循迹机器人的设计安装与调测
进度安排:
7月1日至3日:练习电焊技术;
7月4日:焊接技术测试;
7月5日:组装小车;
7月6日至10日:编写小车循迹程序并进行调测;7月11日:小车验收
学生
实习
总结(附页,不少于2000字)(实习任务要求、实习题目的设计思路及详细实现过程、本人在实习项目中的具体工作、实现功能及测试数据结果、遇到的问题及解决方法、心得体会和总结、参考文献、部分算法源程序等)
实习成绩评定
遵照实习大纲并根据以下三方面按五级分制(优秀、良好、中等、及格、不及格)综合评定成绩:
1、思想品德、实习态度、实习纪律等
2、技术业务考核、笔试、口试、实际操作等
3、实习报告、分析问题、解决问题的能力
实习评语:
实习成绩:
指导教师签名:实习单位公章
年月日
学生实习总结
一、试验任务要求:
设计制作一个自动循迹行走的小车,小车能够自动按指定路线运行,并实现灵活前行、转弯、倒退、停车等功能;甚至可以自动记录和显示时间、里程和速度等信息。
二、设计思路
整体分为单片机、电机驱动电路、电源模块、IO驱动电路、外部接口电路五大模块电路。
该小车以4节1.5伏特的电池串联作为供电电源,通过电源模块的稳压,将电压降低到5V,作为小车电机的驱动电压。在实验中也可以用USB连线直接供电,这一部分电路由电源模块来控制。单片机选用型号STC90C52RC。电机驱动电路主要采用学校自主研制的驱动模块,控制两个轮子的转动。IO驱动电路负责点亮数码管并按照要求显示所需要的数字。外部接口电路主要负责拓展接口,比如红外传感器的连接。
本智能循迹小车以STC90C52RC单片机为核心控制系统,使用红外传感器。当光线照射到白线上面时,光线反射强烈,光线照射到黑线上面时,光线反射较弱。因此光敏在白线和黑线上面上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。经单片机处理后,输出控制信号给电机驱动电路,来控制电机的驱动。所以整个过程不需要人来控制,当不同的光敏电阻检测到黑线时,电机会有不同的转动方向。从而实现了简单的智能控制。
单片机模块是智能车的核心部分,主要完成对外围各个模块的管理,实现对外围模块的信号发送,以及对传感器模块的信号采集,并根据软件算法对所采集的信号进行处理,发送信号给执行模块进行任务执行,还对各种突发事件进行监控和处理,保证整个系统的正常运作。
三、负责工作
第二辆小车的焊接以及部分程序代码的编写。
四、实现功能
小车可以循着黑色的轨道灵活自如的前进、后退、左转、右转,车头两个LED灯随着小车的不同状态显示不同的亮灭。
五、测试数据
小车跑完两圈需要36秒,在拐弯的时候还算比较平稳,在直道上没有过多的摆动。
六、遇到的问题
①电机驱动模块经常烧坏,检查了很长时间也没有发现问题。一开始把电机换了,把焊点都重焊一遍,均不能解决问题,为此付出了烧坏了3个驱动芯片的代价。后来不得不再重新焊一辆小车,在焊接的时候渐渐察觉,驱动芯片的烧坏很大程度是可能是因为与其背后的散热片短路所致!所以在第二辆小车的焊接时,并没有把驱动芯片的散热片焊上去,从此再也没有烧过驱动芯片。
②在编程的过程中,由于预先搞不清楚传感器的标准,不知道检测到黑白时分别输出的
是什么信号,所以进行了多次的调试与修改。还有就是检测逻辑的完备性也非常重要,将红外传感器能够检测到的所有情况都考虑到是保证小车能够正常行驶的关键。
七、心得体会和总结
小车的焊接和编程前前后后折腾了12天,也让我对焊接技术和单片机的编程有了初步的了解。感触最深的就是,做事情要细心,整体中任何一个细节出了问题都有可能是整体崩溃。比如说要是这么多焊点中某一个出了问题,你能找出来吗?很难吧,只能重焊一遍了。话说回来,假如把每一个焊点都仔细焊,那么最终错误的几率其实是非常小的。所以,注重细节是我最大的收获。
八、参考文献
《电子工艺实习教程》电路中心自制
《51单片机基础与实例进阶》清华大学出版社2012年
附录:小车循迹程序源代码
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar code seg_data[ ] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//0~9的段码表,0x00为熄灭符
int a[7];
uchar data disp_buf[7] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示缓冲区
sbit ENA=P3^0;
sbit ENB=P3^1;
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^4;
sbit IN4=P1^5; //控制车轮状态
sbit ZUO=P3^4;
sbit YOU=P3^5; //红外传感状态
sbit LED1=P2^6;
sbit LED2=P2^7;
void Delay_ms(uint xms) //延时程序,xms是形式参数
{
uint i, j;
for(i=xms;i>0;i--) // i=xms,即延时xms, xms由实际参数传入一个值