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
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
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.
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";
}
}
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
For more detail: Very Simple Arduino Electric Lock
No comments:
Post a Comment