2017-7-4 18:00:36 [显示全部楼层]
18893浏览
查看: 18893|回复: 10

[项目] 3D手势遥控全向轮小车

[复制链接]
作者:吴雷

在这里与大家介绍一款3D手势识别迷你传感器。DFRobot3D手势识别传感器是一款集成3D手势识别和运动跟踪为一体的交互式传感器,传感器可以在有效范围内识别手指的顺时针/逆时针转动方向和手指的运动方向等。传感器基于Microchip专利的GestIC®技术,采用电近场传感技术,包括了开发3D手势输入传感系统所有的块图,具有先进的3D信号处理单元,有效检测距离为0~10 cm。传感器可以应用于各类互动交互艺术产品,试想一下,挥一挥手,打开台灯,挥一挥手,打开音乐。一切尽在弹指间。
           3D手势识别迷你传感器做了一款手势识别控制全向小车,通过3D手势识别迷你传感器进行控制小车前进、后退、以及向左向右移动。通过使用3D打印机打印一个全向小车外壳和一个控制器外壳。

3D打印的小车和外壳:

全向小车图

3D手势遥控全向轮小车图2

控制器外壳图


3D手势遥控全向轮小车图3



需要的配件:
Bluno V2.0主控板                            x2     
Arduino四路电机驱动板                     x1     
万向轮                                            x3
电机支架                                         x3
3D手势识别迷你传感器                      x1     
6V直流电机                                    x3              
针排线                                           x2
十字/一字两用螺丝刀                       x1      

  

如图

3D手势遥控全向轮小车图4



电路连接:
3D手势接线: SCL->SCL,SDA->SDA,D0->D8,VCC->5V,GND->GND
按钮:绿色->D9,红色->D10,黑色->D11
电机扩展板:Vin -> PMR+      GND ->PMR-
电机接线如图中方向,M1接口接前方的电机(机械人头的那个电机),M2接左侧电机线,M3接右侧的电机线




3D手势遥控全向轮小车图5

安装图:


3D手势遥控全向轮小车图6

3D手势遥控全向轮小车图1

3D手势遥控全向轮小车图7





3D手势遥控全向轮小车图8



3D手势遥控全向轮小车图9

3D手势遥控全向轮小车图10

3D手势遥控全向轮小车图11


3D手势遥控全向轮小车图12



3D手势遥控全向轮小车图13

手柄程序代码:
[mw_shl_code=applescript,true]
#include <DFRobot_Gesture.h>
#include <Wire.h>

#define Dio 8           //数字IO口
#define Con 9          //

unsigned int Mark = 0x00, Mark1 = 0x00, Mark2 = 0x00;
unsigned char cmd;

DFRobot_Gesture myGesture;

void Control_3D()
{
  if (digitalRead(Dio) == 0)
  {
    myGesture.I2C1_MasterRead(md.buf, 26, 0x42); //The address is:0x42
    cmd = myGesture.mgcProcMsg();     //process the message
    if (cmd != GI_NOGESTURE )
    {
      if (cmd == GI_FLICK_U)
        Mark1 = 0x10;

      else if (cmd == GI_FLICK_D)
        Mark1 = 0x20;

      else if (cmd == GI_FLICK_L)
        Mark1 = 0x30;

      else if (cmd == GI_FLICK_R)
        Mark1 = 0x40;

      else if (cmd == GI_AIRWHEEL_CW)
        Mark1 = 0x50;

      else if (cmd == GI_AIRWHEEL_CCW)
        Mark1 = 0x60;
    }
    if (digitalRead(Con) == HIGH)
      Mark2 = 0x01;
    else
    {
      Mark1 = 0x00;
      Mark2 = 0x00;
     }
  }
}


void setup()
{
  Serial.begin(115200);
  pinMode(Dio, INPUT);
  pinMode(Con, INPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  digitalWrite(10, HIGH);  //按键正极
  digitalWrite(11, LOW);  //按键负极
}

void loop()
{
  Control_3D();
  Mark = Mark1 + Mark2;
  Serial.write(Mark);
  delay(20);
}[/mw_shl_code]

小车程序代码:
[mw_shl_code=applescript,true]//电机控制端口设置
const int EN1 = 3; //控制右侧电机速度
const int EN2 = 11; //控制左侧电机速度
const int EN3 = 5; //控制左侧电机速度

const int IN1 = 4; //控制右侧电机方向
const int IN2 = 12; //控制左侧电机方向
const int IN3 = 8; //控制左侧电机方向

const int UP = 1;
const int DOWN = 2;
const int LEFT = 3;
const int RIGHT = 4;
const int CW = 5;
const int CCW = 6;
unsigned int distance = 0;
unsigned int Data_Blu = 0;
unsigned int V = 0, VS = 0;
unsigned int Speed = 0;

//控制电机转动子函数
void Motor_Control(int M1_DIR, int M1_EN, int M2_DIR, int M2_EN, int M3_DIR, int M3_EN)
{
  //////////M1////////////////////////
  if (M1_DIR == 0) //M1电机的方向
    digitalWrite(IN1, HIGH); //置高,设置方向向前
  else
    digitalWrite(IN1, LOW); //置低,设置方向向后
  if (M1_EN == 0) //M1电机的速度
    analogWrite(EN1, LOW); //置低,停止
  else
    analogWrite(EN1, M1_EN); //否则,就设置相应的数值
  ///////////M2//////////////////////
  if (M2_DIR == 0) //M2电机的方向
    digitalWrite(IN2, HIGH); //置高,方向向前
  else
    digitalWrite(IN2, LOW); //置低,方向向后
  if (M2_EN == 0) //M2电机的速度
    analogWrite(EN2, LOW); //置低,停止
  else
    analogWrite(EN2, M2_EN); //否则,就设置相应的数值
  ///////////M3//////////////////////
  if (M3_DIR == 0) //M3电机的方向
    digitalWrite(IN3, HIGH); //置高,方向向前
  else
    digitalWrite(IN3, LOW); //置低,方向向后
  if (M3_EN == 0) //M3电机的速度
    analogWrite(EN3, LOW); //置低,停止
  else
    analogWrite(EN3, M3_EN); //否则,就设置相应的数值
}

void setup()
{
  Serial.begin(115200);
  pinMode(EN1, OUTPUT);
  pinMode(EN2, OUTPUT);
  pinMode(EN3, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
}

void loop()
{

  while(!Serial.available());
  if (Serial.available())
  {
    Data_Blu = Serial.read();
    VS = Data_Blu % 16;
    V = Data_Blu / 16;
  }
  if (VS != 0)
    Speed = 120;
  else
    Speed = 0;
  switch (V)
  {
    case UP:
      Motor_Control(0, 0, 1, Speed, 1, Speed);
      break;

    case DOWN:
      Motor_Control(0, 0, 0, Speed, 0, Speed);
      break;

    case LEFT:
      Motor_Control(0, Speed, 0, Speed / 2, 1, Speed / 2);
      break;

    case RIGHT:
      Motor_Control(1, Speed, 1, Speed / 2, 0, Speed / 2);
      break;
      
    case CW:
      Motor_Control(1, Speed, 0, Speed, 1, Speed);
      break;

    case CCW:
      Motor_Control(0, Speed, 1, Speed, 0, Speed );
      break;
    default:
      Motor_Control(0, 0, 0, 0, 0, 0);
  }

  delay(1);
}[/mw_shl_code]


这样就做好了全向小车和控制器,接上电源就可以玩耍了
将黄色按钮按下后,使用3D手势传感器,小车开始移动,松开黄色按钮后,小车停止移动。


hnyzcj  版主

发表于 2017-7-5 06:29:01

上个视频,楼主
回复

使用道具 举报

hnyzcj  版主

发表于 2017-7-5 06:29:09

手柄呢/
回复

使用道具 举报

hnyzcj  版主

发表于 2017-7-5 06:30:54

ooo,手柄是那个3D传感器,刚理解错误了,哈哈哈
回复

使用道具 举报

luna  初级技神
 楼主|

发表于 2017-7-7 15:27:16

hnyzcj 发表于 2017-7-5 06:29
上个视频,楼主

视频拍好补上~
回复

使用道具 举报

O_oYYQ  高级技师

发表于 2017-7-7 16:08:47

前排围观luna姐的作品
回复

使用道具 举报

luna  初级技神
 楼主|

发表于 2017-7-7 16:55:47

O_oYYQ 发表于 2017-7-7 16:08
前排围观luna姐的作品

不是我的哦~~我是帮发的,作者是吴雷(妹子)
回复

使用道具 举报

ylweb  学徒

发表于 2018-8-6 18:43:53

感谢分享~~~~
回复

使用道具 举报

20060606  高级技匠

发表于 2020-8-10 05:35:29

感谢分享
回复

使用道具 举报

 初级技匠

发表于 2022-4-17 09:42:55

hnyzcj 发表于 2017-7-5 06:30
ooo,手柄是那个3D传感器,刚理解错误了,哈哈哈

无意中把沙发板凳还有地板全占了
回复

使用道具 举报

 初级技匠

发表于 2022-4-17 09:44:14

luna 发表于 2017-7-7 16:55
不是我的哦~~我是帮发的,作者是吴雷(妹子)

不错,做的作品很好哦
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail