《博哥玩Arduino》-蓝牙小车

本文详细介绍了一款基于Arduino和蓝牙模块的智能小车项目。通过手机蓝牙发送编码指令,实现小车前进、后退、左转、右转及停止等功能。文章提供了蓝牙小车APP下载链接,以及Arduino端的测试代码,帮助读者快速上手。

1.前言

    一直对小车情有独钟,大学的时候做过一个语音小车参加校园电子设计大赛,不过那时语音识别还是有点傻乎乎的,识别度不高,不过也算是自己入门单片机的一个结晶。毕业之后就走了android开发,做了两年坑爹的android,学不到太多东西。近来兴趣兴起,又重新捣鼓一下单片机,萌发重新做一辆小车,初定手机蓝牙控制(因为蓝牙模块便宜,其实是因为穷),可以充分利用现在人手一部的android手机,做个简单的蓝牙遥控app,这样就可以把成本再降低点。由于做小车的过程中,发现缺了几个元器件,导致不能测试一下arduino程序,所以就先暂且放几天,等元器件到了再继续弄弄,所以就先写基础篇好了,后面再不上实操篇。

1.1 测试图片

image

image

image

image

image

image

image

image

image

image

image

image

1.2 工具

工具名称数量
arduino UNO R31
L298N电机驱动模块1
HC06 蓝牙模块1
小车底盘1
12V电源(7~9V)1
导线若干
蓝牙遥控app,楼主简单编写的,供大家下载和参考1

特别说明

  • L298N电机驱动模块,这个模块简单易懂

image

image

  • 蓝牙模块选用这个,比较方便,把蓝牙接上电源,再把蓝牙的Tx引脚接到开发板的Rx引脚,蓝牙Rx引脚置空,因为不需要把数据从开发板发到手机app,接好后可以直接用了。供电好以后,我们用手机连上蓝牙后,配对,密码一般是“1234”或者“0000”,输入好密码,就配对成功了。

  • 电源,我用了12V 18650电池。

  • 小车车板

image

2.蓝牙小车原理

  • app设定编码
  • 通过手机蓝牙发送编码
  • HC06收到编码,发送到arduino板子
  • 板子解析编码
  • 控制电机

上面说了,由于元器件问题,暂时不能讲解实操小车部分,那么就讲一下app端以及蓝牙模块测试程序。

2.1 蓝牙小车app

先贡献app (原来app没有适配到android6.0 所以我就直接上传到应用市场好了,供大家直接下载或者更新 以后不用再发邮箱了。)
app下载链接

  • 讲解一下app使用:

image

  • 点击打开app之后,首先会自动弹出提示要求打开手机蓝牙,可以看到四个方向箭头以及中间停止,用来控制小车前进后退左转右转,做这些操作前提是要连接上蓝牙小车的蓝牙模块HC06.所以需要首先点击右下角很像螺母的图标弹出下图:

image

  • 如果没有上图所示,请点击搜索蓝牙设备,不出意外应该会看到一个HC06,没有的话 请确保你的蓝牙模块电源连接正确。看到HC06,点击一下,如果是第一次配对,是需要输入密码:默认是0000或者1234.如果配对过,点击就自动连接了。

  • 蓝牙小车前进后退左转右转停止,都是一种状态,所以我们用编码去区分。在我的app里,我默认设置为: 前进3 后退4 左转1 右转2 停止0。当然,也可以自定义编码,点击左下角进入设置页面:
    image

编码只能是0-9数字以及大小写26个字母,足够使用。

2.2 蓝牙小车Arduino端测试代码

/*
日期:2016.10.31
功能:蓝牙小车测试按键值程序
*/

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()>0){
      char ch = Serial.read();
      if(ch == '1'){
         //前进
         Serial.println("up");
      }else if(ch == '2'){
         //后退
         Serial.println("back");
      }else if(ch == '3'){
         //左转
         Serial.println("left");
      }else if(ch == '4'){
        //右转
         Serial.println("right");
      }else if(ch=='0'){
        //停车
        Serial.println("stop");
      }else{
        //其他编码
        Serial.println(ch);
      }
    }
}

然后就可以用arduino IDE自带的串口调试器来查看,不出意外应该可以看到类似下面的打印:

默认的编码就显示 up down left stop right ,自定义编码就显示 编码值

2.3 蓝牙小车运行arduino代码

/*
日期:2016/11/05
功能:蓝牙小车程序
作者:单片机菜鸟
*/

#define IN1 6 // 7 6 右轮
#define IN2 7 
#define IN3 4 // 5 4 左轮
#define IN4 5 

#define LEFT '3' //左转编码
#define RIGHT '4'//右转编码
#define GO '1'//前进编码
#define BACK '2'//后退编码
#define STOP '0'//停止编码

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  initCar();
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()>0){
      char ch = Serial.read();
      if(ch == GO){
         //前进
         go();
      }else if(ch == BACK){
         //后退
         back();
      }else if(ch == LEFT){
         //左转
         turnLeft();
      }else if(ch == RIGHT){
        //右转
        turnRight();
      }else if(ch=='0'){
        //停车
        stopCar();
      }
    }
}

void initCar(){
  //默认全是低电平 停止状态
  digitalWrite(IN1,LOW);      
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);   
  digitalWrite(IN4,LOW);
}

/**
* 左转
*/
void turnLeft(){
  digitalWrite(IN1,HIGH);      
  digitalWrite(IN2,LOW);         //右轮前进
  digitalWrite(IN3,LOW);      
  digitalWrite(IN4,LOW);         //左轮不动
}

/**
* 右转
*/
void turnRight(){
  digitalWrite(IN1,LOW);      
  digitalWrite(IN2,LOW);         //右轮不动
  digitalWrite(IN3,HIGH);      
  digitalWrite(IN4,LOW);         //左轮前进
}

/**
* 前进
*/
void go(){
  digitalWrite(IN1,HIGH);      
  digitalWrite(IN2,LOW);         //右轮前进
  digitalWrite(IN3,HIGH);      
  digitalWrite(IN4,LOW);         //左轮前进
}

/**
* 倒车
*/
void back(){
  digitalWrite(IN1,LOW);      
  digitalWrite(IN2,HIGH);        //右轮后退
  digitalWrite(IN3,LOW);      
  digitalWrite(IN4,HIGH);        //左轮后退
}

/**
* 停车
*/
void stopCar(){
  initCar();
}
### 蓝牙调试器App控制STM小车遥控开发教程 #### 一、硬件准备 为了实现蓝牙调试器App对STM32小车的控制,需准备好如下硬件组件[^1]: - STM32F103C8T6核心板 - HC-05或HC-06蓝牙模块 - L298N电机驱动模块 - USB-TTL转换模块(用于配置蓝牙模块) - 直流减速电机×2 - 小车型号底盘及相关机械零件 #### 二、软件环境搭建 确保安装并熟悉以下工具链和IDE: - 安装最新版本的STM32CubeMX来初始化外设设置以及生成基础工程框架。 - 使用Keil MDK或其他兼容编译器编写应用程序代码。 #### 三、蓝牙模块配置 在正式编程前,先要通过USB-TTL线缆将电脑与蓝牙模块相连,并利用终端程序发送特定命令将其置于AT指令响应状态。如果遇到无法进入该模式的情况,则可能是因为使用的是新版本固件,在这种情况下可以尝试调整波特率至默认值(通常是9600bps),或者查阅具体型号的数据手册获取更多信息[^3]。 #### 四、通信协议设计 定义一套简单的字符型指令集以便于手机端应用向MCU传达动作意图。例如,“W”代表前进;“S”表示后退;“A”意味着左转而“D”对应右转操作等。这些字母可以通过串口中断服务函数接收处理,并据此改变PWM信号输出从而达到操控目的[^2]。 ```c // 接收来自蓝牙的数据并通过回调函数解析执行相应动作 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ char cmd; if(huart->Instance==USART1){ // 假定USART1被分配给蓝牙接口 HAL_UART_Receive(&huart1,&cmd,1,HAL_MAX_DELAY); switch(cmd){ case 'w':case 'W': MoveForward(); break; case 's':case 'S': MoveBackward(); break; case 'a':case 'A': TurnLeft(); break; case 'd':case 'D': TurnRight(); break; default : StopMotor(); } HAL_UART_Receive_IT(&huart1,(uint8_t*)&rxData,sizeof(rxData)); } } ``` #### 五、移动平台逻辑实现 依据上述接收到的不同方向指示符更新轮子的速度参数,进而完成直线行驶或是转弯等功能。这里假设已经完成了对于L298N控制器的具体调用封装工作,可以直接调用诸如`MoveForward()`这样的高层API来进行运动控制。 #### 六、Android/iOS客户端构建 最后一步就是创建一个简易图形界面的应用程序作为远程操纵台面。此部分不在本指南范围内讨论,但推荐采用MIT App Inventor这类无需深厚编码背景即可快速上手的设计平台制作原型验证概念。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

单片机菜鸟哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值