How to decrease PS2 Joystick sensitivity?

Thread Starter

nickbuhling

Joined Oct 27, 2017
29
Thank you for reading my question!

For a project, I try to control two motors with a joystick. The joystick is connected to 5V and ground of an Arduino nano and 3 analog pins. The code works fine, but there is one thing that frustrates me. The joystick (link: a ps2 breakout joystick) is very sensitive. It uses 2 potmeters, but they already reach the ends (0 or 1023) when I turn the joystick about halfway to a side. So in other words, when I turn the stick towards 50% of lets say positive x, the value of x rises very quickly and stops at 1023 at about 50%. Then I can still turn it futher but the value then ofcourse stays at 1023.
This happens on x and y axis.

I have tried supplying 3.3v: this only made things worse.
I have also tried to add two 500Ohm resistors both parallel and in series to the x and y pin of the joystick. This also did not work

My question is: is there a way to decrease the joysticks sensetivity / increase its resolution my making more use of the full turning distance of the stick?

Thanks in advance!!
 

drc_567

Joined Dec 29, 2008
1,156
I took a joystick apart on one occasion and discovered that the cursor movement was current dependent, rather than voltage dependent. Therefore, assuming the possibility of similar construction, try inserting a low value resistor in series with each joystick axis control wire. The potentiometer would be wired as a rheostat, so the corrective resistor could be placed in series with the movable arm wire. This may require some trial and error to achieve your precise objective. A test resistor of only a few ohms should indicate if this is the right approach.
Edit ... Probably not applicable here ... might have been an Apple product or another design.
 
Last edited:

ebp

Joined Feb 8, 2018
2,332
How do you have the voltage reference for the analog to digital converter configured? It sounds like you are using the internal voltage reference which is less than 2 volts, if I recall correctly.

For this sort of application you would typically use a reference voltage equal to the voltage applied to the joystick, if the joystick output can go all the way from zero to the applied voltage. That depends on the potentiometers used in the joystick. With some, the mechanical travel of the movable contact ("wiper") is less than the full resistive element. For example, with 0 V and 5 V to the ends of the pots, you might get 0 to 5 volts out with some types of joysticks but only 1.5 to 3.5 volts with a different type.

If you need to use the internal reference of the microcontroller for some specific reason, then the only thing you can do is reduce the voltage applied to the joysticks. Because the load is constant you can do with a resistor between the 5 V supply and the joystick board's positive input. Variation in the 5 V supply will cause variation in the ADC reading for a particular joystick mechanical position, but it probably isn't a big problem.
 

Reloadron

Joined Jan 15, 2015
7,501
This is a good example of using a PS2 type joystick with an Arduino. Take note of the illustrated Joystick. I also agree with ebp above as to the Joystick Vcc and the Arduino reference voltage. Most of these joysticks output a voltage between 0 to Vcc so if the joystick Vcc is 5.0 Volts that is what you will get. You may want to note the Vout for each Axis of the stick.

Ron
 

MrSoftware

Joined Oct 29, 2013
2,188
If you find that the voltage from the joystick is so high that it's saturating your analog input too quickly, and there's no software solution to changing the analog input sensitivity, then another option is to add a voltage divider to the joystick output to get the voltage into the range that works best for your analog input.
 

djsfantasi

Joined Apr 11, 2010
9,156
Let’s review the observed behavior. I choose to only refer to the X movement. The Y movement is the same.

But first, where do the joystick’s Vcc and Gnd connect to? They should respectively connect to Vcc and Gnd of the Arduino.

If the Arduino analogRead() returns 1023 before the joystick is fully extended, then that indicates that Vcc is much higher than 5VDC.

This is the most obvious question. Are higher voltages used in the circuit? I would measure the voltage between Gnd & Vcc on the joystick.

There have been several suggestions as to how to compensate for the undesired behavior. But we first must isolate the cause!
 

Thread Starter

nickbuhling

Joined Oct 27, 2017
29
Thanks everyone for the very kind help! I measured the resistance of the potentiometers and the resistance stopped changing halfway the joysticks rotation already which will probably be the cause of the strange behaviour. Still I think its strange because the potmeters do continue to rotate but the resistance stops changing halfway...

Anyway I will adapt my project to it. Thank you all!
 
Top