Pneumatic Augmented Reality Tactile Feedback System (PART FS)
Collaborators: Amery Cong, Sean Kerr, Alejandro Ramirez, Teddy Stoddard
Challenge: Northeastern Senior Capstone
Summary:
Designed a wearable pneumatic electronic system to simulate tactile sensation in a virtual environment. The system uses a high flow diaphragm pump and a series of pressure sensors and valves to inflate individual pouches placed at key sensory locations of the hand on top of a user worn glove. The pressure sensors allow for variable inflation of each pouch corresponding to the force of a virtual collision, enabling users to not only feel the size and shape of a virtual object but also the weight. A microcontroller on the device receives a series of bytes with the inflation level for each pouch from a virtual environment and maintains the desired pressure in each pouch. This lightweight software implementation allows for the device to be easily integrated with any virtual environment and hand tracking tool although the demo showcased here was made in Unity and used the Leap Motion for hand tracking.
Mechanical Design:
A Parker BTC miniature high flow diaphragm pump that can provide up to 30 psi of pressure and 20 in Hg of suction was chosen as the pressure source. Ultimately the pouches provided an adequate sensation at 8 psi however the pump was chosen with oversized specs due to a small project timeline to ensure the system would function properly. Two one way valves were used to connect the positive pressure and negative pressure ends of the pump to ambient. Each end was connected to a high pressure tank and a low pressure tank respectively and these tanks were connected to a series of one way valves (two for each pouch, one to inflate and one to deflate the pouch). One way valves were chosen over two way valves due to their significantly lower cost. Each pouch was connected to a pressure sensor to allow for regulation at different levels of inflation. Barbed fittings were used throughout to allow for easy prototyping and testing and the pressure tanks were made of PVC pipe with end caps and barbed fittings epoxied into a threaded hole. The pouches were made using heat sealed high impact polyethylene. The pouches were placed in between two separate glove liners that were sewn together at the wrist to create one glove with two layers with pneumatic pouches sandwiched in between. Holes were made on the outer liner layer to allow for pneumatic tubing to be routed to the pouches. The gloves are made of a reflective nylon material to allow for easy detection and hand tracking.
Electrical Design:
Due to timeline constraints a standard laptop power block with a 12V DC output was used to power the system, however the part selection was done in a fashion to accommodate being battery powered in future designs. For instance, a series of 5V solenoid valves were chosen to control the airflow into each pouch instead of 12V valves so that a greater variety of consumer batteries could be used to power the system in the next iteration of the design. The entire system was designed to run at 5V instead of 12 for this same reason.
Two voltage regulators were used, to generate separate 5V power rails, a buck converter to generate the rail for the valves and a linear regulator was used for the logic and sensing circuitry. A buck was used to source the valves since the valves are higher power components and can source the necessary current. Each valve is switched by a lowside FET controlled by the microcontroller and parallel to a flyback diode to reduce the noise from inductive spikes. The logic and sensing circuitry was sourced by an LDO, since the LDO does not have the current ripple the buck has and provide less overall noise to the more sensitive components of the system. The valves were isolated on a separate rail to minimize the effect of the inductive noise on the output of the pressure sensors especially since that noise would be amplified before being read into the microcontroller. The pressure sensors output differential voltages over a full scale range of 165 mV which need to be amplified to the 1-3V readable range for the ADC on the microcontroller.
A two stage amplifier was used to ensure a robust readout of the pressure sensor values. First each line of the differential output was run through a voltage buffer then through a differential amplifier with a gain of 10 and a cutoff frequency of 60 Hz. Since the system is completely DC and the sensors provide an analog readout the cutoff frequency was chosen to be as low as possible to try to reduce the changes of ambient noise interfering with the integrity of the sensed values.
Two separate PCB’s were designed for the system, a main board housing the microcontroller, the voltage regulators and the sensing and amplification circuitry, and valve boards populated with a set of solenoids to control 5 individual pouches. This was done to create a better form factor as well as allow for our system to be scalable based on each application. If a desired client wanted a greater number of pouches to obtain a greater tactile resolution they could simply “stack” an additional valve board to our system and connect it with the main board via ribbon cable, this also allows for us to offer a more affordable solution to clients who want a lower tactile resolution (for instance just sensation on the fingertips) and may only need one valve board instead of the system demoed with 3.
An Arduino Mega was used as the microcontroller for this circuit due to its high number of available ADC pins and flexibility for easy prototyping.
Software Design:
The Arduino software was designed to regulate the pouch inflation while minimizing latency. If the latency is too great and there is any perceptible delay between a user picking up a virtual object and when they are provided tactile feedback, the system becomes useless as it does not allow the user to more intuitively engage his virtual environment. The most resource intensive command of the Arduino is the AnalogRead() command that is run for every pouch. The system isn’t looking for patterns in a complex analog signal but is instead looking for analog pressure levels, there is no need to read in large buffers of analog data. Since the ADC read error that may be caused by increasing the Arduino clock is not significant when looking at such a small buffer of data, the Arduino prescaler was changed so the clock would operate at 1 MHz instead of the typical 125 kHz. To minimize calls on the AnalogRead() function instead of reading all of the sensors every loop, a busy flag is set based on a calculated inflate or deflate time based on the pressure difference between the current pressure of the pouch and the target pressure sent to the Arduino in a series of bytes via Serial. When this time is reached, the pressures at the appropriate pouches are checked and compensated for if the pressure has overshot or undershot the desired pressure within margin.
The Arduino code can be easily modified from reading in Serial to reading in Bluetooth or similar wireless schemes, as long as a string of bytes is sent out and assigned to the input buffer of the pressure regulation code of the system, the system should easily interface with other communication protocols for future iterations of the device.
The current demo uses the Leap Motion SDK available for Unity. The demo consists of a series of rendered objects for the user to grasp and manipulate. The Leap Motion tracks the user’s hand and when a digit of each hand or a quadrant of the palm collides with these virtual objects, using Unity’s built in collision engine a byte is populated corresponding to the pouch that should inflate or deflate and the level it should inflate or deflate to. A serial buffer is populated and sent out at a rate of 60 Hz. The system should be able to interface with other virtual environments and gaming engines in future iterations of the device as it is only dependent on a series of bytes sent out based on collisions experienced. Unity was chosen for the demo do to its extensive technical support which would result in a quicker turnaround for this initial demo.
Side profile of PCB stack and inflatable glove
Early breadboard prototype of valve PCBs
Diaphragm pump and pressure tanks
PCB Design for pressure sensing + logic
Logic + Sensing PCB front profile
Logic + Sensing PCB side profile
Glove tracked and rendered in Unity
Tracked hand rendered in Unity