I have been working on a robotic project for a while. In this project, we build a robotic wheelchair controlled by head motions.
It starts from a commercial powered wheelchair (Titan Front Wheel Drive Power Chair).
We took over the control signals, added a number of sensors and wrote some computer vision softwares. It is a lot of fun. At this time point, we can drive it with head motions, a little slow but very easy to control. A short video is posted.
[KGVID width=”640” height=”360”]http://personal.stevens.edu/~hli18/video/robot.mp4[/KGVID]
The most challenging part so far, to our surprise, is how to take over the driving signals. In fact, once the powered wheelchair can be controlled with digital signals, it is somehow a robot.
We can find quite a few posts discussing how to hack the joysticks with Arduino. If you have a VR2 joystick, it would be much easier. This post (http://myrobotnstuff.blogspot.com.au/2012/07/circuit-for-wheelchair-robot.html) explains the process well. Basically, you can reproduce the digital signals triggered by the joystick with the Arduino.
But unfortunately, the joystick with the Titan power chair is with a different design and it is much more difficult to hack. It is Dynamic Shark controller. If your remote (joystick) looks like this one , you probably have this kind of joystick.
The difficulty in reproducing the control signals generated by this kind of joystick is that it directly outputs 25V differential signals from the remote to the power module, which is a big black box under the seat. The signals are encoded and there is probably no way to get the encoding protocol.
We did quite a few rounds of trial and error and finally figured out a plan after burning out a joystick…
This kind of joystick works in a special way. At the end of the handle of joystick, there is with a small coil. 4 small coils are on the board under it. Because of the electromagnetic induction, the coil on the handle of the joystick produces different signals at different positions in the 4 small coils under it.
Roughly speaking, the (analog) signals produced by the 4 small coils are then processed by an on-board micro-controller to produce the driving signal. Because the signals produced by the micro-controller are encoded in an unknown protocol, we choose to get in by reproducing the outputs from the 4 small coils.
If you take away all 4 small coils (DO NOT do that…), the board looks like this
After some processing circuits, finally the outputs of the 4 coils can be found as two signals passed the two resistances in the red circuits. If you use an oscilloscope to check the signals, you will find that they are sine waves!
With this observation, the plan is clear. Soldering two wires at the right end of these two resistances (be careful!), we need to use an Arduino to reproduce these two sine waves to drive the wheelchair.
One of the two sine waves is for the X-direction and the other one is controlling the driving in the Y-direction. The phase the sine wave indicates the sign (forward in X-direction or backward in X-direction) and the amplitude indicates the speed. The two sine waves should be sort-of aligned, which means the phase difference should be either 0 or 180.
With an Arduino, we will produce these sine waves signals to the two wires.