前言
如今已经大三了,现阶段很少参加比赛了,因为马上就要考研了,这个红外循迹小车是大二参加学校的一个循迹车大赛的参赛作品,虽说是循迹车但和人家正规的恩智浦循迹车大赛还差的挺远。由于新型冠状病毒的影响,现在哪都不能去,只能待在家里,所以闲来无事总结一下,毕竟那个循迹车亲手制作的,并且拿了奖。
原理
大概介绍一下这循迹车的工作原理,比赛规则以及工作环境。
比赛环境:首先跑到为白色跑道,跑道中间用黑色胶带贴出一条轨迹,然后小车会按照黑胶带的轨迹去跑。
比赛规则:最短时间内跑完赛道的小车获胜,附加要求:小车在一圈结束后会自动刹车。
工作原理:在小车车头前方安装一排(7个)红外对管,用来检测跑道的黑胶带,通过7个红外对管返回的不同数值,通过51处理后,然后去控制小车的运动方向。从而实现循迹的功能。
材料
电路原理图
原理图简介
从上面原理图可以看出小车基本由6部分组成
1、循迹模块:7个红外对管,外加信号处理电路,用来检测赛道黑胶带轨迹,从而将信息返回给单片机。
2、舵机模块:型号忘了,淘宝上最便宜的舵机,可控角0-180
3、主控模块:采用STC89C52单片机最小系统作为主控,用来控制小车姿态
4、驱动模块:采用L298N电机驱动芯片来驱动电机 正反转
5、稳压模块:给51提供稳定的工作电压
6、刹车模块:利用干簧管检测赛道终点的磁铁,从而将赛车制动
程序
由于程序直接从keil4工程上复制过来,可能由于编码问题,程序中的中文注释全是乱码,代码后面我附上编译环境的代码图片吧,想看注释可以查看图片。
/**********************???**************************/
#include <reg52.H>
sbit pwm=P2^0; // ???pwm????
sbit IN1=P3^2; // ???????
sbit ENA=P3^3; //
sbit IN2=P3^4; // ???????
sbit Ghg=P2^4; // ????
unsigned int GH,GL,DH,DL,zgg,zgd,zdg,zdd,a,b,c=1310,d; //GH???????????λ
/*****************??????? 1ms******************/
void delay(unsigned int ms)
{
while(ms--);
}
/********************???????********************/
void timer1() interrupt 1 using 0 //?ж?1 T0????ж?
{
pwm=!pwm;
if(pwm==0)
{
pwm=0;
TH0=DH;
TL0=DL;
}
else
{
pwm=1;
TH0=GH;
TL0=GL;
}
}
/*********?ж????2****????????????*********/
void timer2() interrupt 3 using 3 //?ж?3 T1????ж????ù?????3
{
IN1=!IN1; // ??????
if(IN1==0)
{
IN1=0;
TH1=zdg; //??????????λ
TL1=z