51单片机寻迹小车

article/2025/8/4 4:50:19

# 基于51单片机的循迹小车(详细讲解+源码)

作为一名学生,这里我就简单谈谈我们小组做这个循迹小车的一个过程。主要是实现小车寻黑线行驶的这样一个功能,速度可以调节(定时器中断模拟PWM波实现)

一丶硬件部分

小车的主体框架是一个三轮的外在形态

电源:采用2S可充电锂电池作为主电源供给(主要是给驱动供电)

传感器:采用灰度传感器(2个)
灰度传感器工作原理很简单,下面有介绍。它和单片机之间的联系体现在:两个灰度传感器的信号输出端DO 分别接单片机的两个引脚,根据它们检测到的值的不同情况(即0,1两种取值,两两组合共4种情况)进而确定小车前进的方向。

驱动:采用的是L298N芯片,一片L298N可以控制两个直流电机,进而驱动两个后轮。关于这个芯片,网上有很多的用户手册,可以去搜索查看,这里我就简单说说他的用法:前面蓝色的3插口是外接电源供电用的,左右两个蓝色的2插口是输出,连接电机,逻辑输入引脚IN1-IN4 接单片机引脚(单片机与驱动的联系也就在这,单片机控制IN1~IN4进而控制小车两个轮子的正转和反转),IN1-IN4旁边的两路输入ENA和ENB分别对应控制左右两路输出(接单片机引脚,通过定时器调节来输出PWM波,实现小车转弯)
在这里插入图片描述
在这里插入图片描述

控制系统:小车采用了51单片机最小系统,主控芯片选择的是STC89C52RC
在这里插入图片描述

另外:亚克力板(车子底板),防滑车轮x2,万向轮x1,杜邦线若干

工作原理简介

传感器:灰度传感器有两个检测灯,一个灯用于发射光,根据不同颜色的地面对光的吸收程度不同进而反射光强度肯定也不同,另一个灯则用于检测反射光的强度来判断是否检测到黑线。
若检测到黑线则输出低电平(0);信号灯熄灭;没检测到黑线则为高电平,信号灯点亮。(电源指示灯是一直亮着的)
在这里插入图片描述

二丶 工作流程

左右两个灰度传感器对地面进行检测,单片机(STC89C52)根据测量值的不同情况组合判断小车的前进方向,同时通过驱动(L298N)来控制小车的运动情况。
几点注意:
1.传感器需要外接电源供电,这里我们直接使用的51单片机的5V输出电压供电
2.驱动芯片L298N也需要外接电源,这里我们使用的2s可充电锂电池连接的芯片的12V电源输入端
3.单片机也需要外接电源供电,这里我们直接连接的L298N的5V电源供电端,因为L298N已经外接了一个12V电源,所以我们直接使用它的5V电源供电端
4.小车各个模块的连线可以参考这个视频:(引用)寻迹小车连线,所谓"拼车"
5.最终小车的图片( ‘线’ 场一片混乱 )
在这里插入图片描述

三丶源码

#include<reg52.h>																		   typedef unsigned int uint;   
typedef unsigned char uchar;uchar Duty_left,Duty_right; //左右占空比标志,取1-100
uchar i=0,j=0;
uchar flag;	 //用于循迹方向的判断//驱动L298N----> 
//ENA,ENB为使能端; ENA,1,2和ENB,3,4分别控制一个电机;
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;
sbit ENA = P1^6;
sbit ENB = P1^7;sbit left=P3^2;	//左右两个灰度传感器
sbit right=P3^3;//小车直行速度赋值
void forward_move()
{Duty_left=20;Duty_right=12;IN1=1;   	//两个电机均正转IN2=0; IN3=1;IN4=0;
}//小车停止
void stop()
{   Duty_left=0;Duty_right=0;IN1=0;IN2=0;IN3=0;IN4=0;
}//小车左转速度赋值(用于左边传感器检测到黑线)
void Left_turning()
{Duty_left=18;Duty_right=20;IN1=1;       //两个电机一个正转一个反转(或者一个正转一个不转) IN2=0;IN3=0;		  IN4=1;
}//小车右转速度赋值(用于右边传感器检测到黑线)
void Right_turning()
{Duty_left=18;Duty_right=20;IN1=0;	  IN2=1;IN3=1;	  IN4=0 ;
}//定时器0中断初始化
void timer0init()
{TMOD|=0x01;//定时器T0, 工作方式1, 16位TH0=0xff;//定时 ff9c  0.1msTL0=0x9c;EA=1;  //开启总中断ET0=1;//开启中断允许TR0=1;//开启定时器中断  
}//定时器中断服务函数
void timer0() interrupt 1
{TH0=0xff;TL0=0x9c;i++;j++;if(i<=Duty_left)//设置左轮占空比,即左轮速度ENA=1;elseENA=0;if(j<=Duty_right)ENB=1;elseENB=0;if(i==100)  //设置pwm周期=0.1ms*100=10ms,这样开头定义的变量正好表示占空比数值{i=0;//加到100后变为0,重新计数}if(j==100){j=0;}  
}//循迹模块
void xunji()
{   if((left==0)&&(right==1)){flag = 0;//左边检测到黑线}else if((left==1)&&(right==0)){flag = 1;//右边检测到黑线}else if((left==1)&&(right==1)){flag = 3; //两边都没检测到黑线}else{flag = 4;}switch(flag){case 0:  Right_turning();break;case 1:  Left_turning();break;case 3:  forward_move();break;case 4:  forward_move();break;default: forward_move();break;}
}
void main()
{timer0init();//forward_move();while(1){xunji();}
}

六丶最后

最后关于那个定时器中断模拟PWM波调速,我谈谈我的理解:
这里,小车的速度调节通过调节程序里定义的占空比变量的值(Duty_left,Duty_right)。例如,值为x就表示占空比为x%,占空比就是指一个周期内高电平持续时间占整个周期的比值,这里是调节占空比变量的值来控制EN的持续时间进而改变其速度。


http://chatgpt.dhexx.cn/article/lfB0oAXi.shtml

相关文章

【51单片机实例】智能小车(一)--------小车的前进、后退和停止

51智能小车系列 智能小车&#xff08;二&#xff09;-------- 小车的红外遥控调速 智能小车&#xff08;三&#xff09;-------- 小车的红外循迹 文章目录 前言一、硬件选择1.1 小车底盘1.2 电机1.3 51单片机最小系统板1.4 L298N双路电机驱动模块1.5 电源1.6 杜邦线 二、硬件连…

51单片机蓝牙小车(精要版)

51单片机蓝牙小车&#xff08;精要版&#xff09; 实现&#xff1a;通过手机与小车的蓝牙通信&#xff0c;实现手机控制小车前后左右的移动。 这是博主学了51单片机第一次做的单片机项目&#xff0c;选择了许多人喜欢的蓝牙小车作为第一个项目。 准备材料&#xff1a; 1.小…

51单片机项目设计:51单片机蓝牙小车制作教程,新手必做!(手机控制前后左右行走)

哔哩哔哩项目展示视频&#xff1a;https://www.bilibili.com/video/BV1Wy4y1z7a5 QQ交流群1&#xff1a;981140834 QQ交流群2&#xff1a;473982062 QQ交流群3&#xff1a;718245727 QQ交流群4&#xff1a;598455837 csdn资料链接&#xff1a;https://download.csdn.net/downl…

51单片机智能小车

最近学校举办了一个智能小车比赛&#xff0c;比赛内容为用手机蓝牙控制小车拥有5个功能&#xff0c;分别是超声波舵机避障&#xff0c;测距&#xff08;显示在LCD1602上&#xff09;&#xff0c;红外跟随&#xff0c;循迹还有蓝牙控制小车前进后退左转又转以及停止。 文章目录 …

51单片机智能循迹小车的通俗易懂讲解

. . 从上面导航图&#xff0c;我们可以看到&#xff0c;智能小车&#xff0c;共分为三步 外部检测&#xff0c;控制中心&#xff0c;轮子输出控制。 等于人的 . . 因为单片机控制中心和轮子输出控制是一样的&#xff0c;只有前面的外部检测&#xff0c;换个模块工作而已。 . …

基于51单片机四路循迹小车

文章目录 一. 任务要求二. 系统原理三. 整体方案1. 控制模块最小系统去除AD网格线 2. 电机驱动模块3. 电源模块4. 循迹模块5. 超声波测距模块 四. 车体实物图五. 软件实现 这学期开设的51单片机课程的课程设计即将验收&#xff0c;今天开始正式着手做循迹小车~ 一. 任务要求 二…

51单片机循迹小车

一.材料 1.51单片机开发板 2.L298N电机 3.红外循迹模块 4.直流电机 5.电池&#xff08;提供电源&#xff0c;选用的是三节18650锂电池&#xff09; 6.杜邦线 7.两个主动轮&#xff0c;一个万向轮 8.小车底板&#xff08;亚克力板&#xff09; 二.实现效果 使小车在两…

【51单片机实例教程】智能小车(一)让你的小车跑起来

文章目录 前言 一、硬件 1.小车底盘 2.51单片机最小系统板 3.L298N双路电机驱动板 二、仿真模拟图 三、代码部分 1.直行 2.后退 3.左转圈 4.右转圈 总结 前言 智能小车的项目非常多&#xff0c;比如说循迹避障、蓝牙遥控、视觉控制&#xff08;这一块用51单片机比较…

基于51单片机的循迹小车(初学者必备!!!)

基于51单片机的循迹小车 文章目录 基于51单片机的循迹小车 前言一、系统概述1.工作原理2.控制系统结构框图 二、循迹小车硬件1.电机驱动模块2.循迹模块 三、循迹小车软件四、源码&#xff08;仅供参考&#xff09; 前言 该小车采用单片机STC89C52作为主控制核心&#xff0c;通过…

单片机小车

*## 单片机小车 本周作为单片机新手的我制作了我的第一个作品—单片机小车 一 元件&#xff1a;1.单片机最小系统板 2.杜邦线 3.USB转TTL CH340模块STC单片机下载线刷机板USB转串口 4.智能小车配件 红外寻迹 5.智能小车51单片机套件底盘组装寻迹避障开发板编程循迹机器人配件 …

51单片机之智能小车(避障、跟随、循迹)

目录 基本概述 硬件组成 功能 关键字 模块介绍 电机模块L9110S 循迹模块&#xff08;TCRT5000传感器&#xff09; 红外避障模块 测速模块 小车 移动小车&#xff08;控制电机转动&#xff0c;使小车前进、后退、左转、右转 &#xff09; 遥控小车&#xff08; 使…

详细介绍如何从零开始制作51单片机控制的智能小车(一)———让小车动起来

从本文开始&#xff0c;在之后的一段时间里&#xff0c;我会通过本系列文章&#xff0c;详细介绍如何从零开始用51单片机去实现智能小车的控制&#xff0c;本文作为本系列的第一篇文章&#xff0c;主要介绍如何让小车动起来。 本系列文章链接&#xff1a; ------------------…

乐观锁-基于CAS原理

乐观锁理论基础 乐观锁的操作过程中其实没有没有任何锁的参与&#xff0c;乐观锁只是和悲观锁相对&#xff0c;严格的说乐观锁不能称之为锁。下面我们就通过乐观锁与悲观锁的对比来更好的理解乐观锁。 乐观锁与悲观锁的概念 乐观锁&#xff1a;总是假设最好的情况…

JAVA CAS原理深度分析

CAS CAS:Compare and Swap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。 本文先从CAS的应用说起&#xff0c;再深入原理解析。 CAS应用 CAS有3个操作数&#xff0c;内存值V&#xff0c;旧的预期值A&#xff0c;要修…

CAS原理图

主要原理 1 用户第一次访问一个CAS 服务的客户web 应用时&#xff08;访问URL &#xff1a;http://192.168.1.90:8081/web1 &#xff09;&#xff0c;部署在客户web 应用的cas AuthenticationFilter &#xff0c;会截获此请求&#xff0c;生成service 参数 2 然后redirect 到C…

java---CAS原理分析详解

目录 一、什么是CAS 二、乐观锁与悲观锁 1.乐观锁出现原因 2.乐观锁 3.乐观锁的实现机制---CAS 三、JAVA对CAS的支持 首先演示实际的操作 上述过程的内部原理(java层面) 四、CAS缺陷 1.ABA问题 解决ABA问题 2.循环时间长开销大 3.只能保证一个变量的原子操作 4.解…

AQS和CAS原理

锁机制&#xff08;AQS和CAS&#xff09; 一、AQS 1、AQS原理 AQS&#xff1a;AbstractQuenedSynchronizer抽象的队列式同步器。是除了java自带的synchronized关键字之外的锁机制。     AQS的全称为&#xff08;AbstractQueuedSynchronizer&#xff09;&#xff0c;这个类…

CAS原理解析

什么是CAS cas全称为compareAndSwap&#xff0c;可以很清楚的翻译知道意思为“比较和交换”&#xff0c;字面意思其实就已经解释了CAS的实现原理 CAS简介 从jdk5开始&#xff0c;jdk提供了java.util.concurrent.*&#xff0c;此包下面的类在高并发场景下经常使用&#xff0c;包…

搞定CAS的原理,看这一篇就够了!

一、什么是CAS&#xff1f; CAS &#xff08;compareAndSwap&#xff09;&#xff0c;中文叫比较交换&#xff0c;是一种无锁原子算法&#xff0c;映射到操作系统就是一条CPU的原子指令&#xff0c;其作用是让CPU先进行比较两个值是否相等&#xff0c;然后原子地更新某个位置的…

深入理解vue.js双向绑定的实现原理

vue.js是MVVM&#xff08;模型到视图和视图到模型&#xff09;结构的&#xff0c;同类的还有AngularJs&#xff1b;至于MVC、MVP、MVVM的比较网上已经有很多了&#xff0c;这样不再重复。这篇文章将给大家深入的介绍vue.js双向绑定的实现原理&#xff0c;有需要的朋友们可以参考…