Introduction: Very Simple Arduino Electric Lock

This is a instructable for a very simple Arduino controlled electric lock.

The key idea here is to be very simple as this was more of a proof of concept prototype type of thing.

The Arduino is used as a switch to control the lock itself, and is set to interface with a Computer.

The Computer sends serial data to the Arduino in which allows the electronic lock to be opened.

The Computer itself allows many different ways of opening this lock such as just pushing a button, reading a bar code scanner, and even over Bluetooth with a Windows Mobile device.

I used this simple project as a fun way of learning the basics of a few different things,
such as Arduino programming, Bluetooth integration, Bar code scanners and Serial communication

Step 1: Parts

Well first you need a Arduino, i used a Diecimila but any type would work.

The lock i am using is La Gard ENV 1300 type lock, i bought like 6 of them for 10 bucks on EBay.
You can not use just any type of lock, like a regular door lock, it must be electronic based.

It needs to work in the following manner: Inside this lock is a deadbolt, now what keeps this deadbolt closed is a very simple electromagnet. When you put power through this electromagnet it allows the lock to be open. If it does not have this simple electromagnet inside then it will not work . A simple door lock that uses a key and pins and tumbler will not work.

I included a picture of the inside of the lock where you can see how it works: Power goes to the electromagnet which pulls back a pin that releases and frees a wedge. This wedge then allows the door to be unlocked.

Theoretically you could create your own electromagnetic lock, or use a simple motor or something but that is for a different instructable.

You will also need a basic transistor: I used a 2N2222 from radio shack

Now if you want to open it through other means than just the computer your need:

A Bluetooth phone, i am using a Touch Pro with Windows Mobile

A bar code scanner, i am using a Symbol CS1504

In the last picture you see a door knob, this door knob has a wooden square knob glued to the bottom to fit in the square peg on the lock, its used to open the lock.

Step 2: Arduino

The wiring of the Arduino is very simple.

Its just a very simple set up with a transistor. 2N2222 from radio shack
Now i tried it with a few resistors and was having some problems so i just went without them.
Feel free to correct me on that.

The transistor is connected as so:
The signal from the Digital port is connected to the transistors base.
The power from the Arduino is going through the lock back out and to the collector on the transistor
Then it is going out the emitter to the Ground on the Arduino

The code is very simple it takes any data from the serial port and sends signal to the port, delays then ends the signal.

Once again, very simple:

/*
Test to use serial port to open/close lock
*/
int inByte = 0;

void setup()
{
  //Start serial
  Serial.begin(9600);
  pinMode(3,OUTPUT);
}

void loop()
{
//check for connection
if (Serial.available() > 0)
  {
  inByte = Serial.read();
   digitalWrite(3,HIGH);
   delay(1000);
   digitalWrite(3,LOW);
 }
}

Its just like it looks, any serial data it picks up on that port it opens the lock for 1000 milliseconds.

Very Simple

Step 3: LockApp

Now i created a application and split it into parts:

Button - where you push the button and it sends data to the Arduino to open

Bar code - it access a bar code scanner data and checks for a specific code, if it see it it opens the lock

Blue Tooth - Using a WinMo phone it it picks up the correct data through the blue tooth serial connection it opens the lock

Settings - where you tell it what COM ports each device is using

Each one sends data to the Arduino in the same fashion,
It pulls the COM port from the settings menu,
opens a connection,
sends data,
closes port
Update status

Like so:
C#:

infoLabel1.Text = "OPENING";
try
 {
                SerialPort port2 = new SerialPort(lockCom.Text, 9600);
                port2.Open();
                port2.Write("open");
                port2.Close();
                for (int i = 0; i < 100; i++)
 {
                    infoLabel1.Text = "OPEN";
 }
                infoLabel1.Text = "LOCKED";
}
            catch (System.Exception exp)
{
                infoLabel1.Text = "CONNECTION PROBLEM";
}

So on the button Tab if you hit Open it run the above code.


Step 4: Barcode

Now on the Barcode tab, the code first calls the barcode scanner a Symbol CS1504

Motorola has a c++ SDK out for this model, but i dont feel like converting or dealing with it so i hunt down a C# library that is already done, i find: http://boss.bekk.no/display/BOSS/BarcodeLibrary

This library is very simple to work with:

try
            {
                BarcodeLibrary.BarcodeFunctions barcode = new BarcodeLibrary.BarcodeFunctions(barscanCom.Text);

                barcode.Interrogate();

                List scannedCodes = new List();

                scannedCodes = barcode.GetBarcodes();

                if (scannedCodes.Count != 0)
                {
                    TESTCODE = scannedCodes[0].Code;
                    barcode.ClearBarcodes();

                    if (CODE == TESTCODE)
                    {
                        bsLabel.Text = "ACCEPTED";
                        SerialPort port = new SerialPort(lockCom.Text, 9600);
                        port.Open();
                        port.Write("open");
                        port.Close();
                        for (int i = 0; i < 100; i++)
                        {
                            infoLabel2.Text = "OPEN";
                        }
                        infoLabel2.Text = "LOCKED";
                    }
                    else
                    {
                        bsLabel.Text = "DENIED";
                    }
                }
                else
                {
                    bsLabel.Text = "NO CODES DETECTED";
                }
            }
            catch (System.Exception exp)
            {
                bsLabel.Text = "Barcode Scanner Problem";
            }

It calls the Scanner and retrieves JUST THE FIRST CODE saved on the scanner (i was to lazy to search through them all) and once it picks it up it deletes all the saved codes.

It then compares and if it is valid it uses the previously explained code (to lazy to make it into a function) to open the lock.

Very easy.


Step 5: Bluetooth and BlueLock

Now its Bluetooth's turn, i created a very simple program for Windows Mobile that asks for the COM ports for bluetooth and sends data to it when you hit send.

Once you hit send on this code, called blueLock
you then hit Scan and Open on the PC and it will scan for the data from the device and open the lock.

blueLock Windows Mobile code:

public Form1()
        {
            InitializeComponent();
            string[] ports = SerialPort.GetPortNames();
            comboBox1.Items.Add("NO PORT SELECTED");
            for (int i = 0; i < ports.Length; i++)
                comboBox1.Items.Add(ports[i]);
            comboBox2.Items.Add("NO PORT SELECTED");
            for (int i = 0; i < ports.Length; i++)
                comboBox2.Items.Add(ports[i]);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SerialPort port = new SerialPort(comboBox1.SelectedItem.ToString(), 9600);
            port.ReadTimeout = 1000;
            port.Open();
            port.Write("Test");
            port.Close();
        }

the Bluetooth Code from lockApp:

private void btButton_Click(object sender, EventArgs e)
        {
            btLabel.Text = "Scanning";
            try {
            SerialPort port = new SerialPort(btInputCom.Text, 9600);
            port.Open();
            blue = port.ReadByte();
            port.Close();
            if (blue != 0)
            {
                btLabel.Text = "SUCESS!";
                SerialPort port2 = new SerialPort(lockCom.Text, 9600);
                port2.Open();
                port2.Write("open");
                port2.Close();
            }
            else
            {
                btLabel.Text = "ERROR";
            }
            }
            catch (System.Exception exp)
            {
                btLabel.Text = "Barcode Scanner Problem";
            }

        }

Step 6: Ending

The idea behind this was simplicity as you hopefully as noticed to get a better understanding of Arduino, Bluetooth, Barcode, Serial Connections and hardware communication