基于51单片机的巡线小车
基于51单片机智能小车循迹程序

#include<reg52.h>#define uchar unsigned char#define uint unsigned int////电机驱动模块位定义////sbit M11=P0^0;//左轮sbit M12=P0^1;sbit M23=P0^2;//右轮sbit M24=P0^3;sbit ENA=P0^4;//左轮使能PWM输入改变dj1数值控制转速sbit ENB=P0^5;//右轮使能PWM输入改变dj2数值控制转速////占空比变量定义////unsigned char dj1=0;unsigned char dj2=0;uchar t=0;////红外对管位定义////sbit HW1=P1^0;//左前方sbit HW2=P1^1;//右前方sbit HW3=P1^2;//左后方sbit HW4=P1^3;//右后方////小车前进////void qianjin(){M11=1;//左轮M12=0;//M23=1;//右轮M24=0;//dj1=50;dj2=50;}////向左微调////void turnleft2(){M11=1;M12=0;M23=1;M24=0;dj1=7;//左轮dj2=50;//右轮}////向右微调////void turnright2(){M11=1;M12=0;M23=1;M24=0;dj1=50;dj2=7;}////向左大调////void left(){M11=0;M12=1;M23=1;M24=0;dj1=7;dj2=80;}////向右大调////void right(){M11=1;M12=0;M23=0;M24=1;dj1=80;dj2=7;}////循迹动作子函数////void xj(){if(HW1==0&&HW2==0&&HW3==0&&HW4==0)//前进逻辑{qianjin();}if(HW1==1&&HW2==0&&HW3==0&&HW4==0)//左右微调{turnleft2();}if(HW1==0&&HW2==1&&HW3==0&&HW4==0){turnright2();}if(HW1==1&&HW2==0&&HW3==1&&HW4==0)//左右大调{left();}if(HW1==0&&HW2==1&&HW3==0&&HW4==1){right();}}////初始化////void init(){TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;EA=1;ET0=1;TR0=1;}////定时器0中断////void timer0() interrupt 1 using 1{TH0=(65536-500)/256;TL0=(65536-500)%256;t++;if(t<dj1)ENA=1;else ENA=0;if(t<dj2)ENB=1;else ENB=0;if(t>=50){t=0;}}void main(){init();P1=0Xff;while(1){/////////////////循迹模式/////////////////////xj();}}。
基于51单片机智能小车循迹程序

#include <reg51.h>#include <stdio.h>#define uint unsigned int#define uchar unsigned char/**********************************/uchar led_data[9]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80}; uchar turn_count=0;bit end=0; //圈数跑完标志/*********************************/sbit xg0=P1^0; //左寻轨对管sbit xg1=P1^1; //中间寻轨对管sbit xg2=P1^2; //右寻轨对管sbit xz=P1^3; //感应挡板对管/*********************************/sbit Q_IN1=P2^0; //车前左轮控制sbit Q_IN2=P2^1;sbit Q_IN3=P2^2; //车前右轮控制sbit Q_IN4=P2^3;sbit H_IN1=P2^4; //车尾左轮控制sbit H_IN2=P2^5;sbit H_IN3=P2^6; //车尾右轮控制sbit H_IN4=P2^7;sbit Q_ENA=P3^0; //车前左轮使能,PWMsbit Q_ENB=P3^1; //车前右轮使能,sbit H_ENA=P3^6; //车尾左轮使能,sbit H_ENB=P3^7; //车尾右轮使能,/****************************************/#define stra_q_l 100 //直线行走时,四个轮子占空比调试#define stra_q_r 100#define stra_h_l 100#define stra_h_r 100#define turn_q_l 100 //转弯时四个轮子的占空比调试#define turn_q_r 100#define turn_h_l 100#define turn_h_r 100#define turnr_time 2900//右转弯时的延时常数#define turnl_time 3000 //左转弯时的延时常数#define dt_time 5800 //原地掉头时延时常数#define over_time 1000 //停止延时#define back_time 2500 //走完环形,回到直道延时转弯#define black_time 1500 //过黑线的时间#define correct_l_time 700 //左矫正时间#define correct_r_time 700 //右矫正时间#define hou_time 200/***************************************/uchar q_duty_l,q_duty_r,h_duty_l,h_duty_r,//车前后左右轮占空比i=0,j=0,k=0,m=0;/**************************************/void delay_cir(uint n){uchar x;while(n--){for(x=0; x<250;x++);};}/***********************************/void delay(uint ct) // 延时函数{uint t;t=ct;while(t--);}/***************************************/ void straight() //直走{q_duty_l=stra_q_l;q_duty_r=stra_q_r;h_duty_l=stra_h_l;h_duty_r=stra_h_r;Q_IN1=1;Q_IN2=0;Q_IN3=1;Q_IN4=0;H_IN1=1;H_IN2=0;H_IN3=1;H_IN4=0;}/***************************************/ void houtui() //后退{q_duty_l=stra_q_l;q_duty_r=stra_q_r;h_duty_l=stra_h_l;h_duty_r=stra_h_r;Q_IN1=0;Q_IN2=1;Q_IN3=0;Q_IN4=1;H_IN1=0;H_IN2=1;H_IN3=0;H_IN4=1;}/***************************************/ void turn_left() //左转{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_h_l;h_duty_r=turn_h_r;Q_IN1=0; //左轮反转Q_IN2=1;H_IN1=0;Q_IN3=1; //右轮正转Q_IN4=0;H_IN3=1;H_IN4=0;delay(turnl_time);}/***********************************/ void turn_right() //右转{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_q_l;h_duty_r=turn_q_r;Q_IN1=1; //左轮正转Q_IN2=0;H_IN1=1;H_IN2=0;Q_IN3=0; //右轮反转Q_IN4=1;H_IN3=0;delay(turnr_time);}/**************************************************/ void turn_round() //原地掉头{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_h_l;h_duty_r=turn_h_r;Q_IN1=0; //左轮反转Q_IN2=1;H_IN1=0;H_IN2=1;Q_IN3=1; //右轮正转Q_IN4=0;H_IN3=1;H_IN4=0;delay(dt_time);}/******************************************************/void over() //小车停止{Q_IN1=0;Q_IN2=0;Q_IN3=0;Q_IN4=0;H_IN1=0;H_IN2=0;H_IN3=0;H_IN4=0;}/*****************************************************/ void correct_right() //左偏,向右矫正{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_q_l;h_duty_r=turn_q_r;Q_IN1=1; //左轮正转Q_IN2=0;H_IN1=1;H_IN2=0;Q_IN3=0; //右轮反转Q_IN4=1;H_IN3=0;H_IN4=1;delay(correct_r_time);}void correct_left() //右偏,向左矫正{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_h_l;h_duty_r=turn_h_r;Q_IN1=0; //左轮反转Q_IN2=1;H_IN1=0;H_IN2=1;Q_IN3=1; //右轮正转Q_IN4=0;H_IN3=1;H_IN4=0;delay(correct_l_time);}/*************************************/ void xunji(){if(xg1==1){turn_count++;over();delay(over_time);if(turn_count==1){straight();delay(black_time);}elseif(turn_count==2){houtui();delay(hou_time);turn_left();}elseif(turn_count==3) {houtui();delay(hou_time); turn_right();}elseif(turn_count==4) {houtui();delay(hou_time); turn_right();}elseif(turn_count==5) {straight();delay(black_time); }elseif(turn_count==6) {houtui();delay(hou_time); turn_right();}elseif(turn_count==7) {houtui();delay(hou_time); turn_right(); straight();delay(back_time); turn_left();}elseif(turn_count==8) {straight();delay(black_time); }elseif(turn_count==9) {houtui();delay(100);turn_round();}if(turn_count>=9){turn_count=0;cir_count++;circle--;}{end=1;over();delay(500);}}elseif((xg0==0)&&(xg1==0)&&(xg2==0)) {straight();}elseif((xg0==1)&&(xg1==0)&&(xg2==0)) {over();delay(over_time);houtui();delay(hou_time);correct_right();}//左偏,向右矫正elseif((xg0==0)&&(xg1==0)&&(xg2==1)){over();delay(over_time);houtui();delay(hou_time);correct_left();} //右偏,向左矫正}/***********************************************/ void int0(void) interrupt 0 //中断圈数设定{EX0=0;delay_cir(250);circle++;if(circle>8){circle=0;}P0=led_data[circle];EX0=1;}/*************************************/void time1(void) interrupt 3 //T1溢出中断,电机调速{i++;j++;k++;m++;if(i<q_duty_l)Q_ENA=1;else Q_ENA=0;if(i>100){Q_ENA=1;i=0;}if(j<q_duty_r)Q_ENB=1;else Q_ENB=0;if(j>100 ){Q_ENB=1;j=0;}if(k<h_duty_l)H_ENA=1;else H_ENA=0;if(k>100){H_ENA=1;k=0;}if(m<h_duty_r)H_ENB=1;else H_ENB=0;if(m>100){H_ENB=1;m=0;}P0=led_data[circle];TH1=0XFF;TL1=0XF6;}/*************************************/ void main(){P0=led_data[circle];P1=0xFF;P1=0XFF; //P1口做输入P2=0X00; //P2口初始化,小车禁止P3=0XFF;TMOD=0X11;//T0,T1,工作方式1TH1=0XFF; //T1中断一次10USTL1=0XF6;TR1=1;EX0=1;ET1=1;EA=1;while(1){while((xz==1)&&(end!=1)) //无挡板,扫描对管,前进{xunji();};};}。
基于51单片机的自动巡线避障小车精编版

唐山师范学院本科毕业论文题目基于单片机的智能小车的设计学生***指导教师*** 副教授年级2008级专业电子信息科学与技术系别物理系唐山师范学院物理系2012年5月郑重声明本人的毕业论文是在老师的指导下独立撰写完成的。
如有剽窃、抄袭、造假等违反学术道德、学术规范和侵权的行为,本人愿意承担由此产生的各种后果,直至法律责任,并愿意通过网络接受公众的监督。
特此郑重声明。
毕业论文作者(签名):年月日目录摘要 (3)第一章引言 (3)第二章方案说明 (3)2.1、方案论证 (3)2.2、总体设计方案概述 (4)第三章硬件电路设计 (5)3.1、主控电路 (5)3.1.1、L7805稳压器 (5)3.1.2、MAX232芯片简介 (6)3.2、八路红外传感器模块 (6)3.2.1、LM324简介 (6)3.2.2、74HC14D简介 (6)3.3、L298N电机驱动模块 (7)3.3.1、L298N简介 (8)3.4、机械部分 (9)第四章软件系统设计 (9)4.1、程序流程图 (9)4.2、程序设计方案 (9)参考文献 (12)第五章结束语 (12)致谢 (12)附录1 (13)附录2 (13)外文页 (20)基于单片机的智能小车的设计摘要本文介绍了基于STC89C52单片机的智能小车的设计与实现。
小车主要能够识别黑线并检测障碍物从而实现在固定跑道内行驶并且可自动避障。
小车以STC89C52单片机控制器;采用八路红外传感器及其处理模块实现对黑线及障碍物的检测;通过单片机产生PWM波并通过L298N来对小车的方向和速度进行控制。
关键字STC89C52 单片机红外传感器 PWM L298N第一章引言社会的发展,科技的进步,使得人们对生活中的很多事物都提出了更高的要求,就像人们自己走累了便想到了坐车,所以马车出现了;而马车已经满足不了人们对速度的追求的时候,便又发明了汽车,所以科技创新是基于人们的需要而出现的;那么到了现在这个普通汽车已经很普遍的掌控在人们手中的时候,一个新的概念便被提了出来,它就是智能车。
基于51单片机四路循迹小车

基于51单片机四路循迹小车[导读]这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~一. 任务要求二. 系统原理本系统以设计题目的要求为目的,采用STC89C52单片机为控制核心,利用红外传感器检测轨道,控制电动小汽车的自动循迹,快慢速行驶。
这里的轨道是指汽车沿着白色地板上的黑线行驶。
由于黑线与白地板的反射系数不同,可以根据接收到的反射光的强度来判断“道路”。
常用的方法是红外检测。
红外检测方法,即在汽车行驶过程中,利用红外光在具有不同颜色的物体表面的不同反射特性,不断向地面发射红外光。
当红外光与白纸地板相遇时,会发生漫反射,反射光被安装在车内的接收器接收,如果遇到黑线,就会变成红色。
外部光被吸收,车内的接收器不能接收红外线。
单片机根据是否接收到反射的红外光来确定黑线的位置和汽车的行驶路线。
三. 整体方案1. 控制模块小车的核心控制部件采用STC公司生产的8位单片机STC89C52。
它是一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。
STC89C52有3个16 位定时器/计数器,2个外部中断,1个串口中断。
最小系统51单片机的具体引脚功能不细说,不了解的可自行百度。
直接上最小系统电路图(自己画的,凑合着看)。
顺便说一句,在我看来一个没有指示灯的电路是最烦的电路<(`^´)> 我的复位一定要有灯才行!三部分:①电源电路:给单片机提供5V的电源②时钟电路:外接11.0592M石英晶振。
③复位电路:确保单片机是从一个确定的初始状态开始。
焊接时注意P0口要接上拉电阻,否则不能用,一般都用排阻做上拉电阻(当然如果能自己画板子就更好了)。
去除AD网格线记一下怎么去除AD网格线,如图步骤,最后去掉Visible前面的对勾即可,别忘记最后点OK:2. 电机驱动模块我使用的是最经典的LM298N电机驱动:我太喜欢用298了。
基于51单片机的寻迹小车设计报告

寻迹小车摘要:以C8051F单片机作为微空机器,设计出一种寻迹小车,通过红外传感器检测黑带信号,利用单片机输出PWM脉冲控制两组直流电机正反转和转动的速度,使小车沿着还带行走。
关键词:寻迹,检测,传出信号。
1.方案论证与选择1.1电机驱动芯片的选择方案一:采用内部集成H桥式芯片L298驱动电路。
方案二:采用分立元件的H桥驱动电路。
由于采用内部集成H桥式芯片每一组PWM波用来控制一个电机的速度,而另外两个I/O口可以控制电机的正反转,控制比较简单,电路也很简单,一个芯片内包含有8个功率管,这样简化了电路的复杂性,所以采用方案一。
1.2传感器的选择方案一:采用发光二极管发光,用光敏二极管接收。
当发光二极管发出的可见光照射到黑带时,光线被黑带接收,光敏二极管检测到信号,呈现高阻抗,使输出端为低电平。
当发光二极管发出的可见光照射到地面时,它发出的可见光反射回来被光敏二极管检测到时,起阻抗迅速降低,此时输出端为高电平。
但是由于光敏二极管受环境中可见光影响较大,电路中的电压不太稳定。
方案二:利用红线发射管发射红线,红外线二极管进行接收。
采用四组红外光敏耦合三极管发射和接收红外信号,外面课见光对接收的信号影响较小。
接收的红外信号转化为电压信号经过LM393进行比较,产生高电平或低电平输出,信号返回给C8051F单片机.方案三:采用光敏电阻接收可见光检测。
四组光敏电阻用于检测可见光信号。
当光敏电阻检测到黑带时,输出端为低电平,当光敏电阻没有检测到黑带时,输出端为高电平,信号返回给单片机,通过单片机控制电机的转向。
光敏电阻易受环境的影响,电压稳定性较差。
综上比较,本设计才用方案二。
2.硬件设计2.1元器件明细表:(1) C8051单片机×1(2) 298带散热片×1(3) 7805带散热片×2(4) TCR5000 ×8(5) LM393 ×4(6)定位器×9(7) 1602显示屏×1(8)开关×1(9)电容:470uF ×110uf ×2104 ×4(9)电阻:EN4007 ×8150Ω×125.1K ×8200Ω×1(10)发光二极管×11(11)三极管×1(12)蜂鸣器×1(13)其他:导线,排线,排针,杜邦头,杜邦针2.2单元电路设计:2.11单片机最小系统电路2.12驱动电路2.13寻迹电路2.14电源电路2.15显示屏电路2.16蜂鸣器电路2.17指示灯电路VDD +5150VSS3、软件设计主控芯片为C8051F120,编程由C语言实现,程序流程如下:4.系统测试4.1单元电路的检测:4.11驱动电路的检测5V、12V、接地分别接好,使能1使能2接口接5V,A口接5V,B口接地,C口接5V,D口接地,然后用万用电表测01和02,03和04的输出电压是否为12V(可有小偏差),然后交换A,B接口,测01和02,03和04的输出电压是否反向,最后断开使能1和使能2接口,测01和02,03和04的输出电压是否为0V.4.12寻迹电路的检测先把电路接通,用照相机观察TCRT5000是否发光,再把万用表调到20V档位,正接线柱接输出,负接线柱接负极,看电压表示数是否5V(可有小偏差),用白纸挡上四个TCRT5000后,看电压是否有明显变化,最好低电压为1V以下。
51循迹小车程序实验报告

竭诚为您提供优质文档/双击可除51循迹小车程序实验报告篇一:智能循迹小车实验报告摘要本设计主要有单片机模块、传感器模块、电机驱动模块以及电源模块组成,小车具有自主寻迹的功能。
本次设计采用sTc公司的89c52单片机作为控制芯片,传感器模块采用红外光电对管和比较器实现,能够轻松识别黑白两色路面,同时具有抗环境干扰能力,电机模块由L298n芯片和两个直流电机构成,组成了智能车的动力系统,电源采用7.2V的直流电池,经过系统组装,从而实现了小车的自动循迹的功能。
关键词智能小车单片机红外光对管sTc89c52L298n1绪论随着科学技术的发展,机器人的设计越来越精细,功能越来越复杂,智能小车作为其的一个分支,也在不断发展。
在近几年的电子设计大赛中,关于小车的智能化功能的实现也多种多样,因此本次我们也打算设计一智能小车,使其能自动识别预制道路,按照设计的道路自行寻迹。
2设计任务与要求采用mcs-51单片机为控制芯片(也可采用其他的芯片),红外对管为识别器件、步进电机为行进部件,设计出一个能够识别以白底为道路色,宽度10mm左右的黑色胶带制作的不规则的封闭曲线为引导轨迹并能沿该轨迹行进的智能寻迹机器小车。
3方案设计与方案选择3.1硬件部分可分为四个模块:单片机模块、传感器模块、电机驱动模块以及电源模块。
3.1.1单片机模块为小车运行的核心部件,起控制小车的所有运行状态的作用。
由于以前自己开发板使用的是ATmeL公司的sTc89c52,所以让然选择这个芯片作为控制核心部件。
sTc89c52是一种低损耗、高性能、cmos八位微处理器,片内有4k字节的在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为十年。
其程序和数据存储是分开的。
3.1.2传感器模块方案一:使用光敏电阻组成光敏探测器采集路面信息。
阻值经过比较器输出高低电平进行分析,但是光照影响很大,不能稳定工作。
方案二:使用光电传感器来采集路面信息。
基于单片机循迹小车的设计

基于单片机循迹小车的设计
一、硬件结构设计
(1)外观设计
该循迹小车采用4轮驱动底盘,使小车有较强的稳定性,小车安装有
一个带调光功能的LED头灯,可以缩短小车行驶的距离,以及一个用于采
集道路信息的循迹模块。
四个车轮上安装有电机,以及一个用于驱动小车
的电源,主控器采用的是51单片机。
(2)基础硬件设计
1)电源:采用12V锂电池,通过一个5V调整稳压电路改变输出电压,并调整电流大小以供电源的可靠性;
2)车轮电机:采用马达,可提供足够的动力,能够拉动小车行驶,
同时通过电路来控制马达的速度;
3)主控器:采用51单片机,作为小车的主控单元,可实现小车的运
动控制、数据采集等功能;
4)循迹模块:采用模拟循迹模块,用于采集道路信息,根据采集的
信息以及灰度传感器的反馈信息,调整小车的运动方向;
5)头灯:采用LED头灯,可实现可调光的功能,使得车子在夜晚的
黑暗环境中也能保持安全的运行;
6)电路板:依据小车的硬件结构设计出合理的路径,实现电路图和
实际的车路径的一一匹配,以此实现对小车运行的控制。
二、软件程序设计
(1)程序流程设计。
单片机的智能循迹小车

调试方法
A
总之,基于 51单片机的 智能循迹小 车是一种简 单实用的智 能控制系统
B
通过合理的 硬件设计和 软件编程, 可以实现小 车的自动循
迹功能
C
在调试过程中, 需要逐步排查 问题,不断优 化程序,以提 高系统的性能
和稳定性
感/谢/聆/听
以及调试方法
1
原理
原理
1Байду номын сангаас
基于51单片机的智能循迹小车通过传感器检测小车与路径之间的距 离,将检测到的信号转换为电平信号,然后通过单片机进行处理
单片机根据接收到的信号控制电机驱动模块,从而控制小车的运动 方向和速度
2
3
通过不断调整小车的运动方向和速度,使得小车能够沿着指定的路 径进行运动
2
硬件组成
51单片机的智能 循迹小车
-
01
原理
02 硬件组成
03 软件设计 04 调试方法
51单片机的智能循迹小车
1
智能循迹小车是一种自动 控制系统,能够沿着指定
的路径进行运动
2
基于51单片机的智能循迹 小车是一种使用51单片机 作为主控制器的智能循迹
小车
3
下面将详细介绍基于51单 片机的智能循迹小车的原 理、硬件组成、软件设计
4
调试方法
调试方法
基于51单片机的智能循迹小车的调试方法主要包括以下几个步骤
硬件调试:检查硬件连接是否正确,确保电源、传感器、电机驱动模块等设备 能够正常工作
软件调试:通过调试器或仿真器对程序进行调试,检查程序是否存在语法错误 或逻辑错误
实际环境测试:将调试好的程序下载到单片机中,然后在实际环境中进行测试 。观察小车的运动情况,如果存在偏差或问题,需要对程序进行调整和优化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的巡线小车
杭州电子科技大学信息工程学院二分院科技创新大赛
技术报告
作品名称:基于51单片机的巡线小车
参赛队伍:WALLE
参赛队员:周先军
吴添恒
南畅
目录
第一章设计思路以及技术方案 (2)
第二章技术要求 (3)
第三章系统方案比较与论证 (4)
第四章系统电路设计 (6)
第五章系统硬件设计 (8)
第六章系统软件设计 (9)
第七章测试方法与数据 (12)
第八章结论 (13)
第一章、设计思路以及技术方案
智能寻机器人之所以能够寻迹,主要需要三个模块完成。
信号采集模块、控制模块、驱动模块。
通过信号采集系统将实际路径信号采集以电信号的形式传递给控制系统,控制系统将采集来的信号进行比较分析计算,并给出判断驱动驱动模块,控制小车前进。
基于51单片机的小车迅疾系统,该系统采用四组高灵敏度的光点对管,对路面黑色轨迹进行检测,并利用单片机产生的PWM波,控制两个独立的电机分别以合适的速度转动,使得小车能沿着轨迹前进。
第二章. 技术要求
小车循迹路线为白底黑线KT跑道,轨迹与底板用黑白两色区分。
小车能正确的识别其中的黑线,并由STC89C52RC单片机控制处理,驱动两个直流电机转动,使得小车能沿着正确的路径行进。
第三章、系统方案比较与论证
整个电路系统分为检测、控制、驱动三个模块。
首先利用关电对管度路面信号进行检测,通过比较器处理之后,送给控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。
系统方案如图
该智能小车在画有黑线的白纸“路面“上行驶,由于黑线和白纸对光线的反射系数不同,课根据接收的反射光的强度来判断黑线。
用红外检测综合比较是最佳的方案。
ST 系列的集成红外谈都价格便宜、体积小、使用方便、用途广泛,系统最终选择了ST168反射传感器作
为红外的发射和接收器件,其原理图如下:
ST168采用高发射功率红外光、电二极管和灵敏的光点晶体管组成。
采集距离很小。
实践检测时加上5V电压时,最佳的检测距离为10mm-15mm.因此在架车时要充分考虑ST168的检测距离,合理设好高度高度。
采用如图的方案将4个光点传感器一字排列。
两个个点击分别设置在小车的后方,前面用个万向轮导向。
通过电子差速控制。
单片机IO口输出的信号无法直接驱动电机转动,因此需要驱动模块来驱动电机。
为了简化电路,小车驱动模块采用了两块ULN2003
并联组成的驱动电路驱动直流电机转动。
直流电机外接齿轮减速器,增大扭力,让小车能顺利前进。
第四章、系统电路设计
1,检测模块
基于ST168光点传感器的检测电路
2,系统控制模块
基于STC89C52单片机的控制电路
信号比较电路
3,驱动模块
ULN2003驱动电路
第五章系统硬件设计
鉴于小车的制作成本和效率等因素,本小车采用了4节5号电池串联供电。
6V直接供电电机,驱动小车前进;4.5V供给51单片机,控制小车运行。
采样电压有4.5V和6V两个选择,经过对比测试,6V 供电能使小车采集的信号更稳定。
直流电机和减速器制作比较麻烦,这里采用网购这样套件。
用薄木板坐车身钻孔固定各种部件模块。
两个驱动轮放置小车后方,前部用外向轮协助转向,提高稳定性。
最后测试时网购买了来的轮子轮胎与路面摩擦不够,打滑严重,我们采用了网球拍的防滑带用双面胶贴在轮胎上增大摩擦。
第六章、系统软件设计
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define s1 0
#define s0 1
sbit dj0=P2^4;
sbit dj1=P2^5;
sbit qy0=P1^0;
sbit qy1=P1^1;
sbit qy2=P1^2;
sbit qy3=P1^3;
void delayus(uchar n)
{
while(n--);
}
void init() {
P1=0x00;
dj0=dj1=0;
}
void main()
{
init();
while(1)
{
while(qy0==1&&qy1==0&&qy2==0&&qy3==0)
{
dj0=1;
delayus(20);
dj0=0;
delayus(20);
}
while(qy0==0&&qy1==1&&qy2==0&&qy3==0)
{
dj1=1;
delayus(20);
dj1=0;
delayus(20);
}
while(qy0==1&&qy1==1&&qy2==1&&qy3==1) //全白,冲出轨道了
{
dj0=dj1=0;
}
while(qy0==0&&qy1==0&&qy2==0&&qy3==0) //全黑,跑到交叉路口
{
dj0=dj1=1;
}
while(qy0==1&&qy1==0&&qy2==0&&qy3==1) //
{
dj0=dj1=1;
}
while(qy0==1&&qy1==0&&qy2==1&&qy3==1)
{
dj0=1;
delayus(10);
dj0=0;
delayus(2);
}
while(qy0==0&&qy1==0&&qy2==1&&qy3==1)
{
dj0=1;
delayus(10);
dj0=0;
delayus(10);
}
while(qy0==0&&qy1==1&&qy2==1&&qy3==1)
{
// dj0=1;
// delayus(0);
dj0=0;
// delayus(2);
}
while(qy0==1&&qy1==1&&qy2==0&&qy3==1)
{
dj1=1;
delayus(10);
dj1=0;
delayus(2);
}
while(qy0==1&&qy1==1&&qy2==0&&qy3==0)
{
dj1=1;
delayus(10);
dj1=0;
delayus(10);
}
while(qy0==1&&qy1==1&&qy2==1&&qy3==0)
{
// dj1=1;
// delayus(10);
dj1=0;
// delayus(2);
}
}
}
第七章、测试方法与数据
在确定方案后,我们首先对各模块电路进行测试。
单片机最小系统、信号采集模块、电机驱动模块。
再确定各电路正常后,我们用单片机开发板模拟各电路,用LED灯检查程序运行情况。
硬件软件均测试成功后才将各电路组装,架车调试。
最后将小车放在实际跑道中进行实际测试,根据实际情况调整部分参数,使得小车以最佳的状态巡线前进。
第八章、结论
基于51内核的STC89C52RC单片机是电子设计入门级别的单片机,学习51单片机能很好的提高自己的C语言编程能力,为以后学习更高级的控制系统打下基础。
51单片配合一些简单的电路能制作出很多很实用的电子作品,例如:无线红外控制器、数字万年历、电子闹钟。
本51巡线小车,设计方式简单,电路可靠性高,程序简单。
适合初学者学习自动控制思想,能为参加飞思卡尔智能车打好基础。