Arduino Electric Screwdriver
Build a functional electric screwdriver using Arduino Nano, a servo motor, and 3D-printed parts.
- Arduino
- Advanced
- 120 minutes + 3D printing time
- 6 steps
Shop this project
CartYou'll need
Arduino Uno Rev 3Board Only$32.24
Male-Male Jumper Wires (Set of 65-assorted sized and colors)$6.99
Prices from vilros.com. Tax and shipping at checkout.
Before you start, you'll need
- Arduino Nano
- 9g servo motor (modified for continuous rotation)
- Thumb joystick module
- DC barrel adapter (female 5.5mm)
- Rocker switch (12×19mm)
- 2× 10mm M3 bolts
- 2× 20mm M3 bolts
- 2× M3 washers
- 4× M3 nuts
- 2× 608zz bearings
- 6V DC power adapter or battery pack
- 3D printer for housing
Convert servo to continuous rotation
About 30 minutes
Modify the servo for screwdriver operation.
- Open the servo casing carefully.
- Remove the internal potentiometer.
- Replace with two fixed resistors (2.2kΩ each).
- Remove the mechanical stop on the main gear.
- Reassemble the servo.
- Test: servo should now rotate continuously in both directions.
You should see
Servo rotates continuously when powered.
3D print the screwdriver body
About 240 minutes
Print all required parts.
- Download STL files from project source.
- Print with 20-40% infill, PLA filament recommended.
- Parts needed: main body, grip, bearing mounts, button housing.
- Clean up support material and test fit parts.
You should see
All 3D printed parts are ready and fit together.
Connect electronics
About 20 minutes
Wire Arduino, joystick, and servo.
- Connect servo signal wire to Arduino Pin 9.
- Connect servo VCC to Arduino VIN (6V via barrel jack).
- Connect servo GND to Arduino GND.
- Connect joystick VCC to Arduino 5V.
- Connect joystick GND to Arduino GND.
- Connect joystick X-axis to Arduino A0.
- Connect rocker switch to control power on/off.
You should see
All components are wired.
Upload control code
About 15 minutes
Program joystick-controlled servo speed.
- Open Arduino IDE.
- Copy the screwdriver control sketch below.
- Upload to Arduino Nano.
#include <Servo.h>
Servo motor;
const int joystickPin = A0;
const int servoPin = 9;
int joystickValue = 0;
int speed = 90;
void setup() {
motor.attach(servoPin);
motor.write(90);
}
void loop() {
joystickValue = analogRead(joystickPin);
// Map joystick to servo speed
// Center position (512) = stop (90)
// Left = reverse (0-89)
// Right = forward (91-180)
if (joystickValue < 400) {
// Reverse
speed = map(joystickValue, 0, 400, 0, 89);
} else if (joystickValue > 600) {
// Forward
speed = map(joystickValue, 600, 1023, 91, 180);
} else {
// Dead zone - stop
speed = 90;
}
motor.write(speed);
delay(20);
}Adjust dead zone values (400/600) for your joystick sensitivity.
You should see
Code uploads successfully.
Assemble the screwdriver
About 35 minutes
Put all parts together.
- Install 608zz bearings in mounts with hot glue.
- Mount servo in main housing.
- Secure Arduino Nano and joystick in grip.
- Install rocker switch in accessible position.
- Connect power adapter (6V recommended, 5V works).
- Use M3 bolts and nuts to secure all components.
- Test drive and mechanical connection.
You should see
Screwdriver is fully assembled.
Test functionality
About 10 minutes
Verify tool operation.
- Power on with rocker switch.
- Push joystick right to drive clockwise.
- Push joystick left to drive counterclockwise.
- Test with actual screws to verify torque.
- Adjust speed in code if needed.
You should see
Electric screwdriver drives and removes screws.
It didn't work
Low torque.
Use higher voltage (up to 6V). Check that servo is properly modified. Consider a stronger servo motor.
What to do next
Stuck? Contact Vilros Support with your board model and what you see on screen.