I'm doing some initial research on a project I have in mind. I am super new to all this Arduino stuff so taking it slow and gathering lots of info.

I want to control around 1000 small linear actuators to push/pull a very small load. The purpose of this question is specifically how to manage that many devices. The devices won't ever need to start their own transmissions so the Arduino can get everything done by polling them ...I hope ...and I don't think it would be a lot of data to each device but I imagine overall it may be. I want to control each device at the "same" time, all with the same cabling distance (around 2m). From what I can tell, a CANbus is exactly what I need, where I can assign a unique ID to each device (node) and then write some code to control the network array.

In summary, is a CANbus the ideal bit of hardware here to work with an Arduino to control in real time such a high number of devices?

Thanks, Nick.

Edit: Sorry for the vagueness, I'm very new to all this so really just looking for keywords to help scope my project out before asking more complex specific questions. It's difficult to formulate what's in my head to experienced people without sounding like a goose. I'm experienced on the software side, but the hardware i/o is all brand new.

Ultimately, I am wanting to sample a grey scale image/sequence of images and depending on the value sampled in a 0-255 range which is mapped to the extension capabilities of each actuator to extend/contract in that pixel.

Hope that is more helpful. Thanks.

  • Perhaps edit your question to clarify some things. Why do your devices (linear actuators) need to send any data to the Arduino? Does "control each device at the "same" time" mean you want all the devices to move simultaneously, or just that all of them are in-circuit ready to be controlled? If the latter, what are your desired and required limits on reaction times and position update frequency? Jun 13 '15 at 21:06
  • CAN bus is a solution but possibly overkill for what you want. How are actuators powered and switched. On/off or linear control. They will need power switching . CAN bus will require node electronics per actuator. CAN bus physical layer is almost identical to RS422 hardware and you can implement multi slave R@422 hardware very cheaply. 1000 devices will require proper design of bus loading for any system and depending on whether control is open loop (one way) or closed loop (to and fro data) a star network topology may suit. More information will help people provide better answers. Jun 14 '15 at 1:21
  • @jwpat7 ...have added more project details. The actuators won't ever need to communicate back to the Arduino ...yes I mean move each device simultaneously and at the number i am investigating, I think will need some special attention in the design. Jun 14 '15 at 11:28
  • @Russell McMahon ...thanks very much for your reply. I have updated my question with some more info but your reply is super helpful and helps me expand my research. I have no time limit and this is a learning experience for me so thanks for your suggestions, I can further look into what you have mentioned. I have allot of programming experience but not for devices or in electrical design. Jun 14 '15 at 11:32
  • 1
    Can you expand info on time requirements? How long is acceptable to change 1000 units? How many max can change at once? How important is synchronisation of movements? Afuller explanation of what it does and how may help ensure answer matches need. Jun 14 '15 at 21:09

This is just a suggestion, certainly not the only possible approach.

Step 1: Get a handful of small linear actuators with a builtin controller. Some actuators have no controller, and will require one H-bridge and one analog input each. You do not want these. I have seen some actuators with built-in controllers that can be driven just like servos, I would suggest you get some of those. At this point you should carefully look at costs when choosing the actuators.

Step 2: Learn how to drive those actuators from an AVR-based Arduino, like an Arduino Uno, using the Servo library. I believe you can drive up to 12 actuators with a single Arduino.

Step 3: Drive them using two Arduinos in a master-slave configuration. The master would be a beefy Arduino, like a Mega or a Due. It would send commands to the slave using, say, an I2C bus. After sending the set points for the actuators, it would send a "go" order to the I2C broadcast address. The slave would be the Uno. It would interpret the commands and actually drive the actuators.

Step 3b: Change the master's program to pretend it is controlling many slaves, and a total of 1000 actuators. In reality, all the slaves would have the same I2C address: that of the unique slave actually available. This will tell you whether your master is powerful enough for the job, and you will see how the performance scales.

Step 3c: Optimize the slave's code. Try to have it work with an 8 MHz clock, and use as little flash and RAM as possible.

Step 4: Replace the slave Arduino with a bare AVR chip. You will have to learn how to program it via ISP, but the information is widely available. An Uno is an ATmega328P at heart, but depending on the program size, you may get away with an ATmega48A, which is the same thing only with less memory, and dirty cheap. Or even with a still cheaper ATtiny. If you can make your program work with an 8 MHz clock, then use the internal oscillator, which will save you having to buy an external resonator. All this is to keep the costs reasonable.

Step 4b: Test, test, test. Last chance to change your mind before committing big bucks.

Step 5: If everything works at this stage, it's time to scale up. The same master Arduino, and one bare AVR for each dozen actuators, each with it's own I2C address.

  • Thanks very much Edgar ...as good a place than any to start. Very much appreciated :) cheers Jun 14 '15 at 17:48
  • @NickvanDiem: I just added a few sub-steps. Jun 14 '15 at 18:59
  • .@Edgar Bonet ...worthy additions, thank you :) ...do you offer a consultanting service for Arduino projects? Jun 15 '15 at 12:06
  • Not formally, but if I can help, and you provide some contact info in your profile, I would be happy to give a try. Jun 15 '15 at 15:25
  • .@Edgar Bonet ...great have updated! Ping me a msg Jun 16 '15 at 16:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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