首页 > 器件类别 > 传感器模块

Tracker Sensor

器件类别:传感器模块   

厂商名称:微雪电子(Waveshare)

厂商官网:http://www.waveshare.net

下载文档
文档预览
Tracker Sensor
用户手册
Tracker Sensor
用户手册
产品概述
Tracker Sensor
是红外循迹传感器,常用于制½循迹智½小½。
Tracker Sensor
采用
ITR20001/T
红外反射传感器,
ITR2001/T
传感器的红外发射二极管不断发射红
外线,½发射出的红外线被物½反射时,被红外接收器就收,并输出模拟值。输出模拟值和物½
距离以及物½颜色有关。通过计算五路输出的模拟值,判断循迹线½½。
规格
工½电压:3.3V
~ 5V
产品尺寸:78mm
× 18mm
探头间距:16mm
固定孔尺寸:3mm
感应距离:1cm
~ 5cm
主要用途
智½小½或机器人寻线,避悬崖防跌½等
小½循迹原理简介
Tracker Sensor
有五路模拟输出,模拟量输出和距离,物½颜色有关。红外反射越强(½色)时,输
出越大,红外放射越弱(黑色),输出越小。探测器离黑色线越近输出越小,由此可以通过输出
模拟量判断黑线的距离远近。
数值越小的传感器离黑线越近。
相对于其他只½输出高½电平的½
迹传感器而言,本产品的
5
路模拟量输出可以反馈黑线的距离,反馈更为准确。
小½算法可以分为
3
部分:
第一部分:½一化校准
相同的颜色,距离,不同的探测器输出会有所不同,而且不同环境输出的模拟量范围也不一样。
如果采用
10
½
AD
采集。
理论上输出范围会在
0~1023
之间。
½是实际上输出最小
Min
会大于
0,
1
版本:V1.1,日期:2016 年
12
1
Tracker Sensor
用户手册
最大值
Max
会比
1023
小。由此为了减少传感器自身以及环境的½响,½½一化处理,½一化处
理实际上就是将
Min~Max
的数值范围½为
0~1
范围线性½换如下:
y = (x - Min) / (Max - Min)
(其中
x
为探测器输出值,y 为½换后的值,Max、Min 分别为输出的最大值和最小值)
为了数据处理方便可以将数据放大
1000
倍。则
y = (x - Min) * 1000 / (Max - Min)
½换后数据范围为
0~1000.其中 1000
表示探测器远离黑线,0 表示探测器在黑线正中。
其中
Min
Max
的值是由程序在运行过程中多次采集传感器的值而获得,并保存起来,采集过
程中不断移动小½,½得采集到的最大最小值更加接近实际情况。
第二部分:加权平均
将五个探测器输出数据通过½一化处理后,
得到五个反应探测器离黑线相对距离的数据。
为了½
可½准确地确定路线的中心线。
通过加权平均的方式将这
5
个数值½变成一个数值。
公式如下:
y = (0 * value0 + 1000 * value1 + 2000 * value2 + 3000 * value3 +4000 * value4) / (value0 + value1 +
value2 + value3 + value4)
其中
0, 1000, 2000, 3000, 4000
分别为从左到右
5
个探测器的权,value0~value4 为探测器½一化
后的数据。
则经过出后的数值范围为
0~4000。代表黑线的½½。例如 2000
则表示黑线在模块的正中间。0
表示在黑线在模块的最左侧,4000 表示黑线在最右侧。
为了½模块探测的精度更高,
对模块的高度和黑线有所要求。
黑线应该等于或略小于探测器的距
离(16mm)。高度为黑线在两个传感器正中间时,两个传感器½½够刚½探测到为宜。
第 三 部 分 : PID 控 制
由第二部分可得到黑线的½½,为了½小½一直沿着黑线走,则必须保证黑线在小½正下方,此
时加权平均后的输出应该为
2000。为了½小½走的更加平滑,减少左右摇摆。采用½½式 PID
控制。关于
PID
算法½上有很多介绍,此处不再详细讲解,只是大概介绍一下。
PID
是指通过比例(P),积分(I),微分(D)对误差进行反馈调节。主要算法如下:
proportional = position - 2000;
2
版本:V1.1,日期:2016 年
12
1
Tracker Sensor
用户手册
derivative = proportional - last_proportional;
integral += proportional;
last_proportional = proportional;
power_difference = proportional * Kp + integral * Ki + derivative * Kd;
其中:
理想情况下,加权平均后的输出数据为
2000,即黑线在正中间。
比例项(proportional)为½前的½½(Position)减去目标½½(2000),表示½½误差,正数表示小½
偏右,负数表示小½偏左。
积分项(integral)数据为每次误差的总和,绝对值越大,表示误差累积值越大,表示小½越偏越远
了。
微分项(derivative)为½前误差和上次误差的差值,反映小½的响应速度,数值越大,响应速度越
快。
调节
Kp, Ki, kd
三个参数可获得最½性½。先调节
Kp
参数,Ki,
Kd
设为
0,不断调整 Kp
值½得小
½可以循线,然后调节
Ki
Kd
值,参数可以设小一点,或者为
0。
AlphaBot 循 迹 模 块 示 例 程 序 分 析
下面结合
AlphaBot
智½小½讲解一下
Tracker Sensor
循迹程序。
这里以
Arduino
的程序½为示例,
Tracker Sensor
的库文件主要包含
TRSensors.cpp
TRSensors.h
两个文件。
TRSensors.cpp
主要包含下面这几个½数
TRSensors();
void AnalogRead(unsigned int *sensor_values);
void calibrate();
void readCalibrated(unsigned int *sensor_values);
3
版本:V1.1,日期:2016 年
12
1
Tracker Sensor
用户手册
int readLine(unsigned int *sensor_values, unsigned char white_line = 0);
其中
TRSensors()为初始化½数,
初始化相应的管脚,
以及申请内存用½存储各个传感器的
Max,
Min
值。
AnalogRead()½数为读取五路探测器的模拟值,AlphaBot
是通过
TLC1543 AD
芯片进行
AD
½换,
而非
Arduino
芯片的
AD
管脚。如果将
Tracker Sensor
接到
Arduino
A0~A4
管脚需修改此½数。
calibrate()½数为校准½数,通过多次采集数据,确定
Max,Min
值。故校准阶段时,小½需
在黑线中紧贴地面左右摇晃。确保取得的
Max,Min
准确。
readCalibrated()½数为½一化校准,对应原理的第一部分,通过½一化线性½换,将数据½
0~1000
范围内,其中
1000
表示探测器远离黑线,0 表示探测器在黑线正中。
readLine()½数为读取循迹线的½½,对应原理中的第二部分。通过加权平均算出寻迹线的½
½。数值范围为
0~4000,0
表示在黑线在模块的最左侧,4000 表示黑线在最右侧。
原理中第三部分在循迹主程序
Infrared_Line_Tracking.ino
中实现,主要代码如下。
通过
readline()½数读取寻迹线的½½,然后算出比例项
proportional,微分项 derivative,
4
版本:V1.1,日期:2016 年
12
1
Tracker Sensor
用户手册
此处只用了
PD
算法,没有积分项,而非
PID。可以修改对应的 PD
参数,½性½更½。
最后一步就是通过
PD
算得的修改项
power_difference
去调节小½左右½的
PWM
值,实现小
½沿着寻迹线运动。
操½与现象
本节只是介绍模块的简单测试程序,
关于
AlphaBot
½用
Tracker Sensor
实现循迹的操½以及示例
程序可以参考
AlphaBot
的相关资料。
下面以
XNUCLEO-F103RB,UNO PLUS
开发板为例。
① 将配套程序下½½到相应的开发板中。
② 将串口线和模块接入开发板,给开发板上电,打开串口调试½件。
模块与开发板连接如下表所示:
端口
IR1~IR5
GND
VCC
XNUCLEO_F103RB 引脚
A0~A4
GND
3.3V
表1. 模块接入 STM32 开发板
5
版本:V1.1,日期:2016 年
12
1
查看更多>
尼奥18V手电钻,电池不存电了,想弄个变压器,直接供电,求教!!!
如题:尼奥18V手电钻,电池不存电了,想弄个变压器,直接供电,(估计我的手钻买假了)电池外壳标的是18V电池冲一会电,装手钻上,能正常工作原充电器标的输出是:24VDC400mA我曾把充电器直接到手钻上,但是手钻不转.万用表测量充电器电压是33V左右,现在,想弄个变压电路装进去,之差220V插座上,或把充电器的33V变为18V的电路接上手钻,就是不再使用电池求详图,及要用的电子元器件.QQ:312572412尼奥18V手电钻,电池不存电了,想弄个变压器,直接供电...
v115488 电源技术
流式驱动中_init中,我要用win32API创建个窗体可以吗?
流式驱动中_init中,我要用win32API创建个窗体可以吗?如果可以,请问win32的入口函数WinMain必须调用吗?如果不调用,那么实例句柄怎么获取?如果必须调用,该如何处理?流式驱动中_init中,我要用win32API创建个窗体可以吗?怎么没有人来帮我看看问题呢?wince6貌似不可以....
moneyhui19 嵌入式系统
TMS320VC5416的JTAG连接有问题
第一次做一个实现音频采集的板子,JTAG连接不上!!TCK输出500KHz已经排除了几种可能错误:1,复位。通过CPLD进行了先复位200ms后拉高的操作2,JTAG各个管脚的上拉都没问题3,DSP的时钟是外部16M,10倍频。测得CLKOUT的输出频率是40MHz。感觉DSP的配置上都正确,NMI,INT0-3#,BIO#都正确配置了。可就是提示连接不上,主要就是TCK应该输出10MHz却500KHz。但实在找不到是哪里出了问题!求大神们帮帮找问题呢!TMS320VC5416...
flying21 DSP 与 ARM 处理器
请教一个If判断含义?
if(s100|s==2)if(k1==0&k2==0)一个按位或,一个按位与,这两个判断表达式如何理解?请教一个If判断含义?我是菜鸟,我感觉if(s100|s==2)这句可以理解为“只要S100,此语句就为真,下边那句is(k1==0&k2==0)可以理解为“当K1=0且K2=0时,此语句才为真。if(s100|s==2)只要s100就往下执行判断if(k1==0&k2==0)即k1与k2同时满足时就继续执行里面的语句,如果s100不满足就不执行if(k1==0...
wrlsohu 51单片机
问个弱弱的逻辑电路设计问题
1用74283设计一个4位具有加减与或功能的alu2用逻辑门设计一个8位串行、并行进位加法器请高手们帮忙,谢谢啦~最好有逻辑电路图问个弱弱的逻辑电路设计问题作业题吗?我也不会,要看书,我现在没书看了,呵呵数字电路,好久没有看了,都不记得啦。真的好久没看到书了,呵呵自己动手吧,还是不难的,一,了解74283她的特性,就很容易实行你的功能啦.二,写出你要实现功能的表达式,化简成逻辑门,不就完成任务....祝你早日完成任务.uping...
kk7718 嵌入式系统
【AT32A403A 车规MCU开发板】 SPI-DMA方式驱动LCD
测试SPI-DMA方式驱动LCD显示屏。一、硬件部分测试使用SPI1接口二、程序部分2.1、SPI初始化部分#include"main.h"uint16_t*lcd_data_buf;//LCD_RS--D7//LCD-RST--D6//LCD-CS--D10//LCD-BK--A3//TP-CS--D8//TP-INT--D9/***@briefinitializelcdspi1...
TL-LED 汽车电子