基于51单片机的循迹小车
一.电机驱动,要想循迹,得先把它驱动起来。
1.电机模块原理图:前轮是驱动轮,所以两个电机接两个驱动轮,采用的是YL-86电机。
2.电机接线图:用杜邦线接好线,接通VCC,GND模块电源指示灯亮
IA1输入高电平,IB1输入低电平,【0A1 0B1】电机正转;IA1输入低电平,IB1输入高电平,【OA1 0B1】电机反转;IA2输入高电平,IB2输入低电平,【OA20B2】电机正转;IA2输入低电平,IB2输入高电平,【0A2 0B2】电机反转;
这里看起来是不是巨复杂的样子,其实不是,简而言之,就是电机的驱动由两个引脚控制,一正一反就能让它动起来。
3.驱动代码,话不多说,咱们还是来看代码叭
主要是写了几个函数封装起来,实现正转和反转用来测试的。
#include<reg52.h>
sbit r1=P1^0;
sbit r2=P1^1;
sbit l1=P1^2;
sbit l2=P1^3;
sbit in_1=P1^4;
sbit in_2=P1^5;
void left();
void right();
void go();
void stop();
void left() //右轮不动,驱动左轮
{
l1=0;
l2=0;
r1=0;
r2=1;
}
void right() //左轮不动,驱动右轮
{
l1=0;
l2=1;
r1=0;
r2=0;
}
void go()//两个轮顺时针转动,往前走
{
l1=0;
l2=1;
r1=0;
r2=1;
}
void stop()
{
l1=0;
l2=0;
r1=0;
r2=0;
}
void main()
{
while(1)
{
go();
}
}
二.实现循迹,主要是用的YL-70避障模块
1.此模块是为智能小车、机器人等自动化机械装置提供一种多用途的红外线探测系统的解决方案:该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围2~60cm,工作电压为3.3V-5V。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避障小车、流水线计数及黑白线循迹等众多场合。
2.接线方式
红外探头VCC GND OUT对应接入中控板VCC GND INx。
中控板供电:模块6p排针接口处VCC外接3.3V-5V电压(可以直接与5v单片机和3.3v单片机相连); GND外接GND ; OUT1-OUT4接单片机I0口。
3.测试方式
可以用白纸挡着,这个时候,主控板的led灯会亮起,而移开之后,led灯会熄灭,然后通过检测单片机引脚的高低电平就好了。
4.代码
#include<reg52.h>
sbit r1=P1^0;
sbit r2=P1^1;
sbit l1=P1^2;
sbit l2=P1^3;
sbit in_1=P1^4;
sbit in_2=P1^5;
void left();
void right();
void go();
void stop();
void left()
{
l1=0;
l2=0;
r1=0;
r2=1;
}
void right()
{
l1=0;
l2=1;
r1=0;
r2=0;
}
void go()
{
l1=0;
l2=1;
r1=0;
r2=1;
}
void stop()
{
l1=0;
l2=0;
r1=0;
r2=0;
}
void main()
{
while(1)
{
if(in_1==0&&in_2==0)
go();
else if(in_1==1&&in_2==0)
right();
else if(in_1==0&&in_2==1)
left();
else
stop();
}
}