大数跨境
0
0

CAD用户的福音!自制一个低成本六自由度的 “3DConnection SpaceMouse”

CAD用户的福音!自制一个低成本六自由度的 “3DConnection SpaceMouse” DF创客社区
2023-01-12
2
导读:提升效率的好工具
【点击上方「蓝字」关注DF创客社区,一起成为技术颜控】

图片来自SpaceMouse官网

传统鼠标是所有2D/3D CAD画图工作站的重要组成部分。它重量轻,而且易于操作。然而从人机工程学的角度来看,它却有一个很明显的缺点——你总是需要用同一只手操作它来完成所有的任务。当大量使用鼠标进行重复性的操作时,这可能导致疼痛和鼠标手,也称为RSI(重复性劳损)。

使用3D鼠标可以防止这些症状,同时使你的CAD工作流程更加高效和健康。

以上内容来自SpaceMouse官网。

图片来自SpaceMouse官网

一个重度的CAD工作者当然需要一款好用的3D鼠标,我们今天就来介绍自己DIY一个!

一个同时支持6个自由度的3D打印软件专用鼠标,而且非常容易组装。

相关按键的绑定可以在源代码中更改,支持在Linux、Windows和macOS上使用。

作者提供了两种类型的底座(倾斜型和水平型)

▼ 演示效果

材料

  • 三个模拟操纵杆传感器(带电路板)
  • Pro Micro(基于ATmega 32U4的微控制器,兼容Arduino Leonardo)
  • 各种长度的2毫米自攻螺丝

打印材料

  • 打印三份 ball-joint.stl
  • 打印 knob.stl需要支撑,如果倒放的话可以不需要支撑。
ball-joint.stl
shaft.stl
knob.stl

所有的stl文件可以在文末打包下载。

组装并测试

  • 选择足够长度的螺丝。对ball-joint.stl,建议用最短的螺钉(M2 x 4mm)
  • 使用Arduino IDE将程序 mouse.ino  烧录到 Pro Micro 微控制器上
  • 连接模拟操纵杆传感器和Pro Micro
  • 修改代码好让与你的CAD软件一起使用(目前的代码是适合Blender的)
  • 把控制器安装在三脚架上并进行测试
#include "Mouse.h"
#include "Keyboard.h"

#define DELAY 15 // motion sending cycle
#define DEAD_THRES 0 // threshold to ignore small motion
#define SPEED_PARAM 400 // larger is slower

#define DOF 6
#define TX 0 // translation X
#define TY 1 // translation Y
#define TZ 2 // translation Z
#define RX 3 // rotation X
#define RY 4 // rotation Y
#define RZ 5 // rotation Z

// ports of analog input for joysticks
int port[DOF] = {A0, A2, A6, A1, A3, A7};

// conversion matrix from sensor input to rigid motion
int coeff[DOF][DOF] = {
  { 0,  0,  0,-10,-1020}, // TX
  { 0,  0,  0,-1717,  0}, // TY
  {-3-3-3,  0,  0,  0}, // TZ
  {-6,  6,  0,  0,  0,  0}, // RY
  { 3,  3-6,  0,  0,  0}, // RX
  { 0,  0,  0,  3,  3,  3}, // RZ
};

int origin[DOF]; // initial sensor values

void setup() {
  Mouse.begin();
  Keyboard.begin();
  delay(300);
  for(int i = 0; i < DOF; i++) {
    origin[i] = analogRead(port[i]);
  }
}

int sx, sy, sw;
void move(int x, int y, int w) {
  if(x > DEAD_THRES)
    x -= DEAD_THRES;
  else if(x < -DEAD_THRES)
    x += DEAD_THRES;
  else
    x = 0;

  if(y > DEAD_THRES)
    y -= DEAD_THRES;
  else if(y < -DEAD_THRES)
    y += DEAD_THRES;
  else
    y = 0;

  if(w > DEAD_THRES)
    w -= DEAD_THRES;
  else if(w < -DEAD_THRES)
    w += DEAD_THRES;
  else
    w = 0;

  Mouse.move(x, y, w);

  sx += x;
  sy += y;
  sw += w;
}

// return mouse pointer to the original position
void resetMove(void) {
    Mouse.move(-sx, -sy, -sw);
    sx = 0;
    sy = 0;
    sw = 0;
}

void loop() {
  int sv[DOF]; // sensor value
  int mv[DOF]; // motion vector
  int moveFlag = false;

  for(int i = 0; i < DOF; i++) {
    sv[i] = analogRead(port[i]) - origin[i];
  }

  for(int i = 0; i < DOF; i++) {
    mv[i] = 0;
    for(int j = 0; j < DOF; j++) {
      mv[i] += coeff[i][j] * sv[j];
    }
    mv[i] /= SPEED_PARAM;
    if(mv[i] > 127) {
      mv[i] = 127;
    }
    else if(mv[i] < -128) {
      mv[i] = -128;
    }
  }

  if(abs(mv[RX]) > DEAD_THRES || abs(mv[RY]) > DEAD_THRES) {
    Mouse.press(MOUSE_MIDDLE);
    move(mv[RX], mv[RY], 0);
    Mouse.release(MOUSE_MIDDLE);
  }

  if(abs(mv[TX]) > DEAD_THRES || abs(mv[TY]) > DEAD_THRES) {
    Keyboard.press(KEY_LEFT_SHIFT);
    Mouse.press(MOUSE_MIDDLE);
    move(mv[TX], mv[TY], 0);
    Keyboard.releaseAll();
    Mouse.release(MOUSE_MIDDLE);
  }

  if(abs(mv[TZ]) > DEAD_THRES) {
    Keyboard.press(KEY_LEFT_CTRL);
    Mouse.press(MOUSE_MIDDLE);
    move(0, mv[TZ], 0);
    Keyboard.releaseAll();
    Mouse.release(MOUSE_MIDDLE);
  }

  resetMove();

  delay(DELAY);
}

注意(2023年1月1日): 增加了一个mouse-conservative.ino的代码(不需要频繁地按下/释放按钮)。可以通过修改代码来配置对应的程序,目前虽然暂时不支持在多个应用程序之间切换,但是至少可以在这边很容易地修改。

安装底座

  • 提供了两种类型的底座(倾斜式和水平式)(作者个人更喜欢倾斜式)
  • 可以使用2毫米的自攻螺丝将旋钮安装到底座上
  • 该打印模型是120度旋转对称的。示例中的代码假定(传感器1=在2点钟方向,传感器2=在10点钟方向和传感器3=在6点钟方向)。你可以每30度改变旋钮的角度
  • 对于倾斜式的版本,Pro Micro是由内部结构和盖子的孔固定的。
  • 对于水平式的版本,Pro Micro与Micro USB的连接器一起放在外壳空槽里
  • 可以在底部四个角贴上橡胶片来增加摩擦力。
tilted-base.stl
tilted-rear-cover.stl
horizontal-base.stl
horizontal-bottom-cover.stl

底座的所有的stl文件可以在文末打包下载。

原文链接:https://www.instructables.com/Space-Mushroom-Full-6-DOFs-Controller-for-CAD-Appl/
原文作者:shiura
译文首发于:DF创客社区
转发请注明出处与原作者信息


硬件军火库

DF硬件军火库

点击了解详情👆

大家有什么想说的,欢迎在下方留言

所有stl文件可以点击阅读原文获取,或者在公众号后台回复“3D鼠标”获取!


 往期项目回顾 


【基础系列教程】初识Arduino

用Arduino做一个神奇的悬浮灯!

“现在玩Arduino的人是越来越少了!”

自制一个带触摸屏控制的Arduino机械臂

Arduino IDE 2.0来了!看看有哪些新功能!

用Arduino自制一个只有表针,没有表盘的“空心时钟”

2022第一弹——用Arduino和电磁继电器做一个“电磁炮”


点击阅读👆

【声明】内容源于网络
0
0
DF创客社区
我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
内容 1282
粉丝 0
DF创客社区 我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
总阅读2.1k
粉丝0
内容1.3k