三天让车跑起来!stm32循迹车 —— 第一天:基本模块使用方法

本文介绍了使用STM32制作循迹车的第一步,包括任务需求、材料分析、知识储备,重点讲解GPIO输入/输出、红外模块的理论知识和应用,涉及红外寻迹的基础原理和电机驱动的初步概念。通过实例代码展示了GPIO初始化和红外模块的程序设计,为后续的电机控制和寻迹功能打下基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明在前:本系列以程序设计为主,适用于刚学会32,想完成一个基本项目却不知道怎么上手的小伙伴。想学习硬件方面如:电路、画板等内容的朋友请不要在本系列耽误您的时间,关闭即可。

眼瞅着日子一天天地过去,学校却迟迟不传来开学的消息,不知道有多少小伙伴因疫情宅家而无缘赛场:_( 本人就是其中之一,这时候我本应该看着已经会学习的车自己在赛道上驰骋,和队友吃着火锅唱着歌,再抽时间调调参/doge。
正值五一假期,在这个充满了活力的第一天,我决定把我曾经参加过的第一个比赛拿出来与各位一起分享,分享我当初完成这个项目的全过程与心得体会,供小伙伴们参考,接下来,进入正文:

任务需求

赛道如图:让小车按照顺时针或逆时针完成赛道一周。
其中:

  • 蓝色圆点为铺在黑线旁边的磁铁
  • 红色矩形为放置在赛道上的障碍物
  • 绿色区域为停车区,也是小车出发前放置在内的区域,

要求小车在能够完成赛道一周的基础上,检测到场地内的磁铁并做出反应、顺利避开障碍物并回归赛道,检测到停止线后在指定区域内停车

在这里插入图片描述

任务分析

在明确了任务需求以后,我们来分析一下,想要用STM32做出来这个车,我们需要准备哪些材料与相关知识

材料

  1. STM32:本系列教程选用经济实惠好上手的stm32f103系列,并且是引脚非常多的zet6
  2. 红外模块:5到8个或者更多
  3. 电机×2 + 舵机 或者 电机×4 再或者单电机车模等等(没必要用这么贵的)
  4. 电机驱动,根据电机的数量选择2路×1,×2或者4路
  5. 干簧管——检测磁铁;蜂鸣器——作出响应
  6. 以及其他所有搭车、焊电路所需的材料,包括但不限于洞洞板、降压模块、电池电池盒、螺栓螺母、有能力的自己画个PCB等等等等
  • (想用摄像头寻迹的、或者编码器测速的,给个/doge自己体会,这样的水平还是不要再出来欺负其他同学了 /斜眼笑)

分析

  1. 首要任务是寻迹,所以要用到红外模块——能够区分黑白色的模块,来判断赛道情况。
  2. 在寻迹的过程中,我们要用电机使小车前进,再用舵机转向,或者4个电机利用差速转向。
  3. 避障:若是想省点经费的话,可以把朝下的红外模块掰成朝前的/doge,或者可以用光电对管,二者其实差不多。或者有余力的用超声波模块来实现避障。
  4. 磁铁检测:首选干簧管,十分便宜,但是也很容易被不小心损坏。
  5. 停车:同样用红外模块来实现。
  • 避障、磁铁检测和停车会在第三天详细说。

稍微整理下:
在这里插入图片描述

知识储备

主要用到的模块就只有:红外、驱动、电机舵机等等
在这里插入图片描述
没错,仔细分析后从总体来看,想要完成这个项目只需要会GPIO和TIM就够了,所以说想要做出来它,并不难,难的是把他做好,然鹅这是可以通过实践做到的(调车呀/斜眼笑)。所以,不需要感到迷茫,just do it !
下面对接下来三天的内容做个概述

说明

本系列的文章都将以2个方面讲述可能要用到的知识点:

  • 理论知识
  • 应用:模块应用 + 程序写法

正文

今天主要讲GPIO有关的内容,涉及到定时器的会则会在下期讲

GPIO输入/输出

理论知识

在学过几天32了以后,大家差不多也应该见过点灯之类的基本程序了,我们知道,每个模块和功能在被使用之前,都要完成其基本的配置——初始化。其实我在学32的时候点灯的操作就是初始化GPIO、设置好模式以后通过输出达到的点灯的效果。
那么想用32板子上的某些引脚,我们要做到第一步就是初始化GPIO。
按步骤来,分别是

  1. 使能端口时钟
  2. 端口配置
  3. 工作模式
  4. 端口速度
  5. 调用GPIO初始化函数
  6. (若是设置为输出的话则要在这一步选择初始高还是低)

现在以PA.1输出 1 为例,程序如下:

 void Out_Init(void){
   
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 GPIO_SetBits(GPIOA,GPIO_Pin_1);
 }

别看上面这一堆这么多,想看懂它还是很简单的,接下来就依次讲述这几句程序要注意的点:

  • RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIOA可以理解为选择了PA开头的引脚,ENABLE则是使能的意思,什么叫使能?可以通俗地理解为开启这个功能

  • GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

Pin_1则是说选择了PA端口的 PA.1 引脚

  • GPIO_InitStruct
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值