How to Build a Remote-Controlled Car with a Servo Steering System
If you’ve ever wanted to build your own remote-controlled car from scratch, there’s one component that can make or break your steering performance: the micro servo motor. These tiny but powerful actuators have become the go-to choice for hobbyists and engineers alike, thanks to their precise angle control, compact size, and affordability. In this guide, I’ll walk you through building a complete RC car with a servo-based steering system, focusing on why the micro servo is the star of the show and how to get the most out of it.
Why Micro Servo Motors Dominate RC Steering
Before we dive into the build, let’s talk about why micro servos are such a hot topic in the RC world. Unlike traditional DC motors that just spin, a micro servo gives you position feedback. You tell it to go to 45 degrees, and it locks there. That’s critical for steering, where you need to turn the wheels exactly the right amount, not just spin them endlessly.
Key advantages of micro servos for steering:
- Precision: Typical micro servos offer 0.1 to 0.5 degree resolution, meaning you can make tiny steering corrections.
- Torque-to-size ratio: A standard 9g micro servo can deliver 1.5 to 2.5 kg·cm of torque, enough to turn lightweight RC car wheels.
- Low power draw: They run on 4.8V to 6V, perfect for battery-powered projects.
- Standardized control: Using PWM (pulse width modulation), any microcontroller can drive them with a single signal wire.
The most common candidate for this build is the SG90 or MG90S micro servo. The MG90S has metal gears, which I recommend for any RC car that might hit bumps or walls.
Tools and Components: What You’ll Need
Here’s the full shopping list. I’ve broken it into categories so you can source parts easily.
Chassis and Drivetrain
- RC car chassis kit (or 3D-printed frame) – I used a 1:10 scale buggy chassis
- Two DC motors (3V to 6V, 200-300 RPM) for rear-wheel drive
- Wheels and tires (matching your chassis size)
- Battery holder for 4x AA batteries (6V) or a 2S LiPo (7.4V)
Electronics and Control
- Microcontroller: Arduino Nano or ESP32 (I prefer ESP32 for built-in Bluetooth)
- Motor driver: L298N or L9110S dual H-bridge
- Micro servo motor: MG90S (metal gear, 9g)
- RC receiver/transmitter: FlySky FS-i6 or similar 2.4GHz system
- Power supply: 5V voltage regulator (if using LiPo) or direct battery
Mechanical Parts
- Servo horn (comes with servo)
- Steering linkage (metal rod, ball joints, or 3D-printed parts)
- Screws, nuts, standoffs
- Zip ties and double-sided tape
Step 1: Designing the Steering Mechanism
The steering system is where the micro servo shines. Unlike rack-and-pinion setups in full-size cars, we’ll use a direct-link or bellcrank design.
Understanding the Geometry
The servo’s output horn rotates about 180 degrees. To convert that rotation into linear motion for the wheels, you need a linkage. The key is to match the servo’s travel to the wheel’s steering angle.
Formula for linkage length:
If your servo rotates 90 degrees (from center to full lock), and you want the wheels to turn 30 degrees, the linkage arm length should be:
Linkage length = (Servo horn radius) / tan(Wheel angle)
For a typical servo horn radius of 10mm and 30 degree wheel angle:
Linkage length = 10 / tan(30) ≈ 17.3mm
I designed a simple three-bar linkage using a 3D-printed bracket. The servo mounts perpendicular to the chassis, and a metal rod connects the servo horn to the steering knuckle.
Mounting the Micro Servo
Secure the servo with two M2 screws through the chassis. Important: Never overtighten the screws on a micro servo – the plastic case can crack. Use rubber grommets if your servo came with them, as they dampen vibration.
Step 2: Wiring the Electronics
Now let’s connect everything. The wiring diagram is straightforward, but pay attention to power distribution.
Power Distribution Table
| Component | Voltage | Current (peak) | Notes | |-----------|---------|----------------|-------| | Arduino/ESP32 | 5V | 500mA | Use regulator if battery >5V | | DC motors | 3-6V | 1-2A each | Direct from battery via L298N | | Micro servo | 4.8-6V | 750mA stall | Do not share 5V rail with motors |
Critical wiring rule: The micro servo must have its own power supply or a dedicated 5V regulator. When the DC motors draw high current, they can cause voltage dips that make the servo twitch or lose position.
Connection Map
- Arduino 5V → Servo VCC (only if using separate regulator)
- Arduino GND → Servo GND, L298N GND, battery GND
- Arduino D9 → Servo signal wire (yellow/white)
- Arduino D5, D6 → L298N IN1, IN2 (motor A)
- Arduino D10, D11 → L298N IN3, IN4 (motor B)
- L298N 12V → Battery positive (7.4V or 6V)
- L298N 5V → Arduino VIN (if battery >5V)
Step 3: Programming the Servo Control
This is where the micro servo’s personality comes alive. The code needs to read RC receiver signals and map them to servo angles.
Basic Servo Sweep Test
First, let’s verify your servo works. Upload this to your Arduino:
cpp
include <Servo.h>
Servo steeringServo; int servoPin = 9;
void setup() { steeringServo.attach(servoPin); steeringServo.write(90); // Center position }
void loop() { // Sweep from 0 to 180 degrees for (int angle = 0; angle <= 180; angle++) { steeringServo.write(angle); delay(15); } for (int angle = 180; angle >= 0; angle--) { steeringServo.write(angle); delay(15); } }
Note: Most micro servos have a physical stop at 0 and 180 degrees. Forcing them beyond can strip gears. Always test your mechanical range first.
Integrating RC Receiver Input
For a real RC car, we read PWM signals from the receiver. Each channel outputs a pulse between 1000µs (full left) and 2000µs (full right), with 1500µs as center.
cpp
include <Servo.h>
Servo steeringServo;
int ch1Pin = 3; // Receiver channel 1 (steering) int ch2Pin = 4; // Receiver channel 2 (throttle) int servoPin = 9;
void setup() { steeringServo.attach(servoPin); pinMode(ch1Pin, INPUT); pinMode(ch2Pin, INPUT); }
void loop() { int steeringPulse = pulseIn(ch1Pin, HIGH); int throttlePulse = pulseIn(ch2Pin, HIGH);
// Map 1000-2000 to 0-180 degrees int servoAngle = map(steeringPulse, 1000, 2000, 0, 180); servoAngle = constrain(servoAngle, 10, 170); // Safety limits
steeringServo.write(servoAngle);
// Control motors based on throttle int motorSpeed = map(throttlePulse, 1000, 2000, -255, 255); // ... motor driver code here ...
delay(20); // 50Hz refresh rate }
Step 4: Mechanical Assembly – Getting the Linkage Right
This is the most finicky part. A poorly aligned linkage will cause binding, servo stall, or uneven steering.
Alignment Checklist
- Servo horn at 90 degrees – Before connecting any linkage, power the servo and command
write(90). The horn should be perpendicular to the servo body. - Wheels straight ahead – Manually align both wheels so they point straight.
- Linkage length adjustment – Use adjustable turnbuckles or threaded rods. Shorten or lengthen until the servo horn and wheels are both centered.
- Check for binding – Manually rotate the servo horn through its full range. If you feel resistance at any point, adjust the linkage geometry.
Common Micro Servo Issues in Steering
- Jittering: Usually caused by insufficient power. Add a 470µF capacitor across the servo’s power pins.
- Oscillation: The servo hunts back and forth. This happens if the PID loop in the servo’s internal controller is unstable. Try reducing the load or adding a small amount of friction.
- Gear stripping: Metal gears (MG90S) help, but if you hit a curb at full speed, even metal can break. Consider adding a servo saver (a spring-loaded horn) to absorb shocks.
Step 5: Tuning the Servo for Real-World Driving
A micro servo isn’t just “set and forget.” You need to adjust its behavior for different driving conditions.
Speed vs. Precision Trade-off
Micro servos have a transit time – typically 0.1 to 0.2 seconds per 60 degrees. For racing, you want fast response. For crawling, you want slow, precise movements.
Adjusting servo speed in software:
cpp // Slow steering for crawler int targetAngle = map(steeringPulse, 1000, 2000, 0, 180); int currentAngle = steeringServo.read();
if (currentAngle < targetAngle) { currentAngle += 2; // Increment slowly } else if (currentAngle > targetAngle) { currentAngle -= 2; } steeringServo.write(currentAngle);
Endpoint Adjustments
Most RC transmitters allow you to set steering endpoints (EPA). Use this to prevent the servo from over-rotating and hitting mechanical limits. On the FlySky FS-i6, set EPA to 80% initially, then increase gradually.
Step 6: Advanced Features with Micro Servos
Once your basic car runs, you can push the micro servo further.
Dual Servo Steering
For heavy cars, use two micro servos – one per wheel. Wire them in parallel (same signal, separate power) and program them to mirror each other. This doubles the torque without changing the control code.
Servo Feedback for Self-Alignment
Some micro servos (like the MG996R) have a feedback pin that reports actual position. You can use this for closed-loop control:
cpp int actualPosition = analogRead(feedbackPin); // 0-1023 int error = targetPosition - actualPosition; steeringServo.write(servoAngle + error * 0.1); // Proportional correction
This compensates for load changes when the car is turning on loose gravel.
Bluetooth Control via ESP32
If you’re using an ESP32, ditch the RC receiver and control the car from your phone:
cpp
include <BluetoothSerial.h>
BluetoothSerial SerialBT;
void loop() { if (SerialBT.available()) { char command = SerialBT.read(); if (command == 'L') steeringServo.write(0); else if (command == 'R') steeringServo.write(180); else if (command == 'C') steeringServo.write(90); } }
Real-World Testing: What to Expect
I built two versions of this car – one with a plastic-gear SG90 and one with a metal-gear MG90S. Here’s what I found:
Performance Comparison
| Metric | SG90 (Plastic) | MG90S (Metal) | |--------|----------------|----------------| | Torque | 1.8 kg·cm | 2.5 kg·cm | | Gear durability | Stripped after 3 crashes | Survived 20+ crashes | | Price | $2.50 | $4.00 | | Weight | 9g | 13g |
Verdict: Spend the extra $1.50 for the MG90S. The plastic gears in the SG90 will fail the first time you hit a wall at speed.
Common Failure Modes
- Servo horn slipping – The splines on the horn wear out. Solution: Use a metal servo horn with set screws.
- Binding at full lock – The linkage hits the chassis. Solution: Add physical stops with 3D-printed bumpers.
- Servo burnout – If stalled for more than 2 seconds, the internal motor can overheat. Solution: Add a current limiter or software timeout.
Final Tweaks for Maximum Performance
- Lubrication: Apply a tiny drop of silicone grease to the servo output shaft. This reduces friction and improves centering accuracy.
- Vibration damping: Mount the servo on foam tape. This isolates it from chassis vibrations, which can cause false position readings.
- Waterproofing: If driving outdoors, coat the servo PCB with conformal coating and seal the case seams with hot glue.
Building an RC car with a micro servo steering system is one of the most rewarding projects you can tackle. The servo gives you that satisfying “snap” when you turn the wheel, and the precision control makes even a budget car feel like a high-end racer. Whether you’re building for speed, crawling, or just tinkering, the micro servo is the unsung hero that turns your creation from a toy into a precision instrument.
Copyright Statement:
Author: Micro Servo Motor
Link: https://microservomotor.com/building-remote-controlled-cars/rc-car-servo-steering.htm
Source: Micro Servo Motor
The copyright of this article belongs to the author. Reproduction is not allowed without permission.
Recommended Blog
- How to Build a Remote-Controlled Car with a Horn Sound
- How to Build a Remote-Controlled Car with an Aerodynamic Body
- How to Build a Remote-Controlled Car with Telemetry Sensors
- How to Build a Remote-Controlled Car with a Rack and Pinion Steering System
- How to Build a Remote-Controlled Car with a Smartphone App
- Building Your First Remote-Controlled Car: A Beginner's Guide
- How to Build a Remote-Controlled Car with a Lightweight Body
- Understanding the Basics of Radio Frequency Control in RC Cars
- How to Build a Remote-Controlled Car with a 3D-Printed Chassis
- How to Build a Remote-Controlled Car with Wi-Fi Control
About Us
- Lucas Bennett
- Welcome to my blog!
Hot Blog
- Building Your First Remote-Controlled Car: A Beginner's Guide
- Comparing Micro Servo Brands for Robotics Projects
- Brushless vs Brushed Micro Servos for Long-Lasting RC Boat Use
- How to Prevent Binding in RC Car Steering with Micro Servos
- Understanding the Basics of Control Circuit Design
- The Importance of Signal Integrity in PCB Design
- The Role of Voltage and Current in Motor Torque and Speed
- Micro Servo vs Standard Servo: Signal Noise Sensitivity
- How to Clean and Maintain Your RC Car's Motor
- Using a Joystick to Control Your Micro Servo Robotic Arm
Latest Blog
- Creating a Servo-Controlled Automated Plant Watering System with Arduino
- How to Build a Remote-Controlled Car with a Servo Steering System
- Specification of Motor Type: Brushed, Brushless, Coreless etc.
- The Role of Micro Servo Motors in Automated Inspection Systems
- How to Improve Motor Torque and Speed Performance
- How to Optimize Motor Efficiency to Reduce Heat
- How to Build a Remote-Controlled Car with a Horn Sound
- Using Arduino to Control the Angle, Speed, and Direction of a Micro Servo Motor
- How to Connect a Micro Servo Motor to Arduino MKR NB 1500
- Exploring the Use of Micro Servo Robotic Arms in Logistics
- The Evolution of Gear Materials in Servo Motors
- Micro Servo Motors in Automated Assembly Lines
- What Voltage and Power Do Micro Servo Motors Require?
- Micro Servo Motors in Automated Sorting Systems
- Designing a Micro Servo Robotic Arm for Military Applications
- Vector's Approach to Compact and Efficient Micro Servo Motors
- Using Raspberry Pi to Control Servo Motors in IoT Applications
- How to Build a Remote-Controlled Car with an Aerodynamic Body
- Thermal Performance: How Micro and Standard Servos Handle Heat
- High Precision Micro Servos for Scale RC Airplanes