Can an arduino uno be used to control a large amount of motors? If so, how?

retrolefty:
The arduino IDE already supplies a servo library for easy control of R/C type servos. Arduino can easily made to control just about any DC motor. What it can't do worth a snot is power such motors, so plan on using external DC power supplies to actually supply the DC current needs of the servo/motors you plan on using.

Lefty

zoomkat:
I'd suggest you get dedicated servo control chips/boards to control the servos and use the arduino to send the appropriate commands to the servo controllers.

Totally agree. But you should consider some other issues too. Since I am not an expert of any kind, I can only provide you with some pointers:

First, the number of maximum motors (150) makes you to consider addressing issues. For example, the controller http://www.pololu.com/file/0J37/ssc03a_guide.pdf has 8 outputs, but it can be daisy-chained to control 128 servos. I am not sure, but you -may- be able to utilize more than 1 serial lines (via bit-banging, which is also a hassle). Also any I2C controller is susceptible to address conflicts, since any I2C device can be assigned quite a few selectable addresses. I don't know addressing issues with SPI or any other serial interface.

Second, timing issues. You obviously can't control those servos simultaneously, and the serial bus you use will introduce latency. The questions are: How much latency are we talking about, and if that much latency is a concern for you. For example, consider the specifications in the chart http://www.towerpro.com.tw/driver/drivers/Towerpro%20servo%20spec.pdf. Calculate
0,1 sec/60 degree ~= 0,0017 sec/degree
and dividing this by 150, we get
~0,00001 sec/deg
that is about 11usec/degree. This (11usec) is the amount of time your arduino can take to send data (which is a multibit signal) to servos, assuming you are sending data to each of them, and assuming each of them has to move 1 degree. Bigger anglular increments, more time, less problem. Translating this number to actual time needed for, say 16 bits including overhead, it already exceeds I2C specification. Of course, these are datasheet values being manipulated by some arbitrary guy on the internet. Do your own calculations, and please correct me if I am wrong.

Finally, while your arduino controls the servos, it may (depending on your application) lack computing power. Amount depends on your application, and you should consider this too.

I hope these may be of any use to you.

-d