Using three IR distance sensors, this mounted system can detect drop-offs and obstacles at ground level and alert the wheelchair user.
Being a complete Arduino newbie, I found Youtube to be a great resource for learning the basics, from the actual hardware and how it works to the code itself. The Arduino code currently utilizes a library that converts the analog sensor value to centimeters (specifically for Sharp IR distance sensors), which was available for download in the Arduino environment. I was having trouble adding my own libraries from the internet into the Arduino software, as the downloaded .zip file from Github contained "-" marks, which Arduino was unable to recognize as a library. I attempted to manually install the library by unzipping the file and then renaming it without the dash marks, but I could not locate Arduino's library folder. Most likely, I will end up inputting the library directly into the Arduino code, so that the sensor system can work properly without a serial usb connection to a computer.
Currently, the ThIRd Eye system works as follows: Analog readings from three IR distance sensors (mounted to the front of a power wheelchair in a pyramidal fashion, one per wheel castor and one leading in front) are routed to an Arduino Uno microcontroller. The Arduino issues an audible beep by a piezoelectric buzzer if either of the three sensors measures a distance ~10cm greater than or less than the initial distance of the sensor to the floor. The sensor mounting system is fully 3D-printable, but I recommend that printed screws and nuts are not used. The castor mounts utilize threaded round clips to mitigate the possibility of vibration shaking the sensors around. I have written Arduino code for an LCD display to provide realtime distance measurements by each sensor, which includes conversion of analog sensor data to centimeters.
I'm noticing that the IR sensors have major accuracy problems. Readings can vary up to ~35% between the sensors when pointed at the same object. This is a pretty bad problem given that the integrity of the device depends on very small changes in terrain as measured by the three sensors mounted to the wheelchair. Changes to the current Arduino code can mediate this, as taking mean values between clusters of sensor readings can eliminate extreme values and therefore also various false positives.
The mounting system also requires an arm to hold the middle IR sensor to the wheelchair, which I haven't yet designed. This is due to the fact that an arm clamped to the wheelchair under the seat would obviously be an obstruction to a patient's legs and feet. The center IR sensor mount must therefore be able to reach beyond the chair's footplate, so attaching the mount to the footplate is currently an option.
1x Arduino Uno
3x Sharp IR Distance sensors (GP2Y0A21YK0F)
These can be found for the lowest price on Amazon. I purchased one two-pack and one single sensor for about $30 including Prime shipping.
2x Round Clips (my design) https://www.thingiverse.com/thing:2514461
2x Mount Arms (not my design) https://www.thingiverse.com/thing:2194278
I chose one 90cm piece and one bent 60cm arm from the list of STLs and they work just fine. The main goal of these two pieces is to give the castor sensors a farther reach from the wheelchair while still providing a strong mounting solution resistance to vibrations that may change the position of the sensor.
2x Sensor Housing w/mount attachment (my design) https://www.thingiverse.com/thing:2514469
The three distance sensors are connected to the analog pins on the Arduino Uno board. I currently have an LCD displaying the distance measured by each of the three sensors, but it is not necessary for the final build. A piezoelectric buzzer is attached to digital pin 1 and to ground.