1. 硬件选型与传感器配置
做循迹小车的第一步就是选对硬件,我刚开始玩的时候也踩过不少坑。STM32我推荐用F103C8T6,这款芯片性价比高,资源足够,而且社区资料丰富,遇到问题容易找到解决方案。五路灰度传感器建议选择HJ-XJ5模块,这个模块自带灵敏度调节旋钮,实测下来对不同颜色表面的适应性很强。
传感器的安装位置很有讲究。我建议将五个传感器等距排列,间距控制在2-3厘米左右。中间三个传感器(L1、M0、R1)负责主要的循迹检测,两端的L2和R2则专门用于路口识别。安装高度要调整到离地面1-2厘米,太高了检测不稳定,太低了容易刮到地面。
接线时要注意电源隔离。传感器最好单独供电,或者至少加上滤波电容,我在实际测试中发现电源噪声会严重影响传感器读数稳定性。STM32的GPIO口配置为浮空输入模式,记得开启对应的时钟:
// 传感器GPIO初始化
void Sensor_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
// 配置为浮空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; // L1
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 其他传感器引脚类似配置
}
灵敏度调节是个细致活。先用螺丝刀将每个传感器的旋钮调到中间位置,然后让小车在黑线上来回测试,观察LED指示灯的变化。理想状态是传感器检测到黑线时指示灯亮起,离开黑线时熄灭,反应要灵敏但不能过于敏感。
2. 传感器数据处理与状态判定
读取传感器数据后,我们需要将其转换为有用的状态信息。五路传感器的读数组合能反映出小车相对于黑线的位置状态。我通常定义几种状态:居中、偏左、偏右、路口和丢线。
// 传感器状态读取函数
void Sensor_Read_Data(void)
{
uint8_t L2 = GPIO_ReadInputDataBit(L2_GPIO_PORT, L2_GPIO_PIN);
uint8_t L1 = GPIO_ReadInputDataBit(L1_GPIO_PORT, L1_GPIO_PIN);
uint8_t M0 = GPIO_ReadInputDataBit(M0_GPIO_PORT, M0_GPIO_PIN);
uint8_t R1 = GPIO_ReadInputDataBit(R1_GPIO_PORT, R1_GPIO_PIN);
uint8_t R


5万+

被折叠的 条评论
为什么被折叠?



