Best way to run 16 DC motors

Hey everyone, I am new to arduino and circuitry in general and am looking to get assistance on my project. I apologize in advance if any of my questions are a little bit convoluted.

For my project I am looking to control 16 DC motors independently from one another. Each motor needs to run only unidirectionally. Only 2 of the 16 DC motors will ever need to be run at the same time. I do not need to be able to control of the speed of the motor. All I need is to be able to is turn them on and off.

Here are my questions:

  1. From a conversation I had at a local electronics store I was told I would need a driver for each of these motors in order to get them to work. But from research I did online I was under the impression I would only need a driver (h bridge?) if I wanted the motor to spin in more than one direction and if I wanted to control its speed? Can someone give me some clarification on this?

  2. Would it be possible to set up all 16 DC motors on a single arduino uno or would I need some sort of shield that can perform the functionality required? What I am looking to do is be able to write a python program that will be able to interact with the serial port to turn each motor individually when required.

  3. My last question is regarding powering of the motors. Just for context here are the motors I am looking to buy:

I am still a little bit unclear on what sort of power supply would be necessary to run these motors. Since I only need 2 of them running at a time and they are between 3V-6V each, does that mean I need a power supply that is between 6-12V? Maybe someone could provide me with a power supply recommendation for the functionality I need?

Thanks you in advance for the help, please let me know if any of my current understanding is still off as I am still a beginner.

As You will run the motors in only one direction You can use a logic FET N-channel transistor as driver. Some way maybe You can multiplex the 16 motors to use 2 drivers.

Webpage says 25 mA no load, but what is the full load and stall currents? Is the motor's unknown torque suitable for your needs? I would buy one motor and test thoroughly before buying 16 with unknown performance.

I was told I would need a driver for each of these motors

True. Although an Arduino pin can provide the 25mA mentioned, the stall current (the current drawn when the motor starts up) will be many times higher, and that would damage the Arduino if connected directly to it. A "driver" can be a very simple circuit, for example a small transistor and resistor.

only need a driver (h bridge?) if I wanted the motor to spin in more than one direction and if I wanted to control its speed?

An H-bridge allows you to drive the motor in either direction. You don't need an H-bridge to control the speed, you can still do that with a simple uni-directional driver.

would I need some sort of shield

You will need to build your driver circuit on some kind of board. I doubt that a shield that does exactly what you need is available. You can buy "prototype shields" on which you can solder up a circuit, but for drivers and connectors for 16 motors that may be a very tight squeeze.

My advice would be to build your circuit on strip board or tri-pad board. Use 2 X uln2803 chips as drivers. They are a rather old part, but should do ok for this project, and they are cheap and simple to understand. The Uno will only have just enough pins, so be sure you don't need more later. Connecting an Uno to the strip board will not be neat or easy, so I would use a Nano. You could solder the Nano to the board, or use female PCB headers to mount it.

what sort of power supply would be necessary to run these motors. Since I only need 2 of them running at a time and they are between 3V-6V each, does that mean I need a power supply that is between 6-12V?

If the motors only ever needed 25mA and you only ever run 2 motors at once and never more than that, even because of a coding error, then the Uno/Nano could supply the motors from the USB supply. But at startup, they could draw 5~10 times as much current. So running only two motors would be ok as long as both are not starting up at the same time. So your code would need to be written to ensure that only two motors ever run together, and that there is a delay between motors starting.

Your question about using a 12V supply indicates your understanding of electrical circuits is poor and you need to study the basics such as the difference/relationship between voltage and current, and the effects of connecting components in series versus parallel. But to answer your question, a 5V 1A power supply should be enough as long as you guarantee only two motors running at once.

Some tips:

If you use an external power supply for the motors and usb power for the Uno/Nano, you must connect the grounds of both supplies together.

You must use a "flyback" diode such as 1N400x for each motor, to protect the rest of the circuit from the negative voltages that the motors will produce when they stop.

You can drive your tiny motors with 2 TPIC6B595 shift registers, using only 3 output pins. Eventually flyback diodes can be omitted, the outputs have built-in clamping diodes. Maximum current is 500mA for a short time (start up), 150mA continuous.