This project was one that I've always wanted to do, but I never found the time to. But when the time rolled around for our final project in my Engineering 101 class, I suddenly found an excuse to make this ridiculous contraption. I first got the idea for this a while ago from the Mask of Emotion, but I couldn't actually find where to buy it. So why not do the next best thing and make one myself? It was a team project, so I did half of the work while my teammate did the other half. That's also why some of these pictures aren't the best quality, because he tried sending me the pictures, but there was a miscommunication, so I just pulled them off of a video he made over it.
The helmet has 12 faces total: happy, sad, neutral, mad, surprised, tired, confused, disgruntled, disgusted, elated, worried, and creepy. It is done with a set of 22 LEDs, 6 for each eye and 10 for the mouth. It is set up as a multiplex matrix and hooked up to an Arduino in the back of the helmet, which is powered by four AA batteries. The user can switch between the faces with 2 buttons on a controller in the user's hand.
Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.
Step 1: Materials
What's a project without supplies? Things I used:
- a motorcycle helmet (can be any helmet as long as it has a visor)
- an Arduino Uno
- 22 red LEDs
- plenty of wire and ribbon wire
- 10 resistors
- 4-6 transistors (depends on how you set up the multiplex)
- experimental board
- 2 buttons
- button housing (an old mini M&Ms bottle)
- Hand drill
- 7/32 inch drill bit
- 3/8 inch drill bit (?) (can't remember if that was correct)
- Soldering iron
- Hot glue gun
- Duct tape
Step 2: Drill Them Holes
The LEDs need a place to call home. The 7/32 inch drill bit should do well for the visor, as the LEDs aren't going to be fully put in. The mouth LEDs need the full LED inside of the hole, and therefore require a bigger drill bit. I can't remember completely, but I think we used the 3/8 inch for the mouth holes.
Try on the helmet and draw out places for the LEDs. For me, the top center LEDs on the visor were on my eyes and the middle row on the mouth was on the crest of my lips. Marked? Good, now the drilling can commence!
The LEDs can be secured into place with hot glue. I didn't try it, but putting the glue on top of the LED could diffuse the light so that you can see the light better from different angles. Just make sure that you don't put too little glue on them or you'll regret later on (like we did).
Also, the "legs" of the LEDs weren't long enough to fit all the way through the holes in the faceguard of the helmet, so we had to solder small wire extensions onto each leg. After we put the LEDs into the faceguard, we stuck small scraps of foam in the holes so that they wouldn't touch and short-circuit.
Next, we need a place to put the Arduino. We drilled four holes in the back of the helmet in a square pattern and used the jigsaw to connect the dots. At first the hole was too small, so we used a box cutter to remove some of the styrofoam to give the Arduino a snug fit. Then we cut a hole in the fabric on the back of the helmet so that we could run the wires from the front to the Arduino.
Step 3: Wiring in the Front...
Now it starts to get tricky. Since there are only 15 (technically 13) digital out pins on the Arduino and 22 LEDs, we needed to make a multiplex matrix. I'll explain how this works later. For now, you just need to know how to wire the LEDs. There are four rows and six columns. You can use either to be "power" and the other to be "ground". At first we set up the plans so that the rows would be ground and the columns would be power so that we would only have to use four transistors, but we soon realized that we wired them backwards.
Now, solder lengths of wire across the long legs of the LEDs. These will be your power wires. When we had the ones on the mouth soldered, we folded them down and put tape over them so that they wouldn't touch the short legs and short-circuit. Then we took some ribbon wire and soldered it to the row wires and sent it running back to the hole where the Arduino would be stored.
For the columns, the short leg on the LEDs on the top row in the visor were long enough to bend down and solder to the whort legs on the bottom row. We then took some more ribbon wire, soldered it to the short legs on the bottom row on the visor, ran it across the bottom of the visor so that it could still be opened be the user, and soldered it to both of the bottom rows by twisting them all together (it doesn't matter if top or bottom are soldered first because they are all going to ground).
As you'll notice on the schematics, there is one column that was left off of the the mouth. This is because the matrix is actually set up for 24 LEDs, but it will still work with 22, it will just have one short column. When we soldered some colored (yay! color!) ribbon wire to the mouth columns to run back to the Arduino, we just soldered the one that was left off of the visor directly to the colored wire.
Step 4: ...wiring in the Back
It is time for you to learn the ways of the multiplex, padawons (unless you already know how this works, then you can skip to the next paragraph). As you can see in the schematic, the columns and rows are attached by LEDs. You know how a circuit works right? One side is positive and the other is negative. Well, lets say that row 1 is plugged into pin 2 on the Arduino and column 1 is plugged into pin 3. If we set the row to "negative", and the column to "positive", then the circuit is completed and the LED lights. Why doesn't the other LEDs on the row light? Because their columns are set to "off" rather than "positive". If column 2 is plugged into pin 4 on the Arduino and we set that to "positive", then the LED on column 2 row 1 will light along with the column 1 row 1 LED. Now, if we try to turn row 2 to "negative", then the column1 row2 and column2 row2 LEDs will light. But what if we don't want these on and instead want the row2 column3 LED to light? Then it becomes an Arduino coding problem that I will touch on in a little bit.
We realized something early on; the Arduino only has 3 ground pins. To solve this, we used transistors plugged into some of the Arduino's digital outputs, so that when the output was set to HIGH, the transistor would change it into a ground. At first we decided to make the rows grounds so that we would only have to use 4 transistors, but a miscommunication (short and long legs on the LEDs) lead to us using the columns as grounds using 6 transistors. This lead to a more cluttered experimental board, but I guess that was our fault.
Now, we used an experimenting board (a silicon board with a bunch of holes in it) to keep all our resistors and transistors in place in the back of the helmet. The one that our teacher gave us already had a bunch of stuff on it, so we just cut it all off, except for some nice looking pins that would fit quite nicely onto the Arduino. The only thing that was a pain was that everyone in the group was fairly new to soldering (which explains the long-stripped wires). The pins already had soldering on the back of them from their previous usage, and they proved difficult to remove. So we just left it on there and put new soldering on top of it. DO NOT DO THIS. It gathers in massive clumps and can be even more difficult to remove afterwards. Some of the soldering was difficult, and got on other pins (which is why pin 7 was not used in our Arduino code). Also, when pushing the pin on the transistors back up through the experimental board, I accidentally ripped them off so the wire had to be soldered onto the back. But enough QQ for now, back to the project.
The setup should be exactly like the one in the schematic. The only thing that not 100% is the value of the resistors, which I think is 10k for the transistors and 5k for the rows.
Step 5: Button Switch
There were multiple ways to switch between the displayed faces on the helmet (like the Mask of Emotion used different sensors inside the helmet), but we decided to just make a forward and previous button system. Press one button, it goes to the next face, press the other, it goes back to the previous face. Pretty simple right?
I found an old mini M&Ms bottle that I was planning on repurposing into a flashlight, but I never got around to finishing it (story of my life), so I decided to use it as a housing to hold the buttons in place. Plus, it fits well in your hand. We drilled holes in the cap so that the buttons could fit snugly inside of them. Then we cut off the bottom and ran some ribbon wire up to the buttons, soldering them in place. You could tape the wire securely to the inside of the bottle, but we didn't so that we can still open the cap to check the soldering on the buttons. Then just run the wire through the hole in the fabric to the Arduino hole. The buttons should be plugged into analog 1 and analog 2 to ground (if you want to use our code).
Step 6: Code It
This part is a build on the multiplex part. To overcome the problem of LEDs lighting that we don't want lighting, we need to code the Arduino to over come this. But first, we need to translate the circuit into Arduino language. Because the transistors change the value from the Arduino from "positive" to "negative", then we need to set those pins to HIGH [digitalWrite(pin#, HIGH);]. This will apply to both the "positive" and "negative" ends. Now, back to the problem. To fix this, we will light one row, set a delay, turn off that row then light the next row, ect. But the delay will be so fast that the eye can't detect it (we used a delay of 4 milliseconds). That way we can set the LEDs we want lit on one row and the other LEDs we want lit on the next row.
Before making the faces, we need to test the LEDs to see what order they are in. For this, we used a code that would light each individual LED for a certain amount of time, and then go on to the next LED, going from left to right and top to bottom. The picture is where we found each LED to be; the numbers being the pin that the LED is assigned to (7 and 9 are missing because of a screw up on the experimental board).
To make the face you want, just light the LEDs that you want on each row. A sample would be:
and so on.
The buttons also took a bit of skill to program. It's basically a bunch of IF statements. It does a loop, reads if the button is active, if it is, then it adds to a counter. If it was the "previous face" button then it subtracts from the counter. The counter is reset once it reaches 12 or is less than 0. Each face is assigned a certain number of the counter and shows on the LEDs when it's number is active. If you would like to decyfer it for yourself, I will include the code that we used.
Step 7: Let There Be Power!
To power the Arduino, we used an old battery holder that I salvaged off of an old RC car. It had a very nice on/off switch on it and fit right over the hole to cover up the Arduino. To power the Arduino with it, just plug the positive into the V-in pin and the negative into ground. We decided that it gave the helmet a pretty cool look if the batteries were exposed, but still firm in place, so we just left it open.
Black duct tape. It works. :D
And that's it! Enjoy watching people give you weird looks as you give them even weirder looks, they just can't tell that you are....