Introduction: Cat Whisker Sensory Extension Wearable (2.0)
This project is a continuation and reimagining of my former colleague's (metaterra) "Whisker Sensory Extension Wearable".
The purpose of this project was to focus on the creation of novel, computationally-enriched “sensory extensions” that allow for augmented-sensing of the natural world. My major effort with this project was devoted to the fabrication and implementation of sensory augmentations that will extend a sense through sensors and respond with a tactile output for the user. The intent is to enable anyone to fabricate their own sensory extensions, and thusly map intrinsically human/animal senses onto hardware. Effectively extending our senses in new and exciting ways that will lead to a better understanding of how our brain is able to adapt to new external senses.
This material is based upon work supported by the National Science Foundation under Grant No. 1736051.
With this project, I wanted to take the previous whisker sensory extension wearable and make it lighter, more cost-effective, as well as easier to construct. Here's an overview of the different components and their functions:
- Two sets of custom built flex sensor whisker devices (total of 4, 2 per side) receive tactile information (bend, flex, etc.) from objects in the user's immediate environment. The initial voltage/resistance information received by each sensor is then converted to bend angle information (e.g., a bend angle of 10 degrees). This bend angle information is subsequently converted to proportional pulse width modulation output and sent to corresponding vibration motors on the user's forehead.
- Each whisker flex sensor is attached to a 1" ProtoBoard and connected to an Arduino UNO that does the transducing/converting.
- Four vibration motors supply tactile stimuli to the user's forehead. Each motor used correlates to one whisker, the vibration motor's intensity is based on a threshold that will be set based off of the whisker sensor.
14" long, 0.08" wide, 0.03" thick polystyrene strip
A wire kit (I recommend silicone insulation) NOTE: you'll be using around 2-3 feet of wire for each connection
1/16" thick clear acrylic or cardboard
Heat shrink tubing
Step 1: Whisker Assembly
(Disclaimer! This is taken directly from the previous instructable.)
It took me a while to develop a whisker sensor apparatus that was flexible enough to mimic real whiskers, yet rigid enough to consistently return to a straight, unbent position. I ended up using a 4" unidirectional bend/flex sensor from Flexpoint Sensor Systems (See figure 1). A JST plug is soldered to the legs of the sensor, then a 14" long, 0.08" wide, 0.03" thick polystyrene strip (I procured mine at a local hardware store) is silicone glue-adhered to the sensor, heat shrink is applied, and a protective coating of Sugru is molded around the entire base of the whisker unit. Here are the detailed instructions:
- Take the plug end of the 3-pin JST connector and remove the center wire (See figures 2-4)
- Snip the plug wires so you have ~1.5 cm of wire remaining, then strip and solder these leads to the sensor pins (remembering the plug/sensor orientation). I used heat shrink to provide insulation (See figures 5, 6)
- Mount the polystyrene strip to the sensor with some sort of flexible adhesive (I used Liquid Nails silicone glue). Make sure to secure the strip to the sensor well (See figures 7, 8)
- Take your Sugru (I used a single 5g pack) and mold it around the base of the sensor/strip/plug making sure to encase all of these components. Also, be sure to apply the Sugru high enough to fully secure the strip, but not too high as to restrict the sensor's ease of movement/bend. Take your time. You'll have at least 30-45 minutes until the Sugru begins to harden. Before you let dry, make sure that your plug fits properly into the receptacle side of the JST connector (See figures 9-13)
- Lastly, I adhered labels to the whisker apparatus. Side (L/R) and number position (1-4) were used (See figures 14, 15)
- Make 3 more (or whatever number of whiskers you desire). Be sure to create each whisker in the same way. This will help with sensor calibration later.
Step 2: Whisker Mount Assembly
Now that the whisker flex sensors are complete, we can now mount them onto the cheek piece (figure 1). Metaterra designed a curved arm with a disc for mounting, he did so using Adobe Illustrator and used 1/16" thick clear acrylic as the material. NOTE: If a laser cutter isn't readily available you could try to make the mounts out of cardboard or other easily cut material, just print out the PDF and cut around the tracing while it's overlayed on cardboard. After laser cutting, drill four holes into the acrylic, then weave the JST plugs through the holes (figure 1, 3, and 4), then embed the whiskers into the disc part of the mount using Sugru. Here are the detailed instructions:
- Open the whisker arm vector file (PDF). The material used for this instructable is 1/16" clear acrylic and cut with a laser cutter.
- Drill four holes into the cheek mount. Feel free to play around with the hole size as well as the distance to make the whiskers as close or far away as you want.
- Weave the 2-pin JST plug through the holes. make sure that the sides with the opening are facing away from each other.
- Make sure your whiskers ports are located where you want them to be. Use Sugru and mold the JST plugs in place on the disc portion of the piece (this took me around four Sugru packets). With Sugru you'll have around 30 minutes of mold time, so take your time and make sure the whiskers won't overlap when plugged in, and that the JST plugs are oriented where you want them. Once you're happy with the placement, let the Sugru dry for a day.
- Reference figure 9 and 10 for this step, also note that on my design: white = 3.3V, black = GND, and red is the analog pin. Solder the two ends of the JST plug onto one side of the 1' ProtoBoard, then repeat with the other whisker. Create a voltage divider using my design or change the layout (you can also look at SparkFun's flex sensor hookup guide).
- To attach the cheek pieces onto the headband, two screws/bolts are used to secure the arm to the headband (figure 11).
Step 3: Vibration Motor Integration, Headband, & Battery Setup
Connecting the vibration motors is fairly straight forward, the red cable will connect to a digital PWM pin on the Arduino and the blue will connect to GND. The vibration motors are attached to a NITECORE headband using velcro, the placement is based on the whisker it's tied to, the outer vibration motors are tied to the front whiskers and the inner vibration motors are tied to the back whiskers (Figure 6).
- Solder wire to each vibration motor's ends, apply heat shrink to each connection, then apply heat shrink to the vibration motor cord as well as the newly heat shrunk cables (Figure 2), repeat 3 times. Adhere a velcro disc (hook side) to the back of the motor. Repeat 3 times.
- Cut one strip of velcro so that the collection of motors wires can be bound together and velcroed to the front of the NITECORE headband (See figure 5). Adhere (I used super glue) the strip to the inner-front of the headband and velcro the motors onto the strip in the same orientation as you placed the whisker ports on the cheek plate (Figure 7)
- Use a clip or zip tie to connect the vibration motor cords, this will help protect the vibration motors from being pulled/broken (Figure 7).
Step 4: Microprocessor and Connecting It All to an Arduino
All vibration motors and whiskers will connect to an Arduino UNO. You will need an additional prototyping board that will allow for you to solder 9 GND cables and 4 3.3V cables. You will also most likely need a dupoint connector kit to add pins and housing to the cables that need to be plugged directly into the Arduino. The vibration motor pin wires (red cable) connect to the Arduino digital pins: 3,9,10,11 (These pins were chosen because they allow for PWM). The vibration motor GND wires (black or white) will be soldered onto the prototyping board. The whisker pins (red cable) will connect to the Arduino analog pins: A0, A1, A2, A3. The whisker VCC cables (white cable) and ground cables (black) will be soldered onto the prototyping board.
Step 5: Implement the Code
Ok, now it's time to upload the code. There are a few things that you'll need to tweak before you're ready to whisk the world.
- First, use a multimeter to measure both the VCC output voltage and the resistance across the 10k resistor. Input these values into their respective spots in the code.
- Then, double check that all other variables are set to the correct inputs/outputs (e.g., mtr, flexADC, etc...).
- Then, plug in your Arduino, and upload the code.
- Once you're up and running, you'll see in the serial monitor that Bend + (whisker number) will print. Now it's time to calibrate the whisker (each whisker is unique and will have a slightly different baseline resistance). Set the STRAIGHT_RESISTANCE variable to whatever the baseline resistance (i.e., unbent whisker position) is printing as. Then, set the BEND_RESISTANCE variable to STRAIGHT_RESISTANCE + 30000.0. In the original code, this variable was meant to reflect the flex sensor resistance output at a bend of 90 degrees. Since our whiskers don't get anywhere close to a full 90-degree bend (at least in typical situations), adding 30000.0 ohms to the baseline resistance works just fine. Feel free to set the bend resistance to whatever works best for you application though. If you've set everything correctly, then you see that when the whisker is unbent, a bend angle of 0 degrees (more or less) will print. Then, you can set the threshold values that will activate the vibration motors based off of the angle. After this, you're good to go!
Step 6: Done!
You now have a whisker wearable and are ready to (feel)ine the world!
If you have any in-depth questions, want to learn about human augmentation, want to keep up with my work, or just toss around ideas, please do so on my Twitter:
Participated in the