8—基于FPGA(ZYNQ-Z2)的多功能小车—软件设计—寻迹模块、寻光模块、跟随模块

目录

1.寻迹模块  

2.寻光模块

3.跟随模块


1.寻迹模块  

寻迹模块的实现需要两个TCRT5000传感器。简单地说,检测到黑线输出低电平,检测到白线输出高电平。因此两个TCRT5000放在黑色地面的白线循迹线左右,左边检测到白线左转,右边检测到白线右转,都是黑的前进,都是白线停止。算法比较容易实现。

8—基于FPGA(ZYNQ-Z2)的多功能小车—软件设计—寻迹模块、寻光模块、跟随模块_第1张图片

 

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不同的电压。光强越大,电压越大。

8—基于FPGA(ZYNQ-Z2)的多功能小车—软件设计—寻迹模块、寻光模块、跟随模块_第2张图片

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就停止。简单的算法便能实现小车跟随人直行的实现。

8—基于FPGA(ZYNQ-Z2)的多功能小车—软件设计—寻迹模块、寻光模块、跟随模块_第3张图片

 接口之前已介绍。

代码如下:

    //避障模式
       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

你可能感兴趣的:(fpga开发,数学建模)