机器人技术中通常使用伺服电机来进行精确控制。在这里,在本教程中,我们将向您展示如何通过蓝牙连接将Servo电机与Arduino UNO和Android设备无线使用。我们已经使用Arduino控制伺服器,这次我们使用Arduino和Bluetooth控制伺服马达。
所需材料
- Arduino UNO
- HC-05或HC-06蓝牙模块
- 伺服马达
- Playstore的Roboremo App
- 面包板
- 连接线
HC-06蓝牙模块
蓝牙可以在以下两种模式下运行:
- 命令模式
- 操作模式
在 命令模式下, 我们将能够配置蓝牙属性,例如蓝牙信号的名称,其密码,操作波特率等。 操作模式 是一种我们可以在PIC微控制器之间发送和接收数据的模式。和蓝牙模块。因此,在本教程中,我们将只涉及“操作模式”。命令模式将保留为默认设置。设备名称为HC-05(我正在使用HC-06),密码为0000或1234,最重要的是,所有蓝牙模块的默认波特率均为9600。
该模块采用5V电源供电,信号引脚采用3.3V工作电压,因此模块本身具有3.3V稳压器。因此,我们不必为此担心。在六个引脚中,只有四个将用于工作模式。引脚连接表如下所示
序号 | 钉在HC-05 / HC-06上 | MCU上的引脚名称 | PIC中的引脚号 |
1个 | Vcc | Vdd | 31日 销 |
2 | Vcc | nd | 32 ND 销 |
3 | Tx | RC6 /发送/ CK | 第25 针 |
4 | 接收 | RC7 /接收/ DT | 26个 销 |
5 | 州 | 数控 | 数控 |
6 | EN(启用) | 数控 | 数控 |
查看我们的其他项目,以了解有关带有其他微控制器的蓝牙模块HC-05的更多信息:
- 使用Arduino的蓝牙控制玩具车
- 使用8051的蓝牙控制的家庭自动化系统
- 使用Raspberry Pi的声控灯
- 使用Arduino和处理功能的智能手机控制FM收音机
- 将蓝牙模块HC-06与PIC微控制器接口
还要在这里检查所有与蓝牙相关的项目。
电路原理图
该Arduino蓝牙伺服电机控制 项目的电路图如下所示:
配置Roboremo应用以控制伺服器:
步骤1:-从Android Play商店下载Roboremo应用,并将其安装在智能手机中。安装后,您将看到如图1所示的应用程序窗口,然后单击 “菜单” 按钮,您将看到以下图2所示的窗口:
第2步:-然后单击 连接 按钮,您将看到下图3所示的窗口,然后您必须选择“ Bluetooth RFCOMM” ,然后才能将HC-06蓝牙模块与Android应用程序“ Roboremo”连接。
步骤3:-连接到HC-06蓝牙模块后,返回到Figure2窗口,然后单击“ edit ui ”以根据需要创建用户界面。
当单击 “ edit ui”时, 您将再次看到如图1所示的窗口,然后单击屏幕上的任意位置,您将看到如图4所示的应用程序窗口,并选择“ Button ”以获取按钮结构。
步骤4:-选择按钮后,您将在屏幕上获得一个按钮结构以进行编辑。您可以在屏幕上的任意位置调整大小并将结构移动。现在,为设置要通过蓝牙发送的点击值,您已经 设置了“按下动作” (如图6所示),然后键入要从该特定按钮发送的值。就像,我们通过在Roboremo android应用程序中按下“开始”按钮来发送“ 1”以旋转伺服。
您可以在后面的表格中检查单击不同按钮后发送的所有值。
步骤5:-最后,我们具有用户界面,可使用智能手机控制伺服电机。
代码和解释
最后给出了 通过蓝牙的Arduino控制伺服电机的完整代码。
Arduino有一个用于伺服电动机的库,它处理所有与PWM相关的事情来旋转伺服器,您只需要输入要旋转的角度,然后就可以使用函数 Serve1.write(angle);。 它将伺服旋转到所需角度。
因此,这里我们首先定义伺服电动机的库,然后使用软件串行库定义Rx和Tx引脚。
#包括
在下面的代码中,我们正在初始化Rx和Tx的Arduino引脚,定义用于伺服等变量 。
伺服myServo; 整数TxD = 11; 整数RxD = 10; 内部伺服位置;内部伺服位置; int new1; 串行蓝牙软件(TxD,RxD);
现在,将所有变量和组件设置为初始阶段。在这里,我们在Arduino的第9针上连接了舵机,并将舵机的初始位置设为0度。串行和蓝牙通信的波特率也已设置为9600。
void setup(){ int pos = 0; myServo.attach(9); myServo.write(0); Serial.begin(9600); //以9600bps bluetooth.begin(9600); 开始串行通信 }
在 空循环 功能中,Arduino将一直检查输入的值,并根据从智能手机接收到的值来旋转伺服器。所有值都将使用串行通信接收。
如果值为0,则伺服将旋转至0度。同样,如果我们从蓝牙应用程序发送45、90、135和180,则伺服器将分别旋转到45、90、135和180度角。
void loop(){ if(bluetooth.available()){ 字符串值= bluetooth.readString(); 伺服位置= value.toInt(); 如果(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); 如果(value.toInt()== 2){Serial.println(“ YYY”); 打破; 伺服器++; 延迟(30); Serial.println(servopos); myServo.write(servopos); 如果(servopos == 180){servopos = 0; break;}}}}
使用蓝牙的伺服电机控制工作:
在这个项目中,我们使用Android应用程序“ Roboremo”控制伺服电机。在该应用程序的界面中,我们创建了5个按钮来控制伺服电机,如前所述。下表列出了每个按钮的工作原理:
序号 |
按钮名称 |
传递价值 |
描述 |
1。 |
开始 |
1个 |
此按钮用于将伺服从0⁰旋转到180⁰。 |
2。 |
停止 |
2 |
该按钮用于随时停止伺服。 |
3。 |
0⁰ |
0 |
该按钮用于将伺服旋转到0°。 |
4。 |
90⁰ |
90 |
该按钮用于将伺服旋转至90度。 |
5, |
180⁰ |
180 |
该按钮用于将舵机旋转至180⁰。 |
因此,通过按Android应用程序 Roboremo 上的这些按钮,数据将通过智能手机的蓝牙发送到HC-06蓝牙模块。Arduino会从HC-06模块接收数据,然后Arduino以特定按钮的代码中定义的角度旋转Servo。我们还为角度45和135进行了编码,但是由于Roboremo应用程序的限制,您只能创建5个按钮,因此我们跳过了两个按钮。
因此,这就是您可以使用蓝牙将数据从智能手机发送到Arduino的方式,以无线方式控制伺服器。这可以用于许多应用中,例如玩具车,机器人等。