机器人中通常使用伺服电机来实现精确控制。在本文中,我们将向您展示如何使用Arduino UNO开发板通过蓝牙无线连接伺服电机和Android设备。我们已经介绍了如何使用Arduino开发板来控制伺服电机,这次我们使用无线蓝牙模块HC-06来控制伺服电机。
所需材料
Arduino UNO开发板
HC-05或HC-06蓝牙模块
伺服电机
Playstore 上的Roboremo 应用程序
面包板
连接线
HC-06 蓝牙模块
蓝牙可以工作在以下两种模式:
1. AT指令设置模式
2、工作模式
在AT命令设置模式下,我们可以配置蓝牙属性,如蓝牙信号的名称、密码、工作波特率等。工作模式是PIC单片机与蓝牙模块之间发送和接收数据的模式。因此,在本教程中我们仅使用工作模式进行测试。 AT命令设置模式保持默认设置。设备名称为HC-05,密码为0000 或1234,最重要的是所有蓝牙模块的默认波特率为9600。
模块工作在5V电源,信号引脚工作在3.3V,因此模块内部安装有3.3V稳压器。所以我们不用担心。该操作模式仅使用六个引脚中的四个引脚。引脚连接表如下
序列号HC-05 模块引脚MCU 引脚PIC 引脚1VccVdd 第31 个引脚2GndGnd 第32 个引脚3TxRC6/Tx/CK 第25 个引脚4RxRC7/Rx/DT 第26 个引脚5StateNCNC6EN (Enable) NCNC 电路原理图
使用Arduino开发板通过蓝牙控制伺服电机电路图:
配置Roboremo App来控制伺服电机
第1 步:从Android Play 商店下载Roboremo 应用程序并将其安装到您的智能手机中。安装完成后,您将看到如下图左侧所示的应用程序窗口,然后单击“菜单”按钮,您将看到如下图右侧所示的窗口:
步骤2:然后点击“连接”按钮,您将看到如下图3所示的窗口,然后您需要选择“蓝牙RFCOMM”,然后您可以将HC-06蓝牙模块连接到Android应用程序“Roboremo” 。
步骤3:连接HC-06蓝牙模块后,返回步骤2右侧窗口,点击“edit ui”,根据您的需要创建用户界面。
当您点击“edit ui”时,您将再次看到如图1所示的窗口,然后单击屏幕上的任意位置,您将看到如下所示的应用程序窗口,并选择“按钮”以获取按钮模板。
步骤4:选择按钮模板后,您将在屏幕上看到一个用于编辑的按钮。您可以调整结构大小并将其移动到屏幕上的任何位置。现在,为了设置通过蓝牙单击发送的值,您需要设置“设置按下操作”并输入要从该特定按钮发送的值。就像我们通过按Roboremo android 应用程序中的“开始”按钮发送“1”来旋转伺服器一样。
步骤5:最后我们设计了一个用户界面来使用智能手机控制伺服电机。
代码和说明
本文末尾给出了使用蓝牙控制伺服电机的完整Arduino 代码。
Arduino 附带一个伺服电机库,它处理所有与PWM 相关的事情以旋转伺服器。你只需要输入你想要旋转的角度,然后使用函数servo1.write(angle);该功能将使伺服电机旋转到所需的角度。所需的角度。
因此,我们首先定义伺服电机库和用于定义Rx和Tx引脚的软件串行库。
包括
包括
在下面的代码中,我们初始化Arduino 的Rx 和Tx 引脚,定义伺服电机和其他东西的变量。
伺服myServo;
整数TxD=11;
接收端数据=10;
int 伺服位置;
int 伺服位置;
int new1;
软件串口蓝牙(TxD,RxD);
现在,将所有变量和组件设置为初始阶段。在这里,我们使用Arduino板的引脚9连接伺服电机,并将伺服电机的初始位置设置为0度。串行和蓝牙通信的波特率也设置为9600。
无效设置(){
整数位置=0;
myServo.attach(9);
myServo.write(0);
串行.开始(9600); //以9600bps开始串行通信
蓝牙.开始(9600);
}
在voidloop()函数中,Arduino将始终检查输入值并根据智能手机接收到的值旋转舵机。所有值都将通过串行通信接收。
如果值为0,则舵机将旋转至0度。同样,如果我们从蓝牙应用程序发送45、90、135 和180,舵机将分别旋转到45、90、135 和180 度角度。
无效循环(){
如果(蓝牙.available()){
字符串值=bluetooth.readString();
伺服位置=value.toInt();
if (value.toInt()==0){
Serial.println(伺服位置);
myServo.write(0);
}
if (value.toInt()==45){
Serial.println(伺服位置);
myServo.write(45);
}
if (value.toInt()==90){
Serial.println(伺服位置);
myServo.write(90);
}
if (value.toInt()==135){
Serial.println(伺服位置);
myServo.write(135);
}
if (value.toInt()==180){
Serial.println(伺服位置);
myServo.write(180);
}
如果我们通过按下启动按钮发送值“1”,伺服电机将继续旋转,直到按下停止按钮。这里我们在按下停止按钮时发送“2”,Arduino板读取后,会跳出while循环,伺服电机停止旋转。
while(value.toInt()==1){
如果(蓝牙.可用())
{
值=蓝牙.readString();
Serial.println(值);
if (value.toInt()==2)
{Serial.println('YYY');break; }
}
伺服系统++;
延迟(30);
Serial.println(servopos);
myServo.write(servopos);
如果(伺服位置==180)
{伺服位置=0;中断;}
}
}
}
利用蓝牙控制伺服电机的工作流程
在这个项目中,我们使用Android应用程序“Roboremo”来控制伺服电机。在此应用程序的界面中,我们创建了5 个按钮来控制伺服电机,如前所述。各按钮的功能如下表所示:
序列号按钮名称发送值说明1Start1 此按钮用于开始将舵机从0 旋转到180。 2停止2 该按钮用于随时停止舵机。 300此按钮用于将舵机旋转至0。 49090此按钮用于将舵机旋转90。 5180180此按钮用于将舵机旋转180。因此,通过按下Android 应用程序Roboremo 上的这些按钮,数据将通过智能手机的蓝牙发送到HC-06 蓝牙模块。 Arduino接收来自HC-06模块的数据,然后根据代码中按钮代表的角度旋转伺服电机。我们还可以编码角度45 和135,但由于Roboremo 应用程序的限制,只能创建5 个按钮,因此我们跳过了这两个。
通过这种方法,我们可以使用蓝牙将数据从智能手机发送到Arduino板,然后无线控制服务器。这可用于许多应用,例如玩具车、机器人等。
编辑:hfy