1、循迹模块介绍;

2、循迹原理;

3、硬件接线;

4、循迹编程思路流程图;

5、循迹程序第一稿(后面再写几篇文章加计时、测距、蓝牙等模块)。

一、循迹模块

目前大一新生,多数用的是数字式的循迹模块,当碰到黑线,发出一个1信号,碰到白线发出0信号。这个1和0是根据实际模块电路决定的,有些碰到黑线是0,有些是1,这个可以用万用表测试下,如果是信号引脚碰到黑线的时候,是5v电,那么就是黑线是1,如果碰到白线是5v,那么白线是1。有一个按钮调节灵敏度的,根据实际情况调节好。
后面熟练之后,可以用ADC模块进行黑白线检测。这个后面再了解。



外观不一样,注意看引脚的标识。
以这个为例。

G接GND,V+接5V,S是信号线,接输出到单片机的IO口,当碰到黑线白线会发生跳变。 滑动变阻器是调节灵敏度的旋钮,高度不一样,旋转到合适的数值,碰到黑线和白线有信号的变化就可以,一般放和底面高度8-15mm。

其他模块也一样。

2、循迹模块的布置。

一般需要3-5个循迹模块。
布局很重要,可以设置中间三个距离近一点,边角远一点。
这个关系到循迹条件的判断。

*3、循迹模块的条件

从做到右叫做LS1,LS0,MS,RS0,RS1,这个名字自己起就可以了。

循迹的几种情况。(注意判断情况条件自己根据自己情况,适当修改,不能太死板哦。)
第一种,直线行走。两个轮子速度一样
1代表黑线,0代表直线。
MS黑线的时候;
00100
第二种,往左小偏转,右轮比左轮的速度快一点。
LS0黑线
01000
第三种,左大转。
右轮速度更加快一点,左轮干脆停止了。
LS11(黑线)
10000
大转弯到MS碰到黑线,就停止大转弯。
第四种,右边小转
RS01
00010
第五种,右边大转
00001
大转弯到中碰到黑线,就停止大转弯。

第六种,直角左转弯
11x00。
中间的那个x代表是0或者1都可以。
转弯到RS0碰到黑线,就停止转弯。

第七种,直角右转弯。
只需要最右边的两个是黑线就行。
00x11
转弯到LS0碰到黑线,就停止转弯。

第八种,调头

四个或者5个都是1,碰到黑线,都调头
01111
11110
11111
前进1秒,
然后左轮后退,右轮前进,旋转调头,直到之间的MS碰到黑线停止调头。

第九种,检测不到线,就原地打圈,极端情况。
00000

3、接线。

由于使用几个模块,几个循迹模块都需要VCC和GND,都接杜邦线到控制板,会比较乱。
因此,最好用洞洞板焊接一个转接板。
实物看实验室的小车。

电机接线看上一个文章。

4、编程流程图
定义引脚,循迹,电机,按键。
写前进,停止子函数;
初始化。pwm初始化,端口初始化。
while(1)
{
1,按键按下吗?
,是
设置标记flag=1

2、标记flag==1吗?
是,开始循迹
{第一种情况。。。第二种。。。第n中。。。。。}

}


//***************************************************************************下面是接线定义
//左电机
sbit LPWM=P2^0;//电机调节速度的信号
sbit LA2=P0^4;
sbit LA1=P0^5;
//右电机
sbit RPWM=P2^1;
sbit RA2=P0^6;
sbit RA1=P0^7;
//接传感器
sbit L1S=P1^0;
sbit L0S=P1^1;
sbit MS=P1^2;
sbit R0S=P1^3;
sbit R1S=P1^4;
sbit key=P3^4;//接按键,启动按键
void trackline0();
//这个是定义,不声明,后面main函数可以直接用,
//小车前进,根据速度两个轮子速度差,进行前进,转弯等
void qianjin(float vleft,float vright)
{HPWM_Set(0,8000,vleft);LA2=1;LA1=0;HPWM_Set(1,8000,vright);RA2=1;RA1=0;}
//小车调头程序,左轮反转,右轮正转
void turnback(float vleft,float vright)
{HPWM_Set(0,8000,vleft);LA2=0;LA1=1;HPWM_Set(1,8000,vright);RA2=1;RA1=0;}
//****************************************************************子函数3:void stop()
//小车停止
void stop()
{ LA2=0;LA1=0;RA2=0;RA1=0;
}
//*******************************************主函数
void main()
{bit startflag=0; //按键控制的启动标记bit startflag2=0; //蓝牙控制的启动标记//每个外设,比如按键,屏幕,PWM等内部资源的初始化,配置一下环境//设置准双向口,和普通的51单片机一样P0M1=0x00;P0M0=0x00;P1M1=0x00;P1M0=0x00;P2M1=0x00;P2M0=0x00;P3M1=0x00;P3M0=0x00;P4M1=0x00;P4M0=0x00;P5M1=0x00;P5M0=0x00;P6M1=0x00;P6M0=0x00;delay_tms(200);//屏幕初始化OLED_Init();//PWM模块初始化HPWM_Init();
//*****************************************************************//*********************************************正式执行程序while(1){        //**************************************************************************按键来控制的//*****************************//检测按键是不是按下,开始启动if(key==0){delay_tms(10);//延时去抖动if(key==0){ startflag=1;stop();delay_tms(1000);//延时,按下两秒之后,小车开始启动进行循迹// delay_tms(2000);}}  //**********************如果开始标记等于1,说明按下启动键key,这时候小车才开始跑if(startflag==1){//开始循迹,请看这部分代码,太长了,单独拉出来写,方便看主程序逻辑  trackline0();   }
// //**************************************************************//函数定义trackline0();
// //**************************************************************功能:按键循迹;
void trackline0()
{//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第1种情况if(L1S==blackline &&L0S==whiteline  && MS==whiteline && R0S==whiteline&& R1S==whiteline)//1 0 0 0 0 {qianjin(vturnsmallM,vturnbigM);//左da转弯,转到碰到中线停止while(1){            if(MS==blackline)break;}  //+++++++++++++++++++++++++++++++++++++++++++++++++++++++第2种情况else if(L1S==whiteline &&L0S==blackline  && MS==whiteline && R0S==whiteline&& R1S==whiteline)//0 1 0 0 0 {qianjin(vturnsmall,vturnbig);//左xiao转弯}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第3种情况else if(L1S==whiteline &&L0S==whiteline  && MS==blackline && R0S==whiteline&& R1S==whiteline)//00 1 0 0 {qianjin(vleftmove,vrightmove);//直走}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第4种情况   else if(L1S==whiteline &&L0S==whiteline  && MS==whiteline && R0S==blackline&& R1S==whiteline)//0 0 0 1 0 {qianjin(vturnbig,vturnsmall);//左xiao转弯vturnbig vturnsmall}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第5种情况else   if(L1S==whiteline &&L0S==whiteline  && MS==whiteline && R0S==whiteline&& R1S==blackline)//0 0 0 0 1{qianjin(vturnbigM ,vturnsmallM);//左da转弯vturnbigM  vturnsmallM,碰到黑线,不然一直大转弯,while(1){            if(MS==blackline)break;}}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第6种情况   else    if(L1S==blackline && L0S==blackline && R1S==whiteline )//11xx0 判断是左转90度{qianjin(vturnsmall,vturnbig);//左转弯while(1)     { if(R0S==blackline)break;}}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第7种情况else   if( L1S==whiteline  &&R0S==blackline && R1S==blackline)//0xx11 判断是右转90度{qianjin(vturnbig,vturnsmall);//while(1)    { if(L0S==blackline)break;}}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第8种情况else   if(L1S==blackline &&L0S==blackline&& MS==blackline && R0S==blackline && R1S==whiteline)//1111x 判断是终点,调头,左轮反转,右轮正转,左转调头{stop();delay_tms(1000);qianjin(vleftmove,vrightmove);delay_tms(1000);stop();delay_tms(1000);turnback(vleftmove,vrightmove);//     delay_tms(1000);while(1)     { if(MS==blackline)break;}}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第8种情况else     if(L1S==whiteline &&L0S==blackline&& MS==blackline && R0S==blackline && R1S==blackline)//1111x 判断是终点,调头,左轮反转,右轮正转,左转调头{stop();delay_tms(1000);qianjin(vleftmove,vrightmove);delay_tms(1000);stop();delay_tms(1000);turnback(vleftmove,vrightmove);//     delay_tms(1000);while(1)     { if(MS==blackline)break;}}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第8种情况else     if(L1S==blackline &&L0S==blackline&& MS==blackline && R0S==blackline && R1S==blackline)//1111x 判断是终点,调头,左轮反转,右轮正转,左转调头{stop();delay_tms(1000);qianjin(vleftmove,vrightmove);delay_tms(1000);stop();delay_tms(1000);turnback(vleftmove,vrightmove);while(1)    { if(MS==blackline)break;}}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++第9种情况   这是极端情况,放在最后面判断//000找不到直线,如果前面是直走,就转360度,如果是之前右边,就左转,之前左偏,就右转else   if(L1S==whiteline &&L0S==whiteline && MS==whiteline && R0S==whiteline && R1S==whiteline)  {qianjin(vturnbig,vturnsmall);//}}

下载,测试一下程序。

实例4,循迹模块的使用和循迹小车的实现相关推荐

  1. Raspberry Pi 4B 循迹模块

    组件: Raspberry Pi 4B 8G 环境: Python:3.7.3 四路巡线模块连接的树莓派引脚是11, 7, 13, 15. #-*- coding:UTF-8 -*- # 导入GPIO ...

  2. STM32蓝牙控制循迹避障小车——2.循迹模块

    STM32蓝牙控制循迹避障小车源代码--2.循迹模块 注意-所需模块: 接线:四个循迹模块(从左到右分别为1,2,3,4) B4–第1个循迹模块的D0 B5–第2个循迹模块的D0 B6–第3个循迹模块 ...

  3. 4路红外循迹模块使用教程

    4路红外循迹模块使用教程 文章目录 4路红外循迹模块使用教程 模块详细信息: 模块接线 模块使用 相关代码 个人原创博客:点击浏览 模块详细信息: 工作电压:DC 3.3V~5V 工作电流:尽量选择1 ...

  4. 咸鱼ZTMR实例—寻迹模块

    咸鱼ZTMR实例-寻迹模块 主控板:ZTMR1.1python开发板 寻迹模块 ZT红外寻迹 规格参数: 1.工作电压:DC 3.3V-5V 2.工作电流:尽量选择1A以上电源供电 3.工作温度:-1 ...

  5. TCRT5000循迹模块原理及应用

    目录 前言 一.TCRT5000循迹模块介绍 二.TCRT5000循迹模块原理 三.TCRT5000循迹模块应用 结语 前言 本文将讲述TCRT5000循迹模块的原理及应用.本文应用于STM32,对于 ...

  6. 循迹模式——红外循迹模块使用介绍

    循迹模式--红外循迹模式使用介绍 红外循迹模块介绍 TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块 ...

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

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

  8. 37种传感器(十四)之循迹模块+Stduino NanoUNO

    37种传感器(十四)之循迹模块+Stduino Nano&UNO 本文转载自:http://www.stduino.com/forum.php?mod=viewthread&tid=3 ...

  9. tcrt5000循迹模块

    tcrt5000循迹模块 1.采用TCRT5000红外反射传感器 2.检测距离:1mm~8mm适用,焦点距离为2.5mm 3.比较器输出,信号干净,波形好,驱动能力强,超过15mA. 4.配多圈可调精 ...

最新文章

  1. 出任 Twitter 独立董事,AI 女神李飞飞的传奇人生
  2. ISME:基因组和转录组分析深海古菌Thermoprofundales
  3. 学习微服务服务消费者——Feign
  4. C#/winform 窗体适应不同分辨率
  5. Mysql5.7读写分离
  6. sqlmap自动扫描注入点_SQLmap JSON 格式的数据注入
  7. JavaSE图画一览
  8. python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)
  9. C/C++ 结构体成员在内存中的对齐规则(转载)
  10. 文本文件与二进制文件
  11. 游戏开发筑基之特殊输入函数的妙用(C语言)
  12. Java中的管程Monitor
  13. 移动开发框架,第【三】弹:Zepto.js
  14. Android中字体文件位置
  15. c语言免杀程序源码,ghost源码免杀教程 步
  16. 用编程器免拆夹子刷斐讯K2 K2P解决难搞固件 刷BREED 无损原EEPROM
  17. 【2022西电A测】温度检测控制仿真系统
  18. 浅析智慧城市顶层设计的相关概念
  19. Python中的easy_install安装
  20. mysql 商品库存表设计_库存数据库表设计

热门文章

  1. 《信息系统安全》第一章 绪论 作业
  2. java图片镜像代码_Java OpenCV实现图像镜像翻转效果
  3. 网页宽度自动适应手机屏幕宽度的实现代码(viewport)
  4. WordCount实现
  5. 用数据告诉你,今年考研上岸有多难
  6. 什么是GMS、CDMA、GPRS、EDGE、WCDMA
  7. 别再乱用了,这才是 @Validated 和 @Valid 的真正区别!!!
  8. iphone换android手机铃声,iphone12如何设置铃声?iphone12更换铃声方式分享[多图]
  9. 双烤伤电脑吗,双烤CPU温度多少正常
  10. Wireshark在VMware虚拟机Win7上打开没有显示网络适配器——Wireshark版本不对应