深圳市中科鸥鹏智能科技有限公司版权所有2012~2015QTI循线传感器OpenDuino控制器+Eclipse开发平台认识QTI传感器QTI传感器是将红外发射器和红外接收器集成封装在一起的传感器,其接口简单,包括电源(VCC-5V)、地(GND)和信号输出(SIG)。如图1所示。图1QTI传感器实物给QTI供电后,红外发射器发射出红外线(打开手机摄像头,对着红外发射头,若看到红外光,说明上电正常),当红外线遇到黑色的表面时,大部分红外线被吸收,反射回来的少,接收器接收到的红外线就少,此时,SIG信号线输出高电平(+5V)。反之,当红外线遇到白色的表面时,反射回来的红外线较多,SIG信号线输出低电平(0V)。QTI传感器最佳探测距离为10cm。硬件连接QTI传感器实物连接如图2-3所示。SIG-白线,VCC-红线,GND黑线。图2图3深圳市中科鸥鹏智能科技有限公司版权所有2012~2015从机器人的后方向前方看去,从左到右引脚连接如表1所示。表1引脚连接QTI传感器Atmega328P引脚1PC3(A3)2PC4(A4)3PC5(A5)4连接到PC6(A6)硬件安装由于QTI传感器检测距离限制,在安装过程中需要注意其与被测表面之间的距离。根据QTI工作环境调整该距离,直到最佳。其安装如图4所示。图4QTI安装控制流程在本次应用中,QTI传感器用来循线导航,检测黑白线而已,因此只需要判断QTI信号输出引脚的电平即可。控制流程图如图5所示。初始化QTI接口顺序读取QTI信号输出引脚的电平根据4个QTI状态组合执行不同动作开始深圳市中科鸥鹏智能科技有限公司版权所有2012~2015图5QTI控制流程图因为Atmega328P控制器是读取QTI信号引脚电平的,所以需要先将PC3-PC6引脚置为输入引脚。然后从左到右读取QTI信号引脚的电平,得到4位二进制的值,将该转换成十进制,最后根据十进制值执行预先设置好的不同动作。用Arduino函数digitalRead(pin)可以读取QTI的电平,也可以直接读取寄存器:(PINC&0x04)?1:0;控制函数说明QTI传感器控制函数已由命名空间Qti管理,在文件开始处包含其头文件:#includeQti.h,即可用“命名空间名::成员名”格式引用控制函数读取QTI传感器电平。1、用户函数intCheck(void);该函数用于读取QTI传感器的电平。返回值是4个QTI电平组合的十进制值。2、底层函数voidInit_Qti(void);该函数用于初始化QTI信号接口,将与QTI传感器信号引脚连接的I/O引脚设置为输入引脚。源代码1、源文件/**Qti.cpp**Createdon:2012-8-28*Author:Administrator*硬件连接:*QTI顺序(从机器人后向前看)----328P*从左到右*1PC3(A3)*2PC4(A4)*3PC5(A5)*4PC6(A6)*/#includeWProgram.h#includeQti.h深圳市中科鸥鹏智能科技有限公司版权所有2012~2015#defineA3_HighPORTC|=_BV(PORTC3)#defineA3_LowPORTC&=~(_BV(PORTC3))#defineA4_HighPORTC|=_BV(PORTC4)#defineA4_LowPORTC&=~(_BV(PORTC4))#defineA5_HighPORTC|=_BV(PORTC5)#defineA5_LowPORTC&=~(_BV(PORTC5))#defineA6_HighPORTC|=_BV(PORTC6)#defineA6_LowPORTC&=~(_BV(PORTC6))intQti::qti[4];voidQti::Init_Qti(void){DDRC&=~(_BV(PORTC3)|_BV(PORTC4)|_BV(PORTC5)|_BV(PORTC6));//将A4,A5,A6,A3设置为输入}intQti::Check(void){intvalue=0;qti[0]=(PINC&0x04)?1:0;qti[1]=(PINC&0x05)?1:0;qti[2]=(PINC&0x06)?1:0;qti[3]=(PINC&0x07)?1:0;for(inti=0;i4;i++){value|=(qti[i]&0x1)i;}returnvalue;}2、头文件/**Qti.h**Createdon:2012-8-28*Author:Administrator*/#ifndefQTI_H_#defineQTI_H_namespaceQti{深圳市中科鸥鹏智能科技有限公司版权所有2012~2015externintqti[4];voidInit_Qti(void);intCheck(void);}#endif/*QTI_H_*/