STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))

STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第1张图片

板子:stm32f407zgt6正点原子迷你版
作者:shawn
可咨询QQ:965798711(完整代码附在资源里点这里)
2021.2.14(大年初三)
19:04
All rights reserved

//
如果你觉得对你有帮助,请点赞同,这对我很重要,谢谢。
//
一、硬件介绍
基本结构:上下两层小车底盘,四个轮子,四个马达
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第2张图片
L298N模块X2

STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第3张图片
12V锂电池
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第4张图片

红外检测模块X3
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第5张图片
二、核心模块讲解
1.红外检测模块是此寻迹小车的眼睛
三个红外检测模块的控制是小车成败的关键
工作电压:3.3V~5V
原理:
插电之后若发出去的红外线没有被接收到那么两个led灯一个亮一个不亮,OUT口返回一个高电平
若收到反射回来的红外,两个灯都亮,OUT口就返回一个低电平
那么对于黑色赛道,发射出去的红外就被黑线吸收了,此时OUT口就返回一个高电平

2.L298N模块的讲解可以看我之前一篇文章点这里

三、代码原理
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第6张图片
俯视图(doge)
前面三个红外检测模块
车身两个方块是L298N

对于一个操场形状的赛道
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第7张图片
我们来模拟几种情况(下面的图片不是四轮小车的图但是不影响我们对三路红外的分析)
1、正常前进
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第8张图片
三个模块的电平为0,1,0。此时正常行驶
2、左侧检测到黑线
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第9张图片
电平为1,0,0
此时轨道偏离,
调整:向左拐直到中间检测到黑线
3、右侧检测到黑线
电平为0,0,1
此时轨道偏离,
调整:向右拐直到中间检测到黑线
4、右中侧检测到黑线STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第10张图片
电平为0,1,1
此时轨道偏离,
调整:后部分向右拐直到中间检测到黑线
5、左中侧检测到黑线
电平为1,1,0
此时轨道偏离,
调整:后部分向左拐直到中间检测到黑线
6、全部检测到黑线
电平为1,1,1
此时到达终点,
调整:停止
STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))_第11张图片
6、电平其他情况
电平:1,0,1
左右两侧黑线
这种情况不存在
电平0,0,0
状态为跑偏
调整:过5s如果再无检测就停止
四、引脚分配与连接
一个L298N一共6个脚,两个使能脚,四个电平输入脚,使能脚给定时器
四个电平输入脚给PF1,2,4,6
另一个L298N,四个电平输入脚给PC0,1,2,8,9
开四个定时器TIM3,4,11,13,PWM频率给10KHZ,占空比80%
三个红外检测模块OUT口分配给PE0,1,2
这样可以通过位操作来控制这几个IO口
五、代码编写
给出最重要的代码块寻迹控制

void Track_control(void)
{
     
    if(Track_Input==Not_Black)
    {
     
        if(Stop_Flag==1)        
        {
     
            Stop();                  
        }
        else
            Turnfoward();
    }

    else        
    {
     
        switch(Track_Input)
      {
     
        Stop_Flag=0x0;                
        Not_Find_Black_flag=0;  
          
        case Middle_Black: 
            Turnfoward();  
            break;
        case Right_Black:     
        case Right_Middle_Black:
            Turnright();   
            break;
        case Left_Black:    
        case Left_Middle_Black:
            Turnleft();     
            break;
        default:            
            Turnfoward();        
      }
    }

}
     

六、其他
其实也可以采用电磁寻迹来做,电磁模块反应速度跟快更准更加灵敏

作者:shawn
可咨询QQ:965798711(完整代码附在资源里点这里)
2021.2.14(大年初三)
19:04
All rights reserved

你可能感兴趣的:(DIY小车,pwm,STM32F4,stm32,自动驾驶,单片机,控制器,嵌入式)