Instructables

Arduino Laser Tripwire

DSC02876.JPG
The Arduino is great, you can make it do pretty much anything you want.

I wanted a tripwire. This is just the circuit and the code, you can use it for quite a few things, like a trigger for a camera, or you could make it shut down your computer if someone crosses it.

When I have the time, I want to hook it up to an electric airsoft gun with a relay and have it shoot you when you break the beam. I suppose I'll add to the Instructable when that happens.

So let's start!
 
Remove these adsRemove these ads by Signing Up

Step 1: Components Needed

Picture of Components Needed
This is what you need for this project:

-Arduino
-10k Resistor
-Photo resistor (Practically any value will work, the program will just need to be changed slightly)
-Laser Pointer
-Jumper Cables
-Alligator clips

Step 3: The laser pointer

To control the laser pointer, I did this:

1) Remove the end cap and take out the batteries.
2) Inside there should be a spring, connect one of the alligator clips to this spring.
3) My laser pointer (and all of the others I have seen) have a completed circuit when the end cap is on, so I connected the other alligator clip to the bit of metal on the inside of the laser pointer.
4) Connect one of the alligator clips to GND, and the other to pin 4 (or any pin, so that you can control the laser).
5) Lastly, use masking tape to tape down the button so the laser pointer is always on.

Step 4: The Program

Here is the program I used.
Pin 4 is the laser pointer, pin 13 is the LED, and the Analog Pin 0 is the photoresistor.

void setup() {
pinMode(4, OUTPUT);
pinMode(13, OUTPUT);
}

void loop(){
digitalWrite(4, HIGH);
if(analogRead(0) < 750){
digitalWrite(13, HIGH);
} else{
digitalWrite(13, LOW);
}
}

This program is highly specialized to the room I'm sitting in right now, you will have to calibrate it to work in the lighting conditions you have. To do this, you must read the value of the photoresistor when the laser is hitting it. Then, measure it when the laser is not hitting it.
To do that, you can use this program, and then monitor the Serial Output.

void setup() {
pinMode(4, OUTPUT);
Serial.begin(9600);
}

void loop(){
digitalWrite(4, HIGH);
Serial.println(analogRead(0));
}

When the laser beam hit the photoresistor I had a value of around 850. When I stopped the beam with my finger, I had a value of about 700. So, I made the LED turn on when the value drops below 750 in my program, indicating the beam has been broken.

Step 5: Test! (and troubleshoot)

Run the program and see how it goes!
First off, you have to make sure that the laser pointer is on. If it is not, check the following:
-That the on button really is on.
-That you didn't connect the alligator clips the opposite way they should be. To fix this, change one from GND to Pin 4, and the other from Pin 4 to GND.

I hope this was mildly interesting!
I have a video of it in action below. Excuse the LED bargraph, I use it to display how many emails I have waiting for me and I didn't want to remove it...
TambanFantasy6 months ago

Hello, nice project. I just want to ask, if how can I integrate this one with a camera (webcam). When the laser is tripped.. It will take a photo and upload it directly. Need help.
kasisnu7 months ago
Hello. This worked great. I used it as a base and made the laser do a very basic strobe. I reduced the delay and at this point the strobe-effect isn't even visible. 

int flag=0;

void setup() {
pinMode(4, OUTPUT);
pinMode(13, OUTPUT);
pinMode(2, OUTPUT);


}


int checkStatus()
{
 
   if(analogRead(0) < 25)
   {
      digitalWrite(13,HIGH);    // Used pin 13 to debug. Not required for the final make. All references to pin 13 can be removed.
      return 1;          
   }                   // Light not found(:D)
   else
   {
      digitalWrite(13,LOW);
      return 0;          
   }                   // Light reaches uninterrupted
}
  
  
void setAlarm()
{
    digitalWrite(2,HIGH);            // pin 2 is used to show when a breach occurs.
    flag=1;
    loop();
   
}

void loop(){
 
  if(!flag)
  {
     digitalWrite(4,HIGH);
     delay(5);                            // This is to give the resistor a little time to react. You might not need this.
    
     if(checkStatus())
       setAlarm();
     delay(10);                                        //change delay here
     digitalWrite(4,LOW);
     delay(5);
     if(!checkStatus())
        setAlarm();
     delay(10);                                       // and here to get a custom strobe
   
  }
}


Thank You @Login258!
FlipFlop1 year ago
I think this is not good enough for security proposes unless the laser is modulated and the receiver knows the modulation frequency.
thanks worked great!

cclick11 year ago
I looking to do something like this for a project with 6 different lasers to trigger 6 different sounds from a wave or MP3 shield. Is it just the software I need to tweak or totally redo the hardware?
lhakim21 year ago
helo. i would like to request the circuit schematics. email me at luqmansemidin@gmail.com . thanks in advance :)
R. Butch1 year ago
Would this work with a variable light resistor instead of the photo resistor. (They might even be he same thing, I'm new to this type of thing).
hill3 years ago
 hey there thanx for this awesome tut but when i try to run the sketch in arduino its says "error: redefinition of 'void setup()'

and wont run

please help ?

thanx
Archive555 hill3 years ago

If you just copy and paste the code has there, it won't work.

void setup() {
pinMode(4, OUTPUT);
pinMode(13, OUTPUT);
}

void loop(){
digitalWrite(4, HIGH);
if(analogRead(0) < 750){
digitalWrite(13, HIGH);
} else{
digitalWrite(13, LOW);
}
}

void setup() {
pinMode(4, OUTPUT);
Serial.begin(9600);
}

void loop(){
digitalWrite(4, HIGH);
Serial.println(analogRead(0));
}

Those two seperate sections of code need to be combined, as thse are both programs in their own right. From memory it should be something similar to this:

void setup() {
pinMode(4, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}

void loop(){
digitalWrite(4, HIGH);
if(analogRead(0) < 750){
digitalWrite(13, HIGH);
} else{
digitalWrite(13, LOW);
Serial.println(analogRead(0));
}
}

Please not though that each of those segments of code were designed for a seperate task; one to simply trigger an LED when the beam is broken, the other to send data from the LDR to the computer so that Processing may be used. The combined code does both of these tasks, although you pobably don't need the serial transfer section if you had an error like that that you couldn't fix. Most of the people who will want to try this will be content with the first segment of code; that is, just turn on an LED or similar device when the beam is broken. The second piece of code is for more advanced users who wish to create a monitoring program in Processing (probably not you).

Hope this helped.
       -Archive

Hi, this sounds great and perhaps just what I'm looking for. I'm doing a project at university using Arduino and Processing and want to use a camera triggered by motion to produce an effect like the one shown below (by Magritte).
What I want to achieve is to have a computer screen using the mirror function in Processing and camera that is triggered by a person entering the space. Ideally the camera should track the person so that they can never see their own face in the mirror but that might be a bit ambitious for my skils / knowledge level at present.

Thanks in anticipation,

Frank
magritte.jpg
hey you should check out the website http://projectsentrygun.rudolphlabs.com/
from the motion and tracking thing. I bet you could modify his code for what your wanting to do.
Hi! This is a wicked LASER project. Actually you can make something very useful this circuit. You can make a LASER counter and use it for counting people or objects on a conveyor! And you don't even require an Arduino for it. There is a step by step guide on how to make a LASER trip wire counter in this site:

http://gallactronics.blogspot.in/2011/11/laser-people-counter.html

Thanks
cpoplawski2 years ago
Can someone add in the ability for it to tweet when the alarm gets tripped? That would make it sick!
VrIgHtEr4 years ago
it can be modified to be kind of self calibrating. Just a software thing xD. Turn on the laser, read the value, turn off the laser and read the value again, choose a threshold somewhere in between the two values, turn the laser back on and start the main loop
Another common technique is to do this continuously - deliberately strobe the laser (possibly so fast that PoV makes it look continuous) and alarm when you can no longer "see" your strobing. Then day/night variations, lights on/off, and even people waving torches around won't affect it.
I love the idea, I'm breaking out the old laser pointer now! :)
iEdd NoseyNick3 years ago
More importantly, people waving a laser around won't affect it. You can't simply hold a laser pointer on the LDR as you walk through the beam.

You're onto a very smart idea to make it frequency dependent. Then there would be a good reason to use the Arduino. (The project as it is can be done with a transistor, trimpot, couple of resistors, LDR and LED)
Interesting idea. 10x :D
notgeek2 years ago
What kind of Arduino should I get for this?
notgeek2 years ago
Where is the video?
NCGeek2 years ago
I think this is a great idea, and I have just the right application for it. Problem is, I am having trouble finding a photo resistor like the one in your video. I have some photo resistors I got from Adafruit, but they are tiny, and I am afraid I will have difficulty with allignment. Could you recommend where I could get a larger one, like you have?
JOBGG3 years ago
I personally think that an Arduino is overkill, one proably could do that with an LDR. Even the idea with a oscilator should be possible to implement without an arduino.
I do think that's a great instructable though.
I disagree... The Arduino allows you to do hundreds of different things JUST with this concept.
Hey, where could I get the Arduino thing? Could i find one on eBay?
MCUman3 years ago
I built a football trainer years ago that used IR emitters modulated at something like 35KHZ aimed at tuned receivers from Sharp at the same freq. There were 8, multiplexed in an array. Both emitters and receivers were placed in 2" tubes and placed 6' apart from each other, forming a 6' X 6' opening. The brain was a Motorola HC705J1A MCU that fed a main MCU HC705C8 over one I/O line. It worked very well in bright sun light. The fun part was the power usage was very low as only one IR led was ever ON at any given moment. I ran some tests and was able to get a distance of 20' separation outdoors using nothng more than run-of-the-mill IR LEDs. The trick was using those tubes.
betwys13 years ago
If possible add a weak lens as a beam expander, so the laser spot just covers the active area of the photo resistor. That will give much greater sesistivity, and will propbably ease even remove the need for calibration altogether.

Brian Whatcott
kellergrrl3 years ago
would an arduino NANO 3.0 work?
transuranic3 years ago
it looks like your using the uno.I guess ill use the uno to.
This was published in 2008.. the UNO was released 2 years after.. .It doesn't matter which board you use.
transuranic3 years ago
Does it matter wich arduino you use?
lemon rind3 years ago
He He... If someone could rig this so it shot the person with something (nerf gun? Paintball?) when set off, they would be a legend...
Ora5 years ago
Great idea! As an improvement, could you add a second photoresistor that just takes a reading of the ambient light in the room, and use that reading instead of having to calibrate the arduino?
DIY-Guy Ora3 years ago
Simple solution may not require additional electronics-
Place the sensor at the back end of a black tube to block ambient light.
Login258 (author)  Ora5 years ago
Oh geez that's genius! I didn't even think of that. Earlier I used a relay to shoot an electric airsoft gun with the Arduino, perhaps I"ll make a tripwire somewhere that shoots you when you cross it?
how could you do that? like:

if(analogRead(0) = analogRead(1)) {
digitalWrite(13, LOW);

it doesnt work though! :S but the principle is close right? lol
Login258 (author)  amando965 years ago
Well first of all, if you're comparing two values you would use '==' not just '='.

And I would turn on the light if they are within a certain percentage of each other, so it would be:

if(analogRead(0) - (.25 * analogRead(1)) < 0) {
digitalWrite(13, LOW);
}

Or at least something like that
Ora Login2584 years ago
I just completed a modified version of this. I modified the original code to check the value of the photoresitor with the laser on and then off, it averages the values, and then checks if the value of the photoresistor with the laser on is less than that value. If the beam is broken, the arduino triggers the button on a wireless doorbell using an optoisolator, which in turn chimes the door bell.
You think that that would work with a 2N3904? I've been wanting to do that for a while now but have worried about takin apart my airsoft gun, because I have taken apart the electric ones before and have had problems putting them back together with all the uncooporitive springs...
Login258 (author)  geeklord5 years ago
Yeah I don't see why it wouldn't. I'm sticking with a relay though (mainly because I don't have a 2N3904) Maybe you could just pull the trigger with a servo then
yeah, I'm having trouble with learning how to interface an arduino with RC servo motors.
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!