Remote Control Differential Steering

Hello, all. Okay, so I am making a robot with 6 wheels, 4 of which will drive it. I am using two 24V wheelchair motors, with a 12V battery for each of them. I bought an Arduino Uno and this motor controller: How can I connect a remote control (like this one: to the Arduino or controller. I'm going to use differential steering, if it matters. Thanks!

First - you may want to hook those batteries in series, and drive the 24 volt motors with 24 volts; you’ll have much better torque that way. Otherwise, if you insist on using 12 volts for the motors (nothing wrong with that - top speed will be less, of course, and torque will be lower), wire the batteries in parallel to double the current capacity of your battery pack. Make sure you put in proper fuses between the batteries and after the pack (before the motors/driver) on the positive rail - whatever configuration you choose. A short with large 12 volt batteries will start a fire; I have seen small AGM batteries vaporise wires (firecracker-like bang, bright flash, and acrid smoke, with a bit of flame). Batteries can also explode, catch fire, etc. These are not toys.

Regarding the motor controller: Are you aware of what the current needs for your motors are (stall current)? You need to size your controller for the worst-case scenario of the motor being used (worst case being “stalled” - plus 15-20 percent more). If you haven’t done this, you may find out you have wasted money (when your controller dies or explodes due to an excessive current spike). That said, the controller you selected may work ok, but you need to verify what your motors can pull in current when they are stalled. Also note that for that controller, to reach the maximum current level capabilities of the chipset, you -will- need to mount a properly sized (for the thermal load) heatsink onto the chips.

Good luck, and I hope your project works out!

I also forgot this - why I was recommending the battery hookup in the first place (instead of one battery for each motor) - if you hook up a battery for each motor, you will end up having uneven battery levels (that is, one or the other battery will be drained faster than the other). It will mainly depend on how many "left vs right turns" you make; unless you keep it all equal, you will use more on one side than the other - and things will get really wonky. Put the batteries in series or parallel - you won't have that problem.

Back in the late 1970s, Milton Bradley (a toy manufacturer) brought out a programmable toy tank (first of its kind) called the "Big Trak"; I was one of those lucky kids who found it under the christmas tree one year (still have it - plus the dump transport - all still working!). Anyhow, to keep the costs low (because back then, transistors were still fairly expensive - especially when you are churning out toys like this one), they used half-bridges to drive the DC motors in the machine.

Now - what a half bridge is, is exactly what it sounds like - half of an h-bridge, more or less. You might be wondering how that could work - basically, the motor is placed at the junction of where, in a normal h-bridge, the collectors meet. Except, instead of having the emitters of the bridge go to +V and ground, you have them go to +V and -V! Where did they get the voltages? Well, they had a 6 volt battery on-board made up of 4 D-cells - and split it down the middle, so that there was a middle "ground" reference, and +3 volts on one side, and -3 volts on the other. The motors were 3 volt motors. By activating one or the other transistors, they could get the motor to run in two directions, using only two transistors (again, all to save a penny - well, probably in those days, 50 cents).

Problem was, though, if you didn't program the beast to turn equal amounts left and right, one pair of the batteries would drain more than the other (then later, discharge through both would occur via charging as they tried to naturally level out - it wasn't a great design, but it was cheap!). Ultimately, the batteries would die quickly, and you'd have to have your parents buy you more. That thing could eat batteries like nobody's business! To top it off, a 9V PP3 was used to power the on-board "microcontroller" that you programmed (not cheap, either - but it did last much longer).

Basically - the moral of the story is that powering motors in a differential drive arrangement with separate battery systems is overall a bad idea, unless you absolutely need to do it to save some manufacturing costs (and you don't give a darn that someone else is picking up the tab on the other end).


I believe it's stall current is around 15 amps, with peak around 35. Would this work with those specs? And more what I'm worried about; how will I use a remote control with this setup? Do I even need the motor controller?

The below h-ridge is probably your best deal. Drives two motors of the size you have, and can be controlled via an RC radio receiver.

Just got this: to hook up with the Arduino. I believe I can hook a remote up to it...

doctorflash: I believe it's stall current is around 15 amps, with peak around 35. Would this work with those specs?

That doesn't make sense. Which is it - 15 amps or 35 amps? When a motor is stalled (either at start, or with a locked rotor), that it when it will see it's maximum amperage. Are you sure those values are "15 amps under load, and 35 amps stalled"? That's the only thing that would make sense...?

Regardless, if there is a peak amperage of 35 amps - that h-bridge you have bought only has a peak amperage of 30 amps (per motor - now, if you were using one per motor, like it is advertised as being capable of, then it would be no problem - kinda actually overkill, but workable)! In the short run, it will likely work, but I don't know what will happen to it when it sees 35 amps - maybe it triggers an overload mode?

Also note that those amperage ratings for that h-bridge will only be achievable using a proper heatsink on the bridge; MOSFETs aren't magic - it -will- need heatsinking (the heatsink must be properly sized, and possibly actively cooled with a fan - a nice sized CPU cooler could actually fit the bill well - probably one of the older Pentium/Pentium 2 fans would work nicely, if you can find one).

Hi, all. So, I have two wheelchair motors that are 24V each, with about 15A continuous current and 35A peak. I am using one 12V battery for each of them. I just purchased an Arduino Uno, but am unsure on the easiest way to use a remote control for differential steering on this. Thanks a lot, and let me know if you need any more information.

Sorry, I made a boo-boo. 15 under load. I actually ended up not ordering that Arduino Shield/Motor Controller. Someone suggested that I use something like this:

How’re 24V motors to spin with just a 12V supply?

CrossRoads: How're 24V motors to spin with just a 12V supply?

V E R Y S L O W L Y :)

Not too slowly. Just what I need for now. But that's not what I'm worried about.

doctorflash: Not too slowly. Just what I need for now. But that's not what I'm worried about.

Have you thought about using PWM to control the motor speed? What type if input will you be using? Joystick(s)/buttons/pot(s)/RC/Wifi ????

Please don't multipost on the same subject. It wastes everyone's time.

This is my differential steering solution, this also use PWM for speed control. However is can be use for constant speeds too.

  int DRV2 = map(z, 0, 9, 255, 0); // 0 - 9 = reverse speed
  int DRV1 = map(z, 10, 20, 0, 255); // 10 - 20 = forward speed
  int STRL = map(y, 0, 9, 255, 0); // 0 - 9 = Speed of rotate Left 
  int STRR = map(y, 10, 20, 0, 255); // 10 - 20 = speed of rotate Right
  /* LEFT MOTOR SIDE .................||||||||....................RIGHT MOTOR SIDE*/

  if(z > 10)//forwards with turning               
    //Serial.println("Forward with turning"); 
    analogWrite(M1L, constrain(abs(DRV1 - STRL),0,255));     analogWrite(M1R, constrain(abs(DRV1 - STRR),0,255));   
    digitalWrite(M2L, LOW);                                  digitalWrite(M2R, LOW);   
  else if(z < 9)//backwards with turning              
    //Serial.println("Reverse with turning"); 
    digitalWrite(M1L, LOW);                                  digitalWrite(M1R, LOW);   
    analogWrite(M2L, constrain(abs(DRV2 - STRL),0,255));     analogWrite(M2R, constrain(abs(DRV2 - STRR),0,255));   
   else if(z < 14 && z > 6 && y > 10)//Right........14 > z > 6 = dead zone for 360 rotation             
    //Serial.println("360 left"); 
    digitalWrite(M2L, LOW);                   analogWrite(M2R, STRR);   
    analogWrite(M1L, STRR);                   digitalWrite(M1R, LOW);
  else if(z < 14 && z > 6 && y < 9)//Left........14 > z > 6 = dead zone for 360 rotation              
     //Serial.println("360 right"); 
    analogWrite(M2L, STRL);                  digitalWrite(M2R, LOW);   
    digitalWrite(M1L, LOW);                  analogWrite(M1R, STRL);   

  else //full stop
    digitalWrite(M1L, LOW);                 digitalWrite(M1R, LOW);        
    digitalWrite(M2L, LOW);                 digitalWrite(M2R, LOW);    

Since it seems you just want an RC robot, you might just hack the parts from one of the below RC tanks.

HazardsMind: This is my differential steering solution, this also use PWM for speed control. However is can be use for constant speeds too.

My solution is here:

Could you explain PWM to me? I want a remote similar to this one for now: So RC.

Great! So I have the code I need, but I ended up not getting that other motor controller. If anyone has any ideas (even any that would work without an Arduino), please let me know. I just need a remote transmitter and receiver that can do differential steering with 15 to 35A and 24V motors.

zoomkat: Since it seems you just want an RC robot, you might just hack the parts from one of the below RC tanks.

Could they handle 24V motors and 15 to 35 Amps?