概述
目录
红外避障基本原理:
硬件:
红外传感元器件:红外,眼睛,探测前方障碍物的情况,并反馈给小车
控制模块: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
主函数比较简单,各个函数的初始化,最主要的是 避障函数的定义
#include "stm32f10x.h" //stm 系统函数
#include "delay.h" //延时函数
#include "motor.h" //电机
#include "keysacn.h" //按键扫描函数
#include "IRSEARCH.h" //红外搜索函数
#include "IRAvoid.h" //红外避障函数
int main(void)
{
delay_init(); //初始化延时
KEY_Init(); //初始化按键
IRSearchInit(); //初始化 红外搜索
IRAvoidInit(); //初始化红外避障
TIM4_PWM_Init(7199,0); //初始化 PWM 避障
STM32_brake(500); //电机刹车0.5s
keysacn(); //初始化按键搜索
while(1)
{
AVoidRun(); //避障函数
}
}
IRAvoid.h
#ifndef __IRAVOID_H_
#define __IRAVOID_H_
#include "stm32f10x.h" // Device header
void IRAvoidInit(void);
void AVoidRun(void);
/*
避障传感器AVOID_PIN PB1
*/
#define AVOID_PIN GPIO_Pin_1
#define AVOID_PIN_GPIO GPIOB
#define AVOID_IO GPIO_ReadInputDataBit(AVOID_PIN_GPIO, AVOID_PIN)
#define BARRIER_Y 0 //有障碍物
#define BARRIER_N 1 //无障碍物
#endif
越学越糊涂,C语言中 .h文件和.c文件区别?
(来源于:C语言中 .h文件和.c文件区别 - 知乎)
一、意思不同
- .h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。
- .c文件一般放的是变量、数组、函数的具体定义。
二、用法不同
- .h文件,称为头文件,一般存储类型的定义,函数的声明等。通常,头文件被.c文件包含,使用#include 语句。但值得注意的是,这只是一种约定,而非强制。
- .c文件,以c为扩展名,一般存储具体功能的实现。
三、作用
如果在.h文件中实现一个函数体,那么如果在多个.c文件中引用它,而且又同时编译多个.c文件,将其生成的目标文件连接成一个可执行文件,在每个引用此.h文件的.c文件所生成的目标文件中,都有一份这个函数的代码,如果这段函数又没有定义成局部函数,那么在连接时,就会发现多个相同的函数,就会报错。
如果在.h文件中定义全局变量,并且将此全局变量赋初值,那么在多个引用此.h文件的.c文件中同样存在相同变量名的拷贝,关键是此变量被赋了初值,所以编 译器就会将此变量放入DATA段,最终在连接阶段,会在DATA段中存在多个相同的变量,它无法将这些变量统一成一个变量,也就是仅为此变量分配一个空 间,而不是多份空间,假定这个变量在.h文件没有赋初值,编译器就会将之放入BSS段,连接器会对BSS段的多个同名变量仅分配一个存储空间。
PB1 口,基本思路就是配置GPIO的思路
void IRAvoidInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
GPIO_InitStructure.GPIO_Pin = AVOID_PIN; // PB1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_Init(AVOID_PIN_GPIO , &GPIO_InitStructure);
}
避障函数: AVoidRun();
void AVoidRun(void)
{
if(AVOID_IO == BARRIER_N ) //BARRIER_N=0 无障碍物 BARRIER_Y=1 有障碍物
{
STM32_run(50,10); //直行
BEEP_RESET; //蜂鸣器不工作
LED_D3_RESET; //LED不亮
}
else
{
BEEP_SET; //蜂鸣器不工作
LED_D3_SET; //LED亮
STM32_brake(300); //停止300MS
STM32_back(50,400); //后退400MS
STM32_Left(50,500); //左转500MS
}
}
最后
以上就是畅快鞋子为你收集整理的STM32 学习笔记3-智能小车-红外避障红外避障基本原理:硬件: 软件:的全部内容,希望文章能够帮你解决STM32 学习笔记3-智能小车-红外避障红外避障基本原理:硬件: 软件:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复