智能循迹小车的设计实现(5600字)

来源:m.ttfanwen.com时间:2016.9.25

智能循迹小车的设计与实现

(北京邮电大学,北京市 100876)

摘要:本实验通过设计焊接电路板然后利用单片机编程并控制基本电路实现一个自动循迹行走的机器人。机器人能够自动按指定路线运行,并且实现灵活前进、转弯、倒退、停车等功能,另外还可以自动记录和显示时间、里程和速度等信息。

关键词:智能车;单片机;C语言编程;集成电路;自动控制

中图分类号: O0213 文献标识码:A

Intelligent tracking car design and implementation

(BUPT,BeiJing 100876,China)

Abstract: In this study, the welding circuit board design and control using microcontroller programming and basic circuit to implement an auto tracking walking robots. Robot can automatically run at a specified route, and flexible forward, turn, reverse, parking and other functions, also can automatically record and display time, distance and speed information.

Keywords: intelligent car; SCM; C programming language; IC; Automatic Control

随着单片机等微型计算机的发展,智能控制技术不仅相应地开拓出了更为广阔的发展空间并且越来越被大量重视利用起来。本实验为智能控制的一个简单基础的应用,让我们提前认识感受一下智能控制的奇妙之处,同时动手DIY自己的程序,控制自己焊接好的小车顺畅的通过预先画好的赛道。

1实习任务与要求

本实验的任务与要求是在给定的12天时间内设计一个自动循迹行走的机器人。机器人能够自动按指定路线行驶,并且实现前进、转弯、倒退、停车等基本功能,还可以现自动记录和显示时间、里程和速度等高级功能。

2设计思路与详细实现过程

2.1设计思路

小车主要分两部分组成,即硬件电路部分和实现所需功能而必备的程序。对于硬件部分,按照所给定的电路原理图和焊接的实物图将所需的元器件仔细焊接到印刷电路板上。焊好之后对电路进行简单的通电调试,确保硬件部分的正常无误;对于软件部分,先对小车输入最简单的测试程序,测试小车能否按照要求前进后退,如果成功则开始编写自动循迹所需的程序。将编译好的程序输入小车,将小车放在赛道上进行尝试。若不能按要求循迹,继续调源程序,直到小车能按要求自动循迹。

2.2详细实现过程

2.2.1小车基本电路的焊接与调试

第一步:将电器元件按照实习教程所罗列的焊接顺序仔细焊接;

第二步:焊好后对照焊接实物图,检查是否出现明显的焊接错误;

第三步:检查无误后将芯片、驱动模块和USB下载模块插好;

第四步:测量VCC与GND之间是否短路;

第五步:在电脑上安装好驱动程序,插上USB线,按下自锁开关观察能否检测到小车;

第六步:下载测试程序,观察指示灯是否亮,小车是否前进后退,若都没有检查电路焊接。

2,2,2程序的编写

第一步:熟悉单片机STC90C52RC的编译环境KeilC51;

第二步:对测试程序进行改造,使小车能够加速或转弯;

第三步:按照赛道的路况对小车进行传感器、驱动电机的控制部分用C语言编程;

第四步:将编译好的程序烧入单片机,拿到赛道上测试小车;

第五步:重复“三”、“四”两步直到小车在赛道上顺畅行驶。

3具体工作

我个人在本次实践中与队友刘懿锋合作。我的任务主要是实验进度的详细安排,硬件的焊接

与调试,程序的辅助设计调试,小车的赛道适应性调校。其余的事项一部分由队友负责,一

部分由我们两个共同完成。

4实现功能与测试数据

4.1实现功能

小车能在赛道上自动顺畅地行驶,实现灵活的转弯、前进加速等必备功能。除此之外,小车

的数码管还能正确地显示数字,左右转弯时的指示灯也能在合适的时间点亮或闪烁。

4.2测试数据

对程序改造前测试小车跑两圈用时29.62秒; 对程序改造后小车在赛道上跑两圈用时为22.3秒;

最后参加决赛时的最好成绩是20.38秒,拿了第一名。

5问题与解决办法

问题一:小车的测试程序烧入以后前进后退不能走直线

解决办法:微调左右车轮或者装上传感器在赛道上调测

问题二:输入程序后发现小车在赛道上不能动,但拿起来能动

解决办法:调节传感器的离地高度,直到最佳

问题三:小车在赛道上能循迹但速度太慢

解决办法:通过调整时延函数调整控制电机的调制脉宽占空比

问题四:速度太快又会冲出赛道

解决办法:将转弯情况的判断增加,并使转弯的幅度适当调大

问题五:直线行走时左右摇摆,影响速度

解决办法:将后轮适当固定即可有效避免

6心得体会与总结

6.1心得体会

首先,这是一次既有趣又有挑战性的实践。这次实践给我留下了深刻的印象,作为以后的美好回忆。

通过这次实验,我个人在焊接技术上又得到了一个较大的提升,掌握了快速高质量的手动焊接技术。对于基本的电子电路知识,我个人又有了一个较为深入的认识。但这都不是最重要的。最关键的是我在这次实践中学不仅到了很多诸如单片机,单片机的C编程,传感器的应用等新知识,而且学到了如何快速高效地学习新东西的能力。

这次实验中有太多东西需要我们自己去尝试去挑战,当然也离不开与队友的默契合作。虽然实践的过程中遇到了太多困难,但只要仔细考虑一下,与队友慢慢琢磨琢磨都能将其解决掉。还有就是作为一个工程性的项目,最主要的还是实践,通过动动手将自己的想法如实展现出来,尽管途中会遇到各种坎坷与困难,因为工程本身就要解决实际问题!

6.2总结

在本次设计中,我学到了很多没有接触到的电子知识,使我的知识有了进一步提升,这次的实践,对我今后的继续学习是受益匪浅的,特别是老师们的精心指导,以及同学和队友的耐心帮助。正是这些正能量的外部环境加上我们自己的努力与进取,我们最终取得了可喜的成绩。同时我觉得这次实践对我的态度也是一次磨练,在我今后的学习中能发扬我做这次实践的这种精神,互相帮助,做事细心细致。在此,我也感谢电路中心实验室的老师在实践中对我们的指导和帮助,以及你们的辛勤付出,十分感谢!

参考文献

[1]电子工程学院电路中心.电子工艺实习教程[M].北京.北京邮电大学出版社.2013.

[2]杨国田.51单片机使用C语言程序设计[M].北京.中国电力出版社.2009.

[3]周国雄.单片机应用系统精讲[M].北京.中国铁道出版社.2011.

附:部分源程序

#include<reg51.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

#define t 1

uchar code seg_data[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//0~9的段码表,0x00灭符 uchar data disp_buf[7] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示缓冲区

sbit IN1=P1^0;//电机控制端

sbit IN2=P1^1;

sbit IN3=P1^4;

sbit IN4=P1^5;

sbit LED1=P2^6;

sbit LED2=P2^7;

sbit ENA=P1^2;

sbit ENB=P1^3;

double i;

sbit start=P0^0; //小车启动信号

sbit stop=P0^1; //小车停止信号

sbit S1=P3^2; //此处是传感器 管脚位声明

sbit S2=P3^3;

sbit S3=P3^4;

sbit S4=P3^5;

sbit S5=P3^6;

uint count1,count2; //用于中断计数

/********以下是延时函数********/

void Delay(uint z)

{

}

/********以下是显示函数********/

display()

{

P0=seg_data[0];

P2=0xfe;

Delay(t);

P2=0xfd;

Delay(t);

P2=0xfb;

Delay(t);

P2=0xf7;

Delay(t);

P2=0xef;

Delay(t);

P2=0xdf;

Delay(t);

P2=0xff;

}

/*********************第二部分 电机控制子函数****************************/ qianjin()

{

LED1=1;LED2=1; IN1=0;IN2=1; IN3=1;IN4=0; Delay(3); IN1=0;IN2=0;IN3=0;IN4=0; //Delay(1); //显示毫秒十位 //延时10ms //开十位显示(开第2只数码管) //开个位显示(开第1只数码管) //显示毫秒百位 //延时10ms uint i, j; for(i=z;i>0;i--) // i=z,即延时z, z由实际参数传入一个值 for(j==7;j>0;j--); //此处分号不可少 //延时程序,z是形式参数 P0=seg_data[1]; P0=seg_data[2]; //显示秒个位 //延时10ms //开个位显示(开第4只数码管) //开百位显示(开第3只数码管) //显示秒十位 //延时10ms P0=seg_data[3]; P0=seg_data[4]; //显示分个位 //延时10ms //开个位显示(开第6只数码管) //开十位显示(开第5只数码管) //显示分十位 //延时10ms P0=seg_data[5];

}

tingzhi()

{ IN1=0;

}

zuozhuan()

{

}

youzhuan()

{

}

dazuozhuan()

{ LED1=0;LED2=1;

IN1=0;IN2=1;IN3=0;IN4=1;

}

dayouzhuan()

{

} LED1=1;LED2=0; //Delay(1); //Delay(1); //IN3=1;IN4=1; //Delay(1); IN1=1;IN2=0;IN3=1;IN4=0; //IN1=1;IN2=1; //Delay(1); //Delay(1); //IN1=1;IN2=1; //Delay(1); //IN3=1;IN4=1; LED1=1;LED2=0; Delay(1); //Delay(2); //Delay(1); IN3=1;IN4=0; IN1=1;IN2=1; //IN3=1;IN4=1; LED1=0;LED2=1; Delay(1); //Delay(2); //IN1=1;IN2=1; //Delay(1); IN1=0;IN2=1; IN3=1;IN4=1; IN2=0; IN3=0; IN4=0; //Delay(1);

/*********************第三部分 主函数****************************/ void main()

{

while(1)

{ display();

/*------------switch------------*/

if(S5==0&&S1==1&&S2==1&&S3==1&&S4==1)

{youzhuan();} //10111111 左一

else if(S5==1&&S4==0&&S1==1&&S2==1&&S3==1)

{youzhuan();} //10011111 左一和左二 else if(S5==0&&S4==0&&S3==1&&S2==1&&S1==1)

{youzhuan();}

else if(S5==1&&S4==0&&S3==0&&S2==1&&S1==1)

北京邮电大学实习报告

智能循迹小车的设计实现


第二篇:基于51单片机的循迹小车设计 5100字

基于89s51单片机的循迹小车设计报告

51单片机的循迹小车设计

第一章 引言

1.1 设计目的

通过设计进一步掌握51单片机的应用,特别是在嵌入式系统中的应用。进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,并使之与单片机构成整个系统。

1.2 设计方案介绍

该智能车采用红外对管方案进行道路检测,单片机根据采集到的红外对管的不同状态判断小车当前状态,通过pid控制发出控制命令,控制舵机和电机的工作状态以实现对小车姿态的控制。

1.3 技术报告内容安排

本技术报告主要分为三个部分。第一部分是对整个系统实现方法的一个概要说明,主要内容是对整个技术方案的概述;第二部分是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电路的设计原理等;第三部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。

基于89s51单片机的循迹小车设计报告

第二章 技术方案概要说明

本模型车的电路系统包括电源管理模块、单片机模块、传感器模块、电机驱动模块、舵机控制模块。

在整个系统中,由电源管理模块实现对其他各模块的电源管理。其中,对单片机、光电管、舵机提供5V电压,对电机提供6V电压。

路径识别电路由8对光电发送与接收管组成。由于路面存在黑色引导线,落在黑线区域内的光电接收管接收到反射的光线的强度与白色的路面不同,进而在光电接收管两端产生不同的电压值,由此判断路线的走向。传感器模块将当前采集到的一组电压值传递给单片机,进而根据一定得算法对舵机进行控制,使小车自动寻线行走。

单片机模块是智能车的核心部分,主要完成对外围各个模块的管理,实现对外围模块的信号发送,以及对传感器模块的信号采集,并根据软件算法对所采集的信号进行处理,发送信号给执行模块进行任务执行,还对各种突发事件进行监控和处理,保证整个系统的正常运作。

舵机控制模块则根据检测情况经单片机处理后发出相应的PWM波对舵机进行转向的控制。

电机驱动模块采用H桥驱动,通过PWM 波对电机进行控制,以实现对小车速度的调节。

基于89s51单片机的循迹小车设计报告

第三章 硬件电路的设计

3.1 单片机最小系统

小车采用atmel公司的at89s52单片机作为控制芯片,图3-1是其最小系统电路。主要包括:时钟电路、电源电路、复位电路。其中各个部分的功能如下:

1、时钟电路:给单片机提供一个外接的16MHz的石英晶振。

2、电源电路:给单片机提供5V电源。

3、复位电路:在电压达到正常值时给单片机一个复位信号。

基于51单片机的循迹小车设计

图3-1 单片机最小系统原理图

3.2 传感器电路

光电寻线方案一般由多对红外收发管组成,通过检测接收到的反射光强,判断黑白线。原理图由红外对管和电压比较器两部分组成,红外对管输出的模拟电压通过电压比较器转换成数字电平输出到单片机。

基于89s51单片机的循迹小车设计报告

3-2赛道检测原理图:

3.3 电源电路设计

模型车通过自身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。在本设计中,51单片机使用5V电源,电机及舵机使用6V电源。考虑到电源为充电电池组,额定电压为7.2V,实际充满电后电压则为6.5-6.8V,所以单片机及传感器模块采用7805稳压后的5V电源供电,舵机及电机直接由电池供电。

3.4 舵机及电机驱动电路设计

舵机的驱动电路比较简单,电源直接由电池组提供,其输入信号为单片机输出的pwm波。

本系统使用的电机驱动板为一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由四支N沟道功率MOSFET管组成,由此电路,通过设置51输出的PWM波的占空比可以达到控制电机转速的效果。

基于51单片机的循迹小车设计

3-3 H桥驱动电路

基于51单片机的循迹小车设计

基于89s51单片机的循迹小车设计报告

第四章 软件系统的实现

4.1主程序设计

单片机系统需要接收路径识别电路的信号,采用某种路径搜索算法进行寻线判断,进而控制舵机和直流驱动电机的工作。小车系统的软件使用C语言实现。 主体控制框架:

模型车采用的控制方法是根据传感器采集到的路况信息,通过计算得到具体的方向偏移量和速度,控制小车的行走状态。

4.2 程序思路

智能车利用了一字形排布的8个传感器来探测道路,并将每个传感器采集到的信息转换成了数字电平。因此8个传感器的数据正好构成一个字节,由单片机P2口读入。

由于读入的数据并不方便直接参与控制计算,因此先将该数据集分成16类,分别对应于小车不同的位置信息,由0-15表示,其中0表示引导线位于小车最左侧,7表示引导线位于小车中部,14表示引导线位于小车最右侧,15表示未检测到引导线或其他错误情况。

将上面的转换后的数据作为控制计算的反馈输入,与7相减即得到小车偏差信息,然后通过增量型pid算法计算出舵机的控制信息。

将小车偏差信息的微分作为速度pid的输入,依然通过增量型pid算法得到电机的控制信息。至此小车完成一次控制周期。

由于at89s51单片机没有PWM模块,因此需要通过通用I/O口进行模拟来输出舵机和电机所需的PWM波。

可以分别使用一个定时器来作为一路PWM波的计时器。先将I/O口置位,设定高电平时间及定时器的初值,当定时器产生中断时,再将I/O口清零,并设定低电平时间,由此循环即可产生PWM波。其中,高电平时间有控制计算得出,低电平时间有PWM周期减去高电平时间得到。

基于51单片机的循迹小车设计

基于89s51单片机的循迹小车设计报告

第五章 结论

本设计主要用到了单片机的通用IO口的读写,定时器,中断等基本功能,通过实际操作进一步掌握了51单片机的使用。同时,通过单片机外围电路的设计,更深入学习了51单片机在嵌入式系统中的应用。通过实际焊接电路,编写程序,也进一步提高了我的动手能力以及分析解决错误的能力,是我能够更好的将所学知识应用到实际中来。

本系统能够基本满足设计要求,能够较快较平稳的是小车沿引导线行驶,但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改进。

基于89s51单片机的循迹小车设计报告

附录:源程序主代码

#include <reg52.h>

#include <intrins.h>

#include <math.h>

#define uchar unsigned char

#define uint unsigned int

#define MIDDLE 1390 //舵机中心位置

#define LEFT 1600

#define RIGHT 1000

#define T 20000

#define HIGH 7300 //电机基准速度

sbit rudder=P1^0; //定义舵机PWM波输出端口为P1.0口 sbit pulse=P1^1; //定义后轮PWM波输出端口为P1.1口

char flag1=0,flag2=0; //定义全局变量(flag1用于控制舵机

//PWM标志位,flag2用于控制电机PWM)

uint b=0,a=0; //b用来装载电机所需的高电平时间,a用

于保存电机所需高电平时间

void main()

{

uchar receive,ek[4]={7,7,7,7};

uint pidr=0;

uint pidlr=0;

uint ppid=0;

IE=0x8a;

TMOD=0x11;

TH0=0x00;

TL0=0x00;

TR0=1;

TH1=0x00;

TL1=0x00;

TR1=1;

while(1)

基于89s51单片机的循迹小车设计报告

{ receive=P2; /*--------------switch----------------*/ switch(receive) { case 0x7f:ek[3]=0;break; 电传感器检测到黑线 case 0x3f:ek[3]=1;break; 电传感器检测到黑线 case 0xbf:ek[3]=2;break; case 0x9f:ek[3]=3;break; case 0xdf:ek[3]=4;break; case 0xcf:ek[3]=5;break; case 0xef:ek[3]=6;break; case 0xe7:ek[3]=7;break; case 0xf7:ek[3]=8;break; case 0xf3:ek[3]=9;break; case 0xfb:ek[3]=10;break; case 0xf9:ek[3]=11;break; case 0xfd:ek[3]=12;break; case 0xfc:ek[3]=13;break; case 0xfe:ek[3]=14;break;

default: ek[3]=15;break;

//采集光电传感器的值 //根据采集到的值进行判断

//0111 1111 最左边(或右边)1个光 //0011 1111 最左边(或右边)2个光 //1011 1111 依次类推 //1001 1111 //1101 1111 //1100 1111 //1110 1111 //1110 0111 //1111 0111 //1111 0011 //1111 1011 //1111 1001 //1111 1101 //1111 1100 //1111 1110

//1111 1111 没有检测到黑线(是需要保持上一次测量值的)

}

/*--------------switch----------------*/ if(ek[3]= =15) {pidr = pidlr; } else

{pidr=0.2*pidlr+0.8*(23*(ek[3]-7)+2*(ek[3]+ek[2]+ek[1]+ek[0]-28)+7*(ek[3]-ek[2])); if(ek[2]!=ek[3])

ppid=-160*(cabs(ek[3]-7))+220*(cabs(ek[1]-7)-cabs(ek[3]-7));

}

a=HIGH+ppid; //a是电机高电平时间

b=pidr+MIDDLE; //b就是舵机PWM波高电平时间

if(b>LEFT) b=LEFT; if(b<RIGHT) b=RIGHT; {char i;

基于89s51单片机的循迹小车设计报告

for(i=0;i<3;i++)

ek[i]=ek[i+1];

}

pidlr=pidr;

}

}

void zhongduan_t0(void) interrupt 1 //产生舵机PWM波中断子程序(T0中断)

{

if(flag1==0)

{

TH0=(uchar)((65536-b)/256);

TL0=(uchar)((65536-b)%256);

flag1=1;

rudder=1;

}

else

{

TH0=(uchar)((38869+b)/256);

TL0=(uchar)((38869+b)%256);

flag1=0;

rudder=0;

}

}

void zhongduan_t1(void) interrupt 3

{

if(flag2==0)

{

TH1=(uchar)((65536-HIGH)/256);

TL1=(uchar)((65536-HIGH)%256);

flag2=1;

pulse=0;

}

else

{

TH1=(65536-T+HIGH)/256;

TL1=(65536-T+HIGH)%256;

flag2=0;

pulse=1;

}

}

更多类似范文
┣ 智能_循迹小车详细制作过程 23600字
┣ 51单片机循迹小车开题报告 3700字
┣ 循迹小车项目报告 5300字
┣ 智能循迹小车 10800字
┣ 更多智能循迹小车设计报告
┗ 搜索类似范文