请选择 进入手机版 | 继续访问电脑版

gForce手环简单控制机械手(Arduino)

[复制链接]

2

主题

3

帖子

22

积分

新手上路

Rank: 1

积分
22
hyw 发表于 2017-7-14 17:46:57
401 2
本帖最后由 hyw 于 2017-7-14 18:04 编辑

一、器材:
1.机械手套件、Arduino开发板、gForce手势识别控制器(手环)、gForceJoint、及若干杜邦线和电源
   
2. 对于器材的处理
(1)焊接一个板子用于连接VCC、GND、信号线,避免接口不够用以及线太乱;
(2)将要用到的引脚接好,使用GPIO(5、6、9、10、11)接舵机数据线。


二、通过gForce控制机械手,步骤及流程
软件操作和硬件的链接详情请参照:http://139.224.25.190:8890/forum.php?mod=viewthread&tid=26&page=1#pid28

     原理:控制舵机的转动角度,来实现单个手指的不同形态,最后组合成手势形态。(舵机的资料可以参照用户资料.rar, 链接: https://pan.baidu.com/s/1dF9wiGx 密码: mmtu)
     实现:
             1.接收手环手势数据,确定手势
             2.依据手势来调整舵机转动的角度。

三、演示视频

http://v.youku.com/v_show/id_XMjg5MTM3NDc2OA==.html?spm=a2h3j.8428770.3416059.1

注:舵机有损坏,最后只能控制3个好的。


四、附录测试代码

  1. #include <Arduino.h>
  2. #include <SoftwareSerial.h>
  3. #include <Servo.h>            // steering engine function library
  4. #include <gForceAdapter.h>    // import gForceSDK        
  5. #define DEBUG         1       //  print log information when it is true
  6. GForceAdapter gforce = GForceAdapter(&Serial);
  7. Servo RobotArmServo[5];       // create servo object array to control a servo
  8. static inline void logI(String str) {
  9. #if DEBUG
  10.   Serial.println(str);
  11. #endif
  12. }
  13. void setup()
  14. {
  15. #if DEBUG
  16.   Serial.begin(115200);
  17. #endif
  18.   ServoInit();
  19.   logI("Init:Setup");
  20. }
  21. void loop()
  22. {
  23.   getgForceData();
  24. }
  25. // Gesture decoding function
  26. void getgForceData()
  27. {
  28.   GF_Data gForceData;
  29.   if (OK == gforce.GetGForceData(&gForceData)) {
  30.     GF_Gesture gesture;
  31.     switch (gForceData.type) {
  32.       case GF_Data::QUATERNION:
  33.         break;
  34.       case GF_Data::GESTURE:
  35.         gesture = gForceData.value.gesture;
  36.         if (gesture == GF_FIST) {
  37.           logI("get fist signal");
  38.           FistGesture();
  39.         }
  40.         else if (gesture == GF_SPREAD) {
  41.           logI("get spread signal");
  42.           SpreadGesture();
  43.         }
  44.         else if (gesture == GF_WAVEIN) {
  45.           logI("get wave in signal");
  46.           WaveInGesture();
  47.         }
  48.         else if (gesture == GF_WAVEOUT) {
  49.           logI("get wave out signal");
  50.           WaveOutGesture();
  51.         }
  52.         else if (gesture == GF_PINCH) {
  53.           logI("get pinch signal");
  54.         }
  55.         else if (gesture == GF_SHOOT) {
  56.           logI("get shoot signal");
  57.           ShootGesture();
  58.         }
  59.         else if (gesture == GF_RELEASE) {
  60.           logI("get release signal");
  61.           ReleaseGesture();
  62.         }
  63.         else if (gesture == GF_UNKNOWN) {
  64.           logI("get unknown signal");
  65.         }
  66.         break;
  67.       default:
  68.         break;
  69.     }
  70.   }
  71. }
  72. void ServoInit()
  73. {
  74.   // attaches the servo on pin to the servo object
  75.   RobotArmServo[0].attach(5);          // wrist
  76.   RobotArmServo[1].attach(6);          // thumb
  77.   RobotArmServo[2].attach(9);          // index finger
  78.   RobotArmServo[3].attach(10);         // middle finger
  79.   RobotArmServo[4].attach(11);         // the ring finger
  80.   
  81.   // init steering engine angle;And you need to debug the suitable angle
  82.   RobotArmServo[0].write(90);
  83.   RobotArmServo[1].write(45);
  84.   RobotArmServo[2].write(45);
  85.   RobotArmServo[3].write(45);
  86.   RobotArmServo[4].write(45);
  87. }
  88. void FistGesture()
  89. {
  90.   RobotArmServo[0].write(90);
  91.   RobotArmServo[1].write(25);
  92.   RobotArmServo[2].write(25);
  93.   RobotArmServo[3].write(25);
  94.   RobotArmServo[4].write(25);
  95. }
  96. void SpreadGesture()
  97. {
  98.   RobotArmServo[0].write(90);
  99.   RobotArmServo[1].write(170);
  100.   RobotArmServo[2].write(170);
  101.   RobotArmServo[3].write(170);
  102.   RobotArmServo[4].write(170);
  103. }
  104. void WaveInGesture()
  105. {
  106.   RobotArmServo[0].write(145);
  107.   RobotArmServo[1].write(170);
  108.   RobotArmServo[2].write(170);
  109.   RobotArmServo[3].write(170);
  110.   RobotArmServo[4].write(170);
  111. }
  112. void WaveOutGesture()
  113. {
  114.   RobotArmServo[0].write(35);
  115.   RobotArmServo[1].write(170);
  116.   RobotArmServo[2].write(170);
  117.   RobotArmServo[3].write(170);
  118.   RobotArmServo[4].write(170);
  119. }
  120. void ShootGesture()
  121. {
  122.   RobotArmServo[0].write(90);
  123.   RobotArmServo[1].write(170);
  124.   RobotArmServo[2].write(170);
  125.   RobotArmServo[3].write(45);
  126.   RobotArmServo[4].write(45);
  127. }
  128. void ReleaseGesture()
  129. {
  130.   RobotArmServo[0].write(90);
  131.   RobotArmServo[1].write(45);
  132.   RobotArmServo[2].write(45);
  133.   RobotArmServo[3].write(45);
  134.   RobotArmServo[4].write(45);
  135. }
复制代码










































































本帖子中包含更多资源

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

x
回复

使用道具 举报

suxiang198 发表于 2017-7-15 09:57:05
喔,期待更多玩法~
回复 支持 反对

使用道具 举报

zyu 发表于 2017-7-16 16:48:59
弓虽!期待英文版
回复 支持 反对

使用道具 举报

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

本版积分规则

热帖滚动