I've been lurking around these forums (and also creating a few topics) for the past few months during the development of my 3rd year engineering individual project. I just wanted to say thanks to everyone who helped me and also the creators of Arduino as this whole thing would not have been possible without them.
So here it is: a multi-point haptic device
The intended application for this is medical training, in particular, simulation of palpation tasks. Currently no device exists that could offer this in an affordable and efficient way.
Clearly, this is not a finished product, but rather a proof of concept. It's a step in the right direction and, honestly, I'm a bit surprised it works as well as it does.
I used Arduino Mega 2560 (and all of its 12 PWM outputs). These drive six SN754410 ICs, which control two RS-380 motors each. These are coupled to Alps encoders (24 pulses per revolution), which are polled using a timer based interrupt. Quadrature resolving is performed on the Arduino to effectively increase the resolution to 96 ppr. These values are communicated to the host computer via a serial messaging protocol.
The computer then computes the string lengths and from those - the end effector positions in space. These are then compared to coordinates of solid virtual objects and the resulting collision forces are determined. These are resolved to a per motor basis and sent back to the Arduino. The force rendering used here isn't "real" haptics, it is performed using simplistic if then statements. Originally my goal was to integrate this with H3DAPI (a haptics library that supports a range of devices) but this did not happen due to time constraints. Instead, I used Irrlicht 3D graphics library for the visuals.
If anyone's interested in the source code, let me know and I'll upload it.