STM32红外避障&红外寻迹
一、功能实现1、红外避障:单片机通过安装在小车前端两侧的红外避障模块检测障碍物与小车间的距离,加以判断实现避障功能。 - 红外寻迹:单片机通过安装在小车底盘两侧的红外寻迹模块检测黑线与小车的相对位置,加以判断实现寻迹功能。
2、元器件选择
2.1单片机型号选择单片机选择STM32F103C8T6,此款单片机有48个引脚,72M主频,64K Flash、20K RAM,3个普通定时器,1个高级定时器,2个SPI,2个I2C,3个串口,1个USB,1个CAN,37个可使用IO口,2个12位10通道ADC。 如此丰富的内设硬件资源足以应付大多数场合使用,相对于STM32F103同系列其他单片具有机性价比高,网络资源多、例程丰富,适合STM32入门初探与产品设计应用。 

单片机资料网盘下载:http://pan.baidu.com/s/1hrGMLA8 2.2红外避障模块选择红外数字反射传感器,一种集发射与接收于一体的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出,因而有效的避免了可见光的干扰。透镜的使用,也使得这款传感器最远可以检测80厘米距离。可以应用于机器人避障、走迷宫机器人、流水线计件、多功能提醒器。 
资料下载链接:http://pan.baidu.com/s/1miR2bbU 2.3红外寻迹模块选择采用TCRT5000红外反射传感器,一种集发射与接收于一体的光电传感器,它由一个红外发光二极管和一个NPN红外光电三极管组成。检测反射距离1mm-25mm适用,传感器特设M3固定安装孔,调节方向与固定方便易用,使用宽电压LM393比较器,信号干净,波形好,驱动能力强,超过15mA。可以应用于机器人避障、机器人进行白线或者黑线的跟踪,可以检测白底中的黑线,也可以检测黑底中的白线,是寻线机器人的必备传感器。流水线计件、电度表脉冲数据采样、传真机碎纸机纸张检测等众多场合。 
资料下载链接:http://pan.baidu.com/s/1i5FwN4L 2.4电机驱动模块

资料下载链接:http://pan.baidu.com/share/link?shareid=457085&uk=2302102993 2.5智能小车底盘选择
3、原理图
准备好以上模块后就可以组装出一套具有寻迹避障功能的STM32智能小车了。 4、连线按照GPIO口分配表进行连线 

STM32F103单片机最小系统 
L298N电机驱动模块 
注意,全部模块都要共地(GND要连在一起)
单片机源程序如下:
- /* 包含头文件 ----------------------------------------------------------------*/
- #include "stm32f1xx_hal.h"
- #include "pwm.h"
- #include "gpio.h"
- #include "delayus.h"
- #include "direction.h"
- #include "avoid.h"
- #include "track.h"
- /* 扩展变量 ------------------------------------------------------------------*/
- /* 私有函数原形 --------------------------------------------------------------*/
- /* 函数体 --------------------------------------------------------------------*/
- /**
- * 函数功能: 系统时钟配置
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明: 无
- */
- void SystemClock_Config(void)
- {
- RCC_OscInitTypeDef RCC_OscInitStruct;
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 外部晶振,8MHz
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 9倍频,得到72MHz主时钟
- HAL_RCC_OscConfig(&RCC_OscInitStruct);
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系统时钟:72MHz
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB时钟:72MHz
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // APB1时钟:36MHz
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // APB2时钟:72MHz
- HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
- // HAL_RCC_GetHCLKFreq()/1000 1ms中断一次
- // HAL_RCC_GetHCLKFreq()/100000 10us中断一次
- // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次
- HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); // 配置并启动系统滴答定时器
- /* 系统滴答定时器时钟源 */
- HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
- /* 系统滴答定时器中断优先级配置 */
- HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
- }
- /**
- * 函数功能: 主函数.
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明: 无
- */
- int main(void)
- {
- /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
- HAL_Init();
- /* 配置系统时钟 */
- SystemClock_Config();
-
- /**************GPIO******************************************************************/
- GPIOA_Init();//初始化L298N接口
- GPIOB_Init();//初始化寻迹和红外避障模块接口
- /***************PWM******************************************************************/
- /* 通用定时器初始化并配置PWM输出功能 */
- GENERAL_TIMx_Init();
-
- /* 启动通道PWM输出 */
- HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_1);
- HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_2);
- TIM3->CCR1=TIM3->CCR2=1000;//调车速,范围0~1000,数值越大速度越快
-
- /* 无限循环 */
- while (1)
- {
- Avoid();//避障
- // Track();//寻迹
- }
- }
复制代码
所有资料51hei提供下载:
STM32寻迹避障-资料.7z
(3.64 MB, 下载次数: 397)
|