当前位置:   article > 正文

STM32 学习笔记3-智能小车-红外避障_iravoid

iravoid

目录

红外避障基本原理:

硬件:

红外传感元器件:红外,眼睛,探测前方障碍物的情况,并反馈给小车

控制模块:STM32  F103 系列         LM393 :比较电压

电路图:

 软件:

逻辑定义(及相关系统性能定义):

代码实现

主函数:main.c

越学越糊涂,C语言中 .h文件和.c文件区别?

红外避障配置:void IRAvoidInit(void)    PB1  口,基本思路就是配置GPIO的思路


cybertruck 镇楼 (图文无关)

红外避障基本原理:

红外避障基本原理和上一篇的循迹很像,只不过传感元器件为一个红外传感器,检测到障碍物的时候,车辆后退 左右 转等动作

硬件:

红外传感元器件:红外,眼睛,探测前方障碍物的情况,并反馈给小车

F5红外发射管940NM V7

F5红外接受管940NM V4

详细了解可看:下面链接文章红外收发管参数及硬件设计参考_sternlycore的博客-CSDN博客_红外接收二极管参数

小车及相关附件:骨架,车身底板,四轮, 作用是提供相关元器件安装点

驱动:双腿,电机 两个直流电机

控制模块:STM32  F103 系列         LM393 :比较电压

电路图:

2.模块描述
电路板尺寸:3.2CM*1.4CM;3mm 的螺丝孔,便于固定、安装;
接通电源后,红色指示灯亮起,该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器LM393电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少,有效距离范围2~30cm,检测角度35°,工作电压为3.3V-5V。
传感器模块输出端口OUT 可直接与单片机IO 口连接即可,也可以直接驱动一个5V 继电器;
传感器主动红外线反射探测,目标的反射率和形状是探测距离的关键。黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大。
接口:1 VCC 外接3.3V-5V 电压(可以直接与5v 单片机和3.3v 单片机相连);2 GND 外接GND;3 OUT 数字量输出接口(0 和1)
调试时,注意不要用黑色遮挡,红外直接被吸收掉不能返回。
————————————————
原文链接:https://blog.csdn.net/u011878611/article/details/110110927

 软件

逻辑定义(及相关系统性能定义):

传感器持续 检测前方障碍物情况

1、无障碍物→ 保持前进

2、有障碍物的情况→ 后退→向左转→ 检测障碍物 

3、若无→前进

4、若有→回到第二步

涉及的相关参数设置

传感器:传感器探测的距离S=10cm左右,

传感器:探测物体的类型=黑色为啥不能检测?与物体表面的光洁度有关系?涉及标定

(传感器主动红外线反射探测,目标的反射率和形状是探测距离的关键。黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大。)

避障后退距离: L1=speed * time 

避障左转:  speed   和   time 的设置     大概就这些

其实最最重要的是,避障的策略相关算法的实现,由于我这个小车就是买的网上的成品,非定制,暂未这么深入分析,还在摸索基本功能。

代码实现

主函数:main.c

主函数比较简单,各个函数的初始化,最主要的是 避障函数的定义

  1. #include "stm32f10x.h" //stm 系统函数
  2. #include "delay.h" //延时函数
  3. #include "motor.h" //电机
  4. #include "keysacn.h" //按键扫描函数
  5. #include "IRSEARCH.h" //红外搜索函数
  6. #include "IRAvoid.h" //红外避障函数
  7. int main(void)
  8. {
  9. delay_init(); //初始化延时
  10. KEY_Init(); //初始化按键
  11. IRSearchInit(); //初始化 红外搜索
  12. IRAvoidInit(); //初始化红外避障
  13. TIM4_PWM_Init(7199,0); //初始化 PWM 避障
  14. STM32_brake(500); //电机刹车0.5s
  15. keysacn(); //初始化按键搜索
  16. while(1)
  17. {
  18. AVoidRun(); //避障函数
  19. }
  20. }

IRAvoid.h

  1. #ifndef __IRAVOID_H_
  2. #define __IRAVOID_H_
  3. #include "stm32f10x.h" // Device header
  4. void IRAvoidInit(void);
  5. void AVoidRun(void);
  6. /*
  7. 避障传感器AVOID_PIN PB1
  8. */
  9. #define AVOID_PIN GPIO_Pin_1
  10. #define AVOID_PIN_GPIO GPIOB
  11. #define AVOID_IO GPIO_ReadInputDataBit(AVOID_PIN_GPIO, AVOID_PIN)
  12. #define BARRIER_Y 0 //有障碍物
  13. #define BARRIER_N 1 //无障碍物
  14. #endif

越学越糊涂,C语言中 .h文件和.c文件区别?

(来源于:C语言中 .h文件和.c文件区别 - 知乎

一、意思不同

  1. .h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。
  2. .c文件一般放的是变量、数组、函数的具体定义

二、用法不同

  1. .h文件,称为头文件,一般存储类型的定义,函数的声明等。通常,头文件被.c文件包含,使用#include 语句。但值得注意的是,这只是一种约定,而非强制。
  2. .c文件,以c为扩展名,一般存储具体功能的实现

三、作用

如果在.h文件中实现一个函数体,那么如果在多个.c文件中引用它,而且又同时编译多个.c文件,将其生成的目标文件连接成一个可执行文件,在每个引用此.h文件的.c文件所生成的目标文件中,都有一份这个函数的代码,如果这段函数又没有定义成局部函数,那么在连接时,就会发现多个相同的函数,就会报错。

如果在.h文件中定义全局变量,并且将此全局变量赋初值,那么在多个引用此.h文件的.c文件中同样存在相同变量名的拷贝,关键是此变量被赋了初值,所以编 译器就会将此变量放入DATA段,最终在连接阶段,会在DATA段中存在多个相同的变量,它无法将这些变量统一成一个变量,也就是仅为此变量分配一个空 间,而不是多份空间,假定这个变量在.h文件没有赋初值,编译器就会将之放入BSS段,连接器会对BSS段的多个同名变量仅分配一个存储空间。

PB1  口,基本思路就是配置GPIO的思路

  1. void IRAvoidInit(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitStructure;
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  5. GPIO_InitStructure.GPIO_Pin = AVOID_PIN; // PB1
  6. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
  7. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
  8. GPIO_Init(AVOID_PIN_GPIO , &GPIO_InitStructure);
  9. }

避障函数: AVoidRun();

  1. void AVoidRun(void)
  2. {
  3. if(AVOID_IO == BARRIER_N ) //BARRIER_N=0 无障碍物 BARRIER_Y=1 有障碍物
  4. {
  5. STM32_run(50,10); //直行
  6. BEEP_RESET; //蜂鸣器不工作
  7. LED_D3_RESET; //LED不亮
  8. }
  9. else
  10. {
  11. BEEP_SET; //蜂鸣器不工作
  12. LED_D3_SET; //LED亮
  13. STM32_brake(300); //停止300MS
  14. STM32_back(50,400); //后退400MS
  15. STM32_Left(50,500); //左转500MS
  16. }
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/918143
推荐阅读
相关标签
  

闽ICP备14008679号