设为首页收藏本站

履带加伸缩机械手机器人

RichardFu 发表于 2016-4-1 14:56:40 | 显示全部楼层 [复制链接]
7 13576
本帖最后由 RichardFu 于 2016-4-1 14:59 编辑

视频展示



材料
1. Romeo BLE多合一控制器  (DFR0305)
2. L298N双路H桥电机驱动  (DRI0002)
3. 金属夹持器  (ROB0099)
4. Devastator履带机器人移动平台(ROB0112)
5. 全方位蜂巢云台  (ROB0114)
6. 云台舵机支架套件  (FIT0004)
7. 7.4V 2200MA 锂电池  (FIT0137)
8. 180度舵机(SER0020) x2
9. 螺纹电机 6V100rpm
10. 3D打印伸缩臂


简介
6W4A0823.JPG
创客喜欢用自己的双手进行创作,但有没有想过让自己做的机器人同样拥有动手能力呢?在这个项目里我打算把履带小车结合夹持器做一个有抓取功能的小车。由于装在小车上方难以抓到地面上的东西,因此还需要给小车增加伸缩的功能。我们使用3D打印机打印一个可以伸缩的支架,并找了一个可以配合的螺纹电机来实现伸缩功能。


这个机器人还是个比较粗略的原型,希望由此可以发展出更精密并且也容易制作的机械爪机器人。



制作流程

组装过程:
1.3D打印机打印伸缩臂的零件,并用螺丝组装起来。另外还打印螺纹电机的支架,把螺纹电机和伸缩臂组装起来。(模型在最后附上)
2.将蜂巢云台装在履带机器人上。
3.在云台上使用舵机支架套件来安装一个舵机。
4.把螺纹电机装在舵机上。
5.把另一个舵机装在夹持器上,使它可以做抓取动作。
6.把夹持器的舵机固定到伸缩臂上。

使用下图进行连接:
履带连线图.png
M1 – 右轮电机
M2 – 左轮电机
数字13 – 电机驱动E1
数字12 – 电机驱动M1
数字9 – 机械臂抬起/降落舵机
数字8 – 夹持器舵机


Vin – 电机驱动VD
GND – 电机驱动GND
电机驱动M1 – 螺纹电机
电池控制板电源
电池电机驱动VSGND


代码

  1. #include <Servo.h>
  2. #include <Metro.h>
  3. #include "GoBLE.h"

  4. int speedPin_M1 = 5;     //电机1速度控制 M1 Speed Control
  5. int speedPin_M2 = 6;     //电机2速度控制 M2 Speed Control
  6. int directionPin_M1 = 4;     //电机1方向控制 M1 Direction Control
  7. int directionPin_M2 = 7;     //电机2方向控制 M1 Direction Control

  8. int E1 = 13;
  9. int M1 = 12;

  10. int tGo = 13000;
  11. int tBack = 13000;

  12. int tCatch = 2000;
  13. int tRelease = 2000;

  14. bool catched = false;

  15. Servo claw; //claw platform servo
  16. Servo top; //上层舵机 top servo

  17. int clawPosition = 45; // 45 ~ 100
  18. int topPosition = 45; //45 ~ 155

  19. int recordPin = 11;
  20. int playPin = 10;

  21. int joystickX, joystickY;
  22. int buttonState[5];

  23. bool leftPressed = false;
  24. bool rightPressed = false;

  25. bool clawMoved = false;

  26. void setup() {
  27.   Goble.begin(); //启动GoBLE
  28.   Serial.begin(115200);
  29.   top.attach(9);         // Top Servo– Digital 9
  30.   claw.attach(8);        // claw Servo - Digital 8
  31.   top.write(topPosition);   //写入起始角度
  32.   claw.write(clawPosition);  //写入起始角度

  33.   pinMode(11, OUTPUT);
  34.   pinMode(12, OUTPUT);
  35.   pinMode(10, OUTPUT);
  36.   digitalWrite(10, LOW);

  37.   digitalWrite(11, LOW);

  38.   digitalWrite(12, LOW);

  39.   pinMode(13, OUTPUT);
  40.   digitalWrite(13, HIGH);

  41.   analogWrite(E1, 0);
  42. }

  43. void loop() {

  44.   if (Goble.available()) {

  45.     joystickX = Goble.readJoystickX();
  46.     joystickY = Goble.readJoystickY();

  47.     buttonState[SWITCH_UP]     = Goble.readSwitchUp();
  48.     buttonState[SWITCH_DOWN]   = Goble.readSwitchDown();
  49.     buttonState[SWITCH_LEFT]   = Goble.readSwitchLeft();
  50.     buttonState[SWITCH_RIGHT]  = Goble.readSwitchRight();



  51.     //    Serial.print("Joystick Value: ");
  52.     //    Serial.print(joystickX);
  53.     //    Serial.print("  ");
  54.     //    Serial.println(joystickY);


  55.     if (joystickY > 196) {
  56.       Serial.println("turn right");
  57.       carTurnRight(250, 250);
  58.     }
  59.     else if (joystickY < 64) {
  60.       Serial.println("turn left");
  61.       carTurnLeft(250, 250);
  62.     }
  63.     else if (joystickX > 196) {
  64.       Serial.println("move forward");
  65.       carAdvance(400, 400);
  66.     }
  67.     else if (joystickX < 64) {
  68.       Serial.println("move backward");
  69.       carBack(400, 400);
  70.     }
  71.     else {
  72.       carStop();
  73.     }


  74.     if (buttonState[SWITCH_LEFT] == PRESSED && buttonState[SWITCH_RIGHT] == PRESSED) {
  75.       analogWrite(E1, 0);
  76.       if (!clawMoved) {
  77.         if (clawPosition <= 45) {
  78.           clawPosition = 100;
  79.           claw.write(clawPosition);
  80.         }
  81.         else {
  82.           clawPosition = 45;
  83.           claw.write(clawPosition);
  84.         }
  85.         clawMoved = true;
  86.       }


  87.     }
  88.     else if (buttonState[SWITCH_LEFT] == PRESSED) {
  89.       digitalWrite(M1, LOW);
  90.       analogWrite(E1, 255);
  91.     }
  92.    
  93.     else if (buttonState[SWITCH_RIGHT] == PRESSED) {
  94.       digitalWrite(M1, HIGH);
  95.       analogWrite(E1, 255);
  96.     }
  97.     else if (buttonState[SWITCH_UP] == PRESSED) {
  98.       topPosition -= 5;
  99.       if (topPosition <= 45) {
  100.         topPosition = 45;
  101.       }
  102.       top.write(topPosition);
  103.     }
  104.     else if (buttonState[SWITCH_DOWN] == PRESSED) {
  105.       topPosition += 5;
  106.       if (topPosition >= 155) {
  107.         topPosition = 155;
  108.       }
  109.       top.write(topPosition);
  110.     }

  111.     if( buttonState[SWITCH_LEFT] == RELEASED && buttonState[SWITCH_RIGHT] == RELEASED){
  112.       analogWrite(E1, 0);
  113.     }
  114.    
  115.     if( buttonState[SWITCH_LEFT] == RELEASED || buttonState[SWITCH_RIGHT] == RELEASED){
  116.       clawMoved = false;
  117.     }
  118.   }

  119. }

  120. void carStop() {                //  Motor Stop
  121.   digitalWrite(speedPin_M2, 0);
  122.   digitalWrite(directionPin_M1, LOW);
  123.   digitalWrite(speedPin_M1, 0);
  124.   digitalWrite(directionPin_M2, LOW);
  125. }

  126. void carTurnLeft(int leftSpeed, int rightSpeed) {       //Turn Left
  127.     analogWrite (speedPin_M2, leftSpeed);
  128.   digitalWrite(directionPin_M1, LOW);
  129.   analogWrite (speedPin_M1, rightSpeed);
  130.   digitalWrite(directionPin_M2, LOW);
  131.   
  132. }

  133. void carTurnRight(int leftSpeed, int rightSpeed) {     //Turn Right
  134.   analogWrite (speedPin_M2, leftSpeed);
  135.   digitalWrite(directionPin_M1, HIGH);
  136.   analogWrite (speedPin_M1, rightSpeed);
  137.   digitalWrite(directionPin_M2, HIGH);
  138. }

  139. void carBack(int leftSpeed, int rightSpeed) {           //Move backward
  140.   analogWrite (speedPin_M2, leftSpeed);             //PWM Speed Control
  141.   digitalWrite(directionPin_M1, HIGH);
  142.   analogWrite (speedPin_M1, rightSpeed);
  143.   digitalWrite(directionPin_M2, LOW);
  144.   
  145.   
  146. }
  147. void carAdvance(int leftSpeed, int rightSpeed) {         //Move forward
  148.   analogWrite (speedPin_M2, leftSpeed);
  149.   digitalWrite(directionPin_M1, LOW);
  150.   analogWrite (speedPin_M1, rightSpeed);
  151.   digitalWrite(directionPin_M2, HIGH);
  152.   
  153.   
  154. }
复制代码



实际效果
小车可以用iOS系统的GoBLE软件控制。用左边的遥杆控制小车移动,右边的键控制机械臂升起降落以及伸缩,左右键同时按可以让夹持器夹持或松开。

注意事项
1.螺纹电机转速过慢,可以再尝试一下其它型号。
2.机械臂负重过多,会导致弯曲以及无法伸展。以后可以考虑修改构造把夹持器舵机放到后面。
3.组装时尽量把机械臂放在直立状态。
4.注意将电线和驱动固定,各个连接口打胶。


模型
伸缩臂模型.zip (228.66 KB, 下载次数: 33)
发表于 2016-4-1 15:43:53 | 显示全部楼层
为什么每次总强在我前面
回复 支持 反对

使用道具 举报

发表于 2016-4-1 15:46:32 | 显示全部楼层
楼主这个有点抖,哈哈
回复 支持 反对

使用道具 举报

发表于 2016-4-1 17:46:26 | 显示全部楼层
一抖一抖的,很搞笑
回复 支持 反对

使用道具 举报

发表于 2016-4-1 21:42:07 | 显示全部楼层
语音识别 - - ?

楼主你好神奇……
回复 支持 反对

使用道具 举报

发表于 2016-4-7 17:20:43 | 显示全部楼层
hnyzcj 发表于 2016-4-1 15:43
为什么每次总强在我前面

你是大忙人啊
回复 支持 反对

使用道具 举报

发表于 2016-4-7 17:33:31 | 显示全部楼层

在你面前我不敢说自己忙!
回复 支持 反对

使用道具 举报

发表于 2016-6-12 16:11:36 | 显示全部楼层
都这么高大上
回复 支持 反对

使用道具 举报

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

本版积分规则 允许回帖同步到新浪微博  

  • 初级技师
  • 289
  • 2

推荐阅读

精华导读




公司简介| 联系我们| 小黑屋| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网| OneNET|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表