This guide shows you how to build a robotic arm that you control with your smartphone over Bluetooth. You’ll assemble a simple arm using servo motors and an Arduino board, then pair it with a free app to move each joint. No prior robotics experience is needed, but you should be comfortable with basic wiring and uploading code to an Arduino.
What You’ll Need
- Arduino Uno (or compatible board)
- HC-05 or HC-06 Bluetooth module
- 4 x SG90 micro servo motors (or similar)
- Robot arm kit with acrylic or plastic parts (or 3D-printed parts)
- Jumper wires (male-to-female and male-to-male)
- Breadboard (optional, for easier wiring)
- 5V power supply (2A or more recommended)
- Smartphone with a Bluetooth terminal app (e.g., “Serial Bluetooth Terminal” for Android, “BlueTerm” for iOS)
- USB cable for Arduino
- Computer with Arduino IDE installed
Step-by-Step
- Assemble the robotic arm structure – Follow the instructions that came with your arm kit to put the mechanical parts together. Mount the servo motors in their designated slots. Typically, one servo is for the base rotation, one for the shoulder, one for the elbow, and one for the gripper.
- Wire the servo motors to the Arduino – Connect each servo’s signal wire (usually orange or yellow) to a PWM-capable digital pin on the Arduino: pins 9, 10, 11, and 12 work well. Connect the power wire (red) to the 5V pin and the ground wire (brown or black) to GND. If you have more than two servos, power them from an external 5V supply to avoid overloading the Arduino’s regulator.
- Connect the Bluetooth module – For the HC-05/HC-06, connect its VCC to Arduino 5V, GND to GND, TX to Arduino RX (pin 0), and RX to Arduino TX (pin 1). If your module is 3.3V logic, use a voltage divider on the RX line or a level shifter to avoid damage.
- Upload the control code to the Arduino – Open the Arduino IDE and write a sketch that reads serial data from the Bluetooth module and maps incoming characters to servo positions. A simple approach: use the
Servolibrary, attach each servo to its pin, and in theloop(), check if data is available. For example, if you receive ‘1’ followed by a number from 0 to 180, set the base servo to that angle. You can use a delimiter like ‘B’, ‘S’, ‘E’, ‘G’ for base, shoulder, elbow, gripper. Upload this code via USB. - Pair your smartphone with the Bluetooth module – Power the Arduino via USB or battery. On your phone, enable Bluetooth and search for devices. The HC-05 usually appears as “HC-05” and the default PIN is 1234 or 0000. Pair with it.
- Install and configure a Bluetooth terminal app – Download a serial terminal app that supports Bluetooth. Open the app, connect to the HC-05 module, and set the baud rate to 9600 (or whatever you set in the Arduino code).
- Test individual servos – Send a command like “B90” (if you used the letter prefix approach) to move the base to 90 degrees. Watch the servo move. If it doesn’t, check your wiring and the serial monitor on your computer to confirm data is being received.
- Calibrate the arm’s range – Manually move each servo to its neutral position (usually 90°) before attaching the arm segments. This ensures the arm doesn’t bind or hit its mechanical limits. Adjust the code’s minimum and maximum angles if needed.
- Add a gripper control – If your arm has a gripper, assign a servo to open/close it. Use two commands, e.g., “GO” for open and “GC” for close, or send an angle value like 0 for open and 180 for close.
- Refine the control interface – For smoother control, you can create a custom app using MIT App Inventor or use a pre-made app that sends slider values. The terminal app is fine for testing, but a slider-based app makes operation much easier.
Common Mistakes
- Powering too many servos from the Arduino’s 5V pin – This can cause resets or brownouts. Use a separate 5V supply for the servos and connect their grounds together.
- Connecting the Bluetooth module’s RX to Arduino RX – This is a common wiring error. The module’s TX goes to Arduino RX, and its RX goes to Arduino TX. Connecting both to the same pin will prevent communication.
- Forgetting to share grounds – If you use an external power supply for the servos, you must connect its ground to the Arduino’s ground. Otherwise, the signals won’t be interpreted correctly.
- Using non-PWM pins for servos – Servos need PWM signals. On an Arduino Uno, pins 3, 5, 6, 9, 10, and 11 support PWM. Using pin 13, for example, will not work properly.
- Sending angles outside the servo’s physical range – The SG90 can rotate approximately 180°. Sending 0 or 180 might cause the servo to stall against a mechanical stop, drawing extra current and potentially damaging the gearbox.
Tips
- Use a voltage divider on the Bluetooth RX line – If your module is 5V-tolerant, you can skip this, but many modules run on 3.3V logic. A simple 1kΩ and 2kΩ resistor pair can bring 5V down to ~3.3V.
- Add a capacitor across the servo power lines – A 100µF or 470µF capacitor between 5V and GND near the servos can smooth out voltage spikes and reduce resets.
- Write a simple command parser – Instead of raw numbers, use letter prefixes to make the code more readable and easier to extend. For example, “B45” for base to 45°, “S120” for shoulder, etc.
- Test each servo independently first – Before assembling the whole arm, upload a simple sweep sketch to verify each servo works and rotates in the correct direction.
- Use a phone holder or stand – When testing, keep the arm secured to a table so it doesn’t tip over.
Troubleshooting
- Servos don’t move at all – Check power: measure the 5V rail with a multimeter. Check wiring: ensure signal wires are on the correct pins. Check the code: open the Serial Monitor and send a test command to see if the Arduino responds.
- Bluetooth module not pairing – Make sure the module is powered (LED blinking). Try resetting the module by disconnecting and reconnecting power. Check the baud rate in your phone app – it must match the Arduino’s Serial.begin() setting.
- Servos jitter or move erratically – This often indicates insufficient power. Use a stronger power supply or add a capacitor. Also, ensure the servo signal wires aren’t too long or near high-current wires.
- Arm moves in the wrong direction – Swap the servo’s signal wire to a different pin, or adjust the code to invert the angle (e.g., 180 – angle).
- Phone app connects but no data is received – Verify the Arduino is actually sending data by connecting it to a computer via USB and opening the Serial Monitor. If it works there, the issue is with the Bluetooth module’s wiring or configuration.
- One servo gets hot – This usually means it’s being overworked, either from holding a heavy load or being forced past its mechanical limit. Reduce the load or adjust the angle range.
Frequently Asked Questions
Can I use an HC-06 instead of HC-05?
Yes. The HC-06 is a slave-only module, which is fine for this project since the phone acts as the master. The wiring is the same, but the HC-06 cannot be configured as a master.
What is the range of Bluetooth control?
Typically 10 meters (30 feet) in open air. Walls and interference can reduce this. For longer range, consider using an HC-05 with an external antenna or switch to a different wireless technology like Wi-Fi or RF.
Do I need a special app to control the arm?
No. Any serial Bluetooth terminal app works for sending commands. For a more user-friendly experience, you can build a custom app with MIT App Inventor that has sliders and buttons.
Can I control the arm with a joystick?
Yes. You can connect a joystick module to the Arduino and map its X and Y axes to servo angles. This is a common alternative to phone control.
How many servos can I use with an Arduino Uno?
The Servo library can control up to 12 servos on an Uno, but you’ll need an external power supply for more than 2-3 servos to avoid overloading the 5V regulator.
Why does my servo move to the wrong position?
This can happen if the servo’s pulse width range is not standard, or if the power supply is unstable. Try using the Servo.writeMicroseconds() function instead of write() for finer control.
Related
General steps for current mainstream versions; menus can differ by device and version. See the disclaimer or report an error.
More in this bed
- Fix Unfortunately App Has Stopped: Step-by-Step
- Restart a Frozen Samsung Galaxy A12
- HomePod Stereo Pair with AirPlay 2 from iPhone
- Fix 0x8e5e0247 Error on Windows
- Pixel & Pixel XL No Sound: Solved?
- How to Edit Playlists on iPhone