在机器人中使用伺服电机进行精确控制很常见。在本文中,我们将向您展示如何使用Arduino UNO开发板无线连接一个伺服电机,并且通过蓝牙连接一台Android设备。我们已经介绍过如何使用Arduino开发板控制伺服电机,这次我们使用无线蓝牙模块HC-06控制伺服电机。
所需的材料
● Arduino UNO开发板
● HC-05或HC-06蓝牙模块
● 伺服电机
● Playstore的Roboremo App
● 面包板
● 连接导线
HC-06蓝牙模块
蓝牙可以运行在以下两种模式:
1. AT指令设置模式
2. 工作模式
在AT指令设置模式下,我们可以配置蓝牙属性,如蓝牙信号的名称、密码、运行波特率等。工作模式是我们可以在PIC单片机和蓝牙模块之间发送和接收数据的一种模式。因此,在本教程中,我们将仅使用工作模式进行测试。AT指令设置模式保留为默认设置。设备名称将是HC-05,密码将为0000或1234,最重要的是所有蓝牙模块的默认波特率为9600。
该模块工作在5V电源,信号引脚工作在3.3V,所以模块内部安装有一个3.3V稳压器。因此我们不必担心。在六个引脚中工作模式只使用了四个引脚。引脚连接表如下所示
序号 | HC-05模块的引脚 | MCU的引脚 | PIC的引脚 |
1 | Vcc | Vdd | 第31脚 |
2 | Gnd | Gnd | 第32脚 |
3 | Tx | RC6 / Tx / CK | 第25脚 |
4 | Rx | RC7 / Rx / DT | 第26脚 |
5 | State | NC | NC |
6 | EN(Enable) | NC | NC |
电路原理图
使用Arduino开发板蓝牙控制伺服电机的电路图:
配置Roboremo App以控制伺服电机
第1步: 从Android Play商店下载Roboremo应用程序并将其安装到您的智能手机中。安装完成后,您将看到如下图左侧所示的应用程序窗口,然后点击“Menu”按钮,您将看到如下图右侧所示的窗口:
第2步: 然后点击“connect”按钮,你会看到如下图3所示的窗口,然后你需要选择'Bluetooth RFCOMM',然后你就可以将HC-06蓝牙模块连接到Android应用'Roboremo'。
第3步: 连接HC-06蓝牙模块后,返回到第2步右侧的窗口,然后点击'edit ui'按照您的需要创建用户界面。
当点击''edit ui"时,您将再次看到图1所示的窗口,然后在屏幕上的任意位置点击屏幕,您将看到如下图所示的应用程序窗口,并选择“Button”以获得一个按钮模板。
第4步: 选择按钮模板后,您将在屏幕上获得一个按钮进行编辑。您可以调整大小并将结构移动到屏幕的任何位置。现在,为了设置通过蓝牙点击发送的值,需要设置“set press action”,并键入您想要从该特定按钮发送的值。就像我们通过按下Roboremo android应用程序中的'Start'按钮发送'1'来旋转伺服。
第5步: 最终我们设计了一个用户界面来使用智能手机来控制伺服电机。
代码和说明
本文末尾给出了使用蓝牙控制伺服电机的完整Arduino代码。
Arduino自带有伺服电机库,它处理所有PWM相关的事情来旋转伺服,你只需要输入你想旋转的角度,然后使用函数servo1.write(angle)即可;该函数将使伺服电机旋转到所需的角度。
因此,我们首先定义伺服电机库和软件串行库用于定义Rx和Tx引脚。
#include
#include
在下面的代码中,我们正在初始化Arduino的Rx和Tx引脚,为伺服电机和其他事情定义变量。
Servo myServo;
int TxD = 11;
int RxD = 10;
int servoposition;
int servopos;
int new1;
SoftwareSerial bluetooth(TxD, RxD);
现在,将所有变量和组件设置为初始阶段。在这里,我们使用Arduino开发板的第9脚连接了伺服电机,并将伺服电机的初始位置设置为0度。串行和蓝牙通信的波特率也设置为9600。
void setup() {
int pos=0;
myServo.attach(9);
myServo.write(0);
Serial.begin(9600); // start serial communication at 9600bps
bluetooth.begin(9600);
}
在void loop()函数中,Arduino将始终检查输入值,并根据智能手机接收到的值旋转伺服器。所有的值将通过串行通信接收。
如果该值为0,伺服将旋转到0度。同样,如果我们从蓝牙应用程序发送45、90、135和180,则伺服器将分别旋转到45、90、135和180度角。
void loop() {
if (bluetooth.available()){
String value = bluetooth.readString();
servoposition = value.toInt();
if (value.toInt() == 0){
Serial.println(servoposition);
myServo.write(0);
}
if (value.toInt() == 45){
Serial.println(servoposition);
myServo.write(45);
}
if (value.toInt() == 90){
Serial.println(servoposition);
myServo.write(90);
}
if (value.toInt() == 135){
Serial.println(servoposition);
myServo.write(135);
}
if (value.toInt() == 180){
Serial.println(servoposition);
myServo.write(180);
}
如果我们通过按下开始按钮发送值'1',伺服将一直旋转,直到按下停止按钮。在这里我们按下停止按钮时发送'2',Arduino开发板读取后,它将跳出while循环,伺服电机停止旋转。
while(value.toInt()==1){
if (bluetooth.available())
{
value = bluetooth.readString();
Serial.println(value);
if (value.toInt()==2)
{Serial.println("YYY");break; }
}
servopos++;
delay(30);
Serial.println(servopos);
myServo.write(servopos);
if (servopos ==180 )
{servopos=0;break;}
}
}
}
使用蓝牙的伺服电机控制的工作过程
在这个项目中,我们使用Android应用程序“Roboremo”来控制伺服电机。在这个应用程序的界面中,我们创建了5个按钮来控制伺服电机,如前所述。每个按钮的功能在下表中给出:
序号 | 按钮名称 | 发送值 | 描述 |
1 | Start | 1 | 该按钮用于开始将伺服从0°旋转到180°。 |
2 | Stop | 2 | 该按钮用于在任何时候停止伺服。 |
3 | 0⁰ | 0 | 该按钮用于将伺服旋转至0°。 |
4 | 90⁰ | 90 | 该按钮用于将伺服旋转至90°。 |
5 | 180⁰ | 180 | 该按钮用于将伺服旋转至180°。 |
因此,通过在Android应用程序Roboremo上按下这些按钮,数据将通过智能手机的蓝牙发送到HC-06蓝牙模块。Arduino接收来自该HC-06模块的数据,然后根据代码中按钮表示的角度旋转伺服电机。我们也可以编写角度45和135的代码,但由于Roboremo应用程序的限制,只能创建5个按钮,所以我们跳过了这两个按钮。
通过使用这种方式,我们可以使用蓝牙将数据从智能手机发送到Arduino开发板,然后以无线方式控制伺服器。这可以用于许多应用程序,如玩具车、机器人等。
编辑:hfy
-
伺服电机
+关注
关注
85文章
2046浏览量
57817 -
Arduino
+关注
关注
188文章
6469浏览量
186962 -
伺服电机控制
+关注
关注
0文章
16浏览量
7502
发布评论请先 登录
相关推荐
评论