How to create your own DIY moving target on a budget

At Bunker 501 we designed a moving practice target to stay in shape and help against the boredom in our current situation. 

The best part? 

You can make one too for around €20!

The main components of this target are an Arduino microprocessor and 6 RC Servos.

What do you need?

  • A pc to program the Arduino (we made the Arduino code for you, so no worries).
  • The Arduino IDE (a program for your pc to put the code on the Arduino
  • An Arduino UNO (we bought this one)
  • 6 x sg90 Servos or more powerful ones if you have heavier targets. (we bought these)
  • 6 x clothespin to hold the targets. (we used moms)
  • Some jumper wires to connect it al. (we used these)
  • 1 x USB wall adapter for the Arduino Uno
  • 1 x 5V 1 A power source for the servo’s (old USB charger for example)
  • tie-wraps, glue, duct tape (whatever you got)
  • some basic tools like a drill and some drill bits
  • a wooden plank to mount it all.

How does it work?

The Arduino chooses a random servo to move a target. 

After a second and a half, the servo moves back, hiding the card and half a second later the next servo shows its target.

How to build it?

First, you need to mount the clothespins to the Servos. 

You can use tie-wraps, hot glue or maybe even some steel wire. 

See the pictures below. Note the difference in mounting the clothespins between the left and the right row of Servos.

The Servos and Arduino are mounted on the back of the wooden plank. Use Glue, tie-wraps, duct tape, whatever you got. See the following picture:

Make sure the Servos can rotate freely and the arm or clothespin doesn’t hit the wood. 

The vertical distance between the Servos should be a little more than the size of the target, so the targets don’t hit each other. It’s best to mount the Servos in such a way that you can’t hit the clothespin with your replica. 

The Arduino is mounted in the middle with some small screws and plastic spacers to keep it off the wood. (Tip: Use some small tubing like aquarium tube for spacers) 

Our Servos have three connections:

  • RED = Positive
  • BROWN = Negative/ground
  • YELLOW = Signal

The positive and negative wires should be connected to the power source (not the Arduino). Only the signal wires and one ground wire should be connected to the Arduino. See the pictures below for the pins we used on the Arduino.s

As you can see, the signal wires go to 3, 5, 6 and 9, 10, 11. The left (seen from the back) row of Servos should be connected to wires 3, 5 and 6. The right side (seen from the back) goes to pin 9, 10 and 11.

After you connected the signal wires you can place the power wires for the Servos. 

Remember: 

  • 6 positive wires should go to the red wires on the Servos. 
  • 7 black ground wires, 6 to the servo’s 1 to the Arduino. 

See the schematics below: The signal wires are green in the schematic, ground wires are black and power wires are red.

DIY Target Schematics

Programming the Arduino

The last thing you need to do is program the Arduino. You can do this with the Arduino IDE (Integrated Development Environment) which you can download here.

After you have downloaded the program, copy the code below and save the file. There are plenty of good sources on youtube to learn how to use the Arduino IDE. 

/* 
Random Target
By Dadudos
Made for Bunker501 <http://bunker501.nl>
This code is in the public domain.
Please practice safely!

Last edit 31/3/2021
By Dadudos

*/

#include <Servo.h>

Servo myservo_1;  // create servo object to control a servo
Servo myservo_2;
Servo myservo_3;
Servo myservo_4;
Servo myservo_5;
Servo myservo_6;

// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
long servonummer; // het nr dat de random functie gaat geven
void setup() {
	myservo_1.attach(3); // attaches the servos on pins  to the servo objects
	myservo_2.attach(5);
	myservo_3.attach(6);
	myservo_4.attach(9);
	myservo_5.attach(10);
	myservo_6.attach(11);
	myservo_1.write(90); //reset alle kaarten naar achteren
	delay(500);
	myservo_2.write(90);
	delay(500);
	myservo_3.write(90);
	delay(500);
	myservo_4.write(90);
	delay(500);
	myservo_5.write(90);
	delay(500);
	myservo_6.write(90);
	delay(2500);
}
void loop() {
	servonummer = random(0, 7); //kiest het servonummer
	if (servonummer == 1) { //kijkt of het nr 1 is of niet. Als het nr 1 is, dan servo open.
		myservo_1.write(0); // zet servo op  open positie
		delay(1500); //tijd dat de kaart zichtbaar blijft.
		myservo_1.write(90); //breng servo naar gesloten positie
		delay(500); //tijd tussen 2 kaarten 
	} else if (servonummer == 2) { //als servo 1 niet gekozen is, kijkt hij of servo 2 is gekozen 
		myservo_2.write(0); // en doet die open.
		delay(1500);
		myservo_2.write(90);
		delay(500);
	} else if (servonummer == 3) { // zie vorige opmerking maar dan +1
		myservo_3.write(0);
		delay(1500);
		myservo_3.write(90);
		delay(500);
	} else if (servonummer == 4) {
		myservo_4.write(180);
		delay(1500);
		myservo_4.write(90);
		delay(500);
	} else if (servonummer == 5) {
		myservo_5.write(180);
		delay(1500);
		myservo_5.write(90);
		delay(500);
	} else if (servonummer == 6) {
		myservo_6.write(180);
		delay(1500);
		myservo_6.write(90);
		delay(500);
	}
}

I hope you enjoyed my guide on creating your own DIY moving target. Of course, we can take things much further but this was put together on a budget and as fast as possible.

What do you think about our neat solution? Will you be building your own? Let us know!

Join Waitlist We will inform you when the product arrives in stock. Please leave your valid email address below.