news 2026/4/16 17:18:53

【stm32简单外设篇】- 红外避障 / 红外循迹模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【stm32简单外设篇】- 红外避障 / 红外循迹模块

一、适用场景
适用场景:移动机器人避障(左右转/刹停)、循迹小车(黑线/白线识别)、路径纠正(PID 控制输入)、自动导航原型、嵌入式传感器融合练习(多传感器融合与滤波)、课堂讲解数字/模拟传感器接入与标定。

二、器材清单

红外避障模块/红外循迹传感器模块×1

stm32f103(或其它 STM32)开发板 ×1

若干杜邦线、焊线、面包板 ×若干

稳定电源(3.3V/5V 按模块标注)×1

三、工作原理(要点)

避障模块

内部包含 IR 发射 LED + 接收器(光电二极管或光电三极管)以及比较器/放大电路。发射 IR,遇到近距离障碍物反射回接收器,电平变化由比较器输出数字信号(DO)。多数模块在板上集成了灵敏度电位器和指示 LED。

循迹模块

每一路包含 IR 发射 LED 与光电二极管/光电三极管,发射向地面红外并接收反射。白色(或亮色)反射强,黑色(或暗色)反射弱。模块常给出 AO(模拟强度)和数字 DO(经比较器阈值后的结果)两种输出。阵列(3/5/8)用于判断车辆在轨迹上的横向偏移。

四、接线示意

VCC → 5V

GND → GND

标准库

PC0 → DO

HAL库

PA0 → DO

五、示例代码
标准库

#include "stm32f10x.h" #include "forward_direction.h" int main() { em_init(); while(1) { if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 0 && GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == 0) { stop(); }else if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 0 && GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == 1) { goright(); }else if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 1 && GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == 0) { goleft(); }else if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0) == 1 && GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == 1) { goforward(); } } // return 0; }

HAL库

#include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ UART_HandleTypeDef huart1; /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART1_UART_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 1) HAL_UART_Transmit(&huart1,"有黑线或距离物体过远r\n", strlen("有黑线或距离物体过远\r\n"), HAL_MAX_DELAY); else HAL_UART_Transmit(&huart1,"无黑线或距离物体过近\r\n", strlen("无黑线或距离物体过近\r\n"), HAL_MAX_DELAY); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }

六、讲解视频

https://www.bilibili.com/video/BV1j5mcBUEVr/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

https://www.bilibili.com/video/BV1a1mwBjERe/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

https://www.bilibili.com/video/BV1YCmwBmEeS/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 16:23:51

3分钟快速上手:Obsidian B站视频嵌入完整教程

想要在Obsidian笔记中直接播放B站视频内容吗?🎯 今天我要为你介绍一款超实用的Obsidian视频插件,让你在知识管理过程中实现B站嵌入功能,打造沉浸式学习体验! 【免费下载链接】mx-bili-plugin 项目地址: https://git…

作者头像 李华
网站建设 2026/4/16 0:39:46

终极实战指南:Newtonsoft.Json-for-Unity高效集成与性能调优

终极实战指南:Newtonsoft.Json-for-Unity高效集成与性能调优 【免费下载链接】Newtonsoft.Json-for-Unity 项目地址: https://gitcode.com/gh_mirrors/newt/Newtonsoft.Json-for-Unity 在Unity开发中,处理JSON数据是每个开发者都会遇到的挑战。N…

作者头像 李华
网站建设 2026/4/16 13:56:49

PPTist在线PPT编辑器:零门槛制作专业演示文稿

PPTist在线PPT编辑器:零门槛制作专业演示文稿 【免费下载链接】PPTist 基于 Vue3.x TypeScript 的在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,实现在线PPT的编辑、演示。支持导出PPT文件。 …

作者头像 李华
网站建设 2026/4/16 10:56:03

Lyciumaker:重新定义三国杀卡牌创作的智能设计平台

Lyciumaker:重新定义三国杀卡牌创作的智能设计平台 【免费下载链接】Lyciumaker 在线三国杀卡牌制作器 项目地址: https://gitcode.com/gh_mirrors/ly/Lyciumaker 想要打造独一无二的三国杀卡牌吗?Lyciumaker这款专业的在线卡牌制作器将成为您创意…

作者头像 李华
网站建设 2026/4/16 14:24:58

碧蓝航线Perseus完整配置指南:从零基础到实战精通

碧蓝航线Perseus完整配置指南:从零基础到实战精通 【免费下载链接】Perseus Azur Lane scripts patcher. 项目地址: https://gitcode.com/gh_mirrors/pers/Perseus 想要快速上手碧蓝航线Perseus配置,实现游戏脚本的稳定运行吗?作为一款…

作者头像 李华
网站建设 2026/4/15 21:23:59

如何从图表图像中快速提取数据:终极免费工具使用指南

如何从图表图像中快速提取数据:终极免费工具使用指南 【免费下载链接】PlotDigitizer A Python utility to digitize plots. 项目地址: https://gitcode.com/gh_mirrors/pl/PlotDigitizer 还在为从科研论文图表中手动提取数据而烦恼吗?&#x1f9…

作者头像 李华