[Average Difficulty]Mouse-Controlled Laser-Turret

oooh! Lasers :slight_smile:

Ok, here is what I did: (yes pictures will follow)

12[ch8364]/18$ Computer-controlled laser turret.

(mini-tutorial)

Parts needed:

  • 2 Servos standart size (each 5[ch8364])
    I picked the cheapest I could get, though not very accurate, accurate enaugh for playing around. For accuracy I suggest some very big digital Servos. --> bigger means bigger gear --> means less room between cogs --> greater accuracy.

  • empty CD-spindle (for 50 CDs) (free)
    Great material to play with, soft enaugh to be cut with a sharp knife.

  • cheapest laserpointer you can get (2[ch8364])
    The cheaper ones have the advantage of not having a driver chip which can get in the way. Mine just had a resistor soldered to one pin of an encapsulated diode. The Battery was a 4.5V battery so this is ideal to connect to a PWM pin of the arduino. Look for a keyring laserpointer that sits preferably within a plastic dogtagish kind of thing. The ones in metal-tubes are sometimes hard to get out.

You want to have something that looks like this: http://cgi.ebay.com/1-x-650nm-red-5mW-Laser-diode-Module-DOT-3VDC-pointer_W0QQitemZ150351287067QQcmdZViewItemQQptZLH_DefaultDomain_0?hash=item2301a2931b

  • bamboo tube (well...)
    ok the bamboo is just a tube to get the diode in (looks better, and no stray light), I just had some lying around, you could also use the tube from an old pen or whatever.

  • cable ties (they make everything better)

-LEDs +resistors (optional)

  • cables (caugh)

  • Arduino + Processing IDE

Start:

Cut a hole into the CD-spindle, the size of your X-Servo. The Servo has a lug where you can put some cable-ties through to fasten it, I used some screws I had lying around but really makes no difference.
Use cable-ties and some tape to fix your Y-Servo on top of the other one.
Put your laserdiode into a tube and attach the tube to your Y-Servo.

Voila finished.

In my construction I added a red LED that is connected to +5V and GND on the Arduino --> Power indicator.
A red and a blue led glued into a white tube (makes exellent purple light) to indicate if the laser is running and whether its firering or not.
A safety plug consisting of stereo-chinch plug.
An optional external power-supply for the servos, controlled with a jumper.

And now the code for Arduino and processing:

//Arduino:


//*** comments ****************
//BLACK cable --> GND
//RED cable   --> +5V
//PURPLE      --> 11
//BLUE        -->  7
//ORANGE      -->  8
//GREEN       --> 12
//GREEN-BLUE  -->  9
//YELLOW-RED  --> 10
//
//*** define libraries ********
#include "Servo.h"

//*** define Servos ***********
Servo ServoX;  //BLUE-green cable
Servo ServoY;  //RED-yellow cable

//*** define gear *************
//Laser
int LASER;  //PURPLE cable

//LED's
int LEDblue;  //BLUE cable
int LEDred;  //ORANGE cable

//Control

int FIRE;

int fire;


//Safety-Switch
int SafeS;
int safes;

//*** Variables ***************
//LASER
int LASmW;
int LASstate;
int LASlow;
int LAShigh;

//Servos
int X;
int Y;


//--- SKETCHING *#+-*#-+-#-+-#-#

int a,b,c,d,e,f;
int count1,count2;
int LASswitch;
byte posXY[3];


void setup(){
//--- Serial Setup -----------
  Serial.begin(9600);

//--- Servo attach ------------
  ServoX.attach(9);
  ServoY.attach(10);

//--- Initialise gear ---------
//Laser
  LASER = 11;

//LED's
  LEDblue = 7;
  LEDred = 8;

//Control
/*
  UP = 2;
  DOWN = 5;
  LEFT = 6;
  RIGHT = 3;
  FIRE = 4;
*/

//Safety-Switch
  SafeS = 12;


//--- Initialise variables ----
//LASER
  LASmW = 0;
  
  LASlow = 20;
  LAShigh = 200;

  
//Servos
  X = 90;
  Y = 90;

//--- Control -----------------


//--- Safety-Switch -----------
  
  pinMode(SafeS,INPUT);
  
  digitalWrite(SafeS,HIGH);
  

//--- Laser attach ------------
  pinMode(LASER,OUTPUT);
  pinMode(LEDblue,OUTPUT);
  pinMode(LEDred,OUTPUT);
  
//--- SKETCHING *#+-*#-+-#-+-#-#

count1 = 0;




}

void loop(){
//--- SKETCHING *#+-*#-+-#-+-#-#


/* serial input */


  if(Serial.available() >= 2){
    
    switch (Serial.read()){

    case 'x':
      posXY[0] = Serial.read();
      break;
      
    case 'y':
      posXY[1] = Serial.read();
      break;
      
    case 'b':
      posXY[2] = Serial.read();
      break;

    }
  }


X = posXY[0];
Y = posXY[1];
fire = posXY[2];

  


//### Read Safety-Swtich #####
safes = digitalRead(SafeS);

//### Process Safety-Switch ##

if(safes == 1){
  LASswitch = 0;
  if(count2 <= 1000){
    digitalWrite(LEDred,HIGH);
    digitalWrite(LEDblue,HIGH);
  }
  else{
    digitalWrite(LEDred,LOW);
    digitalWrite(LEDblue,LOW);
  }
  if(count2 == 2000){
    count2 = 0;
  }
  count2++;
}



//--------------------------------
  
  
if(safes == 0){
  LASswitch = 1;

  digitalWrite(LEDblue, ! LASstate);
  digitalWrite(LEDred,LASstate);
  LASstate = LASmW;  
 
  if(fire == 1){
    if(count1 >= 300){
        LASmW = LAShigh;
        digitalWrite(LEDblue, HIGH);
        digitalWrite(LEDred, HIGH);
    }
    if(count1 < 300){
      LASmW = LASlow;
      digitalWrite(LEDblue, LOW);
      digitalWrite(LEDred, HIGH);
    }
    if(count1 == 400){
      count1 = 0;
    }
    count1++;
  }
}

//-------------------------------------

if(fire != 1){
  LASmW = LASlow;
}


//### Servo write ############
  
  constrain(X,0,180);
  constrain(Y,0,180);
  
  ServoX.write(X);
  ServoY.write(Y);

 
//### Laser write ############

  
  analogWrite(LASER,(LASmW * LASswitch));

  
}
//Processing


import processing.serial.*;
Serial Arduino;

byte[] posX = new byte[2];
byte[] posY = new byte[2];
byte[] button = new byte[2];

char X;
char Y;
char B;

void setup(){
  size(360,360,P2D); 
  colorMode(RGB, 360);
  background(0);
  
  println("Available serial ports:");
  println(Serial.list());

  Arduino = new Serial(this, Serial.list()[0],9600);

  
  
stroke(255);
line(180,0,180,360);
line(0,180,360,180);


X = 'x';
Y = 'y';
B = 'b';

}

void draw(){

  posX[0] = byte(X);
  posX[1] = byte((360 - mouseX) / 2);
  
  posY[0] = byte(Y);
  posY[1] = byte((mouseY) / 2);
  
  button[0] = byte(B);

Arduino.write(posX);
Arduino.write(posY);
Arduino.write(button);

  if(mousePressed == true){
    
    button[1] = byte(1);
    
    point(mouseX,mouseY);
  }
  else{

    button[1] = byte(0);
  }


}

cheers!

intresting :slight_smile:

would be kool to see this running direct from a mouse (ps2) connected to the arduino or a touch pad, or even analog stick :slight_smile:

cut out the middle man as it were :wink:

thanks :slight_smile:

Actually I had this thing wired to a touch pad, and a simple button-control, but decided it would be much cooler to control this via the PC^^

No idea -Waiting for the pictures -I have the parts needed.

Sounds cool.

I understand basically what you did, but I too would love to see the pictures (and hopefully a video of it working?) ;).

first picture:

Good boy!

You succeeded in not understanding what I wrote combined with mocking about it.

OK so you just exposed yourself .You are the one .
Notice you did not answer either

sigh

Good O so what do you do with it ? Shoot spots on the wall?WoW.

Yes you got the idea correct, since the title of my post says [average difficulty] and I wrote that this is a quick tutorial, guess what? It's meant to be a tutorial! And for what? For people who are new to programming/processing/arduino. In the process of creating this you can learn how to interface arduino with processing and a mouse. Which consequently means you can try to build more complex/better things than before.

I'm wondering how much power it consumes and will it run on a battery for long.

For what? Its hooked up to a computer for the interface, what's the point of running this on battery?

My laser which looks identical to yours

Hmm where did you see my laser? It's not visible in the picture I made.

takes about three amps

Take a look at my initial post where it says: "get a cheap laserpointer" and not "get a handheld doomsday device"

If you don't have any useful questions please save yourself (and me) the time and don't post anything.

cheers

A laser taking 3 amps?

What the hell kind of laser did you get? Are you trying to build a laser-saw? 3 amps is nuts... I've played with a few lasers... a pistol mounted laser only puts out from 60ma to 100ma.. and those are fairly strong.

Yeah Ty.. geeze! All this negativity.. :stuck_out_tongue:

Have you thought about making it wireless? Plug it into a wall outlet and control it via RF link and put it in your lawn, lol, and time how long it takes for the police to arrive. :smiley:

time how long it takes for the police to arrive.

You could probably make the Arduino do that too! :smiley:

I was thinking the exact same thing lmao!

Not the lawn but the roof! To get rid of that darn pigeons :wink:

Well long term goal is to make it aim at flies or mosquitos, but its a long way until then, since I don't have any idea how to detect mosquitos. I also have other projects I'm currently working on so there will be no progress on this any time soon.

cheers!

Such knowledgeable chaps . Full of cynicism but low on brain.
Some don't work with Lasers much.
Another gives a URL and forgets.

If you can't take valid criticism then don't claim achievment, you'r not finished yet . Its a fashion these days to pat yourself on the back before its finished but it still ain't right.

Some of the posts on Exhibition are simply brilliant . Others mundane,some a pain

If you can't take valid criticism then don't claim achievment, you'r not finished yet . Its a fashion these days to pat yourself on the back before its finished but it still ain't right.

Um...It kind of is done..

The goal was apparently to create a Mouse-Controlled turret with a laser pointer, and the OP has succeeded. Personally, having no knowledge of Processing, I find it fairly impressive. It is listed as "Average Difficulty", so you can hardly expect perfection.

You can't honestly tell me that you've never completed a project, and then realized it would be cool to add something else.. That's simply what the OP was implying; ideas tend to hit you whilst building (or afterward), and those are just improvements upon the original finished product.

Thanks :slight_smile: Thats the whole point about this, as an arduino starter you are glad if you can find something of average difficulty, to take your knowledge just a bit further.
The hardest part for me was to figure out how to pass multiple variables to arduino, since the "control-led-brightness-with-mouse"-tutorial explains this only with one variable.

cheers

I think a lot about pan/tilt devices and your CD case idea is very good! I haven't seen that before. It's unfortunate that some people were overly critical, but I think they're just frustrated by the photo which makes it difficult to appreciate your work. But the perfect is the enemy of the good and what you posted is better than nothing for anyone interested in pan/tilts and lasers. Good work! And THANK YOU for taking the time to share it.

Im new to arduino but have been eagerly learning the material. My question is how do i run the processing code. is it with my computer or what.