技术频道

娓娓工业
您现在的位置: 中国传动网 > 技术频道 > 技术百科 > 如何使用Arduino的蓝牙控制伺服电机

如何使用Arduino的蓝牙控制伺服电机

时间:2022-11-17 10:17:50来源:circuitdigest

导语:​如何使用Arduino的蓝牙控制伺服电机

  使用伺服电机在机器人技术中很常见,以实现精确控制。在这里,在本教程中,我们将向您展示如何通过蓝牙连接将伺服电机与Arduino UNO和Android设备无线使用。我们已经使用 Arduino 控制了伺服,这次我们使用Arduino 和蓝牙控制伺服电机。

  所需材料

  Arduino UNO

  HC-05 或 HC-06 蓝牙模块

  伺服电机

  来自Playstore的Roboremo应用程序

  面包板

  连接线

  HC-06 蓝牙模块

  蓝牙可以在以下两种模式下运行:

  命令模式

  操作模式

  在命令模式下,我们将能够配置蓝牙属性,例如蓝牙信号的名称,密码,操作波特率等。操作模式是我们能够在PIC微控制器和蓝牙模块之间发送和接收数据的模式。因此,在本教程中,我们将只玩弄操作模式。命令模式将保留默认设置。设备名称将是HC-05(我正在使用HC-06),密码将是0000或1234.最重要的是,所有蓝牙模块的默认波特率为9600.

pYYBAGN0nS-AQ32JAACRRzH8oH8695.jpg

  模块采用 5V 电源供电,信号引脚工作在 3.3V,因此模块本身存在一个 3.3V 稳压器。因此,我们不必担心。在六个引脚中,只有四个将在操作模式下使用。引脚连接表如下所示

  

S.NoHC-05/HC-06 上的引脚MCU 上的引脚名称PIC 中的引脚编号
1VccVdd31圣针
2Vcc格德32德·针
3德克萨斯RC6/Tx/CK25千针
4接收RC7/Rx/DT26千针
5数控数控
6英文(使能)数控数控


  电路图

  此Arduino蓝牙伺服电机控制项目的电路图如下:

poYBAGN0nTGAP6f_AAB8e95U1IQ995.png

poYBAGN0nTOAdEvUAAC6k9iZgLs019.jpg

  配置 Roboremo 应用程序以控制伺服:

  第 1 步:-从Android Play商店下载Roboremo应用程序并将其安装在智能手机中。安装后,您将看到如图1所示的应用程序窗口,通过单击“菜单”按钮,您将看到如下所示的图2所示窗口:

pYYBAGN0nTSAUPERAAAZL5GZArY939.png

poYBAGN0nTaAJax4AAAtIkVcznU194.png

  第 2 步:-然后单击连接按钮,您将看到下面图3所示的窗口,然后您必须选择“蓝牙RFCOMM”,然后您将能够将HC-06蓝牙模块与Android应用程序“Roboremo”连接。

pYYBAGN0nTeARHJ6AABAy9m8-lc798.png

  第 3 步:-连接到HC-06蓝牙模块后,返回图2窗口,然后单击“编辑ui”以根据需要创建用户界面。

  当单击“编辑ui”时,您将再次看到图1所示的窗口,然后单击屏幕上的任意位置,您将看到如图4所示的应用程序窗口,然后选择“按钮”以获取按钮结构。

pYYBAGN0nTmASGUaAAAt7QHnAwA011.png

  第 4 步:-选择按钮后,您将在屏幕上看到一个按钮结构进行编辑。您可以调整结构的大小并将其移动到屏幕上的任意位置。现在,要设置通过蓝牙单击时发送的值,您有“设置按下操作”(如图 6 所示)并键入要从该特定按钮发送的值。就像,我们正在发送“1”通过按 Roboremo android 应用程序中的“开始”按钮来旋转伺服。

  您可以在后面给出的表格中检查所有值,单击不同的按钮发送。

poYBAGN0nTqAFjOvAAAe3Rs9LYA509.png

pYYBAGN0nTuAeO8BAAA_PUvRXGo620.png

  第 5 步:-最后,我们有用户界面来使用智能手机控制伺服电机。

poYBAGN0nTyAfvPIAAAsom7XUyA747.png

  代码和说明

  最后给出了通过蓝牙的Arduino控制伺服电机的完整代码。

  Arduino具有伺服电机库,它处理所有与PWM相关的东西来旋转伺服器,您只需要输入要旋转的角度,并且有功能servo1.write(angle); 这会将伺服器旋转到所需的角度。

  因此,这里我们首先定义伺服电机的库,软件串行库用于定义Rx和Tx引脚。

  #include

  #include

  在下面的代码中,我们正在初始化 Rx 和 Tx 的 Arduino 引脚,为伺服和其他东西定义变量。

  Servo myServo; int TxD = 11; int RxD = 10; int servoposiTIon; int servopos; int new1; SoftwareSerial bluetooth(TxD, RxD);

  现在,将所有变量和组件设置为初始阶段。在这里,我们将伺服器连接到 9千Arduino的引脚,并使伺服的初始位置为0度。串行和蓝牙通信的波特率也已设置为 9600.

  void setup() {

  int pos=0;

  myServo.attach(9);

  myServo.write(0);

  Serial.begin(9600);       // start serial communicaTIon at 9600bps

  bluetooth.begin(9600);

  }

  在空回路功能中,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;}

  }

  }

  }

  使用蓝牙的伺服电机控制工作:

pYYBAGN0nT6APH0gAADiAL37Usg837.jpg

  在这个项目中,我们使用Android应用程序“Roboremo”控制伺服电机。在此应用程序的界面中,我们创建了 5 个按钮来控制伺服电机,如前所述。下表给出了每个按钮的工作:

  

S.No。按钮名称发送值描述
1.开始1此按钮用于开始将伺服从 0⁰ 旋转到 180⁰。
2.2此按钮用于随时停止舵机。
3.0⁰0此按钮用于将舵机旋转到 0⁰。
4.90⁰90此按钮用于将舵机旋转到 90⁰。
5.180⁰180此按钮用于将舵机旋转到 180⁰。


  因此,通过按下Android应用程序Roboremo上的这些按钮,数据将通过智能手机的蓝牙发送到HC-06蓝牙模块。从HC-06模块数据由Arduino接收,Arduino以特定按钮的代码中定义的角度旋转伺服。我们还对角度 45 和 135 进行了编码,但由于 Roboremo 应用程序的限制,您只能创建 5 个按钮,因此我们跳过了两个按钮。

  因此,这就是您可以使用蓝牙将数据从智能手机发送到Arduino以无线控制伺服的方法。

  #include

  #include

  Servo myServo;

  int TxD = 11;

  int RxD = 10;

  int servoposition;

  int servopos;

  int new1;

  SoftwareSerial bluetooth(TxD, RxD);

  void setup() {

  int pos=0;

  myServo.attach(9);

  myServo.write(0);

  Serial.begin(9600); // start serial communication at 9600bps

  bluetooth.begin(9600);

  }

  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);

  }

  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;}


标签: 伺服电机

点赞

分享到:

上一篇:plc输出端三种类型电气方框图

下一篇:充电电池应该如何选购

中国传动网版权与免责声明:凡本网注明[来源:中国传动网]的所有文字、图片、音视和视频文件,版权均为中国传动网(www.chuandong.com)独家所有。如需转载请与0755-82949061联系。任何媒体、网站或个人转载使用时须注明来源“中国传动网”,违反者本网将追究其法律责任。

本网转载并注明其他来源的稿件,均来自互联网或业内投稿人士,版权属于原版权人。转载请保留稿件来源及作者,禁止擅自篡改,违者自负版权法律责任。

网站简介|会员服务|联系方式|帮助信息|版权信息|网站地图|友情链接|法律支持|意见反馈|sitemap

中国传动网-工业自动化与智能制造的全媒体“互联网+”创新服务平台

网站客服服务咨询采购咨询媒体合作

Chuandong.com Copyright ©2005 - 2023 ,All Rights Reserved 版权所有 粤ICP备 14004826号 | 营业执照证书 | 不良信息举报中心 | 粤公网安备 44030402000946号