Skip to content

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

Cart

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.

  1. Open the servo casing carefully.
  2. Remove the internal potentiometer.
  3. Replace with two fixed resistors (2.2kΩ each).
  4. Remove the mechanical stop on the main gear.
  5. Reassemble the servo.
  6. Test: servo should now rotate continuously in both directions.

You should see

Servo rotates continuously when powered.

Connect electronics

About 20 minutes

Wire Arduino, joystick, and servo.

  1. Connect servo signal wire to Arduino Pin 9.
  2. Connect servo VCC to Arduino VIN (6V via barrel jack).
  3. Connect servo GND to Arduino GND.
  4. Connect joystick VCC to Arduino 5V.
  5. Connect joystick GND to Arduino GND.
  6. Connect joystick X-axis to Arduino A0.
  7. 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.

  1. Open Arduino IDE.
  2. Copy the screwdriver control sketch below.
  3. Upload to Arduino Nano.
cpp
#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.

  1. Install 608zz bearings in mounts with hot glue.
  2. Mount servo in main housing.
  3. Secure Arduino Nano and joystick in grip.
  4. Install rocker switch in accessible position.
  5. Connect power adapter (6V recommended, 5V works).
  6. Use M3 bolts and nuts to secure all components.
  7. Test drive and mechanical connection.

You should see

Screwdriver is fully assembled.

Test functionality

About 10 minutes

Verify tool operation.

  1. Power on with rocker switch.
  2. Push joystick right to drive clockwise.
  3. Push joystick left to drive counterclockwise.
  4. Test with actual screws to verify torque.
  5. 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.