Skip to content

Commit

Permalink
Started proto 3 handle improvements: two more buttons, firmer assembl…
Browse files Browse the repository at this point in the history
…y, better button module and hat assembly
  • Loading branch information
tloimu committed May 27, 2021
1 parent bd29373 commit f18d5c3
Show file tree
Hide file tree
Showing 10 changed files with 355 additions and 130 deletions.
21 changes: 14 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ This 3D printable HOTAS throttle game controller. It connects as a standard USB
It has:

- 3 axis (throttle, vertical, horizontal) with center detents an all
- 5 buttons
- 7 buttons
- hat switch with 8 directions and press button
- lock/program button
- RGB LED indicating state: throttle center (green), locked (red), program (blue)
- high quality mechanical and electro-mechanical components
- very smooth and easy throttle action with no stiction
- adjustable throttle handle angle (twist) for better ergonomics at different table positioning
- customizable throttle axis detents
- host additional USB serial connectivity for debugging and programming

**Complete Design Explosion View**
Expand Down Expand Up @@ -44,10 +46,15 @@ The microcontroller was placed in the handle section to minimize the amount of w

All 3D printable parts are designed using OpenSCAD and I printed them using my Prusa MK3S running the default .40mm nozzle. Most parts can be printed with 0.30mm layer height but some require 0.20mm layers to get proper results.

Before printing the thumb-side, add supports to the couple of screw locations like below.

![Printing supports on the thumb side](img/thumb-side-printing-supports.png)


Some parts require or benefit from post-print processing:

- drill the five button holes with e.g. 8.5mm drill to make the hole walls smooth and the buttons will work smoother
- some screw holes may benefit from drilling for easier fit
- drill the five button holes with e.g. 8.5mm drill to make the button hole walls smooth and the buttons will work smoother - you might also need to gently file the outsides of the buttons too if there is stuff left from printing to get them fit and move well
- some screw holes may benefit from drilling for easier fit (2.5mm for inner screwholes and 3mm for screwholes on circuitboards)
- throttle center detent hole could be drilled bigger for stronger detent or cone shaped with a bit larger drill head for smoother detent exit/entry

Below is an illustration of all printable parts.
Expand Down Expand Up @@ -99,10 +106,10 @@ On top of the 3D printable components, you need
- 2 x linear motion rods 8mm x 168mm (get one longer and cut in two)
- 2 x linear bearings 8x15x45 (e.g. LM8LUU)
- 1 x Teensy LC (or another Arduino board with enough pins)
- 2 x 10kohm LIN pot (Bourns BI P160 with center detent e.g. KNOC-model)
- 2 x 10kohm LIN pot (e.g. BI Technologies/TT Electronics P160 with center detent, 15mm shaft - P160KN-1QC15B10K)
- 1 x 100mm travel 10kohm LIN slide pot (BI Technologies/TT Electronics PS100 B 10K 0E)
- 1 x multidirectional switch 8 dir + press (Alps 688RKJXL 100401V)
- 5 x switches (a tact switch with pins fitting the circuit board listed)
- 1 x multidirectional switch 8 dir + press (Alps RKJXM1015004)
- 7 x switches (a tact switch with pins fitting the circuit board listed)
- 1 x slide switch (any generic model you can fit the case)
- some generic circuit board (0.1" / 2.54mm pin pitch)
- N x screws (2.5mm and 3mm) for plastic - for case cover, handle thumb section and internal parts
Expand All @@ -116,7 +123,7 @@ On top of the 3D printable components, you need

The Teensy LC can quite easily be replaced with any Arduino compatible device with USB connectivity and enough pins. With more coding effort any USB capable micro controller that fits the case could also do.

The RGB LED and slide switch (lock/program) are fully optional. The multi-directional hat switch can also easily be left out, replaced with a simple switch or with a similar hat switch.
The RGB LED and slide switch (lock/program) are fully optional. The multi-directional hat switch can also easily be left out or replaced with a simpler 4-directional hat switch.

The steel ball and spring are used to make the center detent for the throttle. Different size ball and spring can be used by modifying the printed *BallSpringPlunger* parameters in the OpenSCAD files.

Expand Down
28 changes: 25 additions & 3 deletions commercial-parts.scad
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ module PotentiometerBournsPCW1JDown()
PotentiometerBournsPCW1J();
}

// LIN 10kohm pot with center detent
module PotentiometerBournsBIP160(flip = false, cavityOnly = false)
// BI/TT P160 pot with 15mm shaft (e.g. LIN 10kohm pot P160KN-1QC15B10K)
module PotentiometerBIP160(flip = false, cavityOnly = false)
{
base_diameter = 16.5;
base_height = 9.4;
Expand Down Expand Up @@ -148,7 +148,7 @@ module PotentiometerBournsBIP160(flip = false, cavityOnly = false)
}

// 8-direction + push button switch
module Alps688RKJXL100401V()
module AlpsRKJXM1015004()
{
color("brown")
{
Expand Down Expand Up @@ -268,3 +268,25 @@ module Gt2BeltCircular(l,d=12.5,width=6)
}
}
}


module SlideSwitch(l=12, w=5, h=5, screwDistance = 16)
{
translate([-l/2,-w/2,-h])
cube([l,w,h]);

difference()
{
translate([-screwDistance/2-2,-w/2,-0.5])
cube([screwDistance+4,w,0.5]);

translate([-screwDistance/2,0,-1])
cylinder(d=2, h=2);
translate([screwDistance/2,0,-1])
cylinder(d=2, h=2);
}

lever = [2, 2, 4];
translate([-lever.x/2, -lever.y/2, 0])
cube(lever);
}
85 changes: 53 additions & 32 deletions common.scad
Original file line number Diff line number Diff line change
Expand Up @@ -356,54 +356,59 @@ module SwitchButton(d=8, h=7, cavityOnly=false)
}
else
{
translate([0,0,-0.5])
{
cylinder(d=d, h=10);
}
translate([0,0,-0.5]) cylinder(d=d, h=10); // button hole
moveZ(-1.9-0.1) cylinder(d=d+2.2, h=1.9); // make sure buttons don't hit anything
}
}

SwitchButtonBallOffsetZ = 1.2;
module SwitchButtonBall(d=8, h=7)
module SwitchButtonBall(d=8, h=7, topRounding=4, text="")
{
difference()
{
union ()
union()
{
intersection()
difference()
{
translate([0,0,-1.2])
cylinder(d=d, h=h+0.8);
union()
union ()
{
translate([0,0,h - 4])
sphere(d=d);
translate([0,0,6-d])
cylinder(d=d, h=h-2);
intersection()
{
translate([0,0,-1.2])
cylinder(d=d, h=h+0.8);
union()
{
translate([0,0,h - topRounding])
sphere(d=d);
translate([0,0,(10-topRounding)-d])
cylinder(d=d, h=h-2);
}
}
translate([0,0,-1.2])
cylinder(d=d+1.6, h=1.2);
}
translate([0,0,-d/2])
cylinder(d=d-1, h=h);
translate([0,0,-1.25])
cylinder(d1=d+0.8, d2=d-1, h=1);

// Top inner cavity
translate([0,0,h - 4])
sphere(d=d-1);
}

// Center shaft
translate([0,0,-1.2])
cylinder(d=d+1.6, h=1.2);
cylinder(d=2.5,h=h+0.7);
}
translate([0,0,-d/2])
cylinder(d=d-1, h=h);
translate([0,0,-1.25])
cylinder(d1=d+0.8, d2=d-1, h=1);

// Top inner cavity
translate([0,0,h - 4])
sphere(d=d-1);
if (text != "")
{
translate([0,-1.4,h-0.599])
linear_extrude(height = 0.2)
text(text,size=3,halign="center");
}
}

// Center shaft
translate([0,0,-1.2])
cylinder(d=2.4,h=h+0.6);
}


module SwitchButtonSpring()
{

}

// Hat Switch with 4 directions and center push with 2x2x2mm shaft
Expand Down Expand Up @@ -791,3 +796,19 @@ module roundCube(d=3, size=[1, 1, 1], offset=[0, 0, 0], extended=0)
}
}
}

module ScrewSupport(din, dout, dbase, h)
{
difference()
{
union()
{
translate([0,0,h-1])
cylinder(d1=dout, d2=dbase, h=1);
cylinder(d=dout, h=h);
//# translate([0,0,-10]) cylinder(d=din, h=10);
}
translate([0,0,-0.9])
cylinder(d=din, h=h+1);
}
}
Binary file modified img/printed-parts.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/thumb-side-printing-supports.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/wiring-thumb-size.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 9 additions & 2 deletions printed-parts.scad
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,16 @@ module PrintableKnobsAndButtons()
moveX(15)
for (i=[0:1:4])
{
moveY(15*i)
moveY(10*i)
moveZ(SwitchButtonBallOffsetZ)
SwitchButtonBall();
SwitchButtonBall(d=8, h=7, topRounding=3.5);
}
moveY(20)
for (i=[0:1:2])
{
moveY(10*i)
moveZ(SwitchButtonBallOffsetZ)
SwitchButtonBall(d=8, h=6, topRounding=3.5);
}
}
}
Expand Down
Loading

0 comments on commit f18d5c3

Please sign in to comment.