Enjoy a whole new level of driving experience with our carefully selected premium auto parts and accessories to keep your car running at its best.

Production Tutorial of Differential Steering Vehicle with Arduino

Step 1: Accessories

The required accessories are:


Arduino uno R3 motherboard

Expansion board

Motor drive module

PS2 wireless controller Sony (model remote control or gun remote control)

Lithium polymer battery (Li Po 2S)

Step 2: steering cup and transmission shaft

Each accessory is 2 sets, which can be assembled and installed on the chassis.

Black steering cup x 2

Axis of rotation x 2

Bearing x 4 (inside 4, outside 8mm, inside 8, outside 12mm)

Pin x 2

Hexagon x 2

Wheel x 2

M4 jam nut x 2

65mm wheel x 2

Step 3: install servo accessories

Fix the L-shaped bracket on the servo system and note the length of the brackets (red circle). Before installing the steering angle on the steering gear, align it 90 (1500 s) To facilitate subsequent installation and commissioning.

M2.5 x 10mm screw x 1

M3 x 6mm screw x 1

M3 x 8mm screw x 4

M2.5 jam nut x 1

M3 nut x 4

Mg996r servo x 1

Ball joint lever (short) x 1

Rudder angle x 1

L-bracket x 1

Name: mg996r

Voltage: 4.8-7.2v

Current: 400-800ma

Steering gear torque: 10kg.cm

Extreme angle: 180

Wire length: 30cm

Gear material: Metal

Control system: changing pulse width

Step 4: connect 2 side steering cups

The long connecting rod is connected with two side steering cups in the upper hole; The short connecting rod is located in the lower hole, the steering wheel is connected on one side, the rudder angle is connected on the other side, and the long connecting rod and the short connecting rod are not in the same hole position.

The distance between long connecting rod holes is 65mm and the distance between short connecting rod holes is 46mm. In case of deviation, fine adjustment can be made.

M2.5 x 10mm screw x 3

Long and short connecting rods x 2

Step 5: flat front

During previous installation, please ensure that the chassis is straight and reverse, bend upward, and fix the previously equipped steering gear and steering cup to the chassis. The steering wheel is fixed on both sides through copper column support, and the plastic cylinder is placed under the steering wheel (the front and rear height is the same). The steering wheel fixing screws cannot be tightened to ensure flexible steering.

Chassis x 1

M3 x 26mm copper column x 4

M2.5 x 8mm screw x 2 (up)

M2.5 x 12mm screw x 2 (down)

M3 x 8mm screw x 12

M3 nut x 4

Black cylinder x 2 (red frame)

Step 6: rear wheel differential section

Finally, the rear wheel seat needs to be fixed. First fix the drive shaft on the output shaft. The installation method of the rear wheel is similar to that of the front wheel; Rear wheel seats are installed on the left and right sides, * top R is installed on the left and standard L is installed on the right.

The lower bracket is a Z-shaped structure. Pay attention to the direction during installation, close to the width of differential case, and the wheel track is very narrow. If it is not clear, it can be consistent with the perspective in the figure. The upper bracket fixing requires removing the screws to install.

Difference x 1

Drive shaft x 2

Triangular bracket x 4

Z-bracket x 4

Rear wheel seat x 2

Bearing x 4

Hexagon adapter x 2

Pin x 2

Aluminium cylinder x 2 (fixed between upper support (triangle) and rear wheel seat)

65mm wheel x 2

M2 x 12mm screw x 2

M2 jam nut x 2

M2.5 x 16mm screw x 4

M2.5 x 25mm screw x 2

M2.5 x 30mm screw x 2

M2.5 jam nut x 8

M4 Locknut x 2

Step 7: secure the differential case to the chassis

Install the copper gear on the input shaft, the reduction gearbox, fix the locking screw on the D-shaped plane, fasten it with an L-shaped wrench, and then fix the differential case on the chassis

M2.5 x 8mm screw x 4

Gear ring 0.5 modulus 54 teeth x 1

Step 8: motor fixing

First fix the motor to the large bracket and then to the frame. The bracket is fixed with M3 screws. The motor is fixed on the bracket, and the left and right positions of the motor can be adjusted to set the tightness of the gear.

M2.5 x 5mm screw x 2 (pan head screw)

M3 x 6mm screw x 3 (with washer)

L-type motor support

Rs380 DC motor


Operating voltage range: 3.0-9.0v

Rated voltage: 7.2V

No load speed: 16200rpm

No load current: 0.50a

Rated speed: 14000rpm

Maximum current: 3.29a

Rated torque: 110g.cm

Rated power: 15.8w

Starting torque: 840g.cm

The red dot of the electrode is positive.

Step 9: upper chassis installation (acrylic)

The upper case is made of acrylic material, with Arduino uno and raspberry PI holes integrated, and rocker switch installed in rectangular holes

M3 x 8mm screw x 9

M3 x 35mm copper column x 5

Rocker Switch x 1

Acrylic acid x 1

Step 10: anti collision cotton

The red circle is the fixing hole of the copper column, and the bumper pad is pressed by the washer

M3 x 8mm screw x 8

M3 gasket x 4

M3 x 16mm copper column x 4

Anti collision cotton x 1

Step 11: motor drive module

The MD01 motor driver consists of a single H-bridge driver IC and four external n-channel MOS transistors. Its volume is small (length * width: 3.3 * 2cm). The mainboard supports 5.9v to 30V wide voltage input, continuous current can reach 17a, and supports 100% pulse width modulation. The module realizes the forward, reverse and speed control of the motor through the direction dir pin and the speed control PWM pin.

The control terminal supports 1.8v-5v logic input, and the driver IC integrates PWM current regulation function to limit the motor surge current. The low level of SLP pin allows the MD01 driver module to enter low power consumption mode, resulting in low quiescent current consumption of about 9ua.

Note: in SLP low power consumption mode, the default is low level. When using, it is necessary to keep SLP pin high level. If low power consumption mode is not required, it can be directly connected to 5V.

Working voltage: 5.9-13v

Operating current: 17A

Logic input: 1.8V, 3.3V, 5V (max)

PWM frequency: 100kHz

Current detection: 50mV / a (valid only in forward or reverse direction)

Reflected voltage protection: none (VM and GND shall not be reversed)

Step 12: remote control (2.4GHz)

2.4GHz remote controller we use Sony PS2 or RC model controller; If you have an electronic governor, you may not need Arduino uno to join, but we are learning to use Arduino.

The handle is equipped with adapter plate to facilitate wiring and reverse connection protection. The interface starts from the bottom: GND VCC dat CMD CS CLK


* The program controls the forward and backward

* movement of the motor through the Y-axis of the left joystick

* the X-axis of the right joystick controls the left and right of the servo

* the button part also writes forward and backward

* and the right button controls the left and right.




//for v1.6

PS2X ps2x;

Servo myservo;

#define PS2_ DAT A0

#define PS2_ CMD A1 //PS2

#define PS2_ SEL A2

#define PS2_ CLK A3

#define PWM 5 //Motor As pin

#define DIR 6 //Motor As pin

#define SERVOPIN 4 //servos pin

#define SERVOMIN 40 //the angle of servo

#define SERVOMID 90

#define SERVOMAX 130

#define TURNLEFT myservo.writeSERVOMIN //turn left

#define TURNMID myservo.writeSERVOMID //turn middle

#define TURNRIGHT myservo.writeSERVOMAX //turn right

#define MOTORFOWARD setMotor100 //motor forward PWM

#define MOTORBACK setMotor-100 //motor back PWM

#define MOTORSTOP setMotor0 //motor stop PWM

bool EnableRockerR = 1;

bool EnableRockerL = 1;

int RMid = 0 ;

int LStop = 0 ;

#define pressures false

#define rumble false

int error = 0;

byte type = 0;

byte vibrate = 0;

void* resetFunc void = 0;

void setup







error = ps2x.config_gamepadPS2_CLK PS2_CMD PS2_SEL PS2_DAT pressures rumble;

if error == 0

Serial.printFound Controller configured successful ;

Serial.printpressures = ;

if pressures

Serial.printlntrue ;



Serial.printrumble = ;

if rumble




Serial.printlnTry out all the buttons X will vibrate the controller faster as you press harder;;

Serial.printlnholding L1 or R1 will print out the analog stick values.;

Serial.printlnNote Go to www.billporter.info for updates and to report bugs.;

else if error == 1

Serial.printlnNo controller found check wiring see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips;

else if error == 2

Serial.printlnController found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips;

else if error == 3

Serial.printlnController refusing to enter Pressures mode may not support it. ;

type = ps2x.readType;

switch type

case 0

Serial.printUnknown Controller type found ;


case 1

Serial.printDualShock Controller found ;


case 2

Serial.printGuitarHero Controller found ;


case 3

Serial.printWireless Sony DualShock Controller found ;


void loop

if error == 1 //skip loop if no controller found


ps2x.read_gamepadfalse vibrate; //read controller and set large motor to spin at vibrate speed

if ps2x.ButtonPSB_START //will be TRUE as long as button is pressed

Serial.printlnStart is being held;

if ps2x.ButtonPSB_SELECT

Serial.printlnSelect is being held;

if ps2x.ButtonPressedPSB_PAD_UP

Serial.printlnPAD_UP just pressed;


EnableRockerL = 0;

else ifps2x.ButtonReleasedPSB_PAD_UP

Serial.println PAD_UP just released;


EnableRockerL = 1;

LStop = 0;

if ps2x.ButtonPressedPSB_PAD_DOWN

Serial.printlnPAD_DOWN just pressed;


EnableRockerL = 0;

else ifps2x.ButtonReleasedPSB_PAD_DOWN

Serial.println PAD_DOWN just released;


EnableRockerL = 1;

LStop = 0;

if EnableRockerL //Forward and Back

if 0 《= ps2x.AnalogPSS_LY && ps2x.AnalogPSS_LY 《= 110

digitalWriteDIR HIGH;

analogWritePWM mapps2x.AnalogPSS_LY 0 110 2550;

LStop = 0;

else if 255 》= ps2x.AnalogPSS_LY && ps2x.AnalogPSS_LY 》= 140

digitalWriteDIR LOW;

analogWritePWM mapps2x.AnalogPSS_LY 140 255 0255;

LStop = 0;


ifLStop == 0


LStop ;

if ps2x.ButtonPressedPSB_CIRCLE //will be TRUE if button was JUST pressed

Serial.printlnCircle just pressed;


EnableRockerR = 0;

else if ps2x.ButtonReleasedPSB_CIRCLE

Serial.printlnCircle just released;


EnableRockerR = 1;

RMid = 0;

if ps2x.ButtonPressedPSB_SQUARE //will be TRUE if button was JUST released

Serial.printlnSquare just pressed;


EnableRockerR = 0;

else if ps2x.ButtonReleasedPSB_SQUARE //will be TRUE if button was JUST released

Serial.printlnSquare just release

Production Tutorial of Differential Steering Vehicle with Arduino 1

recommended articles
no data
Logo-white 1616138042732
We are committed to the R&D and production of automotive metal parts processing, focusing on professional automotive electronics companies serving car factories.
Contact Us

If you have a question, please contact at contact

US Phone:  +1 (929) 633-0706

Chinese Phone: +86 18928700849



(US) 1942 Broadway St.,STE 314C Boulder CO 80302 United States

(Chinese)316 Nanfang Yongfu International, 35 Yongfu Road, Yuexiu District, Guangzhou City, Guangdong Province

Copyright © 2024 CARCUU.COM |Sitemap
Customer service