Clay Sculpting Robotic Arm with Arduino & Servos

Clay Sculpting Robotic Arm with Arduino & Servos | Kids Maker Project | MakeMindz
What are we building?

A Robot Arm That Makes Art 🎨

Imagine a robot arm with 4 bendable joints — just like your shoulder, elbow, wrist, and fingers. Each joint is powered by a tiny servo motor. You can control all 4 joints with knobs, teach it a sculpting sequence, and then hit a button to watch it repeat those moves and shape clay by itself. This is exactly how industrial robot arms work in car factories and space stations!

Think of it like your own arm — with superpowers!

Your arm has 4 main joints: shoulder (rotates), elbow (bends up/down), wrist (tilts), and fingers (grip). Our robot arm has exactly the same four joints! Each joint is controlled by a servo motor that receives precise angle commands from Arduino — like a brain sending signals down your nerves. The clay is like the robot's art project. 🖼️

🌟 Real World Link: NASA's Mars rovers have robotic arms. The Da Vinci surgical robot does surgeries with arms like this. Car factories use giant versions to weld car bodies. You're learning the same technology!
🔵
Base / Waist
Servo 0 · 0°–180°
🟢
Shoulder
Servo 1 · 0°–180°
🟣
Elbow
Servo 2 · 0°–150°
🔷
Wrist / Tool
Servo 3 · 0°–120°
The tech inside

How Does the Robot Know Where to Move? 🤔

It's a beautiful chain of signals from your fingers to the clay!

1
🎛️
You turn a knob
4 potentiometer knobs control each joint. Turn knob 1 to rotate the base, knob 2 to lift the shoulder…
2
📡
Arduino reads voltage
Each knob sends 0–5V to analog pins A0–A3. Arduino reads these as numbers 0–1023.
3
🧮
Maps to angle
Arduino converts 0–1023 into servo angles 0°–180° using the map() function.
4
📶
Sends to PCA9685
Arduino sends angle commands to the PCA9685 servo driver via I2C — just 2 wires for 16 servos!
5
PWM pulses fly
PCA9685 sends precise 50Hz PWM pulses to each servo's signal wire — this is how servos know their angle.
6
🦾
Servo moves
The servo motor turns its horn to exactly the right angle. All 4 servos move together — robotic arm motion!
7
🎨
Clay gets shaped!
The tool on the wrist pushes, rolls, and sculpts the clay as the arm moves through its sequence.
🔑 Servo PWM Magic: A servo motor reads a pulse signal. Pulse of 1ms → 0°. Pulse of 1.5ms → 90°. Pulse of 2ms → 180°. Sent 50 times per second! The PCA9685 generates these pulses with hardware precision — far better than Arduino's built-in PWM for multiple servos.
Shopping list

Collect These 9 Things First 🛒

All available online or at local electronics stores. Total under ₹800!

🤖
Arduino UNO
The brain — reads knobs, stores sculpting sequences, sends commands to PCA9685.
Qty: 1  |  ~₹250
⚙️
SG90 Servo Motors
Tiny, lightweight servo motors. Each has 3 wires: Brown = GND, Red = 5V, Orange = Signal.
Qty: 4  |  ~₹60 each = ₹240
🔌
PCA9685 Servo Driver
16-channel PWM driver. Handles all servo timing perfectly via I2C. Runs on its own 5V supply.
Qty: 1  |  ~₹120
🎛️
Potentiometers (10kΩ)
One knob per joint = 4 knobs total. Turn them to control each arm joint position.
Qty: 4  |  ~₹10 each = ₹40
🔘
Push Buttons (2×)
Button 1 = Record a move. Button 2 = Play back auto-sculpt sequence.
Qty: 2  |  ~₹5 each = ₹10
🔋
5V 3A Power Supply
Servos need real power — 4 SG90s can draw 1.5–2A together. Use a dedicated 5V 3A USB adapter or bench supply.
Qty: 1  |  ~₹100
🧱
Cardboard or Ice-Cream Sticks
Build the arm segments! Thick cardboard, popsicle sticks, or acrylic sheets all work. Cut into 4 arm link pieces.
Qty: Enough  |  ~₹20
🧵
Breadboard + Jumper Wires
For the control circuit — potentiometers, buttons, and I2C connections to PCA9685.
Qty: 1 set  |  ~₹60
🎨
Modelling Clay
Soft, air-dry modelling clay or plasticine. Avoid very stiff clay — SG90 servos aren't strong enough for hard clay.
Qty: 100–200g  |  ~₹50
⚠️ Power is critical! Never power servos from Arduino's 5V pin — they'll brownout the board and behave erratically. Always use a separate 5V power supply connected directly to the PCA9685's V+ terminal.
Step-by-step build guide

Build Your Robot Arm! 🔨

Follow every step. Power everything off before changing wires. Ask an adult to help with cutting and gluing!

1
Understand Servo Motors 🎓
Before building, let's understand the SG90 servo. It has 3 wires and a plastic horn (the white cross-shaped piece). The servo moves its horn to a specific angle and holds it there — unlike a regular DC motor that just spins freely.
SG90 Wire Colours
Wire ColorConnectionWhat it does
BrownGNDGround / negative
Red5VPower — must come from PCA9685, NOT Arduino!
OrangeSignalPWM signal from PCA9685 — tells servo the angle
💡 Servo vs DC motor: A servo has a built-in position feedback system (a potentiometer inside!). When you command 90°, the servo measures its current angle, compares it to the target, and adjusts until it matches. That's closed-loop control!
2
Build the Physical Arm Structure 🏗️
This is the mechanical build — the frame your servos will be attached to. You'll make 4 arm segments joined together like a real arm.
Arm Segment Guide
SegmentLengthMaterialNotes
Base8×8 cm squareThick cardboard / plywoodServo 0 mounted in center pointing up
Upper arm12 cm longCardboard strip or popsicle sticksServo 1 at one end, connects to base
Forearm10 cm longCardboard stripServo 2 at joint, connects upper arm
Wrist+Tool6 cmCardboard + clay toolServo 3 controls tilt; glue tool at end
Assembly Steps

🔩 Mount Servo 0 on Base: Hot-glue or screw Servo 0 flat on the base platform. The horn should point upward. This servo rotates the whole arm left and right.

🔩 Attach Upper Arm to Servo 0 Horn: Screw the upper arm strip to Servo 0's horn. When Servo 0 turns, the whole arm turns with it.

🔩 Mount Servo 1 at top of Upper Arm: This is the shoulder. Its horn will connect to the forearm. When Servo 1 turns, the forearm raises/lowers.

🔩 Attach Forearm to Servo 1 Horn: Connect the forearm strip to Servo 1's horn using a screw or strong tape.

🔩 Mount Servo 2 at end of Forearm: This is the elbow. Servo 3's horn connects to the wrist piece.

🔩 Add Clay Tool to Wrist: Glue a small wooden dowel, plastic spoon, or modelling tool to the final servo's horn. This is what touches the clay!

⚠️ Ask an adult! Use a glue gun or craft knife only with adult help. Make sure servos are secured firmly — a loose servo will make the whole arm wobble and miss its target.
3
Install the Adafruit PCA9685 Library 📚
Before we wire anything, install the servo driver library in Arduino IDE. This library makes it super easy to control all 4 servos with simple commands.
Library Installation Steps

1. Open Arduino IDE on your computer.

2. Go to Sketch → Include Library → Manage Libraries

3. In the search box type: PCA9685

4. Find "Adafruit PWM Servo Driver Library" and click Install.

5. Also install "Adafruit BusIO" if prompted as a dependency.

4
Wire PCA9685 to Arduino via I2C 🔗
The PCA9685 talks to Arduino using I2C — a clever 2-wire communication system. Only 4 wires needed between them! Then connect the 5V power supply to the PCA9685's V+ terminal (not from Arduino).
Arduino → PCA9685 Connections
Arduino PinPCA9685 PinWire Color
5VVCCRed (logic power)
GNDGNDBlack
A4 (SDA)SDABlue
A5 (SCL)SCLYellow
⚡ External 5V 3A supply: (+) → PCA9685 V+ terminal | (–) → PCA9685 GND terminal
💡 What is I2C? I2C (Inter-Integrated Circuit) lets one Arduino control up to 127 devices using just 2 wires (SDA = data, SCL = clock). It's like a shared phone line — each device has a unique address. PCA9685 default address is 0x40!
5
Connect Servos to PCA9685 Channels ⚙️
Plug each servo's 3-pin connector directly into the PCA9685 channel headers. Match the wire orientation — brown to GND row, red to middle (+) row, orange to top (signal) row.
Servo → PCA9685 Channel Assignments
ServoPCA9685 ChannelJoint RoleAngle Range
Servo 1Channel 0Base rotation0° – 180°
Servo 2Channel 1Shoulder up/down0° – 180°
Servo 3Channel 2Elbow bend0° – 150°
Servo 4Channel 3Wrist / tool tilt0° – 120°
6
Wire the 4 Control Potentiometers 🎛️
Each potentiometer controls one joint. All pots share the same 5V and GND rails. Only the middle (wiper) pin goes to a different Arduino analog pin for each pot.
Potentiometer Wiring (all 4)
PotLeft legMiddle (wiper)Right legControls
Pot 15V→ A0GNDBase
Pot 25V→ A1GNDShoulder
Pot 35V→ A2GNDElbow
Pot 45V→ A3GNDWrist
7
Wire the Record & Play Buttons 🔘
Two push buttons — one to record the current arm position into memory, and one to play back all recorded positions as an automatic sculpting sequence. Both use INPUT_PULLUP (no resistor needed).
Button Connections
ButtonPin 1Pin 2Function
Record 🔴Arduino D6GNDSave current position to sequence
Play ▶️Arduino D7GNDRun saved positions automatically
8
Upload the Code & Test Without Clay First ✅
Upload the code from the Code section below. First test with NO clay — just make sure all 4 servos respond to the knobs correctly. Turn each knob and watch each joint move. Then try the record/play sequence.
✅ Test checklist: Knob 1 rotates the base ✓ | Knob 2 lifts the shoulder ✓ | Knob 3 bends the elbow ✓ | Knob 4 tilts the wrist ✓ | Record button saves position ✓ | Play button runs sequence ✓
9
Add Clay and Sculpt! 🎨
Roll a ball of soft clay and place it under the arm's reach zone. Use the knobs to position the arm above the clay. Then use the record button to teach it 5–10 sculpting positions (press, push, smooth, roll). Finally press PLAY and watch your robot sculpt all by itself!
🎨 Sculpting tips: Start with a flat clay disc (like a roti!) — easier to shape. Teach the arm to press down, slide sideways, and lift. Each button press records one "keyframe" of the sculpture. 10 keyframes = a full sculpting sequence!
Full wiring diagram

The Complete Circuit 🔌

Study this carefully before wiring. The key rule: Arduino gets power from USB, PCA9685 gets its own 5V 3A supply. They share a common GND!

Clay Sculpting Robotic Arm — Full Circuit Arduino + PCA9685 + 4× SG90 + Pots + Buttons
Clay Sculpting Robotic Arm — Complete Circuit Diagram ARDUINO UNO 5V GND A0 A1 A2 A3 A4 A5 D6 D7 GND USB MCU PCA9685 Driver VCC GND SDA SCL V+ GND CH0 CH1 CH2 CH3 PCA9685 16ch PWM 25MHz osc BASE S0 SHLDR S1 ELBOW S2 WRIST S3 POTENTIOMETERS (×4) A0 A1 A2 A3 BUTTONS D6 REC D7 PLAY 5V 3A Supply +5V GND WIRE LEGEND Red → 5V / VCC power Black → Ground Yellow → SDA (I2C data) Green → SCL (I2C clock) Orange → A0 / CH0 Base Teal → A1 / CH1 Shoulder Violet → A2 / CH2 Elbow Blue → A3 / CH3 Wrist Dashed = 5V supply lines
FromPinToPinColor
Arduino5VPCA9685VCC (logic only)Red
ArduinoGNDPCA9685GND (shared!)Black
ArduinoA4 (SDA)PCA9685SDAYellow
ArduinoA5 (SCL)PCA9685SCLGreen
ArduinoA0Pot 1 (wiper)Base knobOrange
ArduinoA1Pot 2 (wiper)Shoulder knobTeal
ArduinoA2Pot 3 (wiper)Elbow knobViolet
ArduinoA3Pot 4 (wiper)Wrist knobBlue
ArduinoD6Button 1RecordOrange
ArduinoD7Button 2Play sequenceViolet
PCA9685Channel 0Servo 1Base rotationOrange
PCA9685Channel 1Servo 2ShoulderTeal
PCA9685Channel 2Servo 3ElbowViolet
PCA9685Channel 3Servo 4Wrist / toolBlue
5V 3A SupplyV+ positivePCA9685V+ power terminalRed (dashed)
5V 3A SupplyGND negativePCA9685GND terminalBlack (dashed)
Arduino brain code

The Complete Arduino Code 💻

Install the Adafruit PWM Servo Driver Library first (Sketch → Include Library → Manage Libraries → search "PCA9685"). Then copy and upload!

Arduino C++ — Clay Sculptor v1.0
// ╔══════════════════════════════════════════════════════════╗
// ║   CLAY SCULPTING ROBOTIC ARM — MakeMindz                 ║
// ║   Servos: 4× SG90 via PCA9685 (I2C)                     ║
// ║   Control: 4 Pots (A0–A3) + Record (D6) + Play (D7)     ║
// ║   Library: Adafruit PWM Servo Driver Library             ║
// ╚══════════════════════════════════════════════════════════╝

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// ── Create the PCA9685 object (I2C address 0x40 is default) ──
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);

// ── Servo PWM pulse range (microseconds for SG90) ─────────────
//    SG90: 500µs = 0°,  1500µs = 90°,  2400µs = 180°
//    PCA9685 at 50Hz: 4096 ticks = 20ms (full period)
//    Formula: ticks = (microseconds / 20000) * 4096            
const int SERVO_MIN  = 102;  // ~500µs  → 0°
const int SERVO_MID  = 307;  // ~1500µs → 90°
const int SERVO_MAX  = 491;  // ~2400µs → 180°

// ── Pin definitions ────────────────────────────────────────────
const int POT_BASE     = A0;  // Potentiometer → base servo
const int POT_SHOULDER = A1;  // Potentiometer → shoulder servo
const int POT_ELBOW    = A2;  // Potentiometer → elbow servo
const int POT_WRIST    = A3;  // Potentiometer → wrist servo

const int BTN_RECORD   = 6;   // Record button
const int BTN_PLAY     = 7;   // Play sequence button

// ── Servo channel assignments on PCA9685 ──────────────────────
const int CH_BASE     = 0;
const int CH_SHOULDER = 1;
const int CH_ELBOW    = 2;
const int CH_WRIST    = 3;

// ── Sequence memory ────────────────────────────────────────────
//    We can store up to 20 keyframe positions                    
const int MAX_FRAMES = 20;
int seqBase[MAX_FRAMES];
int seqShoulder[MAX_FRAMES];
int seqElbow[MAX_FRAMES];
int seqWrist[MAX_FRAMES];
int frameCount = 0;

// ── State ─────────────────────────────────────────────────────
bool  isPlaying    = false;
long  lastDebounce = 0;
const int MOVE_DELAY = 600;  // ms between frames during playback

// ── setup() ────────────────────────────────────────────────────
void setup() {
  Serial.begin(9600);
  Serial.println("🦾 MakeMindz Clay Sculptor — Ready!");
  Serial.println("Use knobs to position arm. D6=Record, D7=Play.");

  // Buttons with internal pull-up (no external resistor needed)
  pinMode(BTN_RECORD, INPUT_PULLUP);
  pinMode(BTN_PLAY,   INPUT_PULLUP);

  // Start PCA9685 at 50Hz (standard servo frequency)
  pwm.begin();
  pwm.setOscillatorFrequency(27000000);  // Calibrated for accuracy
  pwm.setPWMFreq(50);

  delay(10);

  // Move all servos to safe home position (90° / neutral)
  setServo(CH_BASE,     90);
  setServo(CH_SHOULDER, 90);
  setServo(CH_ELBOW,    90);
  setServo(CH_WRIST,    60);
  delay(800);
  Serial.println("All servos at home position. Let's sculpt!");
}

// ── loop() ─────────────────────────────────────────────────────
void loop() {

  if (!isPlaying) {
    // ── MANUAL CONTROL MODE ──────────────────────────────────────
    // Read all 4 pots and map to servo angles
    int angleBase     = readPotAngle(POT_BASE,     0,   180);
    int angleShoulder = readPotAngle(POT_SHOULDER, 10,  170);
    int angleElbow    = readPotAngle(POT_ELBOW,    0,   150);
    int angleWrist    = readPotAngle(POT_WRIST,    0,   120);

    // Send angles to servos
    setServo(CH_BASE,     angleBase);
    setServo(CH_SHOULDER, angleShoulder);
    setServo(CH_ELBOW,    angleElbow);
    setServo(CH_WRIST,    angleWrist);

    // Print live readings
    Serial.print("Base:");     Serial.print(angleBase);
    Serial.print(" Shldr:");  Serial.print(angleShoulder);
    Serial.print(" Elbow:");  Serial.print(angleElbow);
    Serial.print(" Wrist:");  Serial.print(angleWrist);
    Serial.print("  |  Frames saved: "); Serial.println(frameCount);

    // ── Check RECORD button ───────────────────────────────────────
    if (digitalRead(BTN_RECORD) == LOW) {
      if (millis() - lastDebounce > 300) {
        lastDebounce = millis();
        if (frameCount < MAX_FRAMES) {
          seqBase[frameCount]     = angleBase;
          seqShoulder[frameCount] = angleShoulder;
          seqElbow[frameCount]    = angleElbow;
          seqWrist[frameCount]    = angleWrist;
          frameCount++;
          Serial.print("🔴 Recorded frame #");
          Serial.println(frameCount);
        } else {
          Serial.println("⚠️  Memory full! Max 20 frames.");
        }
      }
    }

  } else {
    // ── PLAYBACK MODE — sculpt automatically! ────────────────────
    Serial.println("▶️  Auto-sculpt sequence starting...");
    for (int i = 0; i < frameCount; i++) {
      smoothMove(seqBase[i], seqShoulder[i],
                  seqElbow[i], seqWrist[i]);
      Serial.print("  Playing frame "); Serial.print(i+1);
      Serial.print(" of "); Serial.println(frameCount);
      delay(MOVE_DELAY);
    }
    isPlaying = false;
    Serial.println("✅ Sequence complete! Clay sculpted 🎨");
  }

  // ── Check PLAY button (works in both modes) ───────────────────
  if (digitalRead(BTN_PLAY) == LOW) {
    if (millis() - lastDebounce > 300) {
      lastDebounce = millis();
      if (frameCount > 0) {
        isPlaying = true;
        Serial.println("▶️  Starting auto-sculpt!");
      } else {
        Serial.println("⚠️  No frames recorded yet. Use D6 to record!");
      }
    }
  }

  delay(50);  // ~20 updates per second
}

// ── FUNCTION: Read potentiometer and map to angle range ────────
int readPotAngle(int pin, int minAngle, int maxAngle) {
  int raw = analogRead(pin);              // 0–1023
  return map(raw, 0, 1023, minAngle, maxAngle);
}

// ── FUNCTION: Set a servo to an angle using PCA9685 ───────────
void setServo(int channel, int angle) {
  // Map angle (0°–180°) to PCA9685 tick count
  int ticks = map(angle, 0, 180, SERVO_MIN, SERVO_MAX);
  pwm.setPWM(channel, 0, ticks);
}

// ── FUNCTION: Smooth interpolated move between frames ──────────
//    Instead of jumping to the next position, glide there        
void smoothMove(int b, int s, int e, int w) {
  // Read current positions (last sent angles — approximated)
  static int curB=90, curS=90, curE=90, curW=60;
  int steps = 20;  // Interpolation steps for smooth motion
  for (int i=1; i<=steps; i++) {
    int nb = curB + (b-curB)*i/steps;
    int ns = curS + (s-curS)*i/steps;
    int ne = curE + (e-curE)*i/steps;
    int nw = curW + (w-curW)*i/steps;
    setServo(CH_BASE,     nb);
    setServo(CH_SHOULDER, ns);
    setServo(CH_ELBOW,    ne);
    setServo(CH_WRIST,    nw);
    delay(15);
  }
  curB=b; curS=s; curE=e; curW=w;  // Update current positions
}

What Does Each Part Do? 🔍

PCA9685 Library
Why use PCA9685 instead of Servo.h?
Arduino's built-in Servo library uses the microcontroller's timers — fine for 1–2 servos, but shared timers cause jitter with 4+. PCA9685 has dedicated hardware for 16 channels of perfectly timed PWM. Smoother, more precise, and frees up Arduino for other work!
SERVO_MIN / MAX
What are those tick numbers (102, 491)?
The PCA9685 divides a 20ms servo period into 4096 ticks. 1ms pulse (0°) = 1/20 × 4096 = 205... but SG90 actually needs ~500µs min, so we use 102. These numbers are servo-specific — different servo brands may need adjusting!
Keyframe Recording
How does "teach and play" work?
We store up to 20 positions (keyframes) in 4 arrays — one per servo. When you press Record, the current pot readings are saved at index frameCount. When Play is pressed, the arm visits each saved position in order. Just like animation keyframes!
smoothMove()
Why interpolate between positions?
Without interpolation, servos jump instantly between positions — this looks robotic (bad) and stresses the motor. smoothMove() divides the journey into 20 small steps and moves gradually, making the arm flow like a real sculptor's hand!
INPUT_PULLUP
How do the buttons work without a resistor?
Arduino has a 20kΩ resistor built in! When we write INPUT_PULLUP, that resistor holds the pin HIGH (5V) normally. Pressing the button connects the pin to GND, making it LOW. So LOW = pressed. No extra components needed!
map() function
The math that converts knob to angle
map(raw, 0, 1023, 0, 180) linearly converts the pot's 0–1023 range to servo angle 0–180°. Turn the knob to the middle? map(512, 0, 1023, 0, 180) ≈ 90°. Full left → 0°. Full right → 180°. Simple and elegant!
What you're really learning

6 Real Engineering Skills You Just Gained 🎓

This robot arm teaches concepts used in industrial robotics, surgical robots, animation rigs, and space exploration!

📡
I2C Communication
Using SDA and SCL to send data — the same protocol used in sensors in your phone, smartwatches, and professional robotics controllers.
🎬
Keyframe Animation
Record → Play is exactly how 3D animation and robot programming works. Pixar animators and industrial robot programmers use the same "teach by demonstration" method!
🔄
Servo PWM Control
Precise pulse-width signals for position control. Used in drone flight controllers, RC vehicles, robotic surgery, and CNC machine control axes.
🧮
Linear Interpolation
Smoothly moving between two values over time — core mathematics used in computer graphics, game engines, animation software, and motor controllers.
🤖
Degrees of Freedom
Our arm has 4 DOF (Degrees of Freedom). Each additional joint adds one DOF. The NASA Canadarm2 has 7 DOF. Human arm has 7 DOF. You understand DOF now!
Mixed Power Systems
Logic power (5V from Arduino) and servo power (5V 3A separate supply) on a shared GND. This is standard in every real robot — electronics and actuators need separate power rails!
Safety first!

Stay Safe While Building 🛡️

Servo motors move fast and with surprising force. Always have an adult nearby!

👨‍👩‍👧
Adult supervision
Always build with an adult present, especially when cutting cardboard or acrylic for the arm structure, and when connecting the power supply.
Keep fingers clear
Servo horns can pinch. When uploading code or pressing Play, keep your fingers away from all joints. Servos move instantly when powered!
🔌
Power off to rewire
Always unplug the USB cable AND the 5V power supply before changing any wires. Never rewire with power connected.
🔥
Don't force stuck servos
If a servo hums loudly or gets hot, it's stalled (blocked from moving). Disconnect power immediately. Stalling burns out the motor windings.
💧
Keep clay away from wires
Wet clay can conduct electricity. Keep electronics at least 10cm away from the clay work area. Use a tray under the clay zone.
🔬
Test angles slowly
When you first power up, turn pots slowly. Check each servo moves in a sensible direction before using full range. Incorrect wiring can make a servo slam to its limit and strip its gears.
Fix it yourself

Something Not Working? 🔧

😵
Servos twitch or vibrate randomly
Power problem! You're powering servos from Arduino's 5V pin. Move servo power to an external 5V 3A supply connected to PCA9685's V+ terminal. Also check that Arduino GND and supply GND share a common connection.
🚫
Servos don't respond to knobs at all
Check: (1) Is the PCA9685 library installed? (2) Is VCC connected to Arduino 5V? (3) Open Serial Monitor — do you see changing angle values? (4) Try pwm.setPWM(0, 0, 307) in setup to force servo 0 to 90° and confirm it moves.
🔄
A servo moves in the wrong direction
Swap the pot mapping: change readPotAngle(POT_BASE, 0, 180) to readPotAngle(POT_BASE, 180, 0) for that servo. This reverses the knob direction without physical rewiring.
🔥
Servo gets hot and makes a buzzing sound
The servo is mechanically stalled — something is blocking its movement. (1) Reduce clay stiffness — use softer clay. (2) Limit the servo's angle range (e.g., 30°–150° instead of 0°–180°). (3) Check that the arm joints move freely without the servo powered.
📵
"No PCA9685 found" error in Serial Monitor
I2C communication failed. Check: (1) SDA to A4, SCL to A5 — not swapped? (2) VCC is 5V? (3) Run an I2C scanner sketch to confirm the device address is 0x40. (4) Some PCA9685 boards need address solder jumpers — check the back of your board.
🎛️
Record button doesn't save positions
Check: (1) Is the button connected between D6 and GND? (2) Open Serial Monitor and watch for "Recorded frame #" messages. (3) Check that frameCount is less than 20. If you've recorded 20 frames, call frameCount = 0 to reset by uploading fresh code.
Level up!

Make Your Sculptor Even Smarter 🚀

Now that your robot arm sculpts, try these exciting upgrades!

🕹️
Joystick Control
Replace the 4 separate knobs with 2 thumb joystick modules. X-axis of stick 1 = base, Y-axis = shoulder. Much more natural, game-controller style control!
Gripper Claw
Add a 5th servo at the wrist that opens/closes a gripper claw. Now the arm can pick up small balls of clay and place them — like a real 5-axis robot!
📺
OLED Status Screen
Add a small 128×64 OLED display showing current joint angles, how many frames are recorded, and which mode (manual/playback) is active. Makes it look professional!
📱
Bluetooth Remote
Add HC-05 Bluetooth and write a simple app (or use Serial Bluetooth Terminal) to send commands from your phone. Program sculpting patterns wirelessly!
🌐
WiFi Control
Swap Arduino UNO for an ESP32, add the same PCA9685, and build a webpage to control the arm from any device on your home WiFi network!
🎨
Preset Sculpture Modes
Program 3 button-selectable sculpting patterns: "flat disc", "cylinder", and "pinch pot". Each pattern is a pre-coded sequence of moves stored in flash memory.
🎨 You Built a Sculpting Robot! 🦾

I2C servo drivers, keyframe recording, smooth interpolation, 4 degrees of freedom. You've learned robotics that engineering students study in university. What will your robot create next?

⚡ MakeMindz

Sparking curiosity, one circuit at a time — from Coimbatore to the cosmos.

© 2025 MakeMindz · makemindz.com · Built for young makers everywhere

Comments

Product Cards
Buddy Bot eBook
⭐ New 2026 Release
Build Your
Own Robot!
3D design, wiring &
Arduino coding.
Young inventors love it!
🖨️
3D Print
All parts
Wire it
Circuit guide
💻
Code it
Arduino IDE
🤖
Watch it
Walk & react
📋 Your Details
Enter your name
Valid 10-digit no.
Enter a valid email
Special Website Offer
₹499 300
🌍 International: $5 USD
One-time · Instant digital delivery
🔒 Secured by Razorpay · Your data is safe
📄 Download Free Sample Copy
🔒 Secured by Razorpay · Your data is safe
🍓
Raspberry Pi Pico Mastery
21 Projects
⚡ Launch Price — 80% OFF
Learn Pico
Build 21 Projects!
MicroPython · Wokwi
IoT · Certificate
Perfect for beginners!
🖥️
Wokwi
No hardware
🐍
MicroPy
From zero
🔨
21 Projects
IoT + sensors
📄
Certificate
Verified cert
📋 Your Details
Enter your name
Valid 10-digit no.
Enter a valid email
Special Launch Offer
₹999 200 80% OFF
🌍 International: $5 USD
One-time · Lifetime access · No subscription
🔒 Secured by Razorpay · UPI · Cards · NetBanking
🎉

You're in!

Payment successful! Your Buddy Bot eBook is ready. Time to build!

📖 Access Your eBook Now
🎉

Enrolled!

Payment successful! Lifetime access to all 21 Pico Projects is yours!

🍓 Go to My Course