Jump to content
IGNORED

Home built pair of USB spinners to use as atari paddles


Recommended Posts

post-31501-0-51377900-1325923018_thumb.jpg

Since there's been a bit of talk about the new release of Stella 3.5 having the ability to assign the X and Y axis of a mouse to separate paddles, I thought I'd show how I built a pair of home brew X and Y spinners. These are about as easy a build as you can get. No frills - far from a comercially built arcade spinner - but they will get the job done at the lowest possible cost.

 

Tested with Windows XP - plug both SpinnerMice into USB ports on the PC. One will control the X axis (side to side), the other will control the Y axis (up / down).

 

In Stella 3.5 you can now assign the X and Y axis to separate paddles (e.g. Paddle 0, and Paddle 1) which, when combined with a pair of spinners, allows great 2 player game play for games like Video Olympics (Pong) and Warlords and more. Future releases of Stella will hopefully offer even more vesitility with these spinners (2 player Indy500 is on my wishlist). A big thanks goes out to Stephena for adding this feature in his latest release.

 

Legal stuff: This is only the story of how I did this and is not intended as an instructional. If you wish to copy what I did, do so at your own risk.

 

post-31501-0-63800500-1325923178_thumb.jpg

Parts List (for one spinner - double the list for 2nd spinner):

 

EDIT - Change all references to the 1/4-20 x 1.5" screw to 1/4-20 x 1.5" Structural Bolt. I have upgraded both spinners with the bolt and it works much better than the screw. SEE the section toward the end of this post for photos describing the Structural Hex Bolt vs. the Screw BEFORE you continue reading!

 

ALSO - later in the post there's detail on using a plastic fender washer instead of the metal one. The plastic works much better!

 

1) 1/4-20 x 1.5" screw

1) 1/4-20 Nylock Hex Nut

1) 1/4" x 1.25" fender washer

1) Oring (or possible small rubber bands)

1) USB ball mouse

1) Control knob for 1/4" shaft

 

Notes:

Old style ball mouse as shown in photos below. USB connection is required since we are using more than one mouse. This may work if one mouse is a serial or PS/2, but the second one will have to be a USB.

 

Control Knob: the only real requirement is it needs to fit the 1/4" screw. Ones with set screws should work. Here I am adapting a 1/4" "push-on" style. See below.

 

Fender washer: Most washers will fit loosely on screws of the same size. We want a nice snug fit for ours so the screw (which is the spinner shaft) won't have a lot of free play. I remedied this by using a 3/16" x 1.25" fender washer, and enlarged the hole to 1/4" using a step-bit drill. This gave a much better fit. The standard 1/4" washer should work - just a little more free play.

 

post-31501-0-92605500-1325923278_thumb.jpg

Here's the under side of the knob I used. Outer surface is aluminum with a nylon inside core. It's a push on style (has "gear like" teeth in the socket). I was able to force thread the 1/4-20 screw into it. It wasn't that difficult and it tightened quite well.

Now is the time to pre-thread the knob if you use this style. Force thread the screw in, then screw it back out. Or you can Pre-thread with a 1/4-20 tap if you like.

 

post-31501-0-74683700-1325923283_thumb.jpg

Grabbed a USB ball mouse from the pile...

 

post-31501-0-31294100-1325923287_thumb.jpg

Removed the ball retainer and ball...

 

post-31501-0-70751900-1325923290_thumb.jpg

On this particular mouse I then removed the scroll-button-thingy...

 

post-31501-0-18729500-1325923294_thumb.jpg

Next I removed the screw on the bottom...

 

post-31501-0-82748000-1325923297_thumb.jpg

Carefully I snapped the top off. Yours may be different. This one needed to slide the top back a bit, then lift off...

 

 

post-31501-0-31078900-1325923301_thumb.jpg

This is looking from the top. Mark the center of the ball housing with an awl or center punch to prep for drilling a 1/4" hole.

 

 

post-31501-0-97753300-1325923304_thumb.jpg

I prefer using step bits for plastic, but a twist bit should work. Drill a 1/4" hole. A snug fit is wanted here for the 1/4" screw.

(This is the same bit I mentioned earlier that I used to enlarge the 3/16" fender washer to 1/4")

 

 

post-31501-0-51538300-1325923308_thumb.jpg

Carefully removed the Y axis encoder wheel. You may want to save it (and any other parts - I think you could reverse this hack and use the mouse again as a normal mouse). I was able to grab it snuggly in my fingers and pull it out by hand- one side at a time. Needle nose pliers may be needed.

Photo shows removal of the Y axis wheel. This is going to be the "Y" spinner. I later decided to also remove the X axis wheel from this spinner as well to avoid any inadvertent movement to the X axis while handling the spinner during game play.

 

 

post-31501-0-51430200-1325923590_thumb.jpg

Later steps will show how a belt (oring) is used to transfer our shaft/knob rotation to the encoder wheel (photo shows the screw (shaft) in place for a test fit). There is some black plastic material in the path of the belt that needs to be trimmed to avoid rubbing. The xacto knife in this photo shows the area that needed trimming. There was some trial and error involved. A dremel would work here. I chose to slowly whittle away the plastic that was in the way with the xacto.

 

 

post-31501-0-93509500-1325923594_thumb.jpg

Here I pre-positioned the oring by flattening it down and inserting it into the ball housing. Here you can see where I trimmed the plastic - where the bottom of the oring is resting...

 

 

post-31501-0-93502800-1325923598_thumb.jpg

Here I inserted the encoder wheel shaft into the exposed loop of the oring.

 

 

post-31501-0-09815800-1325923603_thumb.jpg

Next I snapped the encoder wheel back into place. There were actually 3 snaps: one at each end of the shaft, the third was the little retainer clip you can see along the shaft and in-between the oring and the encoder wheel...

 

 

post-31501-0-50227300-1325923607_thumb.jpg

From the bottom you can see the oring inside the ball housing. The knob shaft (the screw) will have to go through this loop and the hole I drilled.

 

 

post-31501-0-19641600-1325923612_thumb.jpg

From the top side (pcb side) push the screw into the 1/4" hole you drilled making sure it passes through the oring and out the bottom of the mouse...

 

 

post-31501-0-20715400-1325923616_thumb.jpg

Here is a top side view of the screw passing though ball housing and oring, and you can see the oring is around the encoder wheel shaft.

 

Notice the angle of the oring as it wraps around the encoder wheel shaft. In this photo it is slanting to the left like this \

 

If, when the spinner is completed, the mouse cursor doesn't move the correct direction (moves up when you spin down, or for the X axis the spinner moves left when you spin right) you can correct it by changing the slant. To change the direction remove the screw, rotate the oring 1/2 turn so the slant (as represented in this photo) would slant to the right like this /

 

Then reinsert the screw and complete the assemble.

 

 

post-31501-0-02688400-1325923620_thumb.jpg

Slide on the fender washer. On this particular mouse the washer fit perfectly into the circular recessed area where the ball cover/retainer used to fit...

 

 

 

post-31501-0-00611000-1325923624_thumb.jpg

Screw on the nylock hex nut using a 7/16" wrench and a screw driver. Tighten to the point where it is snug but the screw can still spin freely...

 

 

post-31501-0-13732300-1325923798_thumb.jpg

Screw the knob all the way onto the screw - nice and tight...

 

 

post-31501-0-53408900-1325925513_thumb.jpg

Time to put top back on...

This is the underside of the mouse top (cover). In the center of the photo there is a piece of plastic that pointed upward and made contact with head of the screw, preventing it from fitting correctly...

 

 

post-31501-0-62952800-1325925510_thumb.jpg

This photo shows where I cut away that plastic to clear the screw head...

 

 

post-31501-0-06700400-1325923818_thumb.jpg

One last look at the insides before the cover goes on. Notice the encoder wheel for the X axis has now been removed.

 

 

post-31501-0-85027000-1325923822_thumb.jpg

Snap the top back on and tighten the screw...

 

 

post-31501-0-28750600-1325923827_thumb.jpg

Scroller button is replaced...

Your Y axis spinner is ready for play!!! Try it out then come back here to see how I built the X Spinner!

 

 

post-31501-0-05500900-1325923831_thumb.jpg

This photo shows my X axis spinner under construction. The X spinner is basically the same as the Y - the only difference is which encoder wheel you wrap the belt (oring) around. In the photo The xacto knife is pointing to the plastic material that needed trimming for the oring to pass through freely...The X axis encoder wheel has already been removed - the Y encoder wheel hasn't been removed yet.

 

 

post-31501-0-18713200-1325923835_thumb.jpg

Here's a shot of the X axis spinner almost completed. You can see the plastic just under the oring has been trimmed. After this photo I removed the y axis encoder wheel and then put the top on.

 

 

post-31501-0-06383000-1325923840_thumb.jpg

Sorry I didn't have the size of the oring used. It was nice to have an assortment on-hand. A very small rubber band may have worked. I also wish I had some 1/4-20 Structural Bolts on hand in place of the screws. In time the oring may get cut from running over the screw threads. Easy enough to replace the oring or change out the screw to a bolt when I get the time.

 

 

post-31501-0-77052000-1325924068_thumb.jpg

Last addition - making a plastic fender washer. End result - the shaft screw glides through the plastic more smoothly than through the metal fender washer.

 

See the next 2 photos...

 

 

post-31501-0-42028500-1325924072_thumb.jpg

Last addition - making a plastic fender washer. End result - the shaft screw glides through the plastic more smoothly than through the metal fender washer.

 

See the next photo...

 

 

 

post-31501-0-22326800-1325924076_thumb.jpg

Last addition - making a plastic fender washer. End result - the shaft screw glides through the plastic more smoothly than through the metal fender washer.

 

 

post-31501-0-72407500-1325924061_thumb.jpg

While using the new spinners I keep accidentally hitting the mouse buttons!!

I'm considering perminately disabling the mouse buttons. All I will have to do is cut off the actuator tabs pointed out by the red arrows for the right and left. For the center I may just need to drill a hole through plastic in the circled area.

I'll probably keep them working for now. Hopefully a future release of Stella will provide mapping for the mouse buttons - Then these will be complete usb plug and play paddles with fire buttons...

 

 

post-31501-0-10007900-1325924078_thumb.jpg

Update: Use a Structural Hex Bolt in place of the screw

 

Find a 1/4-20x1.5" Structural hex bolt - Don't use the screw as shown in previous photos.

 

Technical - Structural Bolt as show in the photo is not completely threaded. Completely threaded bolts are known as tap bolts.

 

The oring-belt will now ride across the non-threaded part of the bolt - not the threads of the screw shown in all the previous photos. The improvement was very significant.

 

A little more plastic needs to be trimmed off the mouse to make room for the larger hex head as shown in the following photos.

 

 

post-31501-0-55848200-1325924080_thumb.jpg

As you can see the hex head is larger than the screw head was. It made contact with the mouse top so I had to cut some more material of the underside of the mouse top as shown in the following photos.

 

 

post-31501-0-89356400-1325924082_thumb.jpg

Here you can see the oring rides only on the non-threaded part of the bolt providing a smoother feel to the spinner...

 

 

post-31501-0-73087100-1325924084_thumb.jpg

The red arrows are pointing to 2 plastic clips that are holding down the center mouse button. Some, not all, of the clips need to be trimmed or the bolt head will rub.

 

 

post-31501-0-54492600-1325924086_thumb.jpg

Here I shaded out in red the areas I removed with a dremel tool.

 

post-31501-0-94591900-1325924087_thumb.jpg

The photo isn't clear, but you can tell part of the tabs are still there.

 

Take advantage of the Latest Stella 3.5 and build yourself a pair of plug-and-play Paddle-Spinners!!!

post-31501-0-21479700-1325923275_thumb.jpg

post-31501-0-50590700-1325923586_thumb.jpg

post-31501-0-95565100-1325923790_thumb.jpg

  • Like 4
While using the new spinners I keep accidentally hitting the mouse buttons!!

I'm considering perminately disabling the mouse buttons. All I will have to do is cut off the actuator tabs pointed out by the red arrows for the right and left. For the center I may just need to drill a hole through plastic in the circled area.

I'll probably keep them working for now. Hopefully a future release of Stella will provide mapping for the mouse buttons - Then these will be complete usb plug and play paddles with fire buttons...

 

This is probably not possible, or at least not in the general case. Consider that most (all?) systems can only support one virtual mouse. That is, one X-axis, one Y-axis and several buttons. Now, there may be several physical mice plugged in (exactly what you're doing here), but you're still limited to the same virtual stuff. So while it's easy enough to say "this mouse only has X-axis" and the other "only has Y-axis", you can't do the same for the left mouse button. There's only one of them in the system. You can't have the left mouse button on one mouse be for the left paddle, and the left mouse button on the other mouse be for the right paddle.

 

About the best that could be done is use both left and right buttons. Perhaps the USB spinner with X-axis could use left button, and the one with Y-axis use the right (you'd have to wire it that way). Otherwise, Stella (and the OS) can't differentiate between mouse clicks.

While testing these "SpinnerMice", I noticed when:

Mouse is grabbed in emulation mode

-and-

Use mouse as a controller is set to "Automatic" - the left mouse button works as the fire button

 

But when:

Mouse is grabbed in emulation mode

-and-

Use mouse as a controller is set to "specific axis" - the left mouse button no longer works as the fire button

 

Testing with Warlords: It's almost unplayable right now in two player mode with "Use mouse as a controller is set to "Specific Axis"" - too hard to control the spinnermouse and hit the keyboard at the same time. I can get away with it in Video Olympics for serves- but in Warlords the game play is too quick to switch back and forth - I can't grab the fireball.

 

If enough people catch-on to "Use mouse as a controller is set to "Specific Axis"" it may be worth adding mapping for the left and right mouse buttons.

 

About the best that could be done is use both left and right buttons. Perhaps the USB spinner with X-axis could use left button, and the one with Y-axis use the right (you'd have to wire it that way). Otherwise, Stella (and the OS) can't differentiate between mouse clicks.

 

I think that would be great - whether selectable in the UI, or set as a default:

-spinner with X-axis could use left button

-one with Y-axis use the right

If this was working in Stella, I would disable the right and center buttons on SpinnerMouse X, and disable Left and Center buttons on SpinnerMouse Y (as describe in the above tutorial - disable buttons section)

 

As these SpinnerMice are turning out to be pretty fun to use, I could see mounting a more realistic button on the side, wired to either left or right button, and have a full functional home built set of paddles / driving controls:

post-31501-0-64245300-1325978451_thumb.jpg

While testing these "SpinnerMice", I noticed when:

Mouse is grabbed in emulation mode

-and-

Use mouse as a controller is set to "Automatic" - the left mouse button works as the fire button

 

But when:

Mouse is grabbed in emulation mode

-and-

Use mouse as a controller is set to "specific axis" - the left mouse button no longer works as the fire button.

 

This isn't surprising; you're only remapping the axis, not the buttons. And currently, Stella only ever uses the one button. Or more to the point, either button can be pressed, but they both register as the same one.

 

Remapping the buttons as well as the axis is more difficult, but it is possible.

 

 

About the best that could be done is use both left and right buttons. Perhaps the USB spinner with X-axis could use left button, and the one with Y-axis use the right (you'd have to wire it that way). Otherwise, Stella (and the OS) can't differentiate between mouse clicks.

 

I think that would be great - whether selectable in the UI, or set as a default:

-spinner with X-axis could use left button

-one with Y-axis use the right

If this was working in Stella, I would disable the right and center buttons on SpinnerMouse X, and disable Left and Center buttons on SpinnerMouse Y (as describe in the above tutorial - disable buttons section)

 

First of all, I want to point out that adding all this will probably take some time. It certainly won't all be finished for the next release. The following is more of an overview of what I'd like to (eventually) accomplish:

  • differentiate between left and right mouse buttons, so they can send separate events
  • in 'specific axis' mode, have both the axis and the left/right button tied to some action
  • in 'automatic' mode, have both axes and both buttons tied to a single controller (which is determined by whatever the ROM is currently using)
  • have the 'specific axis' mode stored per-ROM, so that it works with all possible ROMs (some need paddle 0/1, others need paddle 0/2, etc)

As well, the current global 'mouse control' option should have 3 choices:

  • 'never', which disables mouse as controller input completely
  • 'automatic', which lets the mouse work as different controllers automatically, the same as Stella worked previous to the 3.5 release
  • 'per-ROM', which uses whatever is defined for the specific ROM; it could either be 'specific axis' mode, or 'auto', which falls back to auto described in the previous step

The reason I'd want to do it that way is so people that don't have separate spinners won't have to do anything. The global 'Auto' will be selected, and things will work as they always did. For those with spinners, they can simply select the global 'per-ROM' option, and then everything automatically works for them as well (since I'll include specific axis mappings for all required games).

 

As much as possible, I want this stuff to be plug and play. You'd of course be free to change the settings, but in most cases it wouldn't be necessary.

By your implimenting the 'specific axis mode' the duel spinners on my arcade control panel work perfectly. This inspired me to build the SpinnerMice - it was a spontaneous project. After using them for a little while I saw they could actually make a pretty good paddle/driving control for my desktop pc. Not sure what others are using since I'm new around here - Stelladapters or joysticks mostly??

 

  • 'per-ROM', which uses whatever is defined for the specific ROM

I think this is a great idea!!

By your implimenting the 'specific axis mode' the duel spinners on my arcade control panel work perfectly.

 

I'm not sure how things could be working perfectly. Wouldn't you have the same problem as with these spinners? Specifically, that the axis setting is global, and that if you set it to X/Y = paddle0/paddle1 and another game needs paddle0/paddle2, then you have to change it manually??

 

I'm trying to come up with an approach that is general and works for all mouse-related input. That way, Stella (and the user) doesn't need to care if you use real spinners or 'mice as spinners'; everything just works. You may notice I'm big on the 'just-works' approach. That's because I hate having to revisit part of the code after I've moved on to something else. I like to get it complete, easy to use, with no questions necessary :)

 

EDIT: Or more to the point, I want the mouse remapping to work for your use-case, but not only just your case. I want it to be robust enough to work for any foreseeable case.

I'm not sure how things could be working perfectly.

 

Maybe a better word would be "functional." You are right - there are times I have to change settings for different games since the axis assignments are in the global settings. I guess I was specifically referring to the arcade control panel - having both spinners working for a particular game and having a cp button assigned as the fire button right next to the spinner (vs the issue with the spinnermice not having a button on the mouse and having to use the keyboard for fire button while the mouse is held in hand.) I seem to prefer the games that use spinners and paddles. Trying to play 2 players prior to 3.5 didn't work so great without the paddle for player 2 on the CP. Since I installed 3.5 we're playing a lot of Atari games on the CP now with the controls I already had.

post-31501-0-42238700-1326081919_thumb.jpg

I had a spare hour today so decided to add a paddle button to the X spinnermouse. I wired it in place of the left mouse button. Now if I go back into Stella and set "use mouse as a controller" to "automatic" I have a fully functional atari paddle - usb- plug and play. If I want to use the second spinnermouse (Y) for a 2 player game I have to switch the settings back to "specific axis" - I'll loose the mouse/paddle button and have to switch back to keyboard, but I can still play 2 player paddle games.

 

post-31501-0-38378900-1326081928_thumb.jpg

I opened up the mouse again and lifted out the pcb - used a desoldering iron to remove the 3 switches. Now my X spinnermouse has no original mouse buttons working. That's ok because I was accidentally hitting them all the time anyhow. I disabled the scroll feature while I was at it.

 

post-31501-0-17341000-1326081923_thumb.jpg

I cut some plastic to make room for the switch on the bottom half

 

post-31501-0-28785900-1326081930_thumb.jpg

The top part had a side piece that was in the way - BEFORE PHOTO

 

post-31501-0-99881300-1326081936_thumb.jpg

AFTER PHOTO

 

post-31501-0-14420800-1326081941_thumb.jpg

Here the new button leads are ready to be solder where the old mouse left switch was

 

post-31501-0-84966200-1326081944_thumb.jpg

Put the pcb back in and snapped in the button

 

post-31501-0-89424800-1326081948_thumb.jpg

side view

 

post-31501-0-45246300-1326081952_thumb.jpg

Ready to play

  • 3 weeks later...

What if you combine the two mice into a single unit? X mouse could tap into the PCB of Y mouse's Axis and right button. Perhaps something on the USB cable side would work like an adaptor that makes two mice work as one mouse.

Just an update that this functionality will be included in the next release of Stella. Right now, the X-axis and left button are tied together, as are the Y-axis and right button. And the settings will be stored per-ROM, so that, for example, a two-player game that uses paddle 0 & 1 will work the same as another game that uses paddle 0 & 2. IOW, you won't have the modify any settings manually. And driving controllers will be supported too.

  • Like 1

Just an update that this functionality will be included in the next release of Stella. Right now, the X-axis and left button are tied together, as are the Y-axis and right button. And the settings will be stored per-ROM, so that, for example, a two-player game that uses paddle 0 & 1 will work the same as another game that uses paddle 0 & 2. IOW, you won't have the modify any settings manually. And driving controllers will be supported too.

Awesome Awesome and Awesome!!

 

Home built spinners (mouse hacks) have been around for a long time. With these new additions hackers will be playing 2 player Indy500 and all the 2 player paddle games!!

What if you combine the two mice into a single unit? X mouse could tap into the PCB of Y mouse's Axis and right button. Perhaps something on the USB cable side would work like an adaptor that makes two mice work as one mouse.

 

Goal of these controllers was to build them as fast, easily, and inexpensive as possible - an easy way to take advantage of the newly added flexibily in Stella.

 

I think you are describing a typical arcade spinner setup. This can be done with a mouse hack or by purchasing a comercial control interface, then building or purchasing spinners. Here's a snapshot of how the spinners work in my modular arcade control panel. The usb mouse pcb is mounted on a duel phone jack and the pertinant connections are made from the pcb to the jacks. The spinners then plug into the jack on the front, buttons on the panel are assigned as mouse buttons:

post-31501-0-21460500-1327648011_thumb.jpg

post-31501-0-76595600-1327648007_thumb.jpg

post-31501-0-82375400-1327648003_thumb.jpg

post-31501-0-18816400-1327648262_thumb.jpg

  • 1 year later...

I'd like to try this mod, because all the other ones I've done have either 1) been outdated by new technology (stupid lousy PS/2 mouses...) or 2) been crashing failures. However, I'm having trouble finding a USB ball mouse. It seems like the USB standard came in right around the time ball mouses went out! Any suggestions on where these can be located at a reasonable price?

I opened up a mouse to fool with it, and it looks like you have to have a very specific model for this hack to work. Mine did not have that orb-shaped ball well inside, but rather a small cylindrical ball trap with an open end, making it impossible to fasten a bolt to it. Maybe you could replace it with something; I'm not sure.

  • 5 years later...

This is probably not possible, or at least not in the general case. Consider that most (all?) systems can only support one virtual mouse. That is, one X-axis, one Y-axis and several buttons. Now, there may be several physical mice plugged in (exactly what you're doing here), but you're still limited to the same virtual stuff. So while it's easy enough to say "this mouse only has X-axis" and the other "only has Y-axis", you can't do the same for the left mouse button. There's only one of them in the system. You can't have the left mouse button on one mouse be for the left paddle, and the left mouse button on the other mouse be for the right paddle.About the best that could be done is use both left and right buttons. Perhaps the USB spinner with X-axis could use left button, and the one with Y-axis use the right (you'd have to wire it that way). Otherwise, Stella (and the OS) can't differentiate between mouse clicks.

I've often wondered this. Wii emulator (Dolphin) used mice to emulate Wiimote pointers. Can an emulator independantly read and differentiate between two usb mice plugged into a pc running windows, ie for players 1 and 2 having two independantly controlled cursors onscreen?

 

Another separate issue is acceleration. If Windows has acceleration enabled, this can cause significant drift of cursor position relative to absolute position. Can the software simply read absolute value direct from the mice without raw values being tampered with by Windows?

Yes, any windows software, including emulators, can be written to have multiple cursors controlled by multiple mice connected to one computer. Here's an example https://pluralinput.com/. In Stella's case it might be limited by SDL.

 

You can disable mouse acceleration in Windows. It may not eliminate drift completely but should help. Also, mouse/spinners are not the same as a potentiometer analog control; but it can simulate it effectively.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...