Introduction: Custom Arduino (Cheaper MakeyMakey)
If you like this Instructable or support the cause that I am making this for (children with disabilities), go ahead and vote and leave a comment!
A MakeyMakey is an Arduino based board designed and developed by two MIT graduates, Jay Silver and Eric Rosenbaum, in a partnership with SparkFun Electronics. It acts as a keyboard and a mouse, essentially adding a secondary keyboard and mouse to your PC. The real innovation that Silver and Rosenbaum introduced was the ability for "touch sensing". Using incredibly high value pull-up resistors, they were able to use everyday objects as buttons.
Many capabilities and ideas for the MakeyMakey are out there, but one of my favorites is the usage for children with disabilities. Those who can't use their fingers well enough to use a standard QWERTY keyboard can use a MakeyMakey as a keyboard emulator. Being able to use everyday objects as keys for a keyboard, disabled children are able to use items such as fruit (bananas, apples, or oranges), play dough, or anything slightly conductive as a key.
This project started more as a learning experience. My aunt had just finished a special education class that utilized MakeyMakeys. She, and the other 15 students had each bought their own MakeyMakeys for $50. I offered that I could make one for less than $40, and the rest is history.
A quick note: this project is based off of the original design kindly provided through the Open Source Hardware license by Jay Sliver and Eric Rosenbaum. I give full credit to them and give a full thanks for their generosity.
Step 1: Research!
The first step is to figure out how a traditional MakeyMakey works, then to find the parts and suppliers to build one yourself. Lucky for you, I did as much as I could for you, and condensed it down to what you need to know.
First, a MakeyMakey exploits the usage of pull-up resistors. In short, a pull-up resistor is a component that guarantees the computer will register a "no-touch" until the pin is actually touched. Without a pull-up resistor, the computer has no idea whether the pin is touched or not touched.
As for clarification, resistors are physical components that you can see and feel. A pull-up resistor is a normal resistor, just wired up to do a certain job (that job is to "pull-up" a pin).
Now, resistors come in many values, measured in ohms. Everything has resistance, but resistors are made with a specific resistance value. A typical pull-up resistor is usually about 10,000 Ω (ohms). The ones that are on a MakeyMakey are 22,000,000 (22 million) ohms, allowing any object that has less than 22M Ω to work as a switch.
From fingertip to fingertip, you have a resistance of anywhere from 1,000 Ω to 100,000 Ω, depending on wet your skin is. That leaves you with about 21.9M Ω (22M - 100K = 21.9M) for any object that you want to use. Metal, salt, even the lead from a pencil will work, just as long as the resistance is less than 22M Ω.
If you'd like a more basic explanation of how a MakeyMakey works, MakeyMakey has a great answer.
Step 2: Planning/Buying
For this step, we will be using Eagle CAD software, currently owned by Autodesk. If you don't have this software, you can download a free one-year trial. When I make reference to modifications or to the usage of a specific tool, I am using Eagle software. I will share my final design, though.
Now that you have a basic understanding of how a MakeyMakey works, you can begin to order stuff. I downloaded SparkFun's design for a MakeyMakey, and modified it to make assembly easier. The original design used SMD (Surface Mount Devices) in the size 0402. Those pieces are tiny, about 0.4 mm x 0.2 mm. I tried it out, but lost almost half of all the pieces.
To make is easier on yourself, change the sizes of the components to size 0603 or larger. To replace these things, just use the "Replace" tool. As this is not an Eagle tutorial, I will assume that you know how to work with Eagle.
To order the PCB (Printed Circuit Board), or the board that everything is placed on, I went to OSHPark. They make high quality PCB's very quickly, and very inexpensively. They have minimum ordering quantity of three, but you can't beat the price. Here is the link to my design.
For parts, you'll need to go to DigiKey or another electronics provider. I cannot share my cart, unfortunately, but it shouldn't take longer than 20 minutes to complete and order a cart. I have, however, included an Excel sheet with links. Just a few notes, though, before you order:
- Make sure when you add the ATMEGA32u4 to your cart, that it is a 44TQFP package
- DigiKey shipping is expensive. It is better to get more than you need, so as that if one is lost or damaged, you have extras.
- DigiKey has bulk discounts. For example, one resistor is $0.10, but 10 of them are $0.11. Use the discount!
- Fuses are a bit more expensive, but buy at least one extra. You can thank me later.
- I couldn't find any LEDs on DigiKey, so I just didn't use them. If you do, though, you will need 330 Ω resistors to go with them.
Other than that, it is pretty straight forward. Here is the Excel sheet that I used for ordering:
Step 3: Build It!
Now comes the fun part: putting it all together. This is not a surface mount soldering guide, but here is a great tutorial. As for soldering different size components, they should all function the same in the end. This step is probably the hardest and most time taking, but it shouldn't kill you (I recommend crossing you fingers, though, just to be safe). Here are just a few tips I leaned while working on this:
- As for the ATMEGA32u4 microcontroller, the best way I found was to tin one pad on a corner of the board, then lay the chip on top, oriented correctly. Then, after locking it in place by melting the corner pad, load up all the pins with solder. There should be huge solder bridges. Then, using your solder wick, re-melt the solder to remove it. This leaves a nice result, without any shorts.
- Before you attempt to plug the USB cable in, check the pins under the USB Mini-B connector. My first attempt had a small bridge under the connector, causing damage to the chip.
- As for order of parts, start with the AMTEGA32u4 microcontroller, then go to capacitors, resistors, the clock, and finally the female headers with the USB connector.
Step 4: Code
Now comes the last, most satisfying step (only when it works is it satisfying). To code a custom Arduino, you must first burn the bootloader. A bootloader is a small piece of code that is programed into every Arduino at the factory to tell the Arduino what to do when it first starts up and what to do with the code that you program it with. Since that is done at the Arduino factory, we need to do it as well. To do this, we can use another, premade Arduino, to program it. This requires an Arduino with an ATMEGA328 chip (such as an Uno or Nano). To do this, we will follow SparkFun's guide. Hook up the pins as shown:
Arduino || MakeyMakey
5V/Vcc - Vcc
GND - GND
D11 - D16
D12 - D14
D13 - D15
D10 - RESET
Then, go into the Arduino IDE, selecting the Arduino board that you are using to program your MakeyMakey. Under examples, open the 'Arduino as ISP' sketch. Upload it to your Arduino, just as you normally would. Then, under Tools, select under Board 'Arduino/Genuino Micro'. Then under Tools>Programmer, select 'Arduino as ISP' (not to be confused with 'ArduinoISP'). Then, once more under Tools, select 'Burn Bootloader'. After a few minutes, the IDE should say "Done burning bootloader". Your MakeyMakey is now ready to act as any other Arduino.
The next step is to go to MakeyMakey's GitHub and to the 'firmware' section. Just copy and paste 'makey_makey.ino' and 'settings.h' into Notepad, and save them according to their respective extensions. Now, open your newly saved 'makey_makey.ino', open it with Arduino IDE, and upload it to your MakeyMakey board. You should now have fully functioning MakeyMakey! Congratulations!
Step 5: Play!
With your new MakeyMakey, what could you do? There are so many options, with some fun apps or websites to use listed on MakeyMakey's website. If you have got an idea to share, please do! I, and many others, would love to hear your ideas! I've included some images of what I've seen or come up with myself.
As a side note: If you have any feedback on this Instructable, good or bad, please leave it in the comments. I've been trying to become a better writer, so any criticism is appreciated. Thanks!
We have a be nice policy.
Please be positive and constructive.