极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2543|回复: 0

WiFi遥控履带机械臂小车搬运功能的实现

[复制链接]
发表于 2023-1-5 09:26:04 | 显示全部楼层 |阅读模式
本帖最后由 机器谱 于 2023-1-5 09:26 编辑

1. 功能描述
本文提供的示例所实现的功能为:用手机APP,通过WiFi通信遥控样机实现移动和搬运。


2. 电子硬件
在这个示例中,采用了以下硬件,请大家参考:

主控板Basra(兼容Arduino Uno)
扩展板Bigfish2.1
电池7.4V锂电池
通信WiFi无线路由器
2510通信转接板

       本部分及后面的APP设置内容,可与如何使用探索者通信模块-WiFi无线路由器【https://www.robotway.com/h-col-141.html】一文对照阅读。

       为斜三角履带底盘样机【https://www.robotway.com/h-col-125.html】安装WiFi无线路由器和摄像头。

硬件连接步骤:
(1)在2510通信转接板的4针接口上,按如图方式插上3根杜邦线。


(2)杜邦线的另一端插接在WiFi模块的串口针上。

(3)连接USB线。


(4)将整套装置固定在样机上(注意:图中贴有黄色便条的MEGA2560主控板部分与本文所述功能无关,请忽略)。


3. 示例程序
编程环境:Arduino 1.8.19
手机APP的键值按上述规则进行配置,然后单片机接收到不同的信息,对应执行不同的动作。

例程代码(Rescue_Robot_Clear.ino)如下:
  1. /*********************************************************************

  2.   版权说明:Copyright 2022 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

  3.            Distributed under MIT license.See file LICENSE for detail or copy at

  4.            https://opensource.org/licenses/MIT

  5.            by 机器谱 2022-9-28 https://www.robotway.com/

  6. ************************* wifi protocol ****************************

  7. * ff 00 xx 00 ff Controlled robot motion,xx :00 ~ 04

  8. xx: 00:Stop

  9. 01:Forward

  10. 02:Backword

  11. 03:Left

  12. 04:Right

  13. * ff 02 01 xx ff

  14. left speed slider, adjust speed, xx : 0 ~ 10

  15. * ff 02 02 xx ff

  16. right speed slider, operate panel, xx : 0 ~ 10


  17. 参考:WIFI机器人网·机器人创意工作室上位机与下位机通信协议(V1.1版)

  18. http://www.wifi-robots.com/thread-7051-1-1.html


  19. *************************** main process *****************************

  20. __________________________

  21. |                          \

  22. start - wait mode - infrared start - automode 60s

  23. \   \                       |

  24. \ ------------------ wifi mode - wait 10s

  25. \____________________________________|

  26. *************************** servo motor ******************************


  27.             引脚   角度

  28. 机械手爪     D3    打开:90 夹取:60

  29. 机械手臂     D4    抬起:90 放下:60


  30. 注:上述舵机角度为本套程序使用的,可根据需求修改。 ********************************************************************/


  31. #include <Servo.h>


  32. Servo servoX;

  33. Servo servoY;


  34. bool dataComplete;

  35. bool isPanelOpen;

  36. bool isPanelDown;


  37. int ServoMotorOpenD3 = 90; //舵机角度

  38. int ServoMotorCloseD3 = 60;

  39. int ServoMotorUpD4 = 90;

  40. int ServoMotorDownD4 = 60;


  41. int moveDirection; // 1-forward, 2-backward, 3-left, 4-right, 5-stop


  42. int inputData[4]; //data from wifi


  43. int GripperDireciton; // 0 - close, 10 - open

  44. int DownDireciton; // 0 - Down, 10 - Up


  45. void setup()

  46. {

  47. Serial.begin(9600);


  48. servoX.attach(3);

  49. servoY.attach(4);


  50. isPanelOpen = false;

  51. isPanelDown = false;


  52. GripperDireciton = 10;

  53. DownDireciton = 10;

  54. }


  55. void loop()

  56. {

  57. WiFi_Rescue_Robot();

  58. }

  59. void WiFi_Rescue_Robot()

  60. {

  61. WifiControl();

  62. Move(moveDirection);

  63. }


  64. void WifiControl()

  65. {

  66. //control by wifi

  67. if (dataComplete) //接收完 WiFi 数据后

  68. {

  69. //operate wheel

  70. if(inputData[0] == 0x00)

  71. {

  72. if(inputData[1] != moveDirection)

  73. {

  74. moveDirection = inputData[1];

  75. }

  76. }

  77. //speed slider

  78. else if(inputData[0] == 0x02)

  79. {

  80. //adjust speed

  81. if(inputData[1] == 0x01)

  82. {

  83. if(inputData[2] != DownDireciton)

  84. {

  85. DownDireciton = inputData[2];

  86. if(DownDireciton == 0 && !isPanelDown)

  87. {

  88. servoY.write(ServoMotorDownD4);

  89. isPanelDown = true;

  90. }

  91. else if(DownDireciton == 10 && isPanelDown)

  92. {

  93. servoY.write(ServoMotorUpD4);

  94. isPanelDown = false;

  95. }

  96. }

  97. }

  98. //operate panel

  99. else if(inputData[1] == 0x02)

  100. {

  101. if(inputData[2] != GripperDireciton)

  102. {

  103. GripperDireciton = inputData[2];

  104. if(GripperDireciton == 0 && !isPanelOpen)

  105. {

  106. servoX.write(ServoMotorCloseD3);

  107. isPanelOpen = true;

  108. }

  109. else if(GripperDireciton == 10 && isPanelOpen)

  110. {

  111. servoX.write(ServoMotorOpenD3);

  112. isPanelOpen = false;

  113. }

  114. }

  115. }

  116. }

  117. }

  118. }


  119. void serialEvent()

  120. {

  121. static int i;

  122. static boolean revStart;

  123. while (Serial.available())

  124. {

  125. //get data from wifi

  126. int inData = Serial.read();

  127. if (inData == 0xff && !revStart)

  128. {

  129.              revStart = true;

  130. }

  131. else if(revStart)

  132. {

  133. inputData[i] = inData;

  134. i++;

  135. if(i > 3)

  136. {

  137. if(inputData[3] == 0xff)

  138. {

  139. dataComplete = true;

  140. i = 0;

  141. revStart = false;

  142. }

  143. else

  144. {

  145. i = 0;

  146. revStart = false;

  147. }

  148. }

  149. }

  150. }

  151. }


  152. void Move(int direction)

  153. {

  154. switch (direction)

  155. {

  156. case 0x01:MoveForward();break;

  157. case 0x02:MoveBackward();break;

  158. case 0x03:MoveLeft();break;

  159. case 0x04:MoveRight();break;

  160. case 0x05:MoveStop();break;

  161. default:MoveStop();break;

  162. }

  163. }


  164. void MoveForward()

  165. {

  166. //motor_0 clockwise

  167. digitalWrite(5, LOW);

  168. digitalWrite(6, HIGH);

  169. //motor_1 clockwise

  170. digitalWrite(9, LOW);

  171. digitalWrite(10, HIGH);

  172. }


  173. void MoveBackward()

  174. {

  175. //motor_0 clockwise

  176. digitalWrite(5, HIGH);

  177. digitalWrite(6, LOW);

  178. //motor_1 clockwise

  179. digitalWrite(9, HIGH);

  180. digitalWrite(10, LOW);

  181. }

  182. void MoveRight()

  183. {

  184. //motor_0 clockwise

  185. digitalWrite(5, HIGH);

  186. digitalWrite(6, LOW);

  187. //motor_1 clockwise

  188. digitalWrite(9, LOW);

  189. digitalWrite(10, HIGH);

  190. }


  191. void MoveLeft()

  192. {

  193. //motor_0 clockwise

  194. digitalWrite(5, LOW);

  195. digitalWrite(6, HIGH);

  196. //motor_1 clockwise

  197. digitalWrite(9, HIGH);

  198. digitalWrite(10, LOW);

  199. }


  200. void MoveStop()

  201. {

  202. //motor_0 clockwise

  203. digitalWrite(5, HIGH);

  204. digitalWrite(6, HIGH);

  205. //motor_1 clockwise

  206. digitalWrite(9, HIGH);

  207. digitalWrite(10, HIGH);

  208. }
复制代码

4. 安卓手机APP设置及操作
(1)安装WIFIRobot.apk到安卓手机内。
(2)打开主控板的开关启动设备,并使用手机连接GL-AR150-xxx(xxx为随机数字与字母)密码:goodlife


(3)打开“WIFIROBOTS”APP。


(4)选择设置(以V1.06版界面为例,你也可以安装其他版本,设置方法相同)



5)按照下图所示进行参数配置,点击确定



(6)点击前后左右可以控制救援机器人运动,如下图。


7)点击速度调整可以打开调整面板,如下图


(8)滑动写有左侧速度的控件,将其调整为0,可以控制清障手臂向下运动,如下图。



(9)将左侧速度的控件,调整为10,可以控制清障手臂向上运动,如下图。



(10)将右侧速度的控件,调整为0,可以控制清障手臂夹取障碍物,如下图。


(11)将右侧速度的控件,调整为10,可以控制清障手臂松开障碍物,如下图。




5. 资料下载
​资料内容:
​①
样机-WiFi遥控搬运-例程
​②WiFi无线路由器-安卓APK文件

​资料下载地址:https://www.robotway.com/h-col-155.html



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-16 17:18 , Processed in 0.059201 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表