This is a project to create a 360-degree rotating Arduino soft ball turret with full wireless joystick control, camera and headset for a first-person view.
Watch the overview video to see how the turret works.
-250 x 250 mm base made of wood;
-600 x 300 mm plywood 6 mm;
-Arduino Uno; -Arduino Nano;
-LiPo battery 7.4 V, 3800 mAh;
-2x 1980KV brushless motor; -2 ESC motor controller; -2 2.4GHz Wi-Fi modules + screen; -Compatible joystick (master uses Logitech Wingman); – Boost voltage converter; -5V Arduino relay; -Thrust bearing with external diameter 47 mm; -2 axial bearings with an outer diameter of 26 mm; -Aluminum rod 10 mm;
-Sanitary pipe 25 mm + tee;
-Set of plastic wheels with an outer diameter of 70 mm;
– Servo MG996R 360 degrees (rotation); – Servo MG946R (tilt); – Servo DS329HV (to start the trigger); – 2 DF5015SM 12V blower fans; – FPV camera with headset; – 3D printer; – Laser cutter; – Soldering accessories;
Step one: how it works
The mechanism that this turret uses to shoot balls is two wheels rotating in opposite directions. When the ball is pushed between these wheels, it accelerates and flies forward. It is necessary to pay special attention to the fact that the distance between the wheels is exactly the diameter of the ball, in this case 20 mm.
the far end of the trunk. They create a stream of air that is strong enough to blow out the balloon.
To aim the turret, the entire trigger and barrel are mounted on a frame that allows her bend up and down. The turntable allows it to rotate 360 degrees.
The vertical tube can hold several balls that can be thrown into the launch tube by turning the servo to act as a trigger.
Step Two: Assembly – Main Frame
The frame parts are laser cut from plywood.
Some parts had to be thicker, so two layers were used to make parts with a thickness of 12 mm. Slots and tabs have also been added to the design for increased strength and easier alignment. PVA glue was used to fix the parts.
For laser cutting you need parts:
2 pcs. each of the uprights for the manufacture of vertical support brackets 12 mm thick (2 left and 2 right)
One round piece
Four triangular brackets
After the parts are manufactured, the thrust bearings must be inserted into the slots and secured with epoxy.
All laser cut and 3D print parts can be downloaded below.
Turret laser cut 2.1.DXFBlower Mount.STLCamera Mount.STLMotor Holders.STLPipe Mounting Bracket.STLTilt Servo Mount.STL360 Servo Mount.STLEagle Badge. STLPipe Ball Forcer.STL
Step Three: Base
Turrets need a heavy and solid base. Craftsman made a 250mm square base from two layers of 18mm plywood.
I drilled five holes with a diameter of 3.5 mm in the center of the upper part. All holes are within an inner circle with a diameter of 30 mm. The central hole is through.
A large diameter hole is drilled in the bottom layer of plywood, about 30mm. This is so that you can later attach the servo shaft.
4 holes accept aluminum rods with a diameter of 3 mm and a length of approximately 27 mm.
Step Four: Turntable Servo and Arduino
Attach the servo to the mount with M3 nuts and bolts.
Place the turntable on the journal bearings and align.
Align the four prong bezel so it fits into the gaps between the four aluminum rods, and insert the turntable servo assembly into the slots in the slots. After installation, it must be possible to rotate the turntable. You will also hear the servo spinning.
Mount the Arduino to the front of the turntable (the side with the shortest servo legs) using M3 posts and bolts. Drill 3.5mm holes for the bolts to secure the uprights with the nuts on the underside.
To prevent the turntable from lifting, screw an M3 threaded rod into the faceplate of the servo. After screwing into the faceplate, add the lock nuts and screw the rod until they connect the two parts.
Step five: barrel
The barrel and magazine were made of plastic pipe. For the barrel you need to cut 170 mm for the barrel, and for the magazine 250 mm.
In addition, you will need to make two slots at the front end of the barrel. This is necessary so that the wheels can pass through them when rotating. The slots should start 20 mm from the front of the barrel and be 70 mm long and about 25 mm wide. The center of the groove should be in line with the center of the barrel and symmetrical to the left and right.
You also need to make cuts in the elbow joint and the feed tube. The barrel should be facing forward over the Arduino. Connect the pieces as shown and place them between the vertical arms of the frame and note the side of the elbow joint that points to the six-slot mesh in the vertical arms. Cut slots on the opposite side. Slot 10 mm wide by 25 mm down in the branch of the tee.
Step six: barrel shaft
Now the barrel needs to be fixed.
Cut a 26mm aluminum rod with a diameter of 10mm and a length of 40mm. Two mounting holes need to be drilled at 40mm.
Holding the barrel assembly in place, pointing it over the Arduino, install the shorter shaft through the bearing into the 3D printed mount.
Install the longer tube on the other side and mark in the printed part where the hole in the stem is. Drill the part, install the bolt in the hole.
Step Seven: Tilt Servo
Next you need to screw the front panel servo to a 3D printed adapter ring. At the same time, a space must be left between the screws to drill the hole. The principle is the same as in the previous step.
Then we put the front panel back on the servo shaft, insert the servo into the 3D-printed mount and fasten it with nuts and bolts.
Now install the entire servo mechanism on the turret.
Step eight: fans
Go to fans.
Insert the blower fans into the 3D-printed mount with the back of each fan facing the back of the other and their nozzles aligned one above the other. We fix the fans with epoxy. Install this node at the back end of the tee.
Step nine: mounting the starter wheel motor
Place the wheel assembly on the barrel by aligning the slots.
Then we fasten the engines and put the wheels on their axles.
Step ten: camera, servo, battery
Insert the camera module into the 3D print module holder, then glue it to the top front of the launch wheel mount.
Next, you need to install the servo and place the lever in the slot. When the lever comes out of the slot, the ball hits the barrel.
Sticks Velcro strips onto the plywood, then attaches the knot to the base. The battery will be attached to this Velcro.
Step eleven: turret diagram
The electrical part of the turret consists of two main circuits – one for the tower and the other for the joystick – they communicate with each other wirelessly using the RF24L01 module.
The entire turret circuit is powered by a 7.4V 3800mAh LiPo rechargeable battery commonly used for RC cars or drones.
Voltage 7.4 V from the battery is supplied directly to:
Voltage boost converter
7.4 V is increased to 12 V to power the fans. < br> 7.4V lowered to 5V with Arduino for power:
7.4V lowered to 5V with ESC for power:
FPV Cameras < tilt servo
Using ESCs to power the servos and the camera is necessary as they can handle a much higher output current (2A) compared to using an Arduino which can handle a maximum of about 0.5A.
We start by gluing the voltage boost converter in front of the battery holder with hot melt glue. Then we solder the I/O wires to the board.
Connect the boost converter to the 7.4V battery connectors and adjust the voltage to 12V.
Installing the wireless module. The connection is as follows:
5V – Arduino 5V
GND – Arduino GND
CE – Arduino D8
CSN – Arduino D10
SCK – Arduino D13
MISO – Arduino D12
MOSI – Arduino D11
Sets the relay. It will supply power to the fans.
The + 12V wire goes from the blower to K4 to the relay. Then it goes out and connects to the + IN of the boost voltage converter.
5V – Arduino 5V
GND – Arduino GND
IN4 – Arduino D2
assembly, it powers 2 components (wireless module and relay).
To connect more components, the master made a small breakout board that simply plugs into the 5V and GND slots on the Arduino.
Connect the fans to the relay in parallel.
Hot glue ESC to the side of the turret. We install the connectors and connect the motors.
To make it easier to connect to the ESC, the wizard made another breakout board. There are two boards, one for the tilt servo and connects (in addition to power supply) to D9, the second firing servo and connects to D7.
Battery power is supplied to the punched board and then to the terminal block. Through them it is distributed to the rest of the electronics.
The rotation servo signal wire connects to the D4 Arduino.
< img class = "aligncenter" alt = "Wireless controlled turret (shoots balls for Nerf blasters)" src = "https://usamodelkina.ru/uploads/posts/2021-08/1627929975_1-78.jpg"/> Connect the power wires from the ESC to the FPV camera power connector.
The camera used can draw from 2.9 to 5.5 V, so it can be used for power supply with ESC BEC.
Step twelve: joystick circuit
The second circuit is for joystick control. It is USB powered and uses the Arduino Nano to work. Most of the work here is just rewiring the existing controller (the simpler the controller the better) and make sure everything works.
The wizard uses the Logitech Wingman Model 3001 as it only has 2 buttons and 3 potentiometers.
The main connection is as follows:
nRF24L01 connects to D9, D10, D11, D12, D13
2 potentiometers to A0 and A1
2 buttons to D3 and D5
2 status LEDs (wireless connection and fan activation) to D7 and D8
Potentiometers must be checked for functionality. Then connect potentiometers and buttons according to the diagram.
Connects the wireless module:
The nRF24L01 pins are connected to the Arduino as follows:
Module – Arduino
5V – 5V
GND – GND-
CE – – D9
CSN – – D10
SCK – – D13
MISO – – D12
MOSI – – D11
Connects LEDs and the rest of the circuit.
Step 13: Arduino Uno code
The ESC is controlled by PWM through the Servo.h library.
The address for communication with the Arduino Nano is set to “RxAAA” and is set as a read-only variable.
Data is transmitted as a single array that contains 4 values - tilt angle servo, direction of rotation of the servo, trigger state and ESC speed. It is then passed to the Arduino Nano, which reads the array and uses each value for the corresponding function. Below is a code snippet:
//a single array that holds 4 values which will be read from the incoming Nano signal //This is more efficient and robust than trying to send 4 seperate values, instead a single message is recieved int message & # 91; 4 & # 93 ;; //each variable name is self-identifying to the turret angle_val = message & # 91; 0 & # 93 ;; rotation_val = message & # 91; 1 & # 93 ;; escSpeed = message & # 91; 2 & # 93 ;; firing_state = message & # 91; 3 & # 93 ;;
The master uses the lowest baud rate of 250 kbps to get the highest possible range. The NRF24L01 has 6 channels that can be used to transmit or receive data simultaneously.
//this starts radio transmission and utilises the RF24 module & lt; br & gt; radio.begin (); //the lowest data transfer rate provides greater connection range //since a single array is being received, this rate is suitable as the more important factor is the wireless range radio.setDataRate (RF24_250KBPS); //the nRF24L01 has 6 pipes that it can transmit or receive data to at a time //this command opens the first data pipe for reading at the address we defined earlier radio.openReadingPipe (0, address); //Since the UNO is only receiving data, it must start listening for any values coming through the aforementioned ReadingPipe radio.startListening ();
All code with comments can be downloaded below.
Step Fourteen: Arduino Nano Code
The Nano code works very much like the Uno code, except that instead of listening to commands, the Nano sends data as a transmitter.
The highlights here are to tune the potentiometers to match the values that are sent to the servos. The main function used here is a snippet where the analog readings of the potentiometer are taken (in this case, they are between 390 and 600), and then they are converted to servo values (from 105 to 160). Below is a snippet of code:
////////////////TURRET TILT POT READING //////////////////& lt; br & gt; //reading the potentiometer values from the analog pin, this is between 0 and 1023 angle_val = analogRead (angle_pot); //since the potentiometer is mechanically fixed in the joystick, it only travels between 390 and 600 //in order to write a suitable value to the servo, the potentiometer value is mapped accordingly //this keeps all the functionality of the potentiometer code within the Nano making reprogramming and adapting of the input controls later easier angle_val = map (angle_val, 390, 600, 105, 160);
The complete code with comments can be downloaded below.
Step fifteen: Arduino ESC settings
The attached images show how to set the throttle range. The operating mode should be switched to “ONE” to allow easy control of the ESC through the Arduino.
Use the button on the side of the ESC to reprogram it to the correct mode.
At startup, a set of beeps will be heard, followed by a startup beep indicating that the ESC is calibrated and ready to use.
Now you need to connect the FPV headset to the camera.
It remains to test the turret.