You know those ole 12 button keypads which are very easy to use but eat microcontroller IOs like they are candy? Well now you can have your cake and eat it with this simple backpack board which will convert one of these hungry beasts down to consuming only a single analog input rather than 12 digital inputs.

You will need:
  • 12 button common terminal keypad. 1x
  • 1k ohm resistor, 12x
  • 12k ohm resistor, 1x
  • Protoboard (approx 1.5" x 1.5"), 1x
  • Soldering iron & solder
  • Hookup wire (red - approx 2"), x1
  • Hookup wire (black - approx 2"), x12
  • Hookup wire (red,black,yellow - approx 5"), x3
  • Molex crimp pins, 3x
  • Molex female connector, 1x
  • Molex male connector, 1x
  • Hot glue gun
  • Mini vise

Step 1: Circuit Design

The circuit is a simple series resistor ladder + voltage divider.
The common terminal of the keypad is held high through a 12k pullup resistor.
Each key terminal of the keypad is connected to a 1k resistor.
That resistor is in turn connected in series with its neighbor in a ladder twoards the common terminal.
The end of the resistor ladder is tied to ground.
The signal line is a voltage divider with its reference point between the 12K resistor and the resistor ladder.
Depressing a key causes a chain of resistors with a unique value to be introduced into the voltage divider, giving each key a unique analog value.

Eagle schematic files are attached for ease of reproduction on a protoboard or single sided etched copper board.
<p>Hi, I'm just wondering if I'm able to lower the values on the resistors and doing so, add more buttons?</p><p>I was hoping to use this as a basis for a keypad for a DIY media centre remote, but I need more than 12 buttons.</p>
This design can definitely be extended to utilize more buttons. You don't need to lower the values of the resistors though. The values of the resistors are chosen based on a ratio.<br><br>The resistors in this design were chosen to give a ratio of 1:12 per button in the ladder. Hence the pull up resistor is 10k and each of the 12 buttons uses a 1k resistor. This works well for commonly available resistor values even though the design has 1:10 ratio using 1k/12k<br><br>So depending on how many button's you're planning on utilizing I would choose a similar ratio for the ladder.<br><br>The thing to be aware of is the more buttons you add, the closer each step of the ladder gets and you may start running into issues figuring out which button was pressed. I'm not sure at what number of buttons this would start happening.<br><br>The library is setup so that you can pass in the resistor values for the pull up and ladder sections. It will then calculate the voltage it expects to see resistance value of each button.<br><br>You'll need to modify the library to work with a different number of buttons though, it's currently hardcoded for 12 buttons in numerous places
<p>Thanx for this tutorial. <br>I have used it to make a toy organ.<br>It's works perfectly</p>
<p>Thank you for making this easy step-by-step tutorial. Worked like a charm.</p>
Very ingenious implementation!
Here's an image of my DIY keypad<br><br>http://dominion-network.co.uk/projectstuff/keypad.jpg<br><br>I'm currently in the process of neatening it up so it looks a lot better, and so I'm also able to 'waterproof' it with a diy membrane.
Hey, it's me again, I'm trying to get your library to work with this library<br>http://www.arduino.cc/playground/Code/Password<br>But I'm not having any luck, could you give me a hand?
By any chance would you be able to take some more photos of the resistors? I'm trying to design a PCB and some of the steps are a little confusing for example the placement of the black, red and yellow wires, a diagram would be great.
HEADS UP!<br>All the source is avaiable on github:<br>https://github.com/declanshanaghy/KeypadBackpack<br><br>I've started implementing the Arduino Library to read the keys (see here)<br>https://raw.github.com/declanshanaghy/KeypadBackpack/master/AnalogKeypad/AnalogKeypad.pde<br><br><br>However, the code doesn't include any debouncing logic yet. I should get that implemented within the next week. (busy with some other stuff)<br><br>Feel free to fork and send me a pull request if you implement it yourself.<br>
Added debouncing and repeat rate options to the code. Files are pasted above.<br>
Thank you for this!, I've read an instructable (look for Arduino 3 wire Matrix Keypad) saying how to do this, but it never gave any actual step by step instructions with images, I've bookmarked this and when I get one of these keypads I'll be doing this.<br><br>Where did you get your keypad from? was it Maplins? (UK) or Sparkfun? (USA)
This approach won't work with a Matrix keypad (such as the one sparkfun sells)<br><br>The keypad must be the type that has 13 terminals.<br>1 for each of the 12 keys and 1 common termal<br><br>I got this &quot;common terminal&quot; keypad at allelectronics.com<br>http://www.allelectronics.com/make-a-store/item/KP-12/12-BUTTON-KEYPAD//1.html<br><br>Most people use matrix keyds because it saves pins compared to a common terminal keypad. However, i think the common terminal approach is much easier since you can get it down to only using 1 pin with a few measly resistors.<br><br><br>
I have another question about that keypad, do you have a datasheet for it? I'm looking at creating a disposable one for a project (Don't want to pay money for a keypad that may get damaged in this particular project)
Sorry, I dont have a datasheet.<br>AllElectronics is pretty bad when it comes to datasheets - basically non existent for any of their products.<br><br>
Thanks for the link and the information, I can't wait to do/use this for my project

About This Instructable




Bio: I Make stuff. Use Arduino with DIY manufactured PCBs. Love the precision of CNC, Getting into 3D Printing. Someday I'll have a CNC mill. :-)
More by declanshanaghy:XBox 360 Mini Stand JabberBot! The Arduino robot with an ATMega brain and bluetooth braun! :-) Analog Keypad Backpack 
Add instructable to: