基于STC89C52RC单片机制作的红外循迹小车(4个传感器)
单片机:基于STC89C52RC单片机制作的红外循迹小车(4个传感器)
个人感觉红外循迹小车和那些遥控小车的区别就是信号发射不同:遥控小车是通过遥控器发出信号执行相应的动作,而红外循迹是通过红外传感器检测不同颜色来执行相应的操作,本例是以白底黑线为例。
小车跑道是恩智浦跑道,边缘是五厘米宽的黑线,用于检测识别,由于明年要参加第十五届恩智浦,所以先从51学起
我们先来看看小车所用的材料(硬件部分):
1.小车车壳是亚克力板材质,(后来发现很容易裂开,还不如用块木板)。
2.红外传感器:该传感器对环境光线适应能力强,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,绿色指示灯会亮起,可调节灵敏度,干扰小,可采用3-5V直流电源供电。两边各两个,根据检测的黑白色来执行前进,后退,停止。
连接方式:VCC-VCC,GND-GND,OUT-IO
3.驱动:驱动选用L298N,用L298N驱动模块驱动两个直流减速电机。引脚A,B可用于PWM控制。如果直行前进,则可将IN1,IN2和IN3,IN4两对引脚分别接高电平和低电平,仅用单片机的两个端口给出PWM信号控制使能端A,B即可实现直行,转弯,加减速等动作。
接线:ENA,ENB(使能端)——IO
IN1,IN2,IN3,IN4——IO
两侧端口分别连接电机引脚。
4.电池:电池采用的是3000mAh,11.1v的锂电池,
5.使用STC98C52RC芯片,本来自己焊了一个51最小系统,感觉调试的时候比较麻烦,所以用的现成的,取放芯片也方便。
6.前面加了舵机和超声波避障,结果发现没多大用,循迹就可以完成,我就暂且没用它。后面加了两个尾灯,通电后常亮。
我们来看一下整体布局(个人感觉不太好,线有点多,只简单用扎带扎起来)
我们来看看软件部分:
通过控制左右电机运动状态来控制小车。
1.定义正反转和占空比:
void Motor_left(bit ReverOrCoro,uchar DutyCycle) //正反转 占空比
{if(ReverOrCoro == 1){IN1=1;if(cnt <= DutyCycle){IN2=0;}else{IN2=1;}}else{IN2=1;if(cnt <= DutyCycle){IN1=0;}else{IN1=1;}}
}void Motor_right(bit ReverOrCoro,uchar DutyCycle) //正反转 占空比
{if(ReverOrCoro == 1){IN3=1;if(cnt <= DutyCycle){IN4=0;}else{IN4=1;}}else{IN4=1;if(cnt <= DutyCycle){IN3=0;}else{IN3=1;}}
}
2选择定时器:
void init() //定时器T1工作方式1
{TMOD=0x10;TH1 = 0xff;TL1 = 0x9c;EA=1;ET1=1;TR1=1;
}
3.中断:
void InterruptTime0() interrupt 3
{TH1=0xff;TL1=0x9c;cnt++;if(cnt>=220){cnt=0;}
}
4.前进,左转,右转(因为没有障碍区,所以没有写后退函数,当然写的话也挺简单)
void qianjin() //前进
{Motor_left(1,80);Motor_right(1,80);
}void turn_left() //左转
{Motor_left(1,70);Motor_right(0,30);
}void turn_right() //右转
{Motor_left(0,30);Motor_right(1,70);
}
5.四个传感器判断前进或转向(这个我先注释了,后面还有两个传感器函数,参见6)
/*void xunji() //四个传感器
{uchar flag;if((rsen1==0)&&(lsen1==0)||(rsen2==0)&&(lsen2==0)){flag=0;}elseif((rsen1==1)&&(lsen1==0)||(rsen2==1)&&(lsen2==0)){flag=1;}elseif((rsen1==0)&&(lsen1==1)||(rsen2==0)&&(lsen2==1)){flag=2;}
*/
6.两个传感器判断状态
void xunji() //两个传感器
{uchar flag;if((rsen1==0)&&(lsen1==0)){flag=0;}elseif((rsen1==1)&&(lsen1==0)){flag=1;}elseif((rsen1==0)&&(lsen1==1)){flag=2;}
7.通过信号短检测到的三种情况来执行不同状态函数
switch(flag){case 0:qianjin();break;case 1:turn_right();break;case 2:turn_left();break;default:break;}
8.主函数
void main()
{init();while(1){xunji();}
}
9.最后给大家看一下全程序(调速还不是很好,转弯有点卡顿,还请大神多多指教qq:1534066323)
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned charsbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit ENA=P1^4;
sbit ENB=P1^5;sbit lsen1=P2^0;
sbit rsen1=P2^1;
/*
sbit lsen2=P2^2;
sbit rsen2=P2^3;
*/void Motor_right(); //声明函数
void Motor_left();uchar ReverOrCoro;
uchar cnt=0;/*void delayms(uchar xms)
{int x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);
}*/void Motor_left(bit ReverOrCoro,uchar DutyCycle) //正反转 占空比
{if(ReverOrCoro == 1){IN1=1;if(cnt <= DutyCycle){IN2=0;}else{IN2=1;}}else{IN2=1;if(cnt <= DutyCycle){IN1=0;}else{IN1=1;}}
}void Motor_right(bit ReverOrCoro,uchar DutyCycle) //正反转 占空比
{if(ReverOrCoro == 1){IN3=1;if(cnt <= DutyCycle){IN4=0;}else{IN4=1;}}else{IN4=1;if(cnt <= DutyCycle){IN3=0;}else{IN3=1;}}
}void init() //定时器T1工作方式1
{TMOD=0x10;TH1 = 0xff;TL1 = 0x9c;EA=1; //打开总中断ET1=1;TR1=1;
}void InterruptTime0() interrupt 3
{TH1=0xff;TL1=0x9c;cnt++;if(cnt>=220){cnt=0;}
}void qianjin()
{Motor_left(1,80);Motor_right(1,80);
}void turn_left()
{Motor_left(1,70);Motor_right(0,30);
}void turn_right()
{Motor_left(0,30);Motor_right(1,70);
}/*void xunji() //四个传感器
{uchar flag;if((rsen1==0)&&(lsen1==0)||(rsen2==0)&&(lsen2==0)){flag=0;}elseif((rsen1==1)&&(lsen1==0)||(rsen2==1)&&(lsen2==0)){flag=1;}elseif((rsen1==0)&&(lsen1==1)||(rsen2==0)&&(lsen2==1)){flag=2;}
*/void xunji() //两个传感器
{uchar flag;if((rsen1==0)&&(lsen1==0)){flag=0;}elseif((rsen1==1)&&(lsen1==0)){flag=1;}elseif((rsen1==0)&&(lsen1==1)){flag=2;}switch(flag){case 0:qianjin();break;case 1:turn_right();break;case 2:turn_left();break;default:break;}}void main()
{init();while(1){xunji();}
}
基于STC89C52RC单片机制作的红外循迹小车(4个传感器)相关推荐
- 51单片机-蓝牙遥控红外循迹小车-代码+硬件连接
2021/04/28-更新工具的连接 ----------------------------------------- 前几天弄了个基于51芯片的蓝牙红外小车,因为是新手也没有人教,网上的资料也不够 ...
- Micropython教程之TPYBoard制作蓝牙+红外循迹小车
1.实验目的 学习在PC机系统中扩展简单I/O接口的方法. 进一步学习编制数据输出程序的设计方法. 学习蓝牙模块的接线方法及其工作原理. 学习L298N电机驱动板模块的接线方法. 学习蓝牙控制小车的工 ...
- 基于STC89c52rc单片机的红外循迹小车
循迹小车 由于要准备明年的恩智浦飞思卡尔智能车比赛,飞思卡尔智能车用的是K60系列的单片机,以我目前的阶段来说还处于学习阶段,所以先试着用51单片机做一个智能循迹小车.学习一下小车硬件以及软件程序,这 ...
- 红外循迹小车简单实现
红外循迹小车简单实现 这是第一次写博客来记录第一次成功的简单小项目,希望在记录自己学习过程时也能帮助到和我一样正在入坑的小白. 硬件篇 首先,我们要实现一个小车能够在我们的控制下前进.转向.后退等等, ...
- 基于STM32,TB6612,TCRT5000的简易红外循迹小车
提醒:本文章只叙述此小车相关大概内容(如模块的设置,C语言基础实现等),单片机详细教学不涉及. 摘要 循迹小车是学习单片机的"地基",它能够让初学者认识单片机内部硬 ...
- 智行小车(基于51单片机)——避障+循迹+停
讲道理,这辆小车是我们参加校赛所制作的,在这次的小车制作过程之中存在的很多的不足和时间的浪费情况. 队员的选择和分工也都存在着一定的问题(这应该是我最头疼的问题) 但是总得来说还算是取得了一个不错的结 ...
- 以51单片机为基础的自动循迹小车
51单片机自动循迹小车 #include<reg52.h>sbit IN1=P1^2; //左电机正转 sbit IN2=P1^3; //左电机反转 sbit IN3=P1^6; //右电 ...
- 基于51单片机的红外循迹小车
在前面(废话):金沙滩的板子入门51单片机,有幸见过学长的各种小车视频,亿点点羡慕,于是在期末考试前计划寒假上手尝试,刚好学校社团又有比赛 材料: 小车套件(包含底盘,轮子,减速电机,若干铜柱螺丝螺帽 ...
- 基于MSP432控制的红外循迹爬坡小车设计报告
基于MSP432控制的红外循迹爬坡小车设计报告 竞赛选题:坡道行驶电动小车(C题) 摘要 本小车基于TI的MSP432平台,设计了可以沿指定路线在坡道上循迹行驶的四轮小车.小车采用L298N驱动芯片控 ...
最新文章
- 835 由于安全层无法对远程计算机进行身份验证_干货 | 看黑客都是这样远程桌面安全设置...
- 深度学习100例-卷积神经网络(CNN)实现mnist手写数字识别 | 第1天
- C语言-求字符串长度-strlen()与sizeof()
- linux操作mysql的语法_MySQL数据库的基本操作命令
- JVM中GC Root对象有哪些?
- 【内容管理系统】之 Strapi
- 使用app-inspector时报错connect ECONNREFUSED 127.0.0.1:8001的解决方案
- ASP.NET开发51种常用代码
- UVA11752 The Super Powers —— 数论、枚举技巧
- ubuntu20.04【一键脚本安装wps并配置字体】
- bu zhi dao yao zen me zuo
- 计算机专业的情书,【实用】大学各专业表白情书,你能看懂几个
- git上传详细步骤和提交代码的各种报错解决方式.
- 【论文泛读171】具有对抗性扰动的自监督对比学习,用于鲁棒的预训练语言模型
- mysql——时间显示格式 dateformat函数
- 【HTML】Angular JS + Table 根据数据动态合并单元格
- 多边形(n边形)面积计算公式hdu2036
- 找不到位于wsd扫描的计算机,在基于 Windows 的计算机上单击新扫描 Windows 传真和扫描时出现错误消息...
- TcaplusDBX光与夜之恋 | 与众不同的真实恋爱
- SQL Server 2012 最新技术 PowerView 让你的业务会说话 [上篇]
热门文章
- Golang单元测试快速上手(三) 高级技巧
- C13:Unity3D制作智能家居设计软件——定制系统
- 钉钉 api 的 Nginx 代理配置
- 使用DQL命令查询数据(总篇1~3)
- BZOJ2152 聪聪可可(点分治)
- 微信读书从本地导入书籍失败
- 左手坐标系和右手坐标系(以及右手定则左手定则)
- 杨宁反思创业痛点:没有将项目和公司坚持下去
- AUTOSAR实战教程 - 通信协议栈CAN_CANIF_PDUR_CANTP_COM_XCP_ECUC配置一网打尽
- 考研数据结构算法题总结