Advertisement
Blogs
Advertisement

Dungeons and Dragons Dice Gauntlet

Fri, 02/03/2012 - 4:33am
Dia Campbell, TechStyle Specialist at Spark Fun

Dia CampbellThe D&D bracer is a fairly quick, fun, nerdy LilyPad project. The final product is a wearable bracer with a display that will randomly generate numbers between 1 and 4, 6, 8, 10, 12, 20, or 100 in response to arm movement, so it can effectively replace all of the dice in your bag for a D&D session. It can also serve as a decorative costume piece to get you in character!

This is an intermediate LilyPad tutorial. You can expect to do a fair amount of sewing, moderate crafting, and you'll need to be able to upload code to a LilyPad arduino board. You don't have to write the code, it's been supplied for you. However, if you want to practice or play around with it, there's room to customize.

This circuit and code were adapted for wearables from a similar project by the awesome John Trepke, one of our tech support geniusaints (I just made that word up, but I like it!)

Requirements
For this tutorial, you will need the following items:

Crafting supplies

• Outer bracer material- This can be leather, pleather, or any stiff material you'd like
• Inner bracer material- I recommend felt- it doesn't fray, it holds stitches very well, and it insulates nicely.
• 10 Grommets
• Lacing- leather thong, ribbon, whatever will lace the bracer up firmly and look right with your design
• Trim, embellishments, whatever you'd like to give the bracer some character

Electronic supplies

Conductive Thread
LilyPad Arduino 328 Main Board
LilyPad Accelerometer ADXL335
LilyPad Slide Switch - you'll need 8 of these
7-Segment Serial Display – I used yellow, but you can use whatever you'd like.
Lipo Charger basic
Polymer lithium Ion Battery- I had a 1000 MaH on my desk, but there's no reason you can't use a smaller one if you'd like to conserve space.

Assembly
Start with your bracer pattern. You can be as simple or as complicated about this as you'd like. There are a number of bracer patterns online, or you can create a basic trapezoid shape. Use the circumference of your wrist for the short side, the circumference of your forearm for the long side, and the length you'd like the bracer to be for the equilateral sides. Mine was about 9 inches long. If yours is shorter, you might have to condense my circuit a little bit to make it fit. You'll cut your leather to this size and shape, but let's start with the felt so that we can create the circuit. Cut the felt one inch smaller than the pattern on all sides, and lay out your circuit. It should look roughly like this:

Make sure that you have the Main Board oriented properly.

Make sure that you have the Main Board oriented properly. You want to be able to attach everything properly. The 7-segment display will need to be flush with the fabric, so start by tracing around the face of the display on the fabric and then cutting this rectangle out.

The side of the fabric you've laid the parts out on will be the back of the bracer

The side of the fabric you've laid the parts out on will be the back of the bracer- press the display through the hole in the back to the front, like so.

Now that the display is lying flush with the felt, so that only the red PCB is on the back side, it's time to begin sewing.

Now that the display is lying flush with the felt, so that only the red PCB is on the back side, it's time to begin sewing. I've traced out the first connections you'll sew here in copper tape. I'm going to start with all of the negative traces. You'll be connecting all of the main components to each other and to ground on your power supply. Remove all of the switches on the right-hand side, leaving only the one next to the power supply, which is your LiPo Charger Basic.

Take a look at these connections.

Take a look at these connections. What you are doing is connecting every pin that is labeled either (-) or GND to each other, and then to one side of the power switch. Then connect the other side of the switch to the (-) pin on the power supply. This way, when you toggle this switch, you are creating and breaking the connection between the entire circuit and the power supply. This will be your on/off switch for the whole bracer. One trace goes off to the right side because we will be attaching it to the remaining 7 switches.

Here is a photo of my completed stitching on the negative trace.

Here is a photo of my completed stitching on the negative trace. Feel free to skip to the end and see what all of the finished stitching looks like if you'd like to make changes the the circuit. As long as you leave room for all of the traces you see there, everything should be fine. You can move components into a configuration that works better for you, or better fits the shape you have chosen for your bracer.

The next step will be adding the remaining switches.

The next step will be adding the remaining switches. Line them up against the edge of the fabric. I tried to keep mine roughly equidistant. You can arrange them however you'd like, so long as you'll be able to connect one to each of the arduino pins 5-11. Mark where each button will go on the front and back side.

Tie your thread onto the long end you sewed from the negative circuit

Tie your thread onto the long end you sewed from the negative circuit, and sew a line up the left side of the felt. Using your the marks you made, move the button to the top side of the fabric, and sew down the 'Off' side until you have a line of all 7 of these switches sewn to each other and to the negative connections.

Tie off your thread and start fresh for the next part.

Tie off your thread and start fresh for the next part.

Next, we're going to sew the other side of each button to one of the numbered pins on the arduino.

Next, we're going to sew the other side of each button to one of the numbered pins on the arduino. I used pins 5-11. If you've chosen a different switch layout, you can use different pins. You'll just have to make a few small changes to the code.

Make sure that your thread ends are cut nice and short next to the switch.

Make sure that your thread ends are cut nice and short next to the switch. It's important that the thread on one side of each switch not come in contact with the thread on the other side.

Double check that each switch is connected to an Arduino pin on one side and to ground on the other.

Double check that each switch is connected to an Arduino pin on one side and to ground on the other.

We're going to move on now to the positive traces.

We're going to move on now to the positive traces. Connecting all of the pins labeled either (+) or VCC to each other. Take a look at the traces I've laid out in the copper tape. You can see that in three places, this trace is going to cross over places where you laid down negative trace. In those places, I've put down small pieces of felt to act as bridges. It's going to be critical that these traces not come in contact with each other, so cut each bridge big enough to ensure this. Be very careful when you're stitching over them that you either skip entirely over, or stitch very near the surface, so that your top trace doesn't go all the way through the bridge fabric and contact your bottom trace.

Here's that portion finished, with the felt bridges in place.

Here's that portion finished, with the felt bridges in place. Now, you've got your switches connected entirely, and you've got power and ground attached to all of your boards. You're missing an input from the accelerometer to the Arduino, and an output from the Arduino to the serial display, so we'll do that next.

I've laid the traces out in copper again.

I've laid the traces out in copper again. I'm connecting the Y pin on the accelerometer to the A1 pin on the Arduino, and the TX pin on the Arduino to the RX pin on the serial display. Connecting the accelerometer up is a snap. That's a very short, simple connection if you've set the circuit up the way I have. If you've made changes, it could be different. Connecting the serial display up is a little more tricky, because you're going to have to cross a few other traces again. I reused the edge of one of my bridges over the negative trace, and added another one over the positive on the way to the display.

That's all of your connections- now we just need to upload the code.

That's all of your connections- now we just need to upload the code. This code is going to tell the Arduino to roll a random number when it gets input from the Y-axis of the accelerometer. The limit of the random number is determined by which switch you flip. You can certainly make any changes to this code that you'd like, but it will work as it is if you'd rather not. Hook up your FTDI board to your computer and the Arduino board. Then cut and paste this code, and upload it:

/* Accelerometer controlled Random Number Generator using LilyPad
Arduino and accelerometer

by: John Trepke and Brad Woodward 1/31/12
SparkFun Electronics
created on 1/31/12
license: Beerware- feel free to use this code and maintain
attribution. If we ever meet and you are overcome with gratitude,
feel free to express your feelings via beverage.

Arm movement will generate a random number between one and
selected maximum.

Hardware: LilyPad Main Board
*/

const int buttonPin1 = 3; // Switch #1 on the DIP switch is digital pin3 on Arduino.
const int buttonPin2 = 4; // Switch #2 on the DIP switch is digital pin4 on Arduino.
const int buttonPin3 = 5; // Switch #3 on the DIP switch is digital pin5 on Arduino.
const int buttonPin4 = 6; // Switch #4 on the DIP switch is digital pin6 on Arduino.
const int buttonPin5 = 7; // Switch #5 on the DIP switch is digital pin7 on Arduino.
const int buttonPin6 = 8; // Switch #6 on the DIP switch is digital pin8 on Arduino.
const int buttonPin7 = 9; // Switch #7 on the DIP switch is digital pin9 on Arduino.
const int accel = 1; // Accelerometer's Y axis is anolog pin 1 on Arduino

int highnum = 0; // Variable to hold the high value for 'random()'
long ran; // Variable to store random number in

void setup() {
pinMode(accel, INPUT); // Sets analog pin 1 to input.
pinMode(buttonPin1, INPUT); // Sets digital pin 3 to input.
pinMode(buttonPin2, INPUT); // Sets digital pin 4 to input.
pinMode(buttonPin3, INPUT); // Sets digital pin 5 to input.
pinMode(buttonPin4, INPUT); // Sets digital pin 6 to input.
pinMode(buttonPin5, INPUT); // Sets digital pin 7 to input.
pinMode(buttonPin6, INPUT); // Sets digital pin 8 to input.
pinMode(buttonPin7, INPUT); // Sets digital pin 9 to input.
digitalWrite(buttonPin1, HIGH); // Sets digital pin 3 HIGH.
digitalWrite(buttonPin2, HIGH); // Sets digital pin 4 HIGH.
digitalWrite(buttonPin3, HIGH); // Sets digital pin 5 HIGH.
digitalWrite(buttonPin4, HIGH); // Sets digital pin 6 HIGH.
digitalWrite(buttonPin5, HIGH); // Sets digital pin 7 HIGH.
digitalWrite(buttonPin6, HIGH); // Sets digital pin 8 HIGH.
digitalWrite(buttonPin7, HIGH); // Sets digital pin 9 HIGH.

Serial.begin(9600); // Start a 9600 baud Serial
randomSeed(analogRead(0)); // Seed 'random()' using an unused analog pin.

Serial.print("v"); // Reset the display
Serial.print(0x7A, BYTE); // 'Brightness'
Serial.print(0x00, BYTE); // = MAX!

delay(100); // Wait 0.1 second
Serial.print("d8d"); // Send "d8d" to the display.
}

void loop() {
if (analogRead(accel) > 400) { // First trigger
for (int num = 0; num <= 100; num++) { // 100 cycles
if (analogRead(accel) < 300) { // Second trigger
trigger(); // let's Roll!
}
}
}
}

void trigger() {

if (digitalRead(buttonPin1) == LOW) {
highnum = 5; //If switch #1 is flipped on, random 1-4.
} else if (digitalRead(buttonPin2) == LOW) {
highnum = 7; //If switch #2 is flipped on, random 1-6.
} else if (digitalRead(buttonPin3) == LOW) {
highnum = 9; //If switch #3 is flipped on, random 1-8.
} else if (digitalRead(buttonPin4) == LOW) {
highnum = 11; //If switch #4 is flipped on, random 1-10.
} else if (digitalRead(buttonPin5) == LOW) {
highnum = 13; //If switch #5 is flipped on, random 1-12.
} else if (digitalRead(buttonPin6) == LOW) {
highnum = 21; //If switch #6 is flipped on, random 1-20.
} else if (digitalRead(buttonPin7) == LOW) {
highnum = 101; //If switch #6 is flipped on, random 1-100.
} else {
highnum = 1; // Use highnum == 1 to denote no switches flipped
}

if (highnum > 1) { // Is a switch flipped?
for (int num = 0; num <= 5; num++) { // Roll 5 times, keep the 5th number
Serial.print("v"); // Reset the display
ran = random(1, highnum); // Get a number
if (ran < 10) { // If the random number is 1 digit,
Serial.print("0"); // Put a 0 in front of it
}

Serial.print(ran); // Show the number
delay(100); // Wait 0.1 second between the faux-rolls
}
} else { // No switches flipped?
Serial.print("v"); // Reset the display
Serial.print("DURR"); // User == idiot
}

delay(1000); // Wait 1 second to prevent accidental re-rolls.
}


If you've never used Arduino before, or have problems, please refer back to this tutorial: http://www.sparkfun.com/tutorials/312

I go into a lot more detail there, so it will be more help with walking you through and troubleshooting problems you might have.

Arduino

All of the electronics are done! You can hook up a battery, turn it on, and check that it works. If you have problems, go ahead and cuss or throw something (soft, gently) if you want. It's cool- I'll wait. It's frustrating when things don't work the first time, every time, but don't worry- we'll sort it out! First, check for shorts. Look for ANY places where traces are touching each other that we didn't specifically say they should be connected earlier. Be particularly careful to check where your bridges are at if you put any stitches in them. It's easy to go too far through the fabric and end up with your top trace in contact with the bottom trace. If you've got a multimeter with a continuity setting on it, that's a great way to check. Just put one probe in contact with your positive trace and one in contact with your negative trace. If it beeps that you've got continuity, there's your problem! Just use the resistance setting to poke around and find the point of lowest resistance, and there you'll probably find your problem. If the continuity check shows nothing, check around a few more places, then check continuity where you SHOULD have it- from the positive pad of the power supply to the positive pads of the Arduino, accelerometer, and display, then likewise the negative pads. Look for somewhere that the connection might be broken, and shore it up!

If everything DID work, that's great! From here on out, it's all crafty stuff.

If you haven't already, go ahead and cut the leather (or stiff fabric substitute) to your pattern, full size, which should make it about an inch larger than the felt on every side. If you want to put designs and embellishments on the front, it might be a good idea to wait until you've done all of the cutting you're going to do. I didn't do that, and as a result, ended up with my dragon design mushed up a little closer to my display than I would have liked it. Learn from my silly mistake! (caused by my silly eagerness to stick something in the laser cutter as quickly as possible!)

Remember that hole you cut in the felt to press the face of the display through?

Remember that hole you cut in the felt to press the face of the display through? You're going to do that again now, but it's even more important that it be a nice neat hole and a good fit, since this is the going to be on the face of the bracer. I pressed the face of the serial display into the leather, traced around it with a pencil, and sliced it out with an Xacto knife. It's a little messy, and there are probably better ways of doing this. If you've got one, use it! The more finished this edge looks, the more professional the whole project will look. Really, that goes for all of the crafty parts of this project. If you've got more craft-fu than I do in these areas, use it! There's so much room for improvement!

Once you've got your hole cut, press the serial display through it.

Once you've got your hole cut, press the serial display through it. You should have the display on the front of the leather, and all of the rest of the electronics on the back side, still exposed and visible if you flip the whole thing over. At this point, I put a few dabs of hot glue on the red board to secure it to the back of the leather and keep things in the same place, so that when I cut the next holes they'll be lined up properly.

To cut the small holes for the switches, I just pressed the leather down against them, leaving indentations where the holes needed to be.

To cut the small holes for the switches, I just pressed the leather down against them, leaving indentations where the holes needed to be. This won't work with every fabric, but should with quite a few. If it isn't working for you, try feeling for them through the fabric with your fingers and gently tracing around each perimeter with pencil or chalk, then carefully cut that shape out with a craft knife. I did not cut out a hole for the entire purple board, just a very small hole so that only the silver switch shows through.

Note that my switches are not even REMOTELY in a straight line.

Note that my switches are not even REMOTELY in a straight line. I didn't worry too much about this, but it's entirely up to you where to put them. Straight line, not at all like mine, or even less of a straight line than I did. I've shown you where the traces need to GO, but as long as they get there, do what you like. Right now, my felt isn't really attached to the leather. The only place where these layers are connected is the spot where I glued the display PCB to the leather. Everything else is just flopping around, as it were. That's because I want to be able to get to both sides of the felt after everything is put together, in case anything comes loose. The sad fact is that conductive thread stitches are just as vulnerable to tearing and loosening as any other stitches, and over time, with use, the circuit is going to need repairs. Make sure you're not making that too hard on yourself later!

I added a little bit of faux fur to the top and bottom edges of my bracer, because I wanted it to have a nice 'barbarian' feel to it.

I added a little bit of faux fur to the top and bottom edges of my bracer, because I wanted it to have a nice 'barbarian' feel to it. I made sure the fur was pointing off of the bracer in each direction, then cut the fur at the top edge off as short as I could, so I would have a nice flat surface to glue to the bracer, helping to keep it from sliding around.

Make sure if you add fur or any other trim to these edges that you leave the mini or micro USB end of your charger board accessible.

Make sure if you add fur or any other trim to these edges that you leave the mini or micro USB end of your charger board accessible. You want to be able to plug this in when the bracer needs to be charged up!

As a last touch on the back of the bracer, I added a small flap of a soft fabric.

As a last touch on the back of the bracer, I added a small flap of a soft fabric. This part of the bracer has a lot of exposed electronics, and is going to be tied down close to your skin. I wanted to keep it from being scratchy, so this piece of fabric is just there to serve as a barrier between skin and electronics. I glued down only one edge of the fabric, so that it would be easy to get to everything underneath.

Last, you need to be able to close the bracer around your wrist.

Last, you need to be able to close the bracer around your wrist. I used store-bought grommets and a leather lace. If you've got another way, absolutely go for it! Different styles of grommet tend to come with different application techniques. I used some pretty basic ones from the fabric store, which you pound in with a hammer and a little tool that comes in the package. These ones worked really well for me, but use whatever you can find, or whatever you like. You could pretty easily just attach leather or ribbon straps to both sides and tie them together, or use frog fasteners- there are a lot of options here. If you use another method, attach them however the instructions say, and make sure that everything fits right before you attach anything permanently. You'll almost certainly want to borrow someone else's hands for that part. It's a pain to tie something around your own wrist!

Flip all of the number switches down, plug in your battery if you haven't already, and flip the power switch on the underside up. You should get 'd8d' on the display. Now switch up one of the numbered switches, and give your arm a shake. The bracer will roll a random number between one and the number on the switch you flipped up. If you've accidentally left more than one switch up, or no switches up, the display will show 'durr'.

Enjoy basking in the envy of your party!

Finished product

Advertisement

Share this Story

X
You may login with either your assigned username or your e-mail address.
The password field is case sensitive.
Loading