PCB设计
直播中

王雪

7年用户 971经验值
私信 关注
[资料]

使用带有Arduino Uno的蓝牙HC-05模块来控制伺服电机

描述
蓝牙伺服控制器

在这个项目中,我将向您展示如何在智能手机应用程序的帮助下通过蓝牙控制伺服电机。
对于这个项目,我们将使用带有 Arduino Uno 的蓝牙 HC-05 模块来控制伺服 9g。

这个项目是如何运作的?

这个项目有两个部分:

1. android 应用程序- 此应用程序将向我们的 HC-05 蓝牙模块发送各种数据包

2. 硬件 - 由 HC-05 蓝牙模块、一个 Arduino Uno 和一个伺服电机组成。



--> 这就是它的工作原理--

安卓应用程序向蓝牙模块发送数据包。蓝牙模块通过串行通信将此数据包发送到 Arduino Uno。Arduino Uno 被编程为根据数据包的值为伺服电机生成控制信号。这是一个流程图,以便更好地理解。



流程图
--> 如何开始
1.下载安卓应用。
2.上传Arduino uno上的代码。
3. 进行连接。



请注意,蓝牙 HC-05 模块需要连接 3.3v 而不是 5v vcc,否则会损坏模块。
4. 将蓝牙模块连接到 android 应用程序 - 当您启动硬件时,蓝牙模块将变得可见。因此,打开应用程序并单击查找附近的设备。选择 HC-05。一旦显示已连接,您就可以开始了!
您可以使用滑块或手动输入值来控制伺服臂。

伺服电机主要用于机器人技术中以进行精确控制。任何人——嗯,几乎任何人——都拥有具有蓝牙连接功能的移动设备。在本教程中,您将了解如何通过蓝牙连接使用 Arduino UNO 和 Android 设备无线控制伺服电机。最后,您将更加紧密地联系在一起,您将使事情变得更容易,并通过触摸屏控制伺服电机。
在本文中,我将向您介绍与 HC-06 蓝牙模块、Arduino UNO 和 SG90 伺服电机的蓝牙连接。此外,您需要本教程的额外资源,例如具有蓝牙功能的 Android 智能手机和从智能手机向蓝牙模块发送命令的应用程序。

在教程的第一部分,我将向您展示如何将 HC-06 蓝牙模块连接到 Arduino。在第二部分中,您可以找到进入HC-06蓝牙模块的AT命令模式的源代码。在这里您将设置您的设备名称、密码和 HC-06 模块的波特率。最后,在最后一部分中,您将看到如何设置 Androd 应用程序以及如何对 Arduino 进行编程以通过按一下按钮来转动伺服电机。

要求

连接正确的部分并使它们相互通信。这是这个项目的计划。如果您已经拥有以下所有部分或其中的一部分,那么您很幸运。如果您只购买缺少的部分,整个项目不会花费您任何费用,或者只需几美元。否则,你得花几十块钱买伺服电机、蓝牙模块、开发板和其他一些配件。为了清楚地了解成本,在该项目中使用的每个零件和配件的右侧都有一个在线商店的链接。以下是部分:
1 X Arduino UNO (Amazon) – 蓝牙模块与几乎所有 Arduino 型号兼容,但本教程中的所有代码和原理图均适用于 UNO。
1 X HC-06(亚马逊)——这是一个从属蓝牙模块,非常容易与 Arduino 一起使用,使用串行通信。
1 X SG90 伺服电机(亚马逊)——这可能是 DIY 社区中最受欢迎的伺服电机。
7 X 公对公跳线(亚马逊)。
1 X 面包板(亚马逊)。
1 X And​​roid 智能手机(亚马逊)。

设置硬件

在本节中,我将向您展示如何连接 Arduino UNO 和 HC-06 蓝牙模块。
要使用 HC-06 模块,只需将 VCC 引脚连接到 Arduino 上的 3.3V 输出,将 GND 引脚连接到任何 Arduino GND 引脚,然后将蓝牙模块的 TX 引脚连接到 Arduino UNO 的引脚 10 和 RX 引脚蓝牙连接到 Arduino 的引脚 11。
对于伺服电机,将棕色线连接到任何 Arduino GND 引脚,将 SG90 伺服的红线连接到 Arduino 的 5V 输出,将伺服电机的橙色线连接到 Arduino 的数字引脚 9。

Arduino Sketch 和 AT 命令
如果蓝牙模块是第一次使用,您必须询问它以更改某些设置。使用所谓的 AT 命令更改设置。
HC-06 模块允许您更改有限数量的设置。您可以更改设备名称、PIN 码和波特率。
您必须在与 Arduino 一起使用的 IDE 中运行以下 AT 命令。这些命令显示安装在 HC 蓝牙模块上的固件版本,更改 PIN,更改模块名称,并将波特率设置为 9600。

#define BLUETOOTH_SPEED 9600 //这是HC-06使用的默认波特率

SoftwareSerial mySerial(10, 11); // 发送 | 接收
// 将 HC-06 TX 连接到 Arduino 引脚 10 RX。
// 将 HC-06 RX 连接到 Arduino 引脚 11 TX。


无效设置(){
  序列号.开始(9600);


  Serial.println("开始配置!");
  mySerial.begin(BLUETOOTH_SPEED);
  延迟(1000);

  // 应该以 OK 响应
  Serial.print("AT 测试命令为:");
  mySerial.print("AT");
  等待响应();

  Serial.println("----------------");

  // 应该用它的版本来响应
  Serial.print("AT 版本为:");
  mySerial.print("AT+VERSION");
  等待响应();

  Serial.println("----------------");
  // 设置引脚
  Serial.print("设置引脚:");
  mySerial.print("AT+PIN1234");
  等待响应();

  Serial.println("----------------");
  // 设置名称为 ROBOT_NAME
  Serial.print("设置名称:");
  字符串 rnc = String("AT+NAME") + String(ROBOT_NAME);
  mySerial.print(rnc);
  等待响应();

  //设置波特率为9600
  //AT+BAUD1 OK1200 设置波特率为1200
  //AT+BAUD2 OK2400 设置波特率为2400
  //AT+BAUD3 OK4800 设置波特率为4800
  //AT+BAUD4 OK9600 设置波特率为9600
  //AT+BAUD5 OK19200 设置波特率为19200
  //AT+BAUD6 OK38400 设置波特率为38400
  //AT+BAUD7 OK57600 设置波特率为57600
  //AT+BAUD8 OK115200 设置波特率为115200
  //AT+BAUD9 OK230400 设置波特率为230400
  //AT+BAUDA OK460800 设置波特率为460800
  //AT+BAUDB OK921600 设置波特率为921600
  //AT+BAUDC OK1382400 设置波特率为1382400

  Serial.println("----------------");
  // 将波特率设置为 9600
  Serial.print("设置波特率:");
  mySerial.print("AT+BAUD4");
  等待响应();

  Serial.println("配置完成!");
}


无效循环(){


  }



无效的等待响应(){
    延迟(2000);
    而(mySerial.available()){
      Serial.write(mySerial.read());
    }
    Serial.write("
");
}
Android 应用程序和 Arduino 草图
我们非常接近于使用 Android 智能手机无线控制 SG90 伺服电机。这通常通过使用启用设备蓝牙功能的 Android 应用程序来完成。
在 Android 设备上启用蓝牙功能的许多应用程序中,我选择了 Arduino 蓝牙控制器应用程序,因为它免费且易于使用。
在运行 Android 应用程序之前,请确保 HC-06 蓝牙模块已启动并正在运行。
在您的设备上安装应用程序后,您必须扫描设备,输入上面脚本设置的 PIN 码,然后连接蓝牙模块。
在本教程中,我将“控制器模式”用于命令。


对于本教程,我使用“控制器模式”
界面布局提供了 10 个按钮,专门设计用于在按下时连续发送命令。目前,我们只使用两个按钮:一个按钮发送“1”,另一个按钮发送“2”。因此,使用应用程序的设置为两个按钮设置值“1”和值“2”。这些值将被蓝牙模块接收并在 Arduino 草图中用于控制伺服电机。


我使用这两个按钮将命令发送到蓝牙模块
Android应用程序设置完成后,我们必须回到Arduino并上传代码来控制伺服电机。下面是在特定位置转动伺服电机的 Arduino 草图。


#include
#include <伺服.h>

SoftwareSerial mySerial(10, 11); // 接收 | 德克萨斯州

伺服伺服;  

整数伺服引脚 = 9;
int 伺服角度 = 0; //以度为单位的伺服位置

字符命令;

无效设置(){
  序列号.开始(9600);
  mySerial.begin(9600);
  Serial.println("您已通过蓝牙连接");
  伺服.attach(servoPin);
}


无效循环(){
  如果(mySerial.available())
  {
    命令=(mySerial.read());
    如果(命令=='1')
    {
      Serial.println("伺服电机转10度");
      伺服写入(10);              
      延迟(500);                  
   
    }

    否则如果(命令=='2')
    {
      Serial.println("伺服电机转120度");
      伺服写入(120);              
      延迟(500);
    }

  }


}










更多回帖

发帖
×
20
完善资料,
赚取积分