使用STM32打造的简易蓝牙遥控小车

基于STM32的最简易蓝牙遥控小车

  • 硬件准备
  • 硬件连接
  • STM32cubeMX配置
  • 代码部分
  • 视频演示

  • 本篇博客主要针对的读者为有一定单片机基础,但是第一次自制蓝牙遥控小车的小白同学,所用物件型号选择的是作者最熟悉、最常用的,老手请自行发挥。

    硬件准备

    硬件包括小车的机械部分、STM32f103c8t6最小系统板、ST-LINK下载器,HC-05蓝牙模块、CH340模块、L298N电机驱动模块,焊接设备、一些杜邦线
    如下图所示:






    如果是完全的新手的话,做这个小车的成本在200元左右,包括焊接设备,杜邦线等。

    硬件连接

    首先按照小车的图纸把小车的机械部分装好(只需要一点点动手能力就能搞定,不要学我扔给爸爸装orz)。

    小车整体电路图:


    连接完成实物图:

    这样连接完成后线比较麻烦,可以用一个扎带扎好。

    STM32cubeMX配置

    本实验基于HAL库,需用到stm32cubeMX进行配置,软件需要安装的有keil5,stm32cubeMX,软件的安装请参考其他博客
    进入到stm32cubeMX,选择芯片为stm32f103c8t6
    RCC的配置:

    下载方式:

    串口配置:

    串口需打开中断:

    然后需要选择4个io口(输出模式)作为电机驱动的输入(图中的IN1~IN4):

    时钟配置:

    然后写完文件名称,勾选生成.c和.h文件后生成代码。

    代码部分

    我们主要写的部分就是蓝牙遥控部分(串口通信)和小车电机控制部分:
    motor.c

    #include "stm32f1xx_hal.h"
    #include "main.h"
    #include "motor.h"
    #include "usart.h"
    uint8_t BackData[1];
    void Stop(void)
    {
    	IN1_Reset;
    	IN2_Reset;
    	IN3_Reset;
    	IN4_Reset;
    }
    void Turnleft(void)
    { 
    	IN1_Reset;
    	IN2_Reset;
    	IN3_Reset;
    	IN4_Set;
    }
    void Turnright(void)
    {
    	IN1_Reset;
    	IN2_Set;
    	IN3_Reset;
    	IN4_Reset;
    }
    void Turnback(void)
    {
    	IN1_Set;
    	IN2_Reset;
    	IN3_Set;
    	IN4_Reset;	
    }
    void Turnfront(void)
    {
    	IN1_Reset;
    	IN2_Set;
    	IN3_Reset;
    	IN4_Set; 
    }
    void Leftback(void)
    {
    	IN1_Set;
    	IN2_Reset; 
    	IN3_Set;
    	IN4_Set;	
    }
    void Rightback(void)
    {
    	IN1_Reset;
    	IN2_Reset;
    	IN3_Set;
    	IN4_Reset;
    }
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
    	UNUSED(huart);
    	HAL_UART_Transmit(&huart1, (uint8_t *)BackData, 1, 100);   
    	HAL_UART_Receive_IT(&huart1, (uint8_t *)BackData, 1);
    }
    

    motor.h

    #ifndef _MOTOR_H
    
    #define _MOTOR_H
    
    #define IN1_Set         HAL_GPIO_WritePin(IN1_GPIO_Port,IN1_Pin,GPIO_PIN_SET)
    #define IN1_Reset       HAL_GPIO_WritePin(IN1_GPIO_Port,IN1_Pin,GPIO_PIN_RESET)
    
    #define IN2_Set         HAL_GPIO_WritePin(IN2_GPIO_Port,IN2_Pin,GPIO_PIN_SET)
    #define IN2_Reset       HAL_GPIO_WritePin(IN2_GPIO_Port,IN2_Pin,GPIO_PIN_RESET)
    
    #define IN3_Set         HAL_GPIO_WritePin(IN3_GPIO_Port,IN3_Pin,GPIO_PIN_SET)
    #define IN3_Reset       HAL_GPIO_WritePin(IN3_GPIO_Port,IN3_Pin,GPIO_PIN_RESET)
    
    #define IN4_Set         HAL_GPIO_WritePin(IN4_GPIO_Port,IN4_Pin,GPIO_PIN_SET)
    #define IN4_Reset       HAL_GPIO_WritePin(IN4_GPIO_Port,IN4_Pin,GPIO_PIN_RESET)
    
    void MotorInit(void);
    
    void Turnleft(void);
    
    void Turnright(void);
    
    void Turnback(void);
    
    void Turnfront(void);
    
    void Stop(void);
    
    void Leftback(void);
    
    void Rightback(void);
    
    void contorl(void);
    
    #endif
    

    main.c
    需要在主函数里添加外部定义数组:

    extern uint8_t BackData[1];
    

    初始配置:

    Stop();  //先让小车停止
    HAL_UART_Receive_IT(&huart1, (uint8_t *)BackData, 1); //开启接收中断
    

    然后就在while循环里根据蓝牙收到的指令进行对应的操作就好

    while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
    		if(BackData[0]==2)
    		{
    			Turnfront();
    		}
    		else if (BackData[0]==4)
    		{
    			Turnleft();
    		}
    		else if (BackData[0]==5)
    		{
    			Stop();
    		}
    		else if (BackData[0]==6)
    		{
    			Turnright();
    		}
    		else if (BackData[0]==8)
    		{
    			Turnback();
    		}
      }
    

    代码部分就结束了,编译后下载到STM32中。
    接下来配置蓝牙串口软件:

    上图是配置之后的成品,对于每个按键的编辑如下,按下状态的对应关系:2前进,4左转,5停止,6右转,8后退,松开状态都是5,都选择16进制

    接下来就可以给小车开关打开,连接上蓝牙然后使用了。

    视频演示

    小车演示视频

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用STM32打造的简易蓝牙遥控小车

    发表评论