Project in progress
Tutorial Arduino Mini Laser Turret Control

Tutorial Arduino Mini Laser Turret Control © CC BY-NC

We show you how to build a 2 axis laser turret aimed with a joystick.

  • 12,970 views
  • 5 comments
  • 37 respects

Components and supplies

A000066 iso both
Arduino UNO & Genuino UNO
×1
KY-008 Arduino Laser
×1
Servos (Tower Pro MG996R)
×2
Analog joystick (Generic)
×1
11026 02
Jumper wires (generic)
×1
Arduino Power Supply
×1
Electrical Tape
×1

About this project

See our full tutorial here. Visit BreakoutBros.com for more.

In this tutorial we will be making a Joystick Laser Mini Turret. The joystick will control the laser on a turret and it will be able to move in 2 directions while turning on or off the laser. We are not using a burning or cutting laser for this tutorial but please be careful not to aim the laser at anyone's face.

We got the inspiration to create this Laser Turret when combining parts from the Elegoo Uno R3 Starter Kit* and the 37 in 1 Elegoo Sensor Kit. We wanted to create something with a joystick control and once we saw the laser, we couldn’t help ourselves.

*Check out our review of the Elegoo Uno R3 Complete Starter Kit

To start you will need:

  • Arduino(or equivalent)
  • 2 x servos
  • Wires
  • Arduino  Power Supply
  • Electrical Tape

Wiring Diagram

First things first, we must wire up all the components. Connect the servos correctly to 5V and GND. This was made extremely easy using our RoboRED. The X position servo control will be connected to Digital I/O pin 9 of the Arduino. The Y position servo control will be connected to Digital I/O pin 8 of the Arduino. The laser power(pin 3) will be connected to Digital I/O pin 6 of the Arduino, while pin 1 of the laser will be connected to GND of the Arduino. To wire up the Joystick, connect the 5V pin to 5V of the Arduino, GND to GND of the Arduino, Vrx to Analog pin 0 of the Arduino, Vry to Analog pin 1 of the Arduino and SW to Digital I/O Pin 7 of the Arduino.

See the Wiring Diagram Below:

  • 5V      – X Servo PWR, Y Servo PWR, Joystick 5v
  • GND    – X Servo GND, Y Servo GND, Laser Pin 1, Joystick GND
  • Pin 6    – Laser Pin 3
  • Pin 7    – Joystick SW
  • Pin 8    – X Servo Control
  • Pin 9    – Y Servo Control
  • Pin A0 – Joystick Vrx
  • Pin A1  – Joystick Vry

Mounting

Now  we need to assemble the laser turret. To do this take the X position servo and make it the base of the turret. Then lay the Y position servo on its side on top of the X position servo and tape it to the servo arm. Next mount the laser on the Y position servo so that it’s arm would move up and down with the laser. After uploading the program to the Arduino, come back to tweak the arm positions so that the laser is in the desired plane. Use a lot of electrical tape to mount the servo to a desk or you can use your wood working skills to screw the base servo in place.

Code Step 1

The first step is to define all the libraries and variables used in this tutorial. The Servo.h library included in the Arduino IDE will be used for this tutorial. Then define two servo objects, one for the X rotation and one for the Y rotation. The remaining variables are the Pins definition, the Servo Position variables and a variable to store whether the push button is pressed or not.

#include <Servo.h> // Include the Servo Library to control the servos
Servo xservo; // create servo object to control the x direction servo
Servo yservo; // create servo object to control the y direction servo
//Servo Variables
int pos = 0;       // variable to store the servo position
int XServoPin = 9; // Servo pin that will control X motion
int YServoPin = 8; // Servo pin that will control Y motion
//Joystick variables
int xposPin = A0;    // select the input pin for the potentiometer
int yposPin = A1;    // select the input pin for the potentiometer
int Xpos = 0;
int Ypos = 0;
int buttonPin = 7;
int buttonPress = 0;
//Lazer Variables
int lazerPin = 6;

Code Step 2

The next section of code is the setup. Define the laser pin as an OUTPUT and the push button as an input. Also enable the Arduino Pin pullup for the push button and enable the Servos.

void setup() {
  pinMode(lazerPin,OUTPUT);      //The lazer will be an output
  pinMode(buttonPin,INPUT);      //The buttonpress pin is an input
  digitalWrite(buttonPin,HIGH);  //This enables the Arduino pullup for this pin
  
  xservo.attach(XServoPin);  // attaches the servo on pin 9 to the servo object
  yservo.attach(YServoPin);  // attaches the servo on pin 8 to the servo object
}

Code Step 3

The next section of code will be the Main void loop. This is where we will handle the button press. The button is active LOW. This means that when the button is not pressed the Arduino will read “HIGH” and when the button is pressed the Arduino will read “LOW”. The logic will turn on the Laser if the Button reads LOW and turn off the Laser if the Button reads HIGH.

buttonPress = digitalRead(buttonPin); //Read the sate of the button
  if(buttonPress == LOW) // The button press is active low , so if it is pressed we will turn the lazer on
  {
    digitalWrite(lazerPin, HIGH); //Turn Lazer on
  }
  else
  {
    digitalWrite(lazerPin, LOW); // If it is not pressed, keep lazer off
  }

Code Step 4

The final section of code is to read the position of the joystick and map these to the degrees that the servo should turn to for both X and Y. The Servo only goes from 0 to 180 as it’s input,  whereas the output of the joystick will be from 0 to 1023. the map() function will map these ranges correctly so that 1023 will equal 180. Once the positions are mapped, the servo is then instructed to go to this position. Add a short delay to help prevent jittering. There will still be some and that is due to filtering of the joystick. In the future we will add a tutorial to help combat this.

 Xpos = analogRead(xposPin);     // read and store the x position location of the joystick
  Xpos = map(Xpos,0,1023,0,180);  //map the analog read x values to the 0-180 servo values
  Ypos = analogRead(yposPin);     // read and store the y position of the joystick
  Ypos = map(Ypos,0,1023,0,180);  //map the analog read y values to the 0-180 servo values
  xservo.write(Xpos);             // move the X Location servo to the x position the joystick is at
  yservo.write(Ypos);             // move the Y Location servo to the y position the joystick is at
  delay(50);

Now that you have the pieces of the code, go ahead and put them all together. You can get the entire code here. Power up your Arduino and upload the code. Now you can start having fun with your laser turret!

If you liked this tutorial please subscribe to get more updates! Any questions on the Laser Turret tutorial feel free to comment below!

Code

Laser Turret CodeC/C++
// BreakoutBros Mini Laser Turret Tutorial
// 2016

// Go to BreakoutBros.com to view wiring and step by step instructions


#include  // Include the Servo Library to control the servos

Servo xservo;  // create servo object to control the x direction servo
Servo yservo;  // create servo object to control the y direction servo

//*****************************************************************\\
//*****************************************************************\\
//                          STEP ONE
//*****************************************************************\\
//*****************************************************************\\

//Servo Variables
int pos = 0;       // variable to store the servo position
int XServoPin = 9; // Servo pin that will control X motion
int YServoPin = 8; // Servo pin that will control Y motion

//Joystick variables
int xposPin = A0;    // select the input pin for the potentiometer
int yposPin = A1;    // select the input pin for the potentiometer
int Xpos = 0;
int Ypos = 0;
int buttonPin = 7;
int buttonPress = 0;

//Lazer Variables
int lazerPin = 6;
//*****************************************************************\\
//*****************************************************************\\
//                          STEP TWO
//*****************************************************************\\
//*****************************************************************\\
void setup() {
  pinMode(lazerPin,OUTPUT);      //The lazer will be an output
  pinMode(buttonPin,INPUT);      //The buttonpress pin is an input
  digitalWrite(buttonPin,HIGH);  //This enables the Arduino pullup for this pin
  
  xservo.attach(XServoPin);  // attaches the servo on pin 9 to the servo object
  yservo.attach(YServoPin);  // attaches the servo on pin 8 to the servo object
}

void loop() {
//*****************************************************************\\
//*****************************************************************\\
//                          STEP THREE
//*****************************************************************\\
//*****************************************************************\\
  
  buttonPress = digitalRead(buttonPin); //Read the sate of the button
  if(buttonPress == LOW) // The button press is active low , so if it is pressed we will turn the lazer on
  {
    digitalWrite(lazerPin, HIGH); //Turn Lazer on
  }
  else
  {
    digitalWrite(lazerPin, LOW); // If it is not pressed, keep lazer off
  }

//*****************************************************************\\
//*****************************************************************\\
//                          STEP FOUR
//*****************************************************************\\
//*****************************************************************\\
 
  Xpos = analogRead(xposPin);     // read and store the x position location of the joystick
  Xpos = map(Xpos,0,1023,0,180);  //map the analog read x values to the 0-180 servo values
  Ypos = analogRead(yposPin);     // read and store the y position of the joystick
  Ypos = map(Ypos,0,1023,0,180);  //map the analog read y values to the 0-180 servo values
  xservo.write(Xpos);             // move the X Location servo to the x position the joystick is at
  yservo.write(Ypos);             // move the Y Location servo to the y position the joystick is at
  delay(50);                      // add in a slight delay to help with "jittering"
}

Schematics

Schematic
Wefpfbtyhzdj558yt6js

Comments

Similar projects you might like

Servo Control with TV Remote Control

Project showcase by eldo85

  • 11,128 views
  • 5 comments
  • 32 respects

Control your RoboArm with your Smartphone

Project in progress by Team Zone Team

  • 11,290 views
  • 7 comments
  • 31 respects

How to Make a Laser Turret for Your Cat

Project tutorial by MisterBotBreak

  • 6,122 views
  • 4 comments
  • 21 respects

Arduino Based Mini CNC 2D Plotter

Project showcase by Mrinnovative

  • 98,454 views
  • 18 comments
  • 234 respects

Mini Arduino CNC

Project tutorial by Zain Shahwar

  • 81,884 views
  • 8 comments
  • 111 respects

Arduino Tutorial : Mini Piano

Project tutorial by the lonely programmer

  • 16,692 views
  • 2 comments
  • 27 respects
Add projectSign up / Login