Introduction: Haptic Comlink!
This Haptic Comlink allows someone to feel messages on the wrist or maybe just massages! This is achieved by vibrating pager motors in combinations that represent letters. The main items needed are a micro with 6 outputs, a Darlington array, and 6 vib motors.
10/26/2014 UPDATE- building a version of Tenkey might be a much more fun experiment at this point if you have all these components plus buttons. You only have to rewrite the layout for different numbers of keys/pagers. This projects code has been updated based on upstream code from Tenkey, to work with basically any Arduino using the Serial monitor to send messages to the device.
This project is part of a practicality test for my larger project called Neotype that can be found on Hackday projects here- https://hackaday.io/project/1386-Neotype%3A-Hapti...
In this particular build the Arduino Yun dev board is used from http://canada.newark.com . Check em out! They stock a bunch of interesting dev kits and have informational resources for makers.
Any controller can be used really to get basic functionality, but I take some time to go over some details of the Yun an receiving messages over the web as the tutorial progresses.
Step 1: Matierials List
- Mirco- Arduino Yun shown here
- Vib motors
- Darlington Array
- Old sock- salvage
- Perf Board- radio shack
- thread and snaps - salvage thread and snaps at
- battery and powerboost 500c-
- female jumpers
- headers - salvage
- through hole switch - salvage
Tools
- soldering iron
- wire cutters
- sewing needle
Step 2: Building Modular Components
Given that this projects purpose is to test and experiment. Taking the extra time to make modular pieces saves time in the end! Modules are all about clutch power, think Legos or little bits! Sandwiching fabric between male headers and female jumpers can provide enough clutch power. Little Velcro can help too.
In using the perf board, the component was laid out first and the perf was snapped to size after.
Vib Motors- Leads on the pagers are teeny and easy to break. Stress relief is essential. Place the vib motor on to the copper side leaving enough clearance (solder touching the motor case is prob bad news) on the opposite side as to where the leads come out for two pads. In this case the leads were woven into the perf board a couple of times then brought in to the same holes of two header pins projecting on the opposite side of the board that the motor is stuck to and soldered in place. Can be secured further to fabric by using stick on Velcro (hooks) on the blank header side.
Darlington- Place the chip and headers into the non-copper side of the board in parallel (header row, chip, header row) and solder in place. Then solder the pins to the corresponding headers. Optionally, cover the finish solder side with a label to shield the connections and mark the pin out.
Power Rail- Solder and 3*3 grid of headers to the perf. Cut out leaving a little extra room for Velcro to stick to. Solder together a 1*3 for the ground rail and a 2*3 for the 5v rail.
Power Supply- In this case a Powerboost 500c and a 2500mah lipo are used. The battery is wrapped with a zippy bag and two pieces of cardboard are used to protect the battery. JST coming out the zip part and into the Powerboost. A strip of duct tape holding the baggy shut also gets fuzzy Velcro to stick the Powerboost and power rail. Also stuck the Yun to the battery in this same manner.
Step 3: Placement and Ergonomics
The shown orientation is proving to be difficult to differentiate between pagers. The modularity allows us to experiment though which is great! Will report back with better configurations!
Step 4: Fastening
This can be done in other ways. For this project I cut and old wool sock into a strip then sewed on two clasp that I found on Adafruit.
This solution works poorly in terms of getting it on, I'm going to experiment with different ways of doing it and report back.
All the modular pieces are fastened with Velcro and by sticking the headers through the fabric and connecting to a female jumper.
Step 5: Wiring
Power:
Signals:
NOTE: Be sure to follow your traces to get a consistent order. It can
be out of order in terms of wiring but then it will need to be corrected in the hardware.ino part of the software. For example: I used the PWM on the Yun which are pins- 3,5,6,9,10,11 My wiring is opportunistic based on jumper length however. So I followed the traces, and corrected the pin order to match the chord order.
byte pagers[]={ 3,5,10,11,9,6,}; // order of traces on Paul's device!
Step 6: Software
10/26/2014 - this project was updated to work on USB serial only to make it more accessible to other arduino boards. You could easily implement the same scheme on the Yun using Console and shh but why bother with the complexity.
The code can be found at github - https://github.com/PaulBeaudet/hapticComlink
Help is welcome, want to get it receiving sms, gtalk, or tweets. Its really just messing around and learning, this is a test for a bigger project.
Step 7: Notes About the Yun
Complexity breeds failure!
The first things I might suggest to a green horn is that if you only need a micro only get a simple one! Nix the wifi or ARM craziness.
With that said, If you decided you want the complexity of the Yun here are a couple of road bump side notes.
Bump 1: Finding the web address to set up Yun initially is a pain... here it is- 192.168.240.1 Go by the ip address to be sure, the name did not route properly on my Linux machine. Otherwise set-up is easy.
Bump 2: Serial/Console, Just do it! SSH into the Yun to understand how it can be more powerful. Now... for someone unfamiliar with Linux this is a bit intimidating, but stay strong. Most commands are very easy to look up! I have to do it and have been using Linux for a long time.
If you are used to serial debugging, it can been done via console when wireless via telnet. Check out the code to see!
Step 8: Layout
The 1s and 0s represent on and off states
The number followed by the # sign represent the number in binary as it would show up as a byte. In the code there is a function that takes a byte value and sets the Vib Motors in the arrangement that the bits show up.
Designed layout- Based on patterns
A-000_001 # 1
B-000_101 # 5
C-110_000 # 48
D-111_000 # 56
E-000_010 # 2
F-011_000 # 24
G-100_001 # 33
H-000_110 # 6
I-000_100 # 4
J-001_110 # 14
K-011_100 # 28
L-001_100 # 12
M-101_000 # 40
N-011_110 # 30
O-000_111 # 7
P-010_010 # 18
Q-011_111 # 31
R-000_011 # 3
S-010_000 # 16
T-100_000 # 32
U-110_011 # 51
V-101_101 # 45
W-001_000 # 8
X-100_011 # 35
Y-011_011 # 54
Z-110_001 # 49
Non-printable
Backspace-(8) 01000_000 # 128//HOLD for Carrige Return (13) Space-(32) 10000_000 # 64