I am building an experiment that consists of ten either stepper or DC motors. Ideally I want to just have a switch box with one switch per motor so I can just flip the switch for motor 1 and it will run at a set speed. I'd like to be able to operate up to 3 motors at one time. That is, I want to flip motor switches 1,2, and 3 and have them do their thing then when I'm done I can just flip the switches and shut them off. Seem easy right? I have no idea where to start. This is the motor I'd like to use. Or I will use a DC with equivalent power.

-What can I use as a power source? -How can I connect all ten motors to the power source? -Can all ten motors be run by one arduino?

I'm a noob so bear with me here.

  • \$\begingroup\$ Do yo need them to spin in one direction only? Always at the same speed? \$\endgroup\$ Commented Mar 1, 2013 at 0:03

3 Answers 3


Since you're using switches anyway, and at a set speed, you dont really require an arduino or really much fancy circuitry if a DC motor does your job.

As noted in the other answer, you need 0.33A per motor. A 12V supply rated at above 1A is enough if you are certain to not use more than 3 motors at a time. To be safe, and account for user error, it's probably best to leave yourself some margin on top of that.

If all the motors simply need to run at full speed, all you'd need is a switch in series with each motor, and then connect up all the switch - motor combinations across the battery in parallel. Good practice also requires you to have a diode in series with each motor and one antiparallel to it to prevent it feeding energy back into the supply when you turn it off.

Controlling the speed is more involved. DC motors' speed is roughly proportional to the current flowing through it. In general, this is directly proportional to the voltage applied. If the speeds you need are close to the full speed of the motors, or atleast not too low (too low depends on motor construction and other details), you can drop the extra voltage using a resistor in series with each motor. Make sure to use a resistor capable of dissipating enough power as given by V/R, where V is the excess voltage you're dropping across it and R is the resistance. The motor itself is a coil, and for the purposes of this application can be treated as a resistor. To halve the motor voltage, use a resistance with the same value as the coil resistance. In general, this will reduce motor speed to a little less than half. This can also be produced using an avr/arduino, PWM, and a motor driver circuit. The lack of resistive dissipation makes it more energy efficient to use PWM, but that's the only real advantage you get.

If you want significant reduction in speed, it's best to do it mechanically. Motors with gearheads attached are also commonly available. Generally, the motor rating will include an RPM at the specified voltage. You should pick motors which are atleast in the correct order of magnitude for what you intend to use them for.

A stepper motor, on the other hand, is a more complicated beast. The stepper drive circuitry can be a little difficult to construct and to control. However, if you are interested I'd suggest taking a look at the datasheet of the L293. That along with an L297 with two drivers in parallel or an L298 should be enough for these motors. The L293 takes as its input a square wave, essentially, of frequency which decides the speed. For fixed speed, you simply need a fixed frequency source. A 555 as an astable multivibrator (see datasheet) is enough to produce this, and your switches can be used as before to power each circuit. The frequency can also be generated from an AVR or arduino using a timer in CTC mode, but that way you can only set three speeds since you have only three timers. You will need extra circuitry to route them to the appropriate motors. The AVR can, in principle, replace the L293, but you'll have a bit of a task for handling multiple motors simultaneously. Even for a single motor, in my experience,the complexity it introduces outweighs the cost.


Power Source:

The motor in that spec is a 0.33 amp (4 Watts) motor. Since you want to power 10 motors, you will need deliver 3.33 amps to the motors.

A cheap and extremely robust power source is a computer power supply. You can buy one from here: 16Amp 12VDC PSU or perhaps you have an obsolete computer whose PSU you can steal.

Computer PSU already have short circuit protection, thermal protection, and overload protection so you can run your motors on for extended periods of times without worrying about your lab burning down. Just tie pin 14 and 15 together to enable them...and BAM you have plenty of power at 12V (as well as 5V and 3.3V)

Connecting the motors:

If you use stepper motors, you will need a stepper motor driver board (1 that can support 10 motors or 10 that can support 1 motor each etc). It can get expensive, but you will have precise control over your motor speed. Also, communicating with the driver board will increase Arduino programming complexity (depending on the stepper board... although some allow PWM control)

If speed accuracy is not that important, you can use DC motors, and drive them using PWM out from your arduino and 1 mosfet per motor. If all motors will be running at the same speed (and the load is constant), you only need 1 PWM output (open loop control).

Can 10 motors be run by 1 arduino?

Depends on your drive circuitry and specifically which arduino you are using. For example, if you decide to build using DC motors and you need 10 different speeds, your microcontroller will need 10 PWM ports.


My recommendation, given that you're new is to just start with 1 motor. Considerations for running 10 of them(3 concurrently) can be left for a later stage.

Since you want to use Ardunio, it's easy to get one of the Stepper Motor shields, hook up the motors and run. Ladyada has a nice shield that has a relatively high current rating.

In selecting the shield, you need to make sure it can provide more than the current needed by the stepper motor, so it can be properly driven.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.