描述
蓝牙伺服控制器
在这个项目中,我将向您展示如何在智能
手机应用程序的帮助下通过蓝牙控制伺服电机。
对于这个项目,我们将使用带有 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 Android 智能手机(亚马逊)。
设置硬件
在本节中,我将向您展示如何连接 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);
}
}
}