Notices


Poll: If a 3D printable keyboard game pad project became available I would wan to...
Poll Options
If a 3D printable keyboard game pad project became available I would wan to...

Reply
Thread Tools
Posts: 1,417 | Thanked: 2,619 times | Joined on Jan 2011 @ Touring
#1
(updated)
Printable gamepad written in Openscad for the N900 similar to the Game-Gripper. You can grab the code or view a screenshot of the latest 3D model downthread. This is the initial release, fIrst print is done and issues needing fixes are noted below. This first release is sized for N900s with the Mugen extended battery cover. I will measure for regular battery once this prints and is verified, probably tomorrow.
The V0.6 design needs a few tweaks like resized non-jam buttons, moved or removed USB port, tiny tweaks of two button peg holes, move the joining screw holes and enlarge.

Please post requests while I am still working directly on the project and you will have a better chance of getting a .stl model file made. I have only used the Nintendo64 emulator for Mario64 using the accelerometer for direction input, so advice from emulator power users would be appreciated. I am also open to other 3D project requests depending on available time and difficulty.

Now also featured on Thingiverse! http://www.thingiverse.com/thing:113285 You can grab the ready to print .stl files there.\

I don't see any N900 game grippers for sale anymore, it appears that Game Gripper still lists them but they have been on backorder and this is absolutely the only way double-Scud and Mugen battery users can get a working gamepad. This is not a game gripper but rather a clean slate printable model.

Ideally the available models would include source code, I chose openscad, so that it becomes easy to modify. As a fun gimmick maybe put the gcode for the current release into an app that can control a Mendel Prusa 3D printer via host mode so the new open-griper releases would appear on the repos, or perhaps a packaged native version of http://www.openscad.org/
Attached Images
  

Last edited by biketool; 2013-07-07 at 18:23.
 

The Following 12 Users Say Thank You to biketool For This Useful Post:
Posts: 254 | Thanked: 509 times | Joined on Nov 2011 @ Canada
#2
 

The Following User Says Thank You to shawnjefferson For This Useful Post:
Posts: 1,417 | Thanked: 2,619 times | Joined on Jan 2011 @ Touring
#3
So the N900 gripper still looks to still be available from game gripper.
It seems it is still offered but is on eternal backorder. "Notify me when the stock has been refilled"
http://www.game-gripper.eu/buy_n900.aspx
Still even if is someday available again from game gripper, is there any interest in an open hackable 3D printable design being available? I had been playing Mario64 a while back but now the effort would mostly be for the community.
Also looking for cool upgrade ideas to implement. This is not aimed at making a pirate copy of the game gripper but rather to make something better and open/hackable.

How many TMO users do have access to a 3D printer and want to print N900 accessories?

in addition to this open gamepad you can print a replacement stylus
http://www.thingiverse.com/thing:21911
and two car mounts
http://www.thingiverse.com/thing:8062
http://www.thingiverse.com/thing:10079

Last edited by biketool; 2013-07-05 at 15:50.
 

The Following User Says Thank You to biketool For This Useful Post:
DA5's Avatar
Posts: 70 | Thanked: 338 times | Joined on Jan 2013
#4
I don't have access to a 3D printer, but these features would be great.

More button holes but with flat non-functional fillers that could be placed in unwanted slots.

One specifically for use with the N900 OtterBox case maybe with clips to lock it into the speaker holes, and if it's that big it could also use the camera and volume buttons for L/R or something.
 

The Following 3 Users Say Thank You to DA5 For This Useful Post:
Posts: 1,417 | Thanked: 2,619 times | Joined on Jan 2011 @ Touring
#5
DA5, once I get the gripper made you could send me pix and measurements for the Otterbox and I can see about modeling, I unfortunately don't have the skills to mod the camera and volume buttons in software though.
 

The Following User Says Thank You to biketool For This Useful Post:
Posts: 1,417 | Thanked: 2,619 times | Joined on Jan 2011 @ Touring
#6
This is the prototype shell, I will code up some buttons and the control pad.
Code:
//open-gripper slip on keyboard gamepad adapter for Nokia N900 phone with mugen extended battery cover

difference()
 {
 // outer box
 cube ([120,29,30]);

 // cut room for N900 to fit	 and holes for audio and USB
 union()
  {
	//this is a box model of a N900 w/mugen back and screen slid out 
	union()
		{
			translate([5,5,5])
			{
				#cube([110.5,58,18.5]);
			}
			translate([5,29,22.5])
			{
				#cube([110.5,58,6]);
			}
		}
	// audio jack
   translate([105,13,15]) rotate([0,90,0])
    {
     cylinder(r=3,h=20);
    }
	// mini USB port
   translate([-1,11,12])
    {
    cube([11,11,8]);
    }
	//Button Spaces for Left side diamond pattern 4 controler buttons
	//button hole at semicolon button
   translate([95,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([95,24,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at return button
   translate([102,17,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([102,17,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at colon button
   translate([89,17,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([89,17,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at down-arrow button
   translate([95,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([95,10,28])
    {
    cylinder(r=4,h=20);
    }	
	//Button Spaces for center 4 controler buttons
	//button hole at T button
   translate([52.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([52.5,24,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at U button
   translate([67.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([67.5,24,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at B button
   translate([52.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([52.5,10,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at M button
   translate([67.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([67.5,10,28])
    {
    cylinder(r=4,h=20);
    }	
	//directional controller, right side, center pivot to prevent multi-press of directional buttons W,A,D,X pivot bump over S key
	//Button through holes
	//button hole at W button
   translate([31.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
	//button hole at D button
   translate([39,17,12])
    {
    cylinder(r=2,h=40);
    }	
	//button hole at A button
   translate([24,17,12])
    {
    cylinder(r=2,h=40);
    }	
	//button hole at W button
   translate([31.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
	//Controller cross cutout and pivot bump
	difference()
		{
		union()
			{
				translate([28,5.5,28])
					{
						cube ([8,22,20]);
					}
				translate([20,12.5,28])
					{
						cube ([23,8,20]);
					}
			}
		//Pivot Bump
		translate([31.5,17,28.5])
			{
				cylinder(r1=3, r2=1, h=2);
			}
		}
  }
 }
here is what that looks like
Attached Images
 
 

The Following User Says Thank You to biketool For This Useful Post:
Posts: 1,417 | Thanked: 2,619 times | Joined on Jan 2011 @ Touring
#7
(Contains Obsolete/Incorrect Code)
Directional pad, the pegs reverse taper so should snap in and stay.
Code:
//button and control pad for open-gripper
//Controller cross cutout and pivot bump
	difference()
		{
		union()
			{
				translate([28,5.5,29])
					{
						cube ([8,22,4]);
					}
				translate([20,12.5,29])
					{
						cube ([23,8,4]);
					}
				//button hole at W button
			   translate([31.5,24,25])
			    {
			    cylinder(r1=2, r2=1.5,h=8);
			    }	
				//button hole at D button
			   translate([39,17,25])
   				 {
   			 cylinder(r1=2, r2=1.5,h=8);
			    }	
				//button hole at A button
			   translate([24,17,25])
			    {
			    cylinder(r1=2, r2=1.5,h=8);
			    }	
				//button hole at W button
			   translate([31.5,10,25])
			    {
			    cylinder(r1=2, r2=1.5,h=8);
			    }
			}
		//Pivot Bump
		translate([31.5,17,28.5])
			{
				cylinder(r1=3.5, r2=1.2, h=1.5);
			}
		}
and the buttons
Code:
//buttons for open-gripper
 
    cylinder(r1=1.5, r2=2,h=8);
    cylinder(r=4,h=4);
Attached Images
  

Last edited by biketool; 2013-07-07 at 14:26.
 

The Following User Says Thank You to biketool For This Useful Post:
Posts: 1,417 | Thanked: 2,619 times | Joined on Jan 2011 @ Touring
#8
I don't have time to print this for a few days butif anyone wants to comment please do, You can help, especially with verifying measurements or improving layout.
improvements under consideration: ( Strikeout = Done)
-print a single layer mask with button holes to verify correct button placement(save print feedstock)
-making the through holes slightly cone shaped to match the tapered pusher pegs on the buttons.
-splitting the gripper into two pieces and connecting with screws to make slicing and 3D printing easier
-removing plastic from the area below the keyboard
-thinning the plastic holding against the battery cover
-rounding edges
-improve ergonomics
-make second version sized for standard N900 without Mugen extended battery covers
-redesign buttons and d-pad as two parts, the button side and pegs inserted from the back into holes on the buttons
-If gripper shell is split into two pieces use stainless allen screws facing forward to look extra cool.
-respond and include feedback or contributed code
-shrink buttons and dpad by 0.2mm on edges so they don't stick

Last edited by biketool; 2013-07-07 at 14:46.
 

The Following User Says Thank You to biketool For This Useful Post:
Posts: 1,417 | Thanked: 2,619 times | Joined on Jan 2011 @ Touring
#9
I have a prototype printing now, silver buttons and black body.
Actual print pic below code!
(these files need to be tweaked a bit for final release)
Top/gamepad V0.6
Code:
//open-gripper slip on keyboard gamepad adapter for Nokia N900 phone with mugen extended battery cover(edited to cut face from rest of model for printing and add screw holes)

difference()
 {
 // outer box
 cube ([120,29,30]);

 // cut room for N900 to fit	 and holes for audio and USB
 union()
  {
	//this is a box model of a N900 w/mugen back and screen slid out 
	union()
		{
			translate([5,5,5])
			{
				cube([110.5,58,18.5]);
			}
			translate([5,29,22.5])
			{
				cube([110.5,58,6]);
			}
//Add delete cube to remove bottom of model
			translate([-0.5,-5,-0.5])
			{
				cube ([121,300,24]);
			}
//Add block to remove back of model
			translate([-1,-1,0])
			{
				cube ([125,5,50]);
			}
//Add space to back of model for button wiggle
			translate([21,7,18.5])
			{
				//cube ([120-16-20,29-14+5,7]);
			}
//add screw holes and countersinks
			union()
				{
					translate ([2.8,13,29])
						{
						cylinder(r1=1, r2=3, h=1.1);
						translate([0,0,-30])
							{
							#cylinder(r=1, h=50);
							}
						}

					translate ([110.5+1.8+5,26,29])
						{
						cylinder(r1=1, r2=3, h=1.1);
						translate([0,0,-30])
							{
							#cylinder(r=1, h=50);
							}
						}
				}		
					translate ([2.8,7,29])
						{
						cylinder(r1=1, r2=3, h=1.1);
						translate([0,0,-30])
							{
							#cylinder(r=1, h=50);
							}
						}

					translate ([110.5+1.8+5,7,29])
						{
						cylinder(r1=1, r2=3, h=1.1);
						translate([0,0,-30])
							{
							#cylinder(r=1, h=50);
							}
						}
				}		





		}
	// audio jack
   translate([105,13,15]) rotate([0,90,0])
    {
     cylinder(r=3,h=20);
    }
	// mini USB port
   translate([-1,11,12])
    {
    cube([11,11,8]);
    }
	//Button Spaces for Left side diamond pattern 4 controler buttons
	//button hole at semicolon button
   translate([95.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([95.5,24,28])
    {
    cylinder(r=4,h=20);
    }	
   translate([95.5,24,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//button hole at return button
   translate([102,17,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([102,17,28])
    {
    cylinder(r=4,h=20);
    }	
   translate([102,17,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//button hole at colon button
   translate([89,17,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([89,17,28])
    {
    cylinder(r=4,h=20);
    }
   translate([89,17,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }		
	//button hole at down-arrow button
   translate([95.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([95.5,10,28])
    {
    cylinder(r=4,h=20);
    }	
   translate([95.5,10,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }		
	//Button Spaces for center 4 controler buttons
	//button hole at T button
   translate([52.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([52.5,24,28])
    {
    cylinder(r=4,h=20);
    }	
   translate([52.5,24,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }		
	//button hole at U button
   translate([67.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([67.5,24,28])
    {
    cylinder(r=4,h=20);
    }	
   translate([67.5,24,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//button hole at B button
   translate([52.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([52.5,10,28])
    {
    cylinder(r=4,h=20);
    }	
   translate([52.5,10,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//button hole at M button
   translate([67.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([67.5,10,28])
    {
    cylinder(r=4,h=20);
    }	
   translate([67.5,10,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//directional controller, right side, center pivot to prevent multi-press of directional buttons W,A,D,X pivot bump over S key
	//Button through holes
	//button hole at W button
   translate([31.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([31.5,24,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//button hole at D button
   translate([39,17,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([39,17,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//button hole at A button
   translate([24,17,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([24,17,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//button hole at X button
   translate([31.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([31.5,10,18.5])
    {
    cylinder(r1=5, r2=2,h=7);
    }	
	//Controller cross cutout and pivot bump
	difference()
		{
		union()
			{
				translate([27.5,5.5,28])
					{
						cube ([8,22,20]);
					}
				translate([20,12.5,28])
					{
						cube ([23,8,20]);
					}
			}
		//Pivot Bump
		translate([31.5,17,28.5])
			{
				cylinder(r1=2, r2=1, h=3);
			}
		}
  }
Bottom, USB port and headphone port V0.4
Code:
//open-gripper slip on keyboard gamepad adapter for Nokia N900 phone with mugen extended battery cover(edited to cut bottom from rest of model for printing and add screw holes)

difference()
 {
 // outer box
 cube ([120,29,30]);

 // cut room for N900 to fit	 and holes for audio and USB
 union()
  {
	//this is a box model of a N900 w/mugen back and screen slid out 
	union()
		{
			translate([5,5,5])
			{
				#cube([110.5,58,18.5]);
			}
			translate([5,29,22.5])
			{
				#cube([110.5,58,6]);
			}
//Add delete cube to remove top(gamepad area) of model
			translate([-1,-1,18.5+4.99])
			{
				cube ([150,300,24]);
			}
//Add block to thin back of model
			translate([-1,-1,-1])
			{
				cube ([125,6.1,50]);
			}
//Add block to thin
			translate([-1,-1,-1])
			{
				cube ([125,125,3]);
			}
//add screw holes and countersinks
			union()
				{
					translate ([2.8,13,29])
						{
						cylinder(r1=1, r2=3, h=1.1);
						translate([0,0,-30])
							{
							#cylinder(r=1, h=50);
							}
						}

					translate ([110.5+1.8+5,26,29])
						{
						cylinder(r1=1, r2=3, h=1.1);
						translate([0,0,-30])
							{
							#cylinder(r=1, h=50);
							}
						}
				}		
					translate ([2.8,7,29])
						{
						cylinder(r1=1, r2=3, h=1.1);
						translate([0,0,-30])
							{
							#cylinder(r=1, h=50);
							}
						}

					translate ([110.5+1.8+5,7,29])
						{
						cylinder(r1=1, r2=3, h=1.1);
						translate([0,0,-30])
							{
							#cylinder(r=1, h=50);
							}
						}
				}		





		}
	// audio jack
   translate([105,13+5,15]) rotate([0,90,0])
    {
     cylinder(r=3,h=20);
    }
	// mini USB port
   translate([-1,11+5,12])
    {
    cube([11,11,8]);
    }
	//Button Spaces for Left side diamond pattern 4 controler buttons
	//button hole at semicolon button
   translate([95.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([95.5,24,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at return button
   translate([102,17,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([102,17,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at colon button
   translate([89,17,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([89,17,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at down-arrow button
   translate([95.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([95.5,10,28])
    {
    cylinder(r=4,h=20);
    }	
	//Button Spaces for center 4 controler buttons
	//button hole at T button
   translate([52.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([52.5,24,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at U button
   translate([67.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([67.5,24,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at B button
   translate([52.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([52.5,10,28])
    {
    cylinder(r=4,h=20);
    }	
	//button hole at M button
   translate([67.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
   translate([67.5,10,28])
    {
    cylinder(r=4,h=20);
    }	
	//directional controller, right side, center pivot to prevent multi-press of directional buttons W,A,D,X pivot bump over S key
	//Button through holes
	//button hole at W button
   translate([31.5,24,12])
    {
    cylinder(r=2,h=40);
    }	
	//button hole at D button
   translate([39,17,12])
    {
    cylinder(r=2,h=40);
    }	
	//button hole at A button
   translate([24,17,12])
    {
    cylinder(r=2,h=40);
    }	
	//button hole at X button
   translate([31.5,10,12])
    {
    cylinder(r=2,h=40);
    }	
	//Controller cross cutout and pivot bump
	difference()
		{
		union()
			{
				translate([28,5.5,28])
					{
						cube ([8,22,20]);
					}
				translate([20,12.5,28])
					{
						cube ([23,8,20]);
					}
			}
		//Pivot Bump
		translate([31.5,17,28.5])
			{
				cylinder(r1=3, r2=1, h=2);
			}
		}
  }
Dpad V0.4
Code:
//button and control pad for open-gripper v0.2
//Controller cross cutout and pivot bump
	difference()
		{
		union()
			{
				translate([27.5,5.5,0])
					{
						cube ([8,22,4]);
					}
				translate([20,12.5,0])
					{
						cube ([23,8,4]);
					}
				//button hole at W button
			   translate([31.5,24,1])
			    {
			    cylinder(r1=1.5, r2=2,h=8);
			    }	
				//button hole at D button
			   translate([39,17,1])
   				 {
   			 cylinder(r1=1.5, r2=2,h=8);
			    }	
				//button hole at A button
			   translate([24,17,1])
			    {
			    cylinder(r1=1.5, r2=2,h=8);
			    }	
				//button hole at W button
			   translate([31.5,10,1])
			    {
			    cylinder(r1=1.5, r2=2,h=8);
			    }
			}
		//Pivot Bump
		translate([31.5,17,2])
			{
				cylinder(r1=4, h=4);
			}
		}
Button, print eight
Code:
//buttons for open-gripper V0.4
 
    cylinder(r1=1.5, r2=2,h=9);
    cylinder(r=3.9,h=4);
Attached Images
 

Last edited by biketool; 2013-07-07 at 17:46.
 

The Following 6 Users Say Thank You to biketool For This Useful Post:
nokiabot's Avatar
Posts: 1,974 | Thanked: 1,834 times | Joined on Mar 2013 @ india
#10
looks something ubiqutious.we have hope carry on
 

The Following 2 Users Say Thank You to nokiabot For This Useful Post:
Reply

Tags
.stl file, 3d printing, emulator, game gripper, openscad


 
Forum Jump


All times are GMT. The time now is 01:08.