基于stm32避障+蓝牙控制小车(详细)

闲话:最近很忙,帮朋友做了一个毕设,关于stm32的避障和蓝牙控制小车,昨天刚买器件,这里每天记录一下进程,以免自己摆烂,嘻嘻,这是自己大一就很想做的设计,一直没时间,借此机会,圆一下梦。

这个接线,幼儿园的小朋友都可以搞定啦
在这里插入图片描述

回到主题
最终实现功能:小车遇到障碍,随机更改方向以及蓝牙控制小车前进+后退+左右转

所需材料硬件材料:

1.stm32f103c8t6核心板
2.ST-Link (烧录代码)
3.4WD亚克力小车地盘
4.SG90舵机+超声波模块(HC-SR04)
5.杜邦线若干
6.蓝牙模块(HC-05)
7.L298N(电机驱动模块)
8.18650锂电池

所需软件:
1.keil5

硬件终于到了,迫不及待开干了,目前已经完成舵机,蓝牙模块的测试,等不及了吧,快看下面步骤吧!

舵机模块:用的是SG90,这个主要用的是PWM,控制占空比来控制舵机的角度,这次测试只是简单的试试是否能让其转到,效果是可以,到后期整合起来的时候再来精确角度,现在完成这个就可以了。
用的是定时器产生周期,然后通过他的定时器通道来控制占空比(每个定时器有4个通道),因为我用的是TM2的通道2,根据datasheet,可以知道,信号脚是PA1,因为他是默认模式,因此不需要开启AFIO复用时钟,看下面代码
在这里插入图片描述

在这里插入图片描述
20ms
//0.5ms--------------0度;
//1.0ms------------45度;
//1.5ms------------90度;
//2.0ms-----------135度;
//2.5ms-----------180度;

我这里周期是20ms

这就实现的简单的让舵机转动。

蓝牙模块

步骤:

1.首先去MIT可视化编程网站开发个简单的蓝牙手机app,开发很简单,百度搜一下就可以开发完成,这里不详细论述,效果如下图
在这里插入图片描述

蓝牙开发编程逻辑如下图,跟我的一模一样就好了

在这里插入图片描述

2.然后配置蓝牙的AT指令。
连线说明:

蓝牙 USB-TTL(CH340)
RX--------->TX
TX--------->RX
GND --------->GND
VCC--------->5V
EN--------->3.3V

然后打开串口助手
在这里插入图片描述
最重要的是这里,一开始的波特率设置位38400,默认的,记得点击下面的发送新行,因为AT指令都是\r\n结尾的。完成什么两步,就可以实现AT质量了。具体有什么AT指令,可以看蓝牙AT指令开发手册,这里不详细说明。

我们主要发:
AT+NAME? //查看蓝牙名字
AT+ROLE? //查看主从模式
AT+UART=9600,0,0 //设置波特率,奇偶校验位,停止位

AT指令配置完后,拔掉ENABLE这个根线,再插入电脑,记得波特率选择9600,这时候手机连接蓝牙,就可以实现手机发送信息,串口助手接收啦,看效果图吧

在这里插入图片描述
好啦,这里就实现了蓝牙的配置啦,下一步就是通过串口助手,控制电机的驱动就完事啦!

这次完成了电机的驱动。我一共有4个电机,我将他们这样串联,如果是2个电机,就不用和我这样串联了,就直接接上电机驱动口就行了,电机和L298N的接线图如下,记得把PWM的信号线接上单片机,我这里没接。
在这里插入图片描述
我左边的电机用的是TIM3的通道3和4产生的pwm
在这里插入图片描述

接下来就是蓝牙控制电机了
这里只需要在上面配置蓝牙的基础上,在UART1的串口中断改一下代码就行,像我这样
在这里插入图片描述
这时候,蓝牙记得接上单片机,不然没反应的哦

蓝牙模块 stm32
VCC 5V
GND GND
TXD RXD
RXD TXD

这样就可以了,上面的只要一步步跟着来,一定可以实现的。
到这里,蓝牙控制就实现了,现在得让它自己避障
如果上面都实现,只需要在主函数改成这样的代码就行了
在这里插入图片描述
发不了视频,就发张图片看看吧,最后说一句,这些不是很难的,大家一步一步跟着我来,一定可以实现的,布布线,这就算完成啦!最后要代码的关注下,私聊我,都是无偿给的哈(因为链接容易失效),有什么不懂的也可以问我哈
在这里插入图片描述

### STM32蓝牙调试器中摇杆相关的代码示例 为了实现STM32通过蓝牙接收来自手机端的摇杆数据并处理这些数据,通常需要完成几个主要部分的工作: #### 配置ADC读取电位器值 由于摇杆的位置变化会被转换成模拟信号电压的变化,因此可以通过连接至STM32 ADC接口上的四个电位器来获取摇杆的状态。配置ADC以定期采样这四个通道的数据。 ```c // 初始化ADC用于读取摇杆位置 void MX_ADC_Init(void){ __HAL_RCC_ADC1_CLK_ENABLE(); hadc.Instance = ADC1; hadc.Init.ScanConvMode = DISABLE; // 单次转换模式 hadc.Init.ContinuousConvMode = ENABLE; // 连续转换模式开启 hadc.Init.DiscontinuousConvMode = DISABLE; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.NbrOfConversion = 4; // 设置要转换的数量为4个通道 HAL_ADC_Init(&hadc); } ``` #### UART初始化设置 为了让STM32能够与蓝牙模块通信,需正确配置UART外设,并确保其波特率匹配蓝牙模块的要求。 ```c // 初始化USART用于与蓝牙模块通讯 static void MX_USART1_UART_Init(void){ huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK){ Error_Handler(); } } ``` #### 数据解析逻辑 当接收到蓝牙传输过来的数据包时,程序应该能识别出哪些字节代表了摇杆的方向信息,并据此调整机器人的行为动作。 假设每条消息由固定长度组成,其中包含了两个字节表示X轴方向,另外两个字节表示Y轴方向,则可以在`while(1)`循环内加入如下代码片段来进行简单的命令解析: ```c uint8_t buffer[4]; int x, y; if(HAL_UART_Receive(&huart1, buffer, sizeof(buffer), HAL_MAX_DELAY)== HAL_OK){ x = ((buffer[0]<<8)|buffer[1]) - 512; // 假定原始范围是从0~1023映射到-512 ~ +512之间 y = ((buffer[2]<<8)|buffer[3]) - 512; // 根据(x,y)坐标决定如何移动机器人... } ``` 以上展示了基本框架下的编码思路[^1]。实际应用中可能还需要考虑更多细节问题,比如错误检测机制、超时重传策略等。
评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挨踢玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值