Obstacle avoidance systems for power wheelchairs is not a new concept. These systems commonly use infrared or ultrasonic proximity sensors to gauge distance to nearby static obstacles, such as walls, doors, and furniture, and then alert the user. The problem with such devices is that they ignore obstacles at ground-level and sudden drop-offs/changes in elevation that the wheelchair user cannot see. Those using wheelchairs often have limited head movement, and therefore have difficulties navigating around objects below their field of view (i.e. potholes).
The ThIRd Eye system utilizes three inexpensive Sharp IR distance sensors to detect sudden changes in the height of the ground surface, and alert the user of the possible danger. A fully 3D-printed mounting system is used to attach the sensors to the chair. Distance data from the three sensors will be directed to an onboard Arduino microcontroller, which will issue an audible warning to the user when an obstacle has been detected.
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.
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.
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.