You Are Here: Home » AVR ATmega Projects » Secret Knock Detecting Door Lock

Secret Knock Detecting Door Lock




Secret Knock Detecting Door LockProtect your secret hideout from intruders with a lock that will only open when it hears the secret knock.

This started out as a bit of a joke project, but turned out to be surprisingly accurate at judging knocks. If the precision is turned all the way up it can even detect people apart, even if they give the same knock! (Though this does trigger a lot of false negatives, which is no fun if you’re in a hurry.)

It’s also programmable.  Press the programming button and knock a new knock and it will now only open with your new knock.  By default the knock is “Shave and a Haircut” but you can program it with anything, up to 20 knocks long.  Use your favorite song, Morse code, whatever.

Maybe a video will explain it better:

Important Notes:
(I hate to even have to say this, but since someone’s going to say it, I’ll say it first:)
1) This is for entertainment purposes only.  Really.  This decreases the security of your door by adding another way to unlock it, and it makes your unlock code known to anyone who can hear.    If you put this on your door, be sure to carry your key too.  The batteries might die, the suction cups might fail or you might forget your knock.  Don’t complain to me if someone imitates your knock and steals all your stuff, you’ve been warned.

For obvious improvements to safety, security and whatever, see the final page of the Instructable.

2) This is not a project for a beginner!  Read through it carefully and be sure you understand it before you start!  I will not take time to answer questions that are already in the instructions or from people who have gotten in over their head.

(If you think this project is too complex you might go here and sign up for the kit mailing list.  The kits will be much more simple than this.)

Sorry about that.  Now that that’s out of the way, lets get to work.

Step 1 Tools, Supplies, And Skills

(If this all looks too challenging, you might consider signing up to the kit mailing list which, when available, will be much easier and a lot more simple.)

Time:

This project will take several hours to complete.

Skills:

To complete this project you should be able to do the following:
These are important! If you’re not sure if you have these skills, read through the entire Instructable and make sure you understand it before starting anything! 

  • Basic soldering.
  • Read a basic schematic.
  • Basic knowledge of microcontrollers (I’ll be using the Arduino.) This means you know what one is, how to upload data to it, and how to make minor changes to code.
  • Improvisation.  There are many ways to do this project, and you will have to make changes based on how your door and lock works.

Tools:

  • Drill (ideally a drill press) and an assortment of drill bits.
  • Saw capable of cutting PVC pipe. (ie: Pretty mcuh any saw.)
  • Soldering iron and solder.
  • Pliers.
  • Screw drivers.
  • Heat-shrink tubing and/or electrical tape.
  • Wire stripper.
  • Vice.
  • Safety glasses.
  • Gloves.

Other things you might find handy:  a ruler/tape measure, a multimeter, a breadboard, some tape, a magic marker, sand paper, files, hot glue.  And if you’re like me a well stocked first aid kit.

Materials:

(The links are for example only, I don’t necessarily recommend or have experience with any of these vendors.  Feel free to suggest other sources in the comments.)

Electronics:

  • 1  Arduino  Duemilanove (Or compatible. Or really any microcontroller with at least 1 analog input and 3 digital outputs.) Buy from here, here, or here.  And other places.
  • 1  5v Gear reduction motor.  The higher torque the better.  Here’s a good one. (14-16mm diameter is ideal because it fits inside of 1/2″ PVC pipe.) I recommend one with at least 15oz/in (11 N-cm) of torque at 5v to turn a basic lock. 1
  • 1  Piezo speaker. (30mm)  similar to this. You can use larger or smaller ones, smaller will be less sensitive.
  • 1  SPST momentary pushbutton. (normally “off”)
  • 1  Red LED
  • 1  Green LED
  • 1  NPN Transistor P2N2222A like these or these (or similar).
  • 1  Rectifier Diode (1N4001 or similar) this or this will do.
  • 1   2.2k ohm resistor (1/4 watt)
  • 1   10k ohm resistor (1/4 watt)
  • 1   1M ohm resistor (1/4 watt)
  • 2   560 ohm resistor  (Or whatever will run your red and green LED’s at 5v. How to tell.)
  • 1  small piece of perf board.  5×15 holes or longer. (example)
  • 1 9 volt battery clip and 9v battery.    (Or any other way you can think of to get 7-12v to the Arduino.  A wall adapter like this is a great option so you don’t have to worry about batteries running out.  6 AA’s would be another option for longer lasting power, but it will bring down the suction cups.)
  • Connector wire.  20 gauge or narrower flexible wire in a number of colors for connecting the electronics together.
It’s also a good idea to have a breadboard for setting up and testing the circuit before you solder it.  We’ll be doing this in step 3.

 Case: 

(These items are to make the project as pictured.  Feel free to build a completely different and more functional case.)

  • 20″ PVC  Pipe 1/2″.
  • 3   right angle 1/2″ PVC connectors.
  • 1   5-way 1/2″ PVC connector. (example)
  • 2   1/2″ PVC end plug.
  • 3   1 1/2″ suction cups. (Available at hardware stores and craft centers.)  NOTE: If your door is unsuitable for suction cups then replace these with three end caps and you can use adhesive strips or screws to mount the lock.
  • 6″  of 1/2″ wide by 1/64″ thick metal strip (steel, tin, copper, etc.) (available at hardware, craft, and art supply stores.)
  • 4.5″ of 1″ wide metal sheet, 1/32″ thick (steel, tin, copper, etc.) (available at hardware, craft, and art supply stores.)
  • 2  3/32″ x 3/8″ screws with nuts. (1/8″ will work too if you can’t find the smaller ones.)
  • 2  1.6M (metric) 16mm screws. Ideally with countersunk heads if you can find them. (For securing the motor.  Check your motor specs to see what screws it needs. One motor I tried used 1.6M, the other 2M.  You’ll probably have to buy long ones and cut them to length.)

1 If you have a torque meter or a torque wrench, apply it to your door lock to get an idea of what torque it will take to open your lock. Use a online conversion tool to convert between foot/pounds, N/m, etc.

Step 2 Program The Arduino

This section assumes that you know how to connect your Arduino microcontroller to you computer, compile and upload a sketch. If you don’t know how to do that you probably shouldn’t be doing this Instructable. But spending some time on this page and doing some of the examples and tutorials there might bring you up to speed.

We’re going to upload our sketch before doing any of the electronics so we can test the electronics as we go.

#1: Download
Download the file secret_knock_detector.pde at the bottom of this section and copy it to your sketchbook. (Or view the text and cut and paste it into a new sketch.)

(Tip: If the name of the downloaded file is something like “BARS5HS13H8SW.tmp” simply rename it to secret_knock_detector.pde. and you’re good to go.)

#2:
Open the sketch and compile it.  It should compile properly the first go, but it’s good to be sure.

#3:
Connect your Arduino and upload the sketch.

If you have any trouble, check the troubleshooting section at the Arduino site.

Code overview:
For the curious, here’s a look at a few bits of code if you’re interested in tinkering:
(If you’re not curious, go to the next section)

about Line 28: const int threshold = 4;

This is the sensitivity of the knock detector.  If you get a lot of noise, raise this (up to 1023), if you’re having a hard time hearing knocks you can lower it (as low as 1).

about Line 29: const int rejectValue = 25;
about Line 30: const int averageRejectValue = 15;

Both of these are used to determine how accurately someone has to knock.  They are percentages and should be in the range of 0-100. Lowering these means someone must have more precise timing, higher is more forgiving.  averageRejectValue should always be lower than rejectValue.

Settings of about 10 and 7 make it hard for two people to knock the same knock even if they know the rhythm. But it also increases the number of false negatives. (ie: You knock correctly and it still doesn’t open.)

about Line 31: const int knockFadeTime = 150;

This is a crude debounce timer for the knock sensor.  After it hears a knock it stops listening for this many milliseconds so it doesn’t count the same knock more than once.  If you get a single knock counted as two then increase this timer.  If it doesn’t register two rapid knocks then decrease it.

about Line 32: const int lockTurnTime = 650;

This is now many milliseconds we run the motor to unlock the door.  How long this should be depends on the design of your motor and your lock.  It’s okay if it runs a little bit long since I’ve designed a simple slip clutch into the design, but it’s better for all the parts if it doesn’t run too much.

about Line 34: const int maximumKnocks = 20;

How many knocks we record.  20 is a lot.  You can increase this if your secret hideout is protected by devious drummers with good memories.  Increase it too much and you’ll run out of memory.

about Line 35: const int knockComplete = 1200;

Also known as the maximum number of milliseconds it will wait for a knock.  If it doesn’t hear a knock for this long it will assume it’s done and check to see if the knock is any good.  Increase this if you’re a slow knocker.  Decrease it if you’re a fast knocker and are impatient to wait 1.2 seconds for your door to unlock.

about Line 39: int secretCode[maximumKnocks] = {50, 25, 25, 50, 100, 5…..

This is the default knock that it recognizes when you turn it on.  This is weird rhythmic notation since every value is a percentage of the longest knock.   If you’re having a hard time getting it to recognize “shave and a hair cut” change this to {100,100,100,0,0,0...  and a simple sequence of 3 knocks will open it.

Debugging:
about Line 51:  Serial.begin(9600);
about Line 52: Serial.println("Program start.");

Uncomment these lines to see some debug info on the serial port.  There are a few other lines of debugging code set throughout the rest of code that you can uncomment to see what’s going on internally.

Be sure to set your serial port to the right speed.

The rest of the code is commented so you can see how it works but you probably won’t need to change it if you aren’t changing the design.

Step 3 Lay Out And Test The Circuit

Lay Out And Test The CircuitWe’re going to breadboard the electronics to make sure everything works. If you never make mistakes you can skip this step.

I’ve provided both a schematic and a layout diagram for the breadboard. Follow whichever one you’re the most comfortable with.

We’re going to go slowly and check as we go.

#1: Wire the Piezo Sensor
Solder a pair of 12″ (30cm) leads to the Piezo speaker.  Connect it between Analog pin 0 and the ground.  Also attach the 1M ohm resistor between Analog pin 0 and the ground.

Test: With your Arduino plugged into your computer (via USB or Serial cable) and open the Serial Montor window. (That’s the button furthest to the right at the top of the Arduino development environment.)   With the Arduino powered on you should see the text “Program start.”  Tap the piezo speaker and you should see the text “knock starting” and “knock” each time you tap it.  Stop for a second or two and you’ll probably see “Secret knock failed” or “Door unlocked!”

If you don’t see anything or see junk, make sure your serial port is set to 9600 baud and reset the power on the Arduino.  If you’re sure it’s right, then try tapping Shave and a Haircut (Don’t forget the two bits.  See the video if you don’t know it.) and see if you can get the “Door unlocked!” message.

If you get knock messages without tapping it may be too sensitive.  If so you’ll need to edit the sketch.  Around line 27 raise the value of threshold.  This can be raised as high as 1032 if you have a very sensitive detector.

const int threshold = 3;  // Minimum signal from the piezo to register as a knock

Once you have it working the way you want it you can comment out (or delete) the lines that start with Serial…  We shouldn’t need them any more.

#2: Wire up the LEDs
Lets wire up some LEDs so we don’t have to use a serial cable to see what’s going on.

Connect the red LED to digital pin 4 and green LED to digital pin 5 with their corresponding 560* ohm resistors in line.

Test: If you power the circuit the green LED should light.  If not, check your connections and make sure the LED is the right way around.  Every time you tap the green led should dim.  After tapping the correct sequence the green led should blink a few times.  Tapping the wrong sequence should blink the red one.

If none of this happens, check the polarity on your LEDs and all of your connections.

Your LEDs might require different resistance.

#3: Wire the programming button
Solder 8″ leads to the button.  Connect one side of the button to +5v.  The other pin on the button connect to digital pin 2 and, with a 10K resistor to the Ground.

Test: Apply power.  When you press the button the red light should come on.  Hold down the button and tap a simple sequence. When tapping while programming both LEDs should blink.  When you’re done the pattern you just tapped should repeat on both lights.  After playback is complete, the new knock code is saved and the lights wil alternate red and green to tell you so.

#4: Wire in the motor
Solder 8″ of leads to the motor and follow the design/schematic.  Be sure to get the diode going the right way and you might want to check the pins on the transistor to be sure they match the diagram. (Some transistors might have the pins in different order.)

Test: Power the circuit.  Tap the default “Shave and a Haircut” knock.  The motor should run for about half a second.  If not, check your connections as well as the polarity of the diode.

Extra Troubleshooting tips:
1) If the motor turns very weakly the diode might be reversed.

2) If you need more power on your motor make the following circuit change: Move the wire that goes from the motor to +5v to the Vin pin on the Arduino.  This will supply the motor with 9v (or whatever voltage you’re supplying to it.)

Tip: Check which way the motor turns.  It should turn the same way as you turn your deadbolt lock to unlock it.  If not, switch the motor’s leads which should reverse the motor.

Congratulations!  You have  a working secret knock detector!

Now we have to put it into something more permanent that we can stick on our door.

Step 4 Prepare The Case

If you’re making your own case you can skip this step. Otherwise grab your PVC and saw and lets get cracking.

Important!
We’re just testing for fit here.  Don’t glue or fasten anything yet!

#1: The Button mount
Take one of the PVC end caps and drill a hole through the center appropriate for your push button. For my button that was 3/8″. Secure the button in the hole.

Plug this into one of the 4 radial holes in the 5-way connector.  (ie: not the one that points down.)

#2: The Motor mount
Take the other PVC end cap and drill a hole big enough for the shaft of your motor to pass through.  You might also need to make it even bigger if your motor has a bearing that sticks out.

Depending on the design of your motor you may want to sand down the thickness of the plug so that you have more of the motor shaft to work with.  Test the fit by placing the motor through the back of the plug.  If it’s too tight you might have to sand/file/grind the inside of the plug so it will fit.

Use a paper template to place the holes for the fastening screws, drill the holes and attach the motor to the plug. (In my case using the two 2M screws.)  Countersink the screws if possible.

Plug this into the “down” facing hole on the 5-way connector.

#3: The ‘arms’
Cut one piece of PVC pipe 5 inches long.  We’re going to call this the “long arm”.  Put a right angle connector on one end.  Plug the other end into the 5-way connector opposite the button.

Cut two pieces of PVC pipe two inches long.  We’ll call these the “short arms”.  Half way along their length drill a 1/4″ hole through one side.  Put right angle connectors on one end of each arm.  Plug these into the two remaining holes on the 5-way connector.  You should really start to see it take shape.

#3b: A Few Extra Holes

with a pencil or marker draw a line down the center of the top and the bottom of the long arm.  On the top side, make marks for two holes, one 3/4″ from the 5-way, and another 1 1/2″ from the 5-way.  Drill a 3/16 (5mm) hole at each of these places.  This is where our LEDs are going.

Also make a line along the bottom where the long arm connects to the 5-way.  Using a saw, cut a short way through the pipe, from the bottom up, until there is about a 1/2″ hole into the pipe. (this is where the spring for our detector will attach.  Also on the bottom, drill a 1/8″ hole 1/4″ further along the pipe (Away from the 5-way).   We will thread the sensor’s wires through here.

#4: The ‘legs’
These are the parts that attach to the door.  You may not want to cut these yet,  The length depends on the design of your door lock, the length of the shaft on your motor and the final design of the Lock Turning Clamp in the next step.  All three of mine were 2 5/16″ long, but you’re better off cutting them long and trimming them down to size later

If they’re too long the motor won’t reach the lock to turn it.  If they’re too short the suction cups won’t reach the door.

When you do cut these, hot glue the suction cups in one end and stick the other ends in the right angle connectors on the ends of our legs.

Step 5 Make The Lock Turning Clamp

In this section we make the all important part that connects the motor to the lock.

(This is a reasonably clunky way to do this, but it’s simple and cheap. If you think of a better way, please mention it in comments.)

What we’re making is a clamp that attaches to the D-shaft of our motor and fits easily over the lock latch so that it can turn the lock.  It attaches securely to the motor, but there is some give in it so that it can slip if it finds its self between a rock and a hard place. (Which we prefer to wrenching the project to pieces.)

Drilling the holes:
First take the piece of metal that’s  4 1/2″ long and 1 1/4″ tall. and cut it in half so you get two 2 1/4″ pieces.

Tape them together, mark each side so you know which side is “out”, and mark one of the long edges as “up”.  This will all help you keep everything lined up as you go.

Measure and mark the center line from top to bottom.  1/2″ each side of this center line and 1/4″ from the top mark holes for drilling.

Drill 1/8″ holes at these marks.  Marking the points with a punch, or giving it a whack with a hammer and nail will make your drilling more accurate.

The edge with the holes is the side that attaches to the motor.

Bending the metal
Measure the width of your lock latch (the narrow way)  and divide by 2. This distance is how much zig we’re going to bend into each piece of metal.  Mark this zig distance along each strip.  Bend one piece so it zigs to the left, the other so it zigs to the right.  Make sure that the screw holes at the top of the pieces stay lined up and the bends don’t keep the pieces from meeting at the top.

Finishing and sizing

For this part you’ll need your motor, the two 1/8″ screws and a couple matching nuts.

Put the screws through the holes in the top of the plates so it makes an upside down “Y” (sort of) and place the motor shaft in the top between the screws.  Screw nuts on each side and tighten until it’s firmly (but not really firmly) attached. The small amount of give between the metal and the shaft will let the motor spin if it meets too much resistance.  (Rather than breaking something important.)

Check the other end for fit over the lock.  It should fit a little loosely over the lock latch.  Not so firmly that it’s clamped tight, but not so loose that it can turn without turning the lock.  Adjust the bend of the flanges if you need to.

After you’ve got the adjustments right, tighten another nut onto the end of the screws and tighten them up against the first ones.  This will help lock them in place.

For more Detail: Secret Knock Detecting Door Lock

Leave a Comment

You must be logged in to post a comment.

Read previous post:
Seamless Announces 500 Unit S-XGen Order

Las Vegas, NV (PRWEB) March 26, 2008 Seamless Wi-Fi, Inc. (OTCBB: SMWF) reported that it has received a new 500...

Close
Scroll to top