搜档网
当前位置:搜档网 › 智能小车程序(完整)

智能小车程序(完整)

智能小车程序(完整)
智能小车程序(完整)

智能小车程序

---------超长完整版---------

#include "reg52.h"

#define det_Dist 2.55 //单个脉冲对应的小车行走距离,其值为车轮周长/4

#define RD 9 //小车对角轴长度

#define PI 3.1415926

#define ANG_90 90

#define ANG_90_T 102

#define ANG_180 189

/*============================全局变量定义区============================*/

sbit P10=P1^0; //控制继电器的开闭

sbit P11=P1^1; //控制金属接近开关

sbit P12=P1^2; //控制颜色传感器的开闭

sbit P07=P0^7; //控制声光信号的开启

sbit P26=P2^6; //接收颜色传感器的信号,白为0,黑为1

sbit P24=P2^4; //左

sbit P25=P2^5; //右接收左右光传感器的信号,有光为0

unsigned char mType=0; //设置运动的方式,0 向前1 向左2 向后3 向右

unsigned char Direction=0; //小车的即时朝向0 朝上1 朝左2 朝下3 朝右unsigned sX=50; unsigned char sY=0; //小车的相对右下角的坐标CM(sX,sY)

unsigned char StartTask=0; //获得铁片后开始执行返回卸货任务,StartTask置一unsigned char Inter_EX0=0; // 完成一个完整的任务期间只能有一次外部中断// Inter_EX0记录外部中断0的中断状态

// 0 动作最近的前一次未中断过,

// 1 动作最近的前一次中断过

unsigned char cntIorn=0; //铁片数

unsigned char bkAim=2; //回程目的地,0为A仓库,1为B仓库,2为停车场,//(在MAIN中接受铁片颜色判断传感器的信号来赋值)

unsigned char Light_Flag=0;//进入光引导区的标志(1)

unsigned int cntTime_5Min=0;//时间周期数,用于T0 精确定时

unsigned int cntTime_Plues=0; //霍尔开关产生的脉冲数

/*============================全局变量定义区============================*/

/*------------------------------------------------*/

/*-----------------通用延迟程序-------------------*/

/*------------------------------------------------*/

void delay(unsigned int time) // time*0.5ms延时

{

unsigned int i,j;

for(j=0;j

{

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

{;}

}

}

/*-----------------------------------------------*/

/*-------------------显示控制模块----------------*/

/*-----------------------------------------------*/

/*数码管显示,显示铁片的数目(设接在P0,共阴)*/

void Display(unsigned char n)

{

char Numb[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x37,0x77}; P0=Numb[n];

}

/*-----------------------------------------------*/

/*-------------------传感器模块------------------*/

/*-----------------------------------------------*/

/*光源检测程序: */

/*用于纠正小车运行路线的正确性*/

unsigned char LightSeek()

{ void Display(unsigned char);

bit l,r;

l=P24;

r=P25;

if(l==0&&r==1)

{

//Display(1);

return (3); //偏左,向右开

}

if(r==0&&l==1)

{

//Display(3);

return(1); //偏右,向左开

}

if((l==1&&r==1)||(l==0&&r==0))

{//Display(9);

return(0); //没有偏离,前进

}

}

/*铁片检测程序: */

/*判断铁片的颜色,设定bkAim,0为A仓库,1为B仓库,2为停车场*/ void IornColor()

{

delay(4000);

bkAim=(int)(P26);

Display((int)(P26)+2);

}

/*-----------------------------------------------*/

/*------------------运动控制模块-----------------*/

/*-----------------------------------------------*/

/*====基本动作层:完成基本运动动作的程序集====*/

/*运动调整程序: */

/*对小车的运动进行微调*/

void ctrMotor_Adjust(unsigned char t)

{

if(t==0)

{

P2=P2&240|11; //用来解决两电机不对称的问题

delay(6);

}

if(t==3)

{

delay(1);

}

if(t==1)

{

P2=(P2&245);

delay(1); //向右走

}

P2=((P2&240)|15);

delay(10);

}

/*直走程序: */

/*控制小车运动距离,dist为运动距离(cm),type为运动方式(0 2)*/ /*只改变小车sX 和sY的值而不改变Direction的值. */ void ctrMotor_Dist(float dist,unsigned char type) {unsigned char t=0;

mType=type;

P2=((P2&240)|15);

cntTime_Plues=(int)(dist/det_Dist);

while(cntTime_Plues)

{

if(Inter_EX0==1&&StartTask==0)

{

cntTime_Plues=0;

break;

}

if(Light_Flag==1) t=LightSeek();

if(type==0) //向前走

{

P2=P2&249;

delay(40);

ctrMotor_Adjust(t);

}

if(type==2) //向后退

{

P2=P2&246;

delay(50);

ctrMotor_Adjust(t);

}

if(mType==2) delay(60);//刹车制动0.5ms

else delay(75);

}

}

/*拐弯程序: */

/*控制小车运动角度,type为运动方式(1 3)*/

/*只改变小车Direction的值而不改变sX 和sY的值*/

void ctrMotor_Ang(unsigned char ang,unsigned char type,unsigned char dir) {

unsigned char i=0;

mType=type;

P2=((P2&240)|15);

cntTime_Plues=(int)((PI*RD*90/(180*det_Dist)*1.2)*ang/90);

while(cntTime_Plues)

{

if(Inter_EX0==1&&StartTask==0)

{

cntTime_Plues=0;

break;

}

if(type==1) //向左走

{

P2=P2&250;

delay(100);

ctrMotor_Adjust(0);

}

if(type==3) //向右走

{

P2=P2&245;

delay(100);

ctrMotor_Adjust(0);

}

P2=((P2&240)|15);

delay(50);//刹车制动0.5ms

}

if(!(Inter_EX0==1&&StartTask==0))

{

Direction=dir;

}

}

/*====基本路线层:描述小车基本运动路线的程序集====*/

/*当小车到达仓库或停车场时,放下铁片或停车(0,1为仓库,2为停车场)*/

void rchPlace()

{unsigned int time,b,s,g;

time=(int)(cntTime_5Min*0.065535);//只有一个数码管时,轮流显示全过程秒数个十百b=time%100;

s=(time-b*100)%100;

g=(time-b*100-s*10)%10;

if(bkAim==2)

{

//到达停车场了,停车

EA=0;

P2=((P2&240)|15);

while(1)

{

Display(10); //N

delay(2000);

Display(cntIorn);

delay(2000);

Display(11);//A

delay(2000);

Display(b);

delay(2000);

Display(s);

delay(2000);

Display(g);

delay(2000);

}

}

else

{

if(Inter_EX0==1&&StartTask==1)P10=0; //到达仓库,卸下铁片

}

}

/*无任务模式: */

/*设置小车的固定运动路线,未发现铁片时的运动路线*/

void BasicRoute()

{ //Light_Flag=1;

ctrMotor_Dist(153,0);

//Light_Flag=0;

ctrMotor_Ang(ANG_90,1,1);

ctrMotor_Dist(100-sX,0);

ctrMotor_Dist(125,2);

ctrMotor_Dist(73,0);

ctrMotor_Ang(ANG_90,1,2);

//Light_Flag=1;

ctrMotor_Dist(153,0);

//Light_Flag=0;

ctrMotor_Ang(ANG_180,1,0);

rchPlace();

}

/*任务模式: */

/*设置小车的发现铁片后的运动路线*/

void TaskRoute()

{

//基本运行路线表,记载拐弯0 向前1 左拐2 向后3 右拐,正读去A区;反读去B区StartTask=1;

ctrMotor_Ang(ANG_90_T,1,2);

if(bkAim==1) //仓库A

{

ctrMotor_Dist(10,0);

P2=((P2&240)|15);

delay(60);

ctrMotor_Ang(ANG_90_T,1,3);

ctrMotor_Dist(100-sX,2);

ctrMotor_Ang(ANG_90_T,1,2);

Light_Flag=1;

ctrMotor_Dist(153,2);

Light_Flag=0;

// ctrMotor_Ang(208,1,0);

}

else if(bkAim==0) //仓库B

{

ctrMotor_Dist(10,0);

P2=((P2&240)|15);

delay(60);

ctrMotor_Ang(ANG_90_T,1,3);

ctrMotor_Dist(100-sX,0);

ctrMotor_Ang(ANG_90_T,1,0);

Light_Flag=1;

ctrMotor_Dist(153,2);

Light_Flag=0;

//ctrMotor_Ang(208,1,0);

}

delay(5000);

rchPlace();

}

/*---------------------------------------------*/

/*-------------------主程序段------------------*/ /*---------------------------------------------*/

void main()

{

delay(4000);

P2=0xff; //初始化端口

P07=0;

P1=0;

TMOD=0x01; //初始化定时器0/1 及其中断TL0=0;

TH0=0;

TR0=1;

ET0=1;

ET1=1;

IT0=1; //初始化外部中断

EX0=1;

IT1=1;

EX1=1;

EA=1;

P11=1;

while(1)

{

Display(cntIorn);

bkAim=2;

BasicRoute();

if(Inter_EX0==1)

{

TaskRoute();//按获得铁片后的路线运动

IE0=0;

EX0=1;

}

Inter_EX0=0;

}

}

/*----------------------------------------------------*/

/*----------------------中断程序段--------------------*/

/*----------------------------------------------------*/

/*定时器0中断程序: */

/*当时间过了5分钟,则就地停车并进入休眠状态*/ void tmOver(void) interrupt 1

{

cntTime_5Min++;

TL0=0;

TH0=0;

if(cntTime_5Min>=4520)

{

Display(5);

P2=((P2&240)|15);

EA=0; //停车程序

P07=1;

delay(4000);

PCON=0X00;

while(1);

}

/*外部中断0中断程序: */

/*发现铁片,发出声光信号并将铁片吸起,发光二极管和蜂鸣器*/

/*并联在一起(设接在P07). 0为A仓库,1为B仓库,2为停车场*/ void fndIorn(void) interrupt 0

{

unsigned char i;

P10=1;

P2=((P2&240)|15); //停车

P07=1;

delay(1000);//刹车制动0.5ms

P07=0;

Inter_EX0=1;

cntIorn++;

Display(cntIorn);

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

{

P2=P2&249;

delay(2);

P2=((P2&240)|15);

delay(2);

}

P2=P2&249;

delay(100);

P2=((P2&240)|15); //停车

IornColor(); //判断铁片黑白,设置bkAim

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

{

P2=P2&249;

delay(3);

P2=((P2&240)|15);

delay(2);

}

P2=((P2&240)|15); //停车

delay(4000); //把铁片吸起来

EX0=0;

}

/*外部中断1中断程序: */

/*对霍尔开关的脉冲记数,对小车的位置进行记录,以便对小车进行定位*/ void stpMove(void) interrupt 2

{

cntTime_Plues--;

if(Direction==0) //向上

{

if(mType==0) sY+=det_Dist;

else if(mType==2)

sY-=det_Dist;

}

else if(Direction==1) //向左

{

if(mType==0) sX+=det_Dist;

else if(mType==2)

sX-=det_Dist;

}

else if(Direction==2) //向下

{

if(mType==0) sY-=det_Dist;

else if(mType==2)

sY+=det_Dist;

}

else if(Direction==3) //向右

{

if(mType==0) sX-=det_Dist;

else if(mType==2)

sX+=det_Dist;

}

智能小车控制程序1

/*实现前进与后退功能*/ /*控制智能车向前行驶10秒,然后停3秒,再向后行驶6秒,停止*/ /********************************************************/ #include #define uint unsigned int /*进行端口声明时,应与具体硬件连接相对应,如不相互对应,将影响程序功能的正常实现*/ sbit S1=P1^3; //对电机端口声明 sbit S2=P1^4; sbit S3=P1^5; sbit S4=P1^6; /*功能函数定义*/ void delay(uint del) //延时函数,延时del毫秒 { uint i,j; for(i=0; i

{ go(); //前进 delay(10000); //前进10秒 stop(); //停止 delay(3000); //停3秒 back(); //后退 delay(6000); //后退6秒 stop(); //停止 }

智能循迹小车程序

#include #define uchar unsigned char #define uint unsigned int //D0-D7:f,b,a,e,d,h,c,g 共阴依次编码 //74LS04反相器驱动数码管 uchar code table[10] = {0x5F,0x42,0x9E,0xD6,0xC3,0xD5,0xDD,0x46,0xDF,0xD7}; uchar i = 0; //用于0-3数码管轮流显示 uint j = 0; //计时的次数 uint time=0; //计时 uint pwm=16; //占空比 uint speed; //调制PWM波的当前的值 sbit R=P3^2; //右边传感器P3^2 sbit L=P3^3; //左边传感器P3^3 //电机驱动口定义 sbit E NB=P1^0; //前轮电机停止控制使能 sbit E NA=P1^1; //后轮控制调速控制端口 sbit I N1=P1^2; //前轮 sbit I N2=P1^3; //前轮 sbit I N3=P1^4; //后轮 sbit I N4=P1^5; //后轮 void Init() { TMOD = 0x12; //定时器0用方式2,定时器1用方式1 TH0=(256-200)/256; //pwm TL0=(256-200)/256; TH1 = 0x0F8; //定时2ms TL1 = 0x30; EA = 1; ET0 = 1; ET1 = 1; TR0 = 1; TR1 = 1; } void tim0(void) interrupt 1 //产生PWM { speed ++; if(speed <= pwm) //pwm 就相当于占100的比例 { ENA = 1; } else if(speed < 100) { ENA = 0; }

霍尔传感器小车测速)

成绩评定: 传感器技术 课程设计 题目霍尔传感器小车测速

摘要 对车速测量,利用霍尔传感器工作频带宽、响应速度快、测量精度高的特性结合单片机控制电路,设计出了一种新型的测速系统,实现了对脉冲信号的精确、快速测量,硬件成本低,算法简单,稳定性好。霍尔传感器测量电路设计、显示电路设计。测量速度的霍尔传感器和车轴同轴连接,车轴没转一周,产生一定量的脉冲个数,有霍尔器件电路部分输出幅度为12 V 的脉冲。经光电隔离器后成为输出幅度为5 V 转数计数器的计数脉冲。控制定时器计数时间,即可实现对车速的测量。在显示电路设计中,实现LED上直观地显示车轮的转数值。与软件配合,实现了显示、报警功能 关键词:单片机AT89C51 传感器 LED 仿真

目录 一、设计目的------------------------- 1 二、设计任务与要求--------------------- 1 2.1设计任务------------------------- 1 2.2设计要求------------------------- 1 三、设计步骤及原理分析 ----------------- 1 3.1设计方法------------------------- 1 3.2设计步骤------------------------- 3 3.3设计原理分析--------------------- 10 四、课程设计小结与体会 ---------------- 11 五、参考文献------------------------- 11

一、设计目的 通过《传感器及检测技术》课程设计,使学生掌握传感器及检测系统设计的方法和设计原则及相应的硬件调试的方法。进一步理解传感器及检测系统的设计和应用。 用霍尔元件设计测量车速的电子系统,通过对霍尔元件工作原理的掌握实现对车速测量的应用,设计出具体的电子系统电路,并且能够完成精确的车速测量。 二、设计内容及要求 2.1设计任务 霍尔传感器一般由霍尔元件和磁钢组成,当霍尔元件和磁钢相对运动时,就会产生脉冲信号,根据磁钢和脉冲数量就可以计算转速,进而求出车速。 现要求设计一个测量系统,在小车的适当位置安装霍尔元件及磁钢,使之具有以下功能: 功能:1)LED数码管显示小车的行驶距离(单位:cm)。 2)具有小车前进和后退检测功能,并用指示灯显示。 3)记录小车的行驶时间,并实时计算小车的行驶速度。 4)距离测量误差<2cm。 5)其它。 2.2设计要求 设计要求首先选定传感器,霍尔传感器具有灵敏、可靠、体积小巧、无触点、无磨损、使用寿命长、功耗低等优点,综合了电机转速测量系统的要求。其次设计一个单片机小系统,掌握单片机接口电路的设计技巧,学会利用单片机的定时器和中断系统对脉冲信号进行测量或计数。再次实时测量显示并有报警功能,实时测量根据脉冲计数来实现转速测量的方法。要求霍尔传感器转速为0~5000r/min。 三、设计步骤及原理分析 3.1 设计方法 3.1.1 霍尔效应 所谓霍尔效应,是指磁场作用于载流金属导体、半导体中的载流子时,产生

PWM调速+循迹__智能小车程序

//T0产生双路PWM信号,L298N为直流电机调速,接L298N时相应的管脚上最好接上10K 的上拉电阻。 /* 晶振采用12M,产生的PWM的频率约为100Hz */ #include #include #define uchar unsigned char #define uint unsigned int sbit en1=P3^4; /* L298的Enable A */ sbit en2=P3^5; /* L298的Enable B */ sbit s1=P1^0; /* L298的Input 1 */ sbit s2=P1^1; /* L298的Input 2 */ sbit s3=P1^3; /* L298的Input 3 */ sbit s4=P1^2; /* L298的Input 4 */ sbit R=P2^0; sbit C=P2^1; sbit L=P2^2; sbit key=P1^4; uchar t=0; /* 中断计数器*/ uchar m1=0; /* 电机1速度值*/ uchar m2=0; /* 电机2速度值*/ uchar tmp1,tmp2; /* 电机当前速度值*/ /* 电机控制函数index-电机号(1,2); speed-电机速度(0-100) */ void motor(uchar index, char speed) { if(speed<=100) { if(index==1) /* 电机1的处理*/ { m1=abs(speed); /* 取速度的绝对值*/ s1=1; s2=0; } if(index==2) /* 电机2的处理*/ { m2=abs(speed); /* 电机2的速度控制*/ s3=1; s4=0; } } } void Back(void) {

智能小车论文单片机循迹测速避障液晶显示

“好帮手”电子设计竞赛 题目:智能小车 参赛者: 指导老师:

摘要 近年来,随着我国经济建设的高速发展,机动车辆拥有量也在急剧增长,交通事故也日益增多,车辆超速成为了越来越严重的问题。而我国生产的汽车、摩托车电机转速测量系统大多使用动圈式模拟测速。这种测量系统存在精度差、过载能力弱等缺点。 本次的智能仪表综合训练的主要任务是设计一个智能小车,要求实现小车能够直走、通过光电传感器进行测速、通过PWM电路模块进行调速以及通过LCD12864液晶模块进行小车速度、路程、距离的显示。控制板的设计以8位的STC89C52单片机为控制核心,驱动板则以L289N驱动芯片为核心,应用光电传感器和LCD液晶模块,成功的实现了小车的测速、显示功能、超声波测距、无线电控制等功能。 关键词:智能小车;光电传感器;驱动芯片;LCD液晶模块;无线电控制

目录 第一章绪论 (4) 1.1 问题的提出 (4) 第二章智能小车原理 (5) 2.1设计思路 (5) 2.2 STC89C52RC单片机简介 (6) 2.3 小车驱动板简介 (6) 2.4 小车驱动方式选择 (7) 2.5 光电测速原理 (8) 2.6 LCD12864显示模块 (8) 2.7 无线电原理 (9) 第三章系统硬件设计 (10) 3.1车体结构及其驱动电路 (10) 3.2循迹功能 (10) 3.3 测速模块的设计 (11) 3.3 PWM调速模块的设计 (12) 3.4 无线电模块 (12) 3.5 超声波测距 (13) 3.6 LCD12864显示 (14) 第四章系统软件的设计 (14) 4.1 循迹与无线电接收功能单片机程序 (14) 4.2 LCD12864液晶显示程序 (26) 总结 (41) 附录1 PCB原理图 (42) 附录1-1 电机原理图 (42) 附录1-5 LCD12864显示PCB图 (45) 附录2 实物图 (46)

智能循迹小车程序

智能循迹小车程序 Document number:BGCG-0857-BTDO-0089-2022

#include<> #define uchar unsigned char #define uint unsigned int //D0-D7:f,b,a,e,d,h,c,g 共阴依次编码 //74LS04反相器驱动数码管 uchar code table[10] = {0x5F,0x42,0x9E,0xD6,0xC3,0xD5,0xDD,0x46,0xDF,0xD7}; uchar i = 0; //用于0-3数码管轮流显示uint j = 0; //计时的次数 uint time=0; //计时 uint pwm=16; //占空比 uint speed; //调制PWM波的当前的值 sbit R=P3^2; //右边传感器 P3^2 sbit L=P3^3; //左边传感器 P3^3 //电机驱动口定义 sbit ENB=P1^0; //前轮电机停止控制使能 sbit ENA=P1^1; //后轮控制调速控制端口 sbit IN1=P1^2; //前轮 sbit IN2=P1^3; //前轮 sbit IN3=P1^4; //后轮

sbit IN4=P1^5; //后轮 void Init() { TMOD = 0x12; //定时器0用方式2,定时器1用方式1 TH0=(256-200)/256; //pwm TL0=(256-200)/256; TH1 = 0x0F8; //定时2ms TL1 = 0x30; EA = 1; ET0 = 1; ET1 = 1; TR0 = 1; TR1 = 1; } void tim0(void) interrupt 1 //产生PWM { speed ++; if(speed <= pwm) //pwm 就相当于占100的比例{ ENA = 1; }

智能循迹小车总体设计方案

智能循迹小车总体设计方案 1.1 整体设计方案 本系统采用简单明了的设计方案。通过高发射功率红外光电二极管和高灵敏度光电晶体管组成的传感器循迹模块黑线路经,然后由AT89S52通过IO口控制L298N驱动模块改变两个直流电机的工作状态,最后实现小车循迹。 1.2系统设计步骤 (1)根据设计要求,确定控制方案; (2)将各个模块进行组装并进行简单调试; (3)画出程序流程图,使用C语言进行编程; (4)将程序烧录到单片机内; (5)进行调试以实现控制功能。 1.2.1系统基本组成 智能循迹小车主要由AT89S52单片机电路、循迹模块、L298N驱动模块、直流电机、小车底板、电源模块等组成。 (1)单片机电路:采用AT89S52芯片作为控制单元。AT89S52单片机具有低成本、高性能、抗干扰能力强、超低功耗、低电磁干扰,并且与传统的8051单片机程序兼容,无需改变硬件,支持在系统编程技术。使用ISP可不用编程器直接在PCB板上烧录程序,修改、调速都方便。 (2)循迹模块:采用脉冲调制反射红外发射接收器作为循迹传感器,调制信号带有交流分量,可减少外界的大量干扰。信号采集部分就相

当于智能循迹小车的眼睛,有它完成黑线识别并产生高、低平信号传送到控制单元,然后单片机生成指令来控制驱动模块来控制两个直流电机的工作状态,来完成自动循迹。 (3)L298N驱动模块:采用L298N作为点击驱动芯片。L298N具有高电压、大电流、响应频率高的全桥驱动芯片,一片L298N可以分别控制两个直流电机,并且带有控制使能端。该电机驱动芯片驱动能力强、操作方便、稳定性好,性能优良。L298N的使能端可以外接电平控制,也可以利用单片机进行软件控制,满足各种复杂电路的需要。另外,L298N的驱动功率较大,能够根据输入电压的大小输出不同的电压和功率,解决了负载能力不够的问题。

智能小车完整材料

莱芜职业技术学院鲁战磊吴丛善魏玉良 目录 摘要: (2) 关键词: (3) 一、设计任务概述 (3) 1.1设计任务概述 (3) 1.2基本任务 (3) 1.3发挥部分 (3) 二、系统方案论证与选择 (4) 2.1车体方案论证与选择 (5) 2.2控制模块论证与选择 (5) 2.3电源模块论证与选择 (6) 2.4电机模块选择与论证 (6) 2.5电机驱动模块选择与论证 (6) 2.6避障模块的选择与论证 (7) 2.7循迹模块选择与论证 (7) 2.8金属传感器模块论证与选择 (7) 2.9铁片转移模块论证与选择 (8) 2.10报警和语音提示模块选择与论证 (8) 2.11显示模块论证与选择 (8) 2.12智能救援小车最终方案 (8) 三、硬件系统的设计与功能实现 (9) 3.1救援小车主线路板制作 (9) 3.2微控制器电路的设计与原理 (9) 3.3电源电路原理与设计 (10) 3.4电机驱动电路的原理与设计 (10) 3.5避障电路的原理与设计 (10) 3.6光电开关的安装 (11) 3.7循迹电路的原理与设计 (11) 3.8金属检测电路的原理与设计 (11) 3.9铁片转移电路原理与设计, (12) 3.10语音提示电路的原理与设计 (12) 3.11系统其它功能的扩展 (12) 四、软件设计的实现与说明 (13) 4.1主程序流程图 (13) 4.2路面循迹子程序流程图 (14)

4.3智能救援小车系统的部分程序清单 (15) 五、系统功能测试 (17) 5.1使用仪器及设备清单的说明 (17) 5.2系统功能测试 (17) 5.2.1基本要求部分的功能测试 (17) 5.2.2发挥部分的功能测试 (17) 六、结论 (19) 七、结束语 (19) 八、参考文献: (19) 摘要 本小组设计制作的一款智能救援小车,能够实现2008年山东省电子设计竞赛G题的基本部分和发挥部分的所有功能要求。另外具有以下扩展功能功能:测温、无线遥控、测速及里程、测量路面坡度。 本作品以两个直流减速电机为驱动,通过各类传感器件来采集信息,送入主控单元STC 89C52单片机,处理数据后完成相应的操作,以实现相应的功能。直流减速电机采用电机专用驱动芯片L293D进行驱动,其中避障采光电开关来完成;用RPR220型光电对管完成系统循迹功能;铁片检测部分通过电感式接近开关铁片进行信号的采集,接近开关反馈的信号送入单片机处理,由控制单元处理信号并控制相应的线圈,利用线圈用电产生磁场的效应捡起铁片并转移到题目中所指定的区域,由语音提示电路提示小车操作完成。实现了智能救援小车在

Arduino智能避障小车避障程序

Arduino智能避障小车避障程序 首先建立一个名为modulecar.ino的主程序。 // modulecar.ino,玩转智能小车主程序 #include //导入舵机库 #include //导入NwePing库 // 对照系统配线方案依次指定各I/O const int ENA = 3 ; //左电机PWM const int IN1 = 4 ; //左电机正 const int IN2 = 5 ; //左电机负 const int ENB = 6 ; //右电机PWM const int IN3 = 7 ; //右电机正 const int IN4 = 8 ; //右电机负 const int trigger = 9 ; //定义超声波传感器发射脚为D9 const int echo = 10 ; //定义传感器接收脚为D10 const int max_read = 300; //设定传感器最大探测距离。 int no_good = 35; //*设定35cm警戒距离。 int read_ahead; //实际距离读数。 Servo sensorStation; //设定传感器平台。 NewPing sensor(trigger, echo, max_read); //设定传感器引脚和最大读数//系统初始化 void setup() { Serial.begin(9600); //启用串行监视器可以给调试带来极大便利 sensorStation.attach(11); //把D11分配给舵机

pinMode(ENA, OUTPUT); //依次设定各I/O属性 pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(trigger, OUTPUT); pinMode(echo, INPUT); sensorStation.write(90); //舵机复位至90? delay(6000); //上电等待6s后进入主循环 } //主程序 void loop() { read_ahead = readDistance(); //调用readDistance()函数读出前方距离Serial.println("AHEAD:"); Serial.println(read_ahead); //串行监视器显示机器人前方距离 if (read_ahead < no_good) //如果前方距离小于警戒值 { fastStop(); //就令机器人紧急刹车 waTch(); //然后左右查看,分析得出最佳路线 goForward(); //*此处调用看似多余,但可以确保机器人高速运转下动作的连贯性 }

超声波在车辆测速中的应用

超声波在车辆测速中的应用 随着交通系统的发展,越来越多的传感器被应用在交通系统中。其中超声波传感器由于其自身的优点在测距测速中得到了广泛的应用。超声波是频率高于2O kHz 的声波,其波长短,方向性好.穿透能力强。它在医学、军事、工业、农业上有很多的应用,可用于测距,测速、测厚、探伤和超声成像等。超声波在空气中传播,遇到障碍物会反射回来,由发射与接收的时间差,可计算发射器到障碍物的距离。与激光测距设备相比,超声波以其方便、简单、成本低等因素被广泛应用于短距离的测量中。 超声波测距是利用超声波指向性强、能量消耗缓慢并因而在特定介质中传输距离远的特点,通过发射具有特征频率的超声波实现对被摄目标距离的探测。在交通系统中,利用超声波传感器测距测速有很重要的意义,不仅能采集到交通数据进行状态评估,而且还能有效地避免交通事故的发生。在智能交通系统中,超声波传感器被安装在路边来测量通过车辆的速度,判断是否超速。在无人驾驶智能车上安装超声波传感器,可以自动检测前车的距离,防止追尾事故;同时还可以检测前车的速度,做出是否超车的判断。 测量原理 超声波测距模块到障碍物的距离 S=(△T×V0)/2 (1) 式中:△T为超声波由发射到接受的用时:V0为超声波在空气中的传播速度,且 与温度的关系为V0=331.5+0.6T (2) 式中T为环境摄氏温度。根据式(2)进行声速修正可提高测量精度。当超声波传感器静止,被测物体以相对声速低速运动时,假设t1时刻测得被测物体与传感器距离为s1,t2时刻测得距离为s2,则超声波传感器与被测物体之间的相对速度 V=(s2-s1)/(t2-t1) (3) 当传感器装在车上进行运动测速时,如图1.1所示,假设车A运动速度为V1, 假设t1时刻测得前车B与车A距离为s1,t2时刻测得距离为s2,则两车相对速度为 △ V=(s2-s1)/(t2-t1)(4) 可以得到车B的速度为V2=V1+△V。 设计实现 硬件设计 主芯片为飞思卡尔xls128,控制舵机的转动,33886驱动电路,驱动电机转动,同时光电传感器检测道路信息,将采集到的路面信息传回单片机,控制智能车的行驶方向。超声波传感器模块由一个发射器和接收器构成,单片机控制发射器发出频率为40kHz的脉冲,并开始计时,遇到最近障碍物反射回接收器,计时结束,通过发射接受的时间间隔计算出距离。

智能寻迹小车以及程序

寻迹小车 在历届全国大学生电子设计竞赛中多次出现了集光、机、电于一体的简易智能小车题目。笔者通过论证、比较、实验之后,制作出了简易小车的寻迹电路系统。整个系统基于普通玩具小车的机械结构,并利用了小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。 总体方案 整个电路系统分为检测、控制、驱动三个模块。首先利用光电对管对路面信号进行检测,经过比较器处理之后,送给软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。系统方案方框图如图1所示。 图1 智能小车寻迹系统框图 传感检测单元 小车循迹原理 该智能小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。 红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。 传感器的选择 市场上用于红外探测法的器件较多,可以利用反射式传感器外接简单电路自制探头,也可以使用结构简单、工作性能可靠的集成式红外探头。ST系列集成红外探头价格便宜、体积小、使用方便、性能可靠、用途广泛,所以该系统中最终选择了ST168反射传感器作为红外光的发射和接收器件,其内部结构和外接电路均较为简单,如图2所示:

图2 ST168检测电路 ST168采用高发射功率红外光、电二极管和高灵敏光电晶体管组成,采用非接触式检测方式。ST168的检测距离很小,一般为8~15毫米,因为8毫米以下是它的检测盲区,而大于15毫米则很容易受干扰。笔者经过多次测试、比较,发现把传感器安装在距离检测物表面10毫米时,检测效果最好。 R1限制发射二极管的电流,发射管的电流和发射功率成正比,但受其极限输入正向电流50mA的影响,用R1=150的电阻作为限流电阻,Vcc=5V作为电源电压,测试发现发射功率完全能满足检测需要;可变电阻R2可限制接收电路的电流,一方面保护接收红外管;另一方面可调节检测电路的灵敏度。因为传感器输出端得到的是模拟电压信号,所以在输出端增加了比较器,先将ST168输出电压与2.5V进行比较,再送给单片机处理和控制。 传感器的安装 正确选择检测方法和传感器件是决定循迹效果的重要因素,而且正确的器件安装方法也是循迹电路好坏的一个重要因素。从简单、方便、可靠等角度出发,同时在底盘装设4个红外探测头,进行两级方向纠正控制,将大大提高其循迹的可靠性,具体位置分布如图3所示。

智能循迹小车详细制作过程

(穿山乙工作室) 三天三十元做出智能车 0.准备所需基本元器件 1).基本二驱车体一台。(本课以穿山乙推出的基本车体为例讲解) 2).5x7cm 洞洞板、单片机卡槽、51单片机、石英晶体、红色LED 、1K 电阻、10K 排阻各一个;2个瓷片电容、排针40个。 3).5x7cm 洞洞板、7805稳压芯片、红色LED 、1K 电阻各一个;双孔接线柱三个、10u 电解电容2个、排针12个、9110驱动芯片2个。 4).5x7cm 洞洞板、LM324比较器芯片各一个;红外对管三对、4.7K 电阻3个、330电阻三个、红色3mmLED 三个。 一、组装车体 基本设计思路: 1.基本车架(两个电机一体轮子+一个万向轮) 2.单片机主控模块 3.电机驱动模块(内置5V 电源输出) 4.黑白线循迹模块

(图中显示的很清晰吧,照着上螺丝就行了) 二、制作单片机控制模块 材料:5x7cm洞洞板、单片机卡槽、51单片机、石英晶体、红色LED、1K电阻、10K排阻各一个;2个瓷片电容、排针40个。 电路图如下,主要目的是把单片机的各个引脚用排针引出来,便于使用。我们也有焊接好的实物图供你参考。(如果你选用的是STC98系列的单片机在这里可以省掉复位电路不焊,仍能正常工作。我实物图中就没焊复位)

三、制作电机驱动模块 材料:5x7cm洞洞板、7805稳压芯片、红色LED、1K电阻各一个;双孔接线柱三个、10u电解电容2个、排针12个、9110驱动芯片2个。 电路图如下,这里我们把电源模块与驱动模块含在了同一个电路板上。因为电机驱动模块所需的电压是+9V左右(6—15V 均可),而单片机主控和循迹模块所需电压均为+5V。 这里用了一个7805稳压芯片将+9V电压稳出+5V电压。 +9V

智能循迹小车设计

智能循迹/避障小车研究 工作报告 一、智能循迹小车程序结构框图 二、Proteus仿真图 三、软件程序设计

一、智能循迹小车程序结构框图 经过几天在网上的查找,对智能循迹/避障小车有了大致的了 解, 一般有三个模块: 1、最基本的小车驱动模块,使用两个二相四线步进电机对小车的两个后轮分别进行驱动,前轮最好用万向轮,能使小车更好地转弯; 2、小车循迹模块,在小车底部有三个并排安装的红外对管,对黑色与白色的反射信号不同,经单片机处理后对小车进行相应处理; 3、避障模块,我写的程序中对于避障模块是用中断来处理的(即安装在小车车头的红外对管检测到有障碍物后,就会向单片机的P3_2口输出一个高电平或是低电平,这时中断程序将对小车进行预先设定好的避障处理),但是在程序结构框图中,我不太会表示中断处理方式,所以就用查询的方式画了。

N Y N Y 二、Proteus 仿真图 我用Proteus 大概地仿真了小车的运行状态。图中的两个二相四线步进电机就代表小车的左右轮(假定步进电机顺时针转动方向为小车前进方向),网上有很多种驱动芯片,在仿真时我只使用L298N 芯

片来驱动步进电机。用三个单刀双制开关模拟用于小车循迹的三个红外对管的输出信号,经一个与门与三极管开关连接到P3_3口,中断程序对P1_0, P1_1, P1_2三个口进行检测,并做出相应处理。同时因为避障模块的优先级高于循迹模块,所以将外部中断0用于避障,外部中断1用于循迹。P1_3口则用于检测小车是否到达终点。 1、小车驱动模块: 使用一片298芯片驱动一个二相四线步进电机,电机的电压为12V。

深入浅出解析智能车测速部分

深入浅出解剖智能车测速部分 作者:IT民工在打滚 作者简介:笔者大一、二参加第三、四届智能车竞赛,大三担任校区实验 中心助理引导学校同学参加第五届智能车竞赛,荣获全国智能车竞赛电磁组竞 赛特等奖。自从大三开始到此刻一直从事运动控制系统开发,对运动控制了解 还算比较透切。在此,跟学弟们分享下他熟识的,望能对学弟们参加竞赛有所 帮助,让大家少走些弯路尽早走上自控的正轨,让咱们一起努力将咱们祖国自 控技术推向更高的台阶。当然更希望此文能抛砖引玉。文中有错漏地方还望各 位多多包涵。 智能车运动控制系统包含:运算处理器(MCU)、执行机构(有刷直流电机)、反馈机构(编码器或旋转变压器)。自动化行业里完成的运动控制系统 包含三环控制,三环控制分别为:电流环(转矩环),属于三环中的内环;转 速环,属三环中的中间环;位置环,属三环中的最外环。这三环运动控制算法 在不同系统有所取舍,有些系统只需用其中的一环或两环,例如:张力控制系 统只需用到电流环足以;智能车则需要电流环+速度环。据我了解几乎没有同 学上两环控制算法的,都是单单一个速度环(速度环PID)。要控制好电机应 该上两环控制,只有这样才能最好的发挥电机的驱动能力。这里稍微解析下吧,我们都知道当电机的力矩小于负载时,电机旋转速度将降低;电机输出的力矩 大于负载时,电机带动负载做加速运动;只有当电机输出力矩等于负载大小时,运动系统才进入匀速运行状态。当我们给小车一个速度值时,如比当前值大, 咱们得加大电机力矩,让车速尽快到达设定速度;如比当前速度小,则减少力 矩或者给反向力矩(刹车)。总言之,电流环是让车速尽快到达设定值。电流 环控制算法建议使用PI控制,信号处理频率10KHZ为宜(差点忘了提醒,上 电流环记得上电流取样电路哦,取样电路有霍尔取样或电阻取样两种方法,对 于智能竞赛上电阻取样法足以,此方法节约成本、电路简单)。速度环建议使 用PID控制算法、处理频率1KHZ就可以了。 上段讲解控制算法,接下来重点跟大家聊聊速度反馈部分。在工业自动化 上速度反馈传感器有编码器、旋转变压器两大类。旋转变压器输出模拟信号适 用于模拟量控制系统,其体积比较大,随着微处理器的发展其被选用得越来越少;编码器输出数字量抗扰性能较好、制造工艺简单、能很好与微处理器衔接,因此现代运动控制系统基本选用此传感器作为反馈单元。纵观各届竞赛同学们

基于某51单片机的智能小车控制系统

工业职业技术学院 毕业设计 课题名称基于51与单片机的智能小车控制系统 系(院)名称电气工程系 专业及班级 学生 学号 指导教师

完成日期年11 月19 日

摘要 随着我国科学技术的进步,智能化作为现代社会的新产物开始越来越普及,各种高科技也广泛应用于智能小车和机器人玩具制造领域,使智能机器人越来越多样化。智能小车是一个多种高薪技术的集成体,它融合了机械、电子、传感器、计算机硬件、软件、人工智能等许多学科的知识,可以涉及到当今许多前沿领域的技术。 整个小车平台主要以51单片机为控制核心,通过无线遥控实现前进后退和转向行驶,通过红外线传感器,实现小车的自适应巡航、避障等功能。设计采用对比选择,模块独立,综合处理的研究方法。通过翻阅大量的相关文献资料,分析整理出有关信息,在此基础上列出不同的解决方案,结合实际情况对比方案优劣选出最优方案进行设计。从电机车体,最小系统到无线遥控,红外线对管的自动寻迹再到红外线自动避障和语音控制,完成各模块设计。通过调试检测各模块,得到正确的信号输出,实现其应有的功能。最后将各个调试成功的模块结合到小车的车体上,结合程序,通过单片机的控制,将各模块有效整合在一起,达到所预期的目标,完成最终设计与制作,能使小车在一定的环境中智能化运转。 关键字:智能小车,单片机,红外传感器。

目录 第一章绪论.............................................................................................................................- 1 - 1.1.1智能循迹小车概述........................................................................................................- 1 - 1.1.2课题研究的目的和意义 ...............................................................................................- 2 - 1.1.3智能循迹小车智能循迹分类.......................................................................................- 3 - 1.1.4智能循迹小车的应用....................................................................................................- 3 - 第二章方案设计 ..........................................................................................................................- 5 - 2.1 主控系统.........................................................................................................................- 5 - 2.2单片机最小系统 ...............................................................................................................- 6 - 2.2.1 STC89C52简介...................................................................................................- 6 - 2.2.2 时钟电路...............................................................................................................- 8 - 2.2.3复位及复位电路....................................................................................................- 8 - 2.3 电机驱动模块................................................................................................................ - 10 - 2.4 循迹及避障模块............................................................................................................ - 11 - 2.5 机械系统......................................................................................................................... - 11 - 2.6电源模块......................................................................................................................... - 11 - 第三章硬件设计 ..................................................................................................................... - 12 - 3.1总体设计......................................................................................................................... - 12 - 3.1.1主板设计框图..................................................................................................... - 12 - 主板设计框图如图3-1,所需原件清单如表3-1 .................................................. - 12 -

基于STM32的智能巡线小车概要

可编程器件应用 电子测量技术 E L E C T R O N I C M E A S U R E M E N T T E C H N O L O G Y 第 35卷第 2期 2012年 2月基于 S T M 32的智能巡线小车 张锴李世光朱晓莉孟强强陈曰印 (山东科技大学信息与电气工程学院青岛 266590 摘要 :介绍一款以 S TM 32处理器为核心的智能巡线小车的控制系统设计 , 研究了采用红外检测电路采集路径信息从而实现自动巡迹的设计方法。该系统硬件主要包括光电检测电路、 主控电路、电机驱动电路、舵机驱动电路等。智能巡线小车由后轮电机驱动 , 根据红外对管采集到的地面信息确定车体位置 , 由前轮舵机做出快速纠偏调整 , 使小车能够很好地按照事先铺好的跑道行进。经测试 , 红外检测加舵机调整的智能车在轨道式巡迹中能够快速、准确地完成自动巡线任务。 关键词 :S TM 32; 智能巡线小车 ; 红外对管 ; 舵机中图分类号 :T P 2文献标识码 :A I n t e l l i g e n t l i n e -t r a c k i n g c a r b a s e d o n S T M 32Z h a n g K a i L i S h i g u a n g Z h u X i a o l i M e n g Q i a n g q i a n g C h e n Y u e y i n (C o l l e g e o f I n f o r m a t i o n a n d E l e c t r i c a l E n g i n e e r i n g , S h a n d o n g U n i v e r s i t y

智能小车速度控制程序

/************************************************************************** ** 简单寻迹程序:接法 EN1 EN2 PWM输入端,本程序不输入PWM,直接使插上跳线帽,使能输出,这样就能全速运行 接上测速模块 测速模块电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口 把测速模块输出OUT1 OUT2 接入单片机P3。2 P3。3 P1_0 P1_1 接IN1 IN2 当P1_0=1,P1_1=0; 时左上电机正转左上电机接驱动板子输出端(蓝色端子OUT1 OUT2) P1_0 P1_1 接IN1 IN2 当P1_0=0,P1_1=1; 时左上电机反转 P1_0 P1_1 接IN1 IN2 当P1_0=0,P1_1=0; 时左上电机停转 P1_2 P1_3 接IN3 IN4 当P1_2=1,P1_3=0; 时左下电机正转左下电机接驱动板子输出端(蓝色端子OUT3 OUT4) P1_2 P1_3 接IN3 IN4 当P1_2=0,P1_3=1; 时左下电机反转 P1_2 P1_3 接IN3 IN4 当P1_2=0,P1_3=0; 时左下电机停转 P1_4 P1_5 接IN5 IN6 当P1_4=1,P1_5=0; 时右上电机正转右上电机接驱动板子输出端(蓝色端子OUT5 OUT6) P1_4 P1_5 接IN5 IN6 当P1_4=0,P1_5=1; 时右上电机反转

P1_4 P1_5 接IN5 IN6 当P1_4=0,P1_5=0; 时右上电机停转 P1_6 P1_7 接IN7 IN8 当P1_6=1,P1_7=0; 时右下电机正转右下电机接驱动板子输出端(蓝色端子OUT7 OUT8) P1_6 P1_7 接IN7 IN8 当P1_6=0,P1_7=1; 时右下电机反转 P1_6 P1_7 接IN7 IN8 当P1_6=0,P1_7=0; 时右下电机停转 P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1 P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3 P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4 四路寻迹传感器有信号(白线)为0 没有信号(黑线)为1 四路寻迹传感器电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口 关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入6V时时候可以输出稳定的5V 分别在针脚标+5 与GND 。这个输出电源可以作为单片机系统的供电电源。 ****************************************************************************/ #include

智能循迹小车详细源代码程序MSPID

巡线车程序(完整版) 1 #ifndef _Macro.h_ 2 #define _Macro.h_ 3 #include 4 #include 5 #define uchar unsigned char 6 #define uint unsigned int 7 #define one 11.11 8 #define LMAX 1999 9 #define RMAX 3999 10 #define CPU_F ((double)8000000) 11 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 12 13 #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 14 #define PC 20 // 比例放大系数 15 #define IC 0 //积分放大系数 16 #define DC 85 //大系数 17 #define LEFTOUT TACCR1 18 #define RIGHTOUT TACCR2 19 #define SensorIn P5IN 20 #define F 5000//5000hz 21 #define Period (8000000/F) 22 #define EnableLeftPos P3OUT|=BIT1 23 #define UnenableLeftPos P3OUT&=~BIT1 24 25 #define EnableLeftNeg P3OUT|=BIT0 26 #define UnenableLeftNeg P3OUT&=~BIT0 27 28 #define EnableRightPos P3OUT|=BIT2 29 #define UnenableRightPos P3OUT&=~BIT2 30 31 #define EnableRightNeg P3OUT|=BIT3 32 #define UnenableRightNeg P3OUT&=~BIT3 33 34 #define Basic_Left 100//百分之八十 35 #define Basic_Right 100//Basic_Left 36 #define MAX (100) 37 #define MIN (-100) 38 #define foreward 1 39 #define backward 0

相关主题