目录
1.寻迹模块
寻迹模块的实现需要两个TCRT5000传感器。简单地说,检测到黑线输出低电平,检测到白线输出高电平。因此两个TCRT5000放在黑色地面的白线循迹线左右,左边检测到白线左转,右边检测到白线右转,都是黑的前进,都是白线停止。算法比较容易实现。
OUT | 信号输出,黑色为0,白色为1 |
VCC | 5V供电 |
GND | 接地 |
代码如下:
//寻迹模式
else if(data==8'b11111000) begin
ledout<=4'b0011;//亮两个LED
Mode_Control<=0;//遥控模式标志符清零
if((track[1]==1'b1)&&(track[2]==1'b1))//未寻到黑线,俩轮直接前进
mode<=2;//直行T16
else if((track[1]==1'b0)&&(track[2]==1'b1))//左传感寻到黑线,右传感未寻到,右轮动
mode<=4;//右转
else if((track[1]==1'b1)&&(track[2]==1'b0))//右传感寻到黑线,右传感未寻到,左轮动
mode<=3;//左转
else mode<=0;//两个黑线,不符要求,停止运行
end
2.寻光模块
寻光模块我使用的是TEMT6000,它能检测环境光,并且根据光强输出0-5V不同的电压。光强越大,电压越大。
S | 信号输出,0-5V,光越强越大 |
G | 接地 |
V | 5V供电 |
在具体实现中,由于FPGA没有内置AD模块,因此需要外接AD模块。但是考虑到IO口的数量以及实现的复杂度,我决定直接检测输出的电压值。
将光源放在两个TEMT6000的中间,这时会输出两个电压未知的高电平,这时让小车直行;将光源放在靠左边,这时左边高电平,右边低电平(电压都未知),这时让小车左转,右侧同理。这样就能实现小车跟随光线转动、移动。
具体代码如下:
//寻光模式
else if(data==8'b10000000) begin
ledout<=4'b1111;//亮四个LED
Mode_Control<=0;//遥控模式标志符置高
if((Light[1]==1'b1)&&(Light[0]==1'b1))//同时感应光线
mode<=2;//直行
else if((Light[1]==1'b1)&&(Light[0]==1'b0))//左边感应到光线,右边没有感应到光线
mode<=4;//左转
else if((Light[1]==1'b0)&&(Light[0]==1'b1))//右边感应到光线,左边没有感应到光线
mode<=3;//右转
else mode<=0;//都没有感应到光线,停止运行
end
3.跟随模块
为了实现小车的实时跟随,我在校车前方放置了超声波模块进行测距,如果距离小于20CM就执行,大于20CM就停止。简单的算法便能实现小车跟随人直行的实现。
接口之前已介绍。
代码如下:
//避障模式
if(data==8'b11111110) begin
ledout<=4'b0001;//亮一个LED
Mode_Control<=0;//遥控模式标志符清零
if (distance_reg <= DISTANCE_THRESHOLD) begin//如果距离小于阈值
mode<=1;//
end else begin//如果距离大于阈值
mode<=0;//
end
end