Introduction: Super Secret Lock Box W/ Capacitive Touch

Picture of Super Secret Lock Box W/ Capacitive Touch
Hey everyone, I wanted to share a project I just finished up. I built a super secret locking box for my girlfriends little brother. He has a knack for creative lego building so I thought it would be a good idea to open him up to the Arduino as soon as possible. The super secret locking box will only open for those with right password or there is a hidden way to reset the passcode so that no prying little sister would ever be able to figure it out. That is, unless she finds this instructable. The secret method involves using some capacitive touch sensing. 

The Arduino stays asleep to conserve battery and only wakes when the button is pressed. Upon waking, there are two paths to go down, flash the green LED, unlock, and go back to sleep OR light up the red LED and wait for 20 seconds for the right passcode, then go to sleep. In the period before it goes to sleep, if you touch(not press) the button for 5 seconds, the passcode will be set to whatever the code is currently. It will then unlock and go back to sleep. The 20 seconds timer restarts every time the button is pressed.

ATmega168/328 on a PCB or an Arduino with a breadboard
Wood Box
small servo
3x Potentiometers & knobs
push button
2x 100 ohm resistors 
150 ohm resistors 
battery pack
depending on how you make the latch, these parts will be up to you, I used 1/4" square dowels to make the latch and supports 

Skills with a Dremmel
Soldering Iron
Hot Glue Gun
Wood Glue (I recommend Gorilla Wood Glue, the non-foaming kind)

If anyone can decipher the suspected Japanese characters, I would really love to know the original purpose of the box.

He loved it! 

Step 1: Cut and Wire It Up!

Picture of Cut and Wire It Up!

You will need to measure out where to cut 5 holes for the pots, LED, and button. Make sure to leave space for either the Arduino or a breadboard/pcb standalone. I chose to use an ATmega 328P-PU standalone running 8MHz internal clock to minimize battery consumption. On sleep mode, theoretically should only draw a few uA which is worlds better that the 25mA the UNO was consuming.
If you plan to use the arduino development board instead of a standalone version, be sure to bypass the 5V regulator by using the 5V pin to power it instead of VIN or the barrel jack. Trying to conserve any battery is pointless if it is being used.  

Connect 5V, GND and data lines to the appropriate pins. Remember to use resistors on the LED, red needs 150 ohms while blue and green need 100 ohm resistors. 

Remember, the pots must be connect to analog pins.

Whichever battery pack you choose must output a max voltage of 5.5V and a minimum of 4.5v. (3AA wired in series should work). The ATmega328 will run nicely anywhere from 1.8 to 5.5v but the servo requires a bit more juice. The data sheet for a 9g servo says 4.8v minimum. Since it is more common to find packs with 4 batteries which would produce 6v, a Shottkey diode can be used to drop to voltage to 5.6v. I don't think an extra .1v will damage the ATmega. 

3x 1.5v alkaline AA wired in series = 4.5v
I used 4x 1.2v lithium batteries for 4.8v

Step 2: Code

Picture of Code

Interrupts can be tricky, digital pin 2 is also PCINT0. that is why the button is connected to pin 2 but the interrupt is attached to 0.

#include <Servo.h>

#include <CapacitiveSensor.h>

#include <avr/sleep.h>

const byte red = 6;
const byte green = 7;
const byte blue = 8;

const byte pot1 = A0;
const byte pot2 = A1;
const byte pot3 = A2;

const byte button = 2;

int code1 = 1;
int code2 = 1;
int code3 = 1;

int pot_val1 = 0;
int pot_val2 = 0;
int pot_val3 = 0;

int button_val = 0;

int touch;

unsigned long currentMillis = 0;
unsigned long codeMillis = 0;
unsigned long buttonMillis = 0;
unsigned long sleepMillis = 0;

CapacitiveSensor cs_10_11 = CapacitiveSensor(3,4);

Servo myservo;

int sleepCounter = 0;
boolean state = LOW;

void setup()
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(button, INPUT);
pinMode(pot1, INPUT);
pinMode(pot2, INPUT);
pinMode(pot3, INPUT);
digitalWrite(button, HIGH);
attachInterrupt(0, interrupt, RISING);

void loop()
getPots(); //read in pot values
mapAllPots(); //adjust them to the correct scale
if(pot_val1 == code1 && pot_val2 == code2 && pot_val3 == code3) //if password is correct
g(); //light green led
unlock(); //unlock the latch
sleepNow(); //go to sleep
r(); //turn on red led

currentMillis = millis();
button_val = !digitalRead(button); //read the button value

if(button_val == 1) //if button is pressed, reset the timers.
sleepMillis = currentMillis;
codeMillis = currentMillis;

if((currentMillis - sleepMillis) > 20000) //if timer expires, go to sleep
sleepMillis = currentMillis;

touch = highLow(cs_10_11.capacitiveSensor(30)); //read touch capacitance and map it to binary HIGH or LOW
currentMillis = millis();
if(touch == 1)
if((currentMillis - codeMillis) > 5000) //if touch is 1 for 5 seconds
b(); //light th blue led
storeCode(); //store code from pot values
codeMillis = currentMillis;
if(touch == 0) //if no touch reset timer to prevent time accumulation
codeMillis = currentMillis;


//end of loop

void interrupt()
currentMillis = millis();

if((currentMillis - buttonMillis) > 200)

buttonMillis = currentMillis;
void sleepNow() // here we put the arduino to sleep
off(); //turn off all leds

set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here

sleep_enable(); // enables the sleep bit in the mcucr register
// so sleep is possible. just a safety pin

attachInterrupt(0, interrupt, RISING); // use interrupt 0 (pin 2) and run function
// wakeUpNow when pin 2 gets LOW
MCUCR = bit (BODS) | bit (BODSE); // turn on brown-out enable select
MCUCR = bit (BODS); // this must be done within 4 clock cycles of above

sleep_mode(); // here the device is actually put to sleep!!

sleep_disable(); // first thing after waking from sleep:
// disable sleep...
detachInterrupt(0); // disables interrupt 0 on pin 2 so the
// wakeUpNow code will not be executed
// during normal running time

int highLow(unsigned long x)
if(x >= 300)
return 1;
return 0;


void getPots()
pot_val1 = analogRead(pot1);
pot_val2 = analogRead(pot2);
pot_val3 = analogRead(pot3);
void mapAllPots()
pot_val1 = mapPot(pot_val1);
pot_val2 = mapPot(pot_val2);
pot_val3 = mapPot(pot_val3);
int mapPot(int in)
if(in > 1010){
return 1;
else if(in > 950){
return 2;
else if(in > 900){
return 3;
else if(in > 630){
return 4;
else if(in > 480){
return 5;
else if(in > 190){
return 6;
else if(in > 80){
return 7;
else if(in > 30){
return 8;
else if(in > 3){
return 9;
void storeCode()
code1 = pot_val1;
code2 = pot_val2;
code3 = pot_val3;
void r()
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
void g()
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);
void b()
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);
void off()
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
void unlock()

Step 3: Latch

Picture of Latch

There are many latch systems out there. I almost went with the chopstick between the cup hooks methods used in this project The problem with the chopstick method is that it must wait for the box to close before it can go back to sleep. I wanted int to sleep as soon as possible and waste no time waiting on an indecisive moment. So I combined the two ideas from that project and this one

In my latch, the servo is not connected to the latch. It simply pushes it and hold it open for a brief period. A clothespin style spring I bent from a paper clip keeps the latch down and locked at all times. You will have to mess with the tension of the spring so that it doesn't fight the servo too hard but still remains securely latched.

I used wood glue to join pieces of 1/4" dowel rods together and carved them with a dremmel to make the latch system. It is secured to the box with wood glue. 


pcook10 (author)2015-11-19

great lock i was planning on making this tho the only thought i have is that i won't be using the arduino so how would i get the code to work so i can change the pass code?

boompjes (author)2014-11-01

Hey , ryclmer!

Nice Instructable, I'm planning to make this project myself. But what library's did you include.

rclymer (author)boompjes 2014-11-03

#include <Servo.h>

#include <CapacitiveSensor.h>

#include <avr/sleep.h>

boompjes (author)rclymer2014-12-30

I can't find a download link for the "avr/sleep" library, could you give me a download link please.

rclymer (author)boompjes 2014-12-30

It think its a built in feature, no need for download.

boompjes (author)rclymer2014-11-04

Thanks rclymer

Audio Solutions (author)2014-12-24

Awesome! nice job!

bosko1978 (author)2014-01-22

thank you so much for doing this. I want to build this with my son. Can you please put up part numbers for some of the stuff? Especially the pots? Where did you get knobs like that?

rclymer (author)bosko19782014-01-22

Thanks so much, I'd be glad to help you find some of the same parts. Everything came from either ebay or amazon.

pots ~

knobs ~

button ~

servo ~

hnee4711 (author)2013-12-23

Those are Chinese Character, not Japanese. You also have it upside down in the photo. The words means incent dispensing device. So I assume this is a storage box that stores some form of incent dispensing device.

This is a link to a page with many pictures of antique units of what the original device inside might look like.

insomnikitty (author)hnee47112014-01-05

are they simplified characters? if not they could be either chinese or japanese (kanji). but yeah, upside down box for an incense burner.

hpb (author)2013-12-31

Very clever! how did you build the capacitive touch switch? i've been trying to get that working right for another project but its too erratic and touch input read have a high error rate.

rclymer (author)hpb2013-12-31

All the capacitive touch is taken care of in code. The library does all the hard work. I soldered a jumper to the nut on the screw to make contact with your finger. You will have to use the serial monitor and fool with the values the sensor returns and set a threshold that triggers the timer. If you are using a laptop, make sure it is plugged in. A laptop not grounded will give you inconsistent readings.

emerystora (author)2013-12-23

My 15 year old grandson has been teaching himself Japanese. He says the picture of the characters is upside down. The first one is "fragrant" and the second one can refer to several things. One is "sapling" So it appears that the box was for a plant with the "cover" on the bottom.

Arbalest! (author)emerystora2013-12-26

Not knowing Japanese I would have guessed that the symbol on top is "man with goatee" and the bottom symbol is "happy dancing".

srilyk (author)emerystora2013-12-23

My friend came to a similar conclusion -

I'm guessing that the "lid" here was actually the bottom of the box originally, hence the upside-down-ness of the characters.

batonas (author)2013-12-21

Excellent, I studied a little about code locks earlier and 3 dials with 10 digits gives you 1000 combinations, so you can crack it number by number in less than an hour :)
I've designed my own mechanical code lock, its still waiting in my sketchbook to be made some day :)

rclymer (author)batonas2013-12-21

Exactly right. It would be a hassle but it is quite crackable. I thought to add a 4th dial but decided it would be too cluttered and not really necessary since it is a gift for a kid. If I build one as an actual safe, it will absolutely have 4 dials. I think that makes for 10,000 combinations. Next time I will use rotary encoders for better accuracy. Thanks for the post.

batonas (author)rclymer2013-12-21

4 dials first number usualy 1 becouse the code is usualy a date :D the second digit's usualy from a non long past so its 0,9 or 8 you just decresed your cracking time to minutes :D

ARVash (author)batonas2013-12-21

Social engineering doesn't diminish real security. 4 digits is good enough for most locks.

alfredhenriksen (author)ARVash2013-12-23

I suggest a lockout as cellphones have, after tree wrong tries it locks itself for some hours. This only applies to the patient thief without a hammer, rock or saw. :) A better way to secure is to have a hardened steelframe inside of the woodbox, another lock, these three dials plus lockout code.

(When somebody tried to steal my bike I understood that security can't be one thing, it have to work like a chain or layers.)

...oh yes, thanks a lot for this instructables!
I doubt that I'll use this method, somehow it's easier to add a key and a lock instead of arduino... yes, I know, shame on me!

batonas (author)ARVash2013-12-21

if you want security keep it a secret, no one knows, no one wants.

spark master (author)2013-12-22

Kinda cool, but add a power input connection, so if the batts go dead, you can plug in a wall wart and power it up!

great Xmas gift for a kid!

rclymer (author)spark master2013-12-22

I thought about it but the battery should theoretically last for well over a year and the small pinhole should prevent you from every being locked out. Also, If he plugged in the wrong adapter, say a common12v adapter, it would destroy it, then we would require a voltage regulator, but then there will be dropout voltage and higher quiescent current consumption and would the defeat the battery saving code techniques. Batteries alone are the most efficient solution.

spark master (author)rclymer2013-12-23

Good thoughts fer sure, but if you have a work around , then it is not an issue. It is a very cool project. I made my own box when I was a kid, learned a lot from my mistakes. Now I want to make one with a tumbler system and carve the top and sides and maybe archane symbology for the numbers!!

again, nice box

Commercial safes have the batteries inside a detachable control panel.

Marko238 (author)2013-12-22

Nice work, I've been thinking to do something like this, don't have the box yet though. Is it possible to replace batteries from outside? Even though the batteries should last for decades, but how do you open it if they are depleted?

rclymer (author)Marko2382013-12-23

There are panel mounting battery compartments that would do that. If you watch the video, you will see I drilled a very small hole just big enough for a paper clip to push the latch open. The box is definite the hardest thing to find.

HeMa (author)2013-12-23

As Ozzie_G said the box is upside down. In Chinese the character on the bottom 香 (on the top of the box is right side up) means fragrant and 具 means tool, I imagine in Japanese it means box. The characters for Chinese and Japanese are mostly similar even if some of the meanings are slightly different.

spikec (author)2013-12-22

That's a really cool thing to build for a kid. Nice job!

rclymer (author)spikec2013-12-22

Thanks a lot. I hope he thinks it's as cool as everyone here has said it is.

cvbritton (author)2013-12-22

From the WikiPedia: Diode:

For silicon diodes, the built-in potential is approximately 0.7 V (0.3 V for Germanium and 0.2 V for Schottky).

rclymer (author)cvbritton2013-12-22

Thanks for input. That will save a lot of trial and error later on.

elvisjrteo (author)2013-12-22


iminthebathroom (author)2013-12-22

me likey!

rainbowbr (author)2013-12-21

This is an excellent instructable, just curious how much did it end up costing you?

rclymer (author)rainbowbr2013-12-21

I'm glad you like it. It costs me about $50 but that is also including the extra parts leftover. Everything but the box came from eBay or amazon. Here is a rough list of parts and prices
Box - $20
Button - $5
RGB LED - $1
Pots - $4
9g Servo - $4
ATmega328 - $3
PCB board - $1
Battery pack - $4
wire - $3

astral_mage (author)2013-12-19

i think u might wanna put the code that typed out into a library so pple can just down load it.

Ozzie_G (author)astral_mage2013-12-20

I didn't prove the store wrong. These characters are used in both Chinese and Japanese. (Japanese has additional character set)
My Chinese is very poor. The box may have contained incense or something that incense is used in. A ceramic container with holes in it through which the smoke can escape for example.
Did you attach the hinges, or did the box normally open in this way?
It looks as if the "box" was actually the cover and what you now use as a lid was a bottom.
So perhaps something pretty was standing on the bottom and could be covered by your box when not in use.

rclymer (author)Ozzie_G2013-12-21

Yes, I was thinking the same thing. The lid was probably was used as a platform. It came with a strap through the holes in the lid and you can see where they have worn out the finish in a V shape. To me, that confirms your theory.

rclymer (author)astral_mage2013-12-20

Yeah, that was the plan, I am getting an error when I try to upload it. So for now copy & paste is the best Ive got.

Skippy Phelps (author)2013-12-21

I found one problem, which is probably no big deal, but 4 AA's in series give off six volts not 4.5v. Great inatructable though!!!

rclymer (author)Skippy Phelps2013-12-21

Right you are, what a silly error. I forgot to mention that I am using lithium batteries that are 1.2v each so my output is 4.8v. Im not an expert but with 6V, because it exceeds what the ATmega is rated for, it may be a good idea to use a Shottkey diode to drop the it down to 5.6v. Thanks for catching that.

ASCAS (author)2013-12-20

Genius! BTW, how strong is the mechanical latch? I've been planning to make one of these but I had a hard time researching for an indestructible latch.

rclymer (author)ASCAS2013-12-20

Since its such an old box I haven't really given it a proper strength test because I think the box itself would break before the latch. The dowel rods are made of fairly soft poplar so it may not be indestructible, maybe using some stronger wood and a metal support around the lid would be a nice improvement. I made the latch with a steep angle to minimize collision with the lid.

Ozzie_G (author)2013-12-20

Nice little instructable.
What makes the box even more mysterious is that the Chinese characters are upside down. :-)
I am no expert but 香具 means something like an incense box.

rclymer (author)Ozzie_G2013-12-20

Very interesting. The antique store I picked it up at told a big tale of brining it back from Japan. Incense seems like a good fit for a box its size. Thanks for the post.

dclymer (author)2013-12-19

This would be a great application for my gun safe, sporting goods box, and fishing tackle ! I would never have to worry about my stuff getting pilfered again!
Good job

rclymer (author)dclymer2013-12-19

thanks dad, I think it may be me doing the pilfering though.

deb clymer (author)2013-12-19

Very Cool
Lauren's brother will love it!

About This Instructable




Bio: I burnt the cider.
More by rclymer:Super Secret Lock Box w/ Capacitive TouchUltrasonic Garage Parking Assistant with Arduino and an ATtiny85
Add instructable to: