Choosing a joystick

I have a small cheap joystick that I am using for a prototype but now wish to find a better joystick.

With the handle of my present joystick in the central position, I get very roughly 512 displayed as expected when I use a the basic example 'AnalogReadSerial' sketch (with one of the two potentiometers).

It's necessary to move the handle by about 8 degrees before the reading starts to change. At first I thought that it's caused by backlash in the mechanism but when the handle is returned to its central position, exactly the same reading is obtained as before. This makes me conclude that each potentiometers' track must have central portion where there is no change of resistance.

After the reading starts to change at about 8 degrees, there is analogue change of reading up to about 15 degrees when the end of the potentiometer track is evidently reached. The handle can be moved to an angle of about 30 degrees but between 15 and 30 degrees there is no change in reading.

So although the joystick handle will move about 30 degrees, the change in reading only occurs between about 8 and 15 degrees, making it very tricky to get good proportional control.

I would like to find a joystick without the 'dead zone' of about +/-8 degrees in the middle, or at least a much smaller dead zone. For my application, a small dead zone will be needed but I would much prefer to achieve that by code. I will be fitting a much longer handle so I am less bothered by the end of the potentiometer track being reached after only 15 degrees of movement.

Does anyone know of a joystick which does not have a dead zone of about +/-8 degrees? Something like this:

but cheaper!

I am wondering whether the TinkerKit joystick may be suitable:

The dead zone may be intended with many joysticks, to provide stable readings in the default (center) position regardless of mechanical hysteresis.

I'd try to replace the pots by "ordinary" (linear) ones.

DrDiettrich:
The dead zone may be intended with many joysticks, to provide stable readings in the default (center) position regardless of mechanical hysteresis.

I'd try to replace the pots by "ordinary" (linear) ones.

Yes, I'm sure that's the reason for the dead zone. I've now found others are having the same trouble as for example here.

Thanks for the suggestion to replace the pots by ordinary ones. I would lose the full 0 to 5 volts swing but that would not matter. However I doubt I will be able to find vertical trimmer pots that will connect satisfactorily to the two tiny shafts.

Have you thought about using a completely different joystick?

Go down to a thrift store (or look on ebay, or at a garage/boot/tag sale) - and search around; with a bit of patience and luck, you will be able to find any number of old IBM PC analog joysticks. An old but popular brand was the "Kraft" brand, but there were many manufacturers of such stick. These sticks will have adjustment sliders or knobs, as well as (usually) a way of locking the stick to a "center return" or leaving it "free floating" (usually by moving the stick to a corner, then flipping a lever on the bottom or side of the stick). Stay away from anything that doesn't move or work like that.

At that point - you have a couple of options. You can either figure the pinout of the connector (15 pin game connector for the IBM PC) - then look into how to interface such a stick to the Arduino (I am almost absolutely certain that at least one person out there has done it). Alternatively, you can open the stick up, remove the wiring and such, then re-wire it to connect directly to the potentiometers (and buttons - many of these sticks had a couple or more buttons).

Ultimately, you will have a much larger and easier to use controller, sized for proper hand-held usage. Most of these controllers had fairly high-quality potentiometers in them. Unfortunately, the "return to center" won't return the controller to the same exact center point, nor will the extreme end-points (ie - X and Y range) necessarily be the same all the time.

So - you will need to implement your own "dead zone" in the center of the stick - but more importantly, you will need to measure the range with some kind of controller calibration feature in your code. Basically, have the user position the stick to the upper left, lower right, upper right, lower left, then back to center (clicking the joystick's button each time they get to that point). From those measurements, you can know the range of the stick, and where the approximate center is in order to figure out a deadband area.

These sticks shouldn't cost too much - you'll probably pay a bit more than a regular thumbstick, but not much more (unless you run across one of the "collectible" joysticks - pass on those - unless you find one cheap at a sale where the owner doesn't know what they got - then buy it, and resale it for much more).

cr0sh:
Have you thought about using a completely different joystick?

Thank you for your very detailed and helpful reply.

Following up on your suggestions, I've found inexpensive reproduction Atari joysticks to be available on eBay. I believe these are analogue.

There are also some inexpensive joysticks of the type used for flight simulation games which I'm fairly sure are analogue. I may buy one of these and see if I can get access to the potentiometer connections. However I don't really want all the extra buttons and controls that come with these types of joystick and extracting the joystick sensor mechanism may not be possible.

Thanks again!

I am on a similar path, I bought a few different joysticks for a raspberry pi gaming project and they all have the same deadzone you describe.
I found some interesting information here Looking to source a potentiometer - #6 by Kristof_2649 - Switches - Electronic Component and Engineering Solution Forum - TechForum │ DigiKey

There are a wide variety of potentiometers used in gaming joysticks. If you search google for “FJN10K joystick”, you will find a data sheet that lists what most of the numeric codes mean. The B stands for linear, 103 is 10K, then there are dozens of codes to describe the effective angle and if there is a center dead-zone where the resistance does not vary. The way you describe the problem, I would think the pots in your joystick have a silver or low resistance section in the middle. From the two pictures, 2908 would be decoded a 60 degree angle with a 5 degree center low resistance section. 3810, which is really common through places like Sparkfun, is worse with a 35 angle with an 8 degree dead-zone. You want one that is all carbon with the second four digit code starting with A0 - D5.

ALPS used to make the RKJXP1224002 with all carbon, but discontinued it. If you are just looking to transplant the pots, I believe the RKJXK122400Y is the same pot. They also make the RKJXV1224005, but the gimbal is smaller.

ALPS joysticks are counterfeited frequently in China and may not be all carbon, so buy from an authorized dealer.

and this page has a chart showing some codes used http://www.c-components.com.tw/prodDetail.asp?id=354

based on this info I have ordered a few more analog modules, I'll report back once they arrive and I have a chance to test them

mud2005:
I found some interesting information here …….

Thank you for the helpful information in your post and welcome to the forum.

My joystick has code "388" so the 38 indicates it has dead zone of ±8° and travel of ±35°.

My original post is nearly 4 years old. I ended up making a joystick by mounting thin tube on springs made from thick piano wire. I fixed an accelerometer onto the bottom of the tube. The box of my joystick is fixed to a sloping panel: obviously using an accelerometer would not be suitable for a hand-held controller. It's for use by a person with little control of hand and arm muscles. In fact I decided that our client could not make use of any proportional control so it's being used as a joystick switch. However I am able to try to make it as easy as possible to use by being able to program set values of operate and release thresholds in each of the four directions.