51单片机循迹小车
一、前言
因为自己对编程十分热爱,同时为了夯实竞赛班和大创项目的基础,我自学了51单片机,为了检验自己的学习成果,我制作了简易的寻迹小车。
二、相关硬件
-
芯片为STC89C52RC
-
稳压模块
由于电池选择的是18650锂电池,过放会导致电池永久损坏,就选择了带有示数的稳压模块;将电池盒的两根线接入VIN即可(注意正负极),利用螺丝刀旋转螺丝即可调压。
-
电机驱动模块L298N
非常常用的电机驱动模块,由稳压引出线给电机驱动供电,电机驱动自带5V调压引出线给单片机供电,注意要共地;逻辑输入后电机工作情况如下:
-
四路循迹模块
在装上小车前,调整好检测距离,当发射红外线遇到白色则会反射回来,输出低电平,同时主板上对应的灯亮起;遇到黑色会被吸收,输出高电平,同时主板上对应的灯熄灭。
- 最后组装好的成品
三、软件实现
代码如下:
#include <reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit right_ENA=P1^0; //小车右侧电机驱动
sbit right_ENB=P1^5;
sbit right_IN1=P1^1;
sbit right_IN2=P1^2;
sbit right_IN3=P1^3;
sbit right_IN4=P1^4;
sbit left_ENA=P0^0; //小车左侧电机驱动
sbit left_ENB=P0^5;
sbit left_IN3=P0^1;
sbit left_IN4=P0^2;
sbit left_IN1=P0^3;
sbit left_IN2=P0^4;
sbit left1=P2^4; //四路红外
sbit left2=P2^3;
sbit right2=P2^2;
sbit right1=P2^1;
u8 pwm_t=0; //计时器溢出统计
u8 pwm_right_val=0; //右侧电机使能值
u8 pwm_left_val=0; //左侧电机使能值
void forward() //前进
{
right_IN1=1;
right_IN2=0;
right_IN3=1;
right_IN4=0;
left_IN1=</