循迹小车

由于要准备明年的恩智浦飞思卡尔智能车比赛,飞思卡尔智能车用的是K60系列的单片机,以我目前的阶段来说还处于学习阶段,所以先试着用51单片机做一个智能循迹小车。学习一下小车硬件以及软件程序,这也是对我前一段时间来51单片机和C语言学习的总结。
在小车的前面有一个超声波传感器和一个金属齿轮的舵机,因为想再加一个避障,但在本程序中我只实现了一个红外循迹加调速的功能,没有使用超声波传感器和舵机。
视频

循迹小车

硬件部分

**1、**车模底板我是用以前学长做过的废车模,我用热熔胶粘上去两个直流减速电机和一个万向轮。


**2、**使用的芯片是stc89c52rc,控制系统用的是51最小系统,本来想用自己焊接的最小系统,因为考虑到车模搭建好后写程序时需要多次调试就使用了现成的51最小系统,避免了stc89c52rc芯片引脚的折损。

**3、**选用的电机驱动是L298N
L298N可以控制两个电机,而且还具有降压的功能,可以将12V的电降成5V来给最小系统供电。如果使用tb6612电机驱动或没有降压功能的电机驱动,则需要接稳压模块。
L298N上有6个信号端口,其中有两个是控制两个电机的使能端,在本程序中没有使用使能端。类外还有四个信号端是是用来驱动两个电机正转、反转、停止的。

**4、**考虑到电机驱动在运行的时候会发热,我在电机驱动后面装了一个小风扇主要起散热的作用。

**5、**使用了4个红外传感器,两边的用来控制方向,中间放了两个主要用来上坡,上坡时用于前头会抬起来导致最前面两边的得传感器检测不到白色,这时候中间的两个传感器还会检测到白色,使小车继续前进。




**6、**电池用的是11.1v3000ma的锂电池。

**7、**因为感觉车有点丑,我在后面装了两块电路板在上面焊接了一些LED灯,最开始的构想是当小车左转时左边的灯亮,右转时右边的灯亮,前进时两边的灯亮,结果在调试程序的时候发现和电机调速的定时器有冲突,只好选择了在运行程序时所有的LED灯都给低电平,让LED灯常亮。

软件部分

转弯采用的是差速转弯,通过控制左右电机的速度来实现转弯。
**1、**左轮调速

void motor_left(bit left_core,uchar ENA)    //左电机正反转   占空比
{if(left_core==1) //left_core==1  左电机正转  小车直走{in1=1;            if(cut<=ENA){in2=0;}else{in2=1;}}else       //left_core==0  左电机反转转  小车倒退{in2=1;if(cut<=ENA){in1=0;}else{in1=1;}}
} 

**2、**右轮调速

void motor_right(bit right_core,uchar ENB)  //右电机正反转   占空比
{if(right_core==1)       //right_core==1    右电机正转   小车直走{in3=1;if(cut<=ENB){in4=0;}else{in4=1;}}else          //right_core==0    右电机反转   小车倒退{in4=1;if(cut<=ENB){in3=0;}else{in3=1;}}
}         

**3、**前进

void run()            //前进 普通速度
{motor_left(1,4);     //左电机正转    速度为4    全速为9    此时速度为全速的4/9motor_right(1,4);    //右电机正转    速度为4    全速为9    此时速度为全速的4/9
}
void run_go()         //前进 快速前进    用于上坡
{motor_left(1,5);     //左电机正转    速度为5   全速为9   此时速度为全速的5/9motor_right(1,5);    //右电机正转    速度为5    全速为9    此时速度为全速的5/9
}

左右转弯通过控制两边的转速来达到转弯的目的
**4、**左转

void turn_left()      //前左转函数    左右电机都正转   但各自的转速不同实现转弯
{motor_left(1,9);     //左电机正转    速度为9    全速为9   此时速度为全速的9/9motor_right(1,2);    //右电机正转    速度为2    全速为9    此时速度为全速的2/9
}               

**5、**右转

void turn_right()     //前右转函数     左右电机都正转   但各自的转速不同实现转弯
{motor_left(1,2);     //左电机正转    速度为2    全速为9    此时速度为全速的2/9motor_right(1,9);    //右电机正转    速度为9    全速为9    此时速度为全速的9/9
}                

**6、**停止 电机驱动上控制两个电机的I/O口都置高电平

void stop()         //停止函数    全部置高电平急停
{in1=1;in2=1;in3=1;in4=1;
}                   

好了话不多说我们来看看所有的程序吧

#include<reg52.h>//头文件
#define uint unsigned int//宏定义无符号整型变量  uint
#define uchar unsigned char//宏定义无符号字符型变量  uchar//电机驱动引脚定义
sbit in1=P3^2;   //右电机in1引脚定义
sbit in2=P3^3;   //右电机in2引脚定义
sbit in3=P3^4;   //左电机in3引脚定义
sbit in4=P3^5;   //左电机in4引脚定义
uint cut=0;     //定义整型变量cut   在定时器中装数sbit red_left=P0^0;     //左边红外传感器    检测到黑线高电平   小车向右转
sbit red_right=P2^1;    //右边红外传感器    检测到黑线高电平   小车向左转
sbit red_goA=P0^1; //中间共有两个红外传感器    主要用于上坡(由于该车是三轮,前边有个万向轮,
sbit red_goB=P0^2; //上陡坡时头会翘起来,导致最前面左右两边的红外传感器检测不到白色,此时使用中间两个传感器
sbit led1=P2^0;   //LED灯装饰
sbit led2=P2^2;   //LED灯装饰void motor_left(bit left_core,uchar ENA)      //左电机正反转   占空比
{if(left_core==1)      //left_core==1  左电机正转  小车直走{in1=1;            if(cut<=ENA){in2=0;}else{in2=1;}}else          //left_core==0  左电机反转  小车倒退{in2=1;if(cut<=ENA){in1=0;}else{in1=1;}}
} void motor_right(bit right_core,uchar ENB)        //右电机正反转   占空比
{if(right_core==1)       //right_core==1    右电机正转   小车直走{in3=1;if(cut<=ENB){in4=0;}else{in4=1;}}else         //right_core==0    右电机反转   小车倒退{in4=1;if(cut<=ENB){in3=0;}else{in3=1;}}
}
void run()             //前进 普通速度
{motor_left(1,4);      //左电机正转    速度为4    全速为9    此时速度为全速的4/9motor_right(1,4);     //右电机正转    速度为4    全速为9    此时速度为全速的4/9
}
void run_go()          //前进 快速前进    用于上坡
{motor_left(1,5);      //左电机正转    速度为5   全速为9   此时速度为全速的5/9motor_right(1,5);     //右电机正转    速度为5    全速为9    此时速度为全速的5/9
}
void stop()            //停止函数    全部置高电平急停
{in1=1;in2=1;in3=1;in4=1;
}
void turn_left()       //前左转函数    左右电机都正转   但各自的转速不同实现转弯
{motor_left(1,9);      //左电机正转    速度为9    全速为9   此时速度为全速的9/9motor_right(1,2);     //右电机正转    速度为2    全速为9    此时速度为全速的2/9
}
void turn_right()      //前右转函数     左右电机都正转   但各自的转速不同实现转弯
{motor_left(1,2);      //左电机正转    速度为2    全速为9    此时速度为全速的2/9motor_right(1,9);     //右电机正转    速度为9    全速为9    此时速度为全速的9/9
}         void Init()          //定时器1工作方式1
{TMOD=0x10;          //定时器1选择工作方式1TH1=0xff;           //计数器初始值设置TL1=0x9c;             EA=1;               //打开总中断ET1=1;              //定时器1的中断允许位TR1=1;              //打开定时器1
}void main()
{led1=0;       //led1低电平亮led2=0;       //led2低电平亮Init();       //中断初始化while(1){  if(!red_left&&!red_right&&!red_goA&&!red_goB)   //判断四个传感器都检测到白色  前进{run();       //前进普通速度   为全速的4/9}else          //否则   四个传感器中有检测到黑色{   if(red_left)    //左边传感器检测到黑色{turn_right();  //右转}else           //否则   右边传感器检测到黑色{turn_left();   //左转}}if(red_left&&red_right&&!red_goA&&!red_goB)   //左右两边的传感器检测到黑色(识别不到白色)中间为白{run_go();     //快速前进   速度为全速的5/9  用于上坡}if(red_left&&red_right&&red_goA&&red_goB)    //如果所有的传感器都识别到黑色(识别不到白色){stop();       //停止}}
}
void InterruptTime1() interrupt 3       //中断服务函数
{TH1=0xff;       //设置初始值TL1=0x9c;cut++;if(cut>=10)     //当cut的值大于等于10时{cut=0;         //cut清零}
}

总结

在这次做51小车时最重要的是调试程序,因为对于不同的弯道,小车行驶的速度会在转弯时影响红外传感器能不能检测到黑色,速度过快会使是小车冲出赛道,所以需要不停的修改参数进行调速。
再就是对于红外传感器的灵敏度的调试,不同的高度灵敏度不同需要进行不断地调试找最合适的灵敏度,使小车灵敏的检测到黑色。

基于STC89c52rc单片机的红外循迹小车相关推荐

  1. 基于51单片机的红外循迹小车

    在前面(废话):金沙滩的板子入门51单片机,有幸见过学长的各种小车视频,亿点点羡慕,于是在期末考试前计划寒假上手尝试,刚好学校社团又有比赛 材料: 小车套件(包含底盘,轮子,减速电机,若干铜柱螺丝螺帽 ...

  2. 基于51单片机的红外循迹模块

    目录 循迹模块介绍及原理 部分程序 结合小车的全部程序 循迹模块介绍及原理 这里使用的四路循迹模块 部分端口介绍 主板的OUT1-4端分别连接单片机的IO口,用于检测输出电平 主板另一排针侧的VCC ...

  3. 基于51单片机实现红外循迹

    红外循迹外观: 红外循迹原理:         红外循迹模块原理还是很简单的,和许多光电传感器原理一样,当发射器发射出去的光被接收器接收到后,模块上对应的LED灯点亮,此时相应的输出引脚输出低电平:如 ...

  4. 基于STC89C52RC单片机制作的红外循迹小车(4个传感器)

    单片机:基于STC89C52RC单片机制作的红外循迹小车(4个传感器) 个人感觉红外循迹小车和那些遥控小车的区别就是信号发射不同:遥控小车是通过遥控器发出信号执行相应的动作,而红外循迹是通过红外传感器 ...

  5. 基于MSP432控制的红外循迹爬坡小车设计报告

    基于MSP432控制的红外循迹爬坡小车设计报告 竞赛选题:坡道行驶电动小车(C题) 摘要 本小车基于TI的MSP432平台,设计了可以沿指定路线在坡道上循迹行驶的四轮小车.小车采用L298N驱动芯片控 ...

  6. 【电路】基于单片机智能睡眠枕系统设计-基于单片机音乐喷泉制作设计-基于单片机智能温控风扇调速系统设计-基于单片机智能自动循迹小车控制系统设计-基于数字电路的4人投票系统设计(仿真,报告)毕设课设资料

    1620基于单片机智能睡眠枕系统设计-文档+PPT+PCB图+原理图+源码 智能睡眠枕主要由lcd屏幕.蓝牙.压力传感器.蜂鸣器.单片机等等组成,用户可通过四个独立按键进行操控(四个按键从左至右为1. ...

  7. 【C51开发应用】基于C51单片机开发的循迹灭火机器人

    基于C51单片机开发的循迹灭火机器人 一.作品摘要 二.系统设计步骤 三.方案设计 3.1   小车主体设计 3.1.1   购买玩具小车进行改装 3.1.2   自己设计小车主体结构 3.2   电 ...

  8. 基于arduino的5路循迹小车(2)

    基于arduino的5路循迹小车(2) 小车5路红外循线 接第一篇链接 https://blog.csdn.net/weixin_45984029/article/details/103437347 ...

  9. 基于arduino的5路循迹小车(4)与舵机控制板的通信控制

    基于arduino的5路循迹小车(4) arduino与舵机控制板的通信控制 以及语音播报模块 接第一篇链接 https://blog.csdn.net/weixin_45984029/article ...

最新文章

  1. go map并发写错误问题
  2. idea升级2019.3后字体有的粗有的细
  3. Git笔记(37) 替换
  4. OSI参考模型和TCP/IP参考模型-详解
  5. 对话框获取目录、文件路径
  6. python 获取点击按钮名称_python如何获取tkinter组件的名称?比如按下多个Button中的一个,返回这个被按下的Button的text?...
  7. CSS实现输入框的高亮效果-------Day50
  8. python将pdf中的每一页转化为图片保存
  9. 《Expert C Programming》(C专家编程)读书笔记
  10. 格式工厂 vtt字幕 加入视频
  11. JAVA面向对象(OOP)-class 类
  12. 电脑上的准考证怎样保存电子版
  13. this 指向详细解析(箭头函数)
  14. 51SCM_AD模块CS5550学习心得
  15. 《大唐姻缘传》(李治篇) 第一章 天妒人眷 皇限将至
  16. chart.js使用学习——柱状图(1:基本用法)
  17. 码农的自我修养 - ARM V9架构的巨大价值
  18. 用python打印购物小票和证书
  19. Stewart平台运动学
  20. oracle银行勾兑,鸿富兴企业银行对账系统

热门文章

  1. 多屏控制处理器双屏显示卡边缘融合视频叠加与大屏幕投影效果[转]
  2. 联诚发LED屏新品发布会圆满成功,龙艺系列舞美租赁屏精彩亮相
  3. 研发部门管理的三驾马车
  4. Flutter 3.0正式发布:稳定支持6大平台,字节跳动是主要用户
  5. 内部招聘系统开发心得
  6. 使用 mulan-1.5.0 如何构造.arff文件
  7. Springmvc简单入门
  8. access 战地1不加入ea_《战地5》即日起加入EA Access免费阵容
  9. 如何创建完美的Facebook封面照片
  10. ADRC参数整定以及在模型上的实际应用