Sept 2016
Completed
Independent Project
Date
Status
Project Type
Haptic Feedback Device
A key part of experiencing our environment and going through life is the gift of sensation. Sensation allows us to explore our surroundings and achieve higher quality of life, often generating innate desires to repeat life experiences. This project explores the development and testing of a hand-held device with haptic feedback; both tactile and force feedback. I investigated the possibility of providing skin-stretch feedback using magnets and vibrotactile feedback through vibrating motors.
The cable driven game controller is developed using an Arduino microcontroller and low cost, off the-shelf components. Force feedback is provided using a Servo Motor with a Servo-arm attachment. While tactile feedback is provided using vibrating motors. It is discovered that the performance of user’s is improved with haptic feedback.
Implementation
The first stage of the project involved testing a variety of sensors and actuators to determine the components suitable for possible design configurations and to understand the functionality of the components. This process proved to be effective because components that were too bulky or inadequate were ruled out from the start. Limitations of certain components were also discovered early on, which in turn influenced the goals of the project. For instance, initially a device with thermal feedback was an option but upon testing the peltier element this feedback option was ruled out. This is because the peltier element requires 12V while the Arduino Uno can handle a maximum of 5V. The peltier element heats on one side and cools on the other side, in order to switch between the two sides a mechanism is required that would enable this because of these reasons thermal feedback was ruled out. Another element that was ruled out early on is the electromagnet. Testing the electromagnet lift solenoid, it was discovered that the magnetic field produced was very weak. The second option was to create an electromagnet using copper wire and a small soft iron. This also created a weak magnetic field because the electromagnet had to be relatively small.
After the preliminary testing, configurations options were reduced to a wearable glove controller, a handheld gamepad and a tabletop game controller (stationary game controller). A shortlist of adequate and effective components for each configuration was established.
Design Options
For the wearable device it is important that it is lightweight, comfortable and allow free range of motion.To achieve this a Bluetooth module is required. The Arduino pro mini would be a better choice of microcontroller than the Arduino Uno for this configuration. The flex sensor is used to read the finger positions, which would be used as input. The vibration motors being small can easily be integrated into the device without increasing the weight of the device or causing discomfort. The range sensor is used to determine where in space the user is and that information can be used to generate an appropriate response from the computer. The force sensor, DC and Servo motors and magnets wouldn’t be suitable for the glove controller. With the components selected the device would provide vibrotactile feedback.
For the gamepad and stationary device weight isn’t an important factor because of this the motors would be appropriate for these devices. The motors can be used to generate force feedback. The force sensitive resistor is used to compute the amount of pressure the user is applying which can be used as input to provide an appropriate feedback. Vibration motors can be on both configurations to acquire vibrotactile feedback. The magnets would be appropriate in a tabletop device.
The glove controller and the stationary tabletop game controller provide tactile feedback only, which makes them tactile devices where as the gamepad provides both tactile and force feedback making them haptic devices.
Mechanical Design
The primary goal is to design a game controller with both tactile and force feedback to enhance the gameplay experience. In addition to the input buttons, a force sensitive resistor is added to the game controller as an input element as well. Vibrating motors are embedded in the buttons as well as the game controller casing to provide tactile feedback. The Servo arm is used to provide force feedback when the thumb is placed on it. The intended ergonomic shape of the device was chosen so the device sits comfortable in the user’s hands. All the electrical components will be embedded in the casing to make the device sturdy and comfortable to use.
Electrical Design
The microcontroller used is the Arduino Uno, which is used to facilitate communication between the sensors and the computer. It is based on the ATmega328P. It has 6 analog input pins, 14 digital input/output pins, 16 MHz quartz crystal used to provide a clock input to the microcontroller and a USB connection. The Arduino microcontroller is connected to the computer via a USB cable. In the preliminary test it was discovered that the force sensor had infinite resistor when no pressure was applied to the force sensing area, a resistance of approximately 95𝑘Ω when light pressure is applied and a resistance of approximately 200𝑘Ω when high pressure is applied. The force sensor is connected to one of the analog pins of the Arduino. A pull-down resistor is used to limit the current that can flow between Vcc (supply) and ground. The force sensor is programmed to detect no pressure, light pressure and high pressure. The Servo Motor has a range of 0-180 degrees. It has three pins, the supply, the ground and the control pin. The control pin is connected to one of the digital pins on the Arduino. The Servo Motor is programmed to move the servo arm according to the input from the force sensor. When pressure is applied to the force sensor the Servo arm is moved to an angle of 160 degrees, when no pressure is applied the Servo arm stays at an angle of 90 degrees. With push button switches, a connection is made only when the button is pressed. Four switches are used in the game controller. They are connected to four digital pins on the Arduino. Unlike the other digital connections used in the device that are set as outputs, these pins are set as inputs. The Arduino read them as “high” when the user presses the button otherwise it is read as“low”. A total of four coin vibrating motors are used. Two of which are embedded in two of the buttons and the other two in the casing of the controller. The vibrating motors are also connected to the digital pins of the Arduino. They are set as output pins and are programmed to turn on when the buttons are pressed.
Software Overview
An Arduino microcontroller is used to communicate with the PC, read the force sensor and switch states and control the Servo motor, vibrating motors and LEDs. This communication is programmed in C using the Arduino software. On turning the power on, the Arduino sets the switch and force sensor to input and vibrating motor and servo to output. The Arduino checks for input from the user. If the switch is pressed, the value is set to high. Whenever the switch value is high, its corresponding vibrating motor is turned on. When the value of the force sensor is read and the value is anything other than zero, that value is mapped to the Servo to move it accordingly.
Performance Evaluation
Experiment One
Can magnets be used to achieve skin-stretch feedback? In this experiment perception-based
characteristic of magnet actuation feedback is investigated.
Participants
Five participants, two males and three females aged 20-30 participated in the experiment. Four of
the participants are right-handed and one participant is left-handed.
Experiment Apparatus
Neodymium magnets of three different sizes are used:
Size 1: diameter of 2mm and thickness of 1mm
Size 2: diameter of 5mm and thickness of 1mm
Size 3: diameter of 12.5mm and thickness of 3mm
In addition to the magnets, the experiment apparatus included a Servo Motors with a servo arm and
an Arduino Uno microcontroller. The magnets are attached to both the servo arm and the participant’s finger. The Arduino drives the Servo Motor.
Procedure
Participants have magnets attached to their thumb, using a Servo Motor a magnet is driven across their thumb. Participants need to indicate when they feel any sensation on their thumb. The
participants are unaware of exactly when the servo goes across their thumb. They have to rely on their tactile senses to determine if they have felt sensations caused by the magnets either repelling or attracting. The Servo Motor has a loud sound when in operation which would compromise the results of the experiment. Participants could possible rely on the auditory senses instead of tactile senses to indicate when the servo motor arm hovers below their thumb. To solve this problem, participants wear headphones with music playing.
Results
The distance between the finger and the magnet attached to the Servo Motor was 0.3cm for set-up 1, 0.5cm for set-up 2 and 4 and 1cm for set-up 3 and 5. Four out five participants were able to correctly indicate when the magnet on the Servo Motor had passed their thumb in set-up 1. All participants felt set-ups 2-5. The bigger the magnet, the larger the distance between the finger and the Servo. Set-ups 2 and 3 had the magnets attracting each other. Participants were able to detect this in set-up 3 but not in set-up 2. Set-up 4 and 5 had the magnets repelling each other. Participants were able to detect this set-up 5 but not in 4. Below are the comments by participants for the different set-ups:
Set-up 1: A wave going from left to right
Set-up 2: First a small pulse then a bigger vibration
Set-up 3: A very light pull on my finger
Set-up 4: A wave–like light sensation
Set-up 5: A small force pushing away my finger
From the results of the experiment it can be concluded that skin-stretch feedback can be generated using magnets and the kind of sensation that needs to be generated should determine the size of the magnets to use.
The Game Environment
The effectiveness of the haptic feedback device in improving gameplay experience is demonstrated using a 3D game created in Unity. The game is specifically created for the testing of the device. The environment of the game is set to be white with a few raised platforms. The reason being when everything looks similar in a game environment it is difficult to distinguish between events. For instance it is not apparent to a player that they have turned and no longer facing the previous direction because all the views are the same. The raised platforms are added so that player knows when they are motion. Although this isn’t quite necessary as the Servo arm provides that feedback. Empty game objects (invisible to the player) are placed on the path of the player. On collision with these game objects the user is notified to turn either left or right. The player is successful in completing the game only when the player follows a specific path to get to the finish line.
Experiment Two
This experiment is performed to determine if haptic cues generated by the game controller improve gameplay.
Participants
Five participants, two males and three females aged 20-30 participated in the experiment. Four of the participants are right-handed and one participant is left-handed.
Experiment Apparatus
In this experiment the participants use the haptic feedback gamepad to play the game. The game controller is set up so that the left thumb is used to control the force sensor and switches (buttons) and the right thumb is placed on the servo arm.
Experiment Procedure
Haptic cues (vibrating motors) are used to notify the player when to turn during game play. If a left turn is expected the vibrating motor on the left side of the pad vibrates and the same for the right. The pressure exerted on the force sensor controls the speed at which the player moves. No contact sets the speed to 0 Unity units/second, light pressure sets the speed to 1 Unity units/second and high pressure sets the speed to 2.5 Unity unit/seconds. The Servo arm lets the user know when in motion. As soon as the player begins the game, the timer is set to compute the time it takes the player to get to the finish line. Whenever a player is requested to make a turn and the correct turn is made a point is earned. There are a total of six turns. The time between the command to make a turn and the time the user turns is computed.
The average response time for all participants was 0.9secs with an average score of 5.67 and an average time of 44.33. Six random objects were added at each turn. For this experiment the objects
were a skull, a ball, a pineapple, an ant, a watermelon and an apple. Participants were able to list an average of 2 objects. From the results of experiment two and three it is clear that participants performed better with haptic feedback. With experiment three participants were not able to concentrate on the game screen because they kept going back and forth between the device and the screen. With experiment two participants performed better because they could concrete solely on the screen, as they do not need to check the device to know when to turn.