Creating The BMW Kinetic Sculpture

Have to work on 1284P code next,

I'm not sure what you have in mind for the code on the 1284P

My approach would be just to use it as a link between a PC and the various Megas with all the computations for the fancy movements being done on the PC.


Having a PC wouldn’t make it very standalone tho.
Maybe substitute Raspberry Pi in the long game.
Have it talk to the 1284P which then talks to the 2560s.
Or maybe Pi with a hub (as Pi only has 4 USB ports) and talk to the 2560s directly.

Different approaches to the same end game.

Having a PC wouldn't make it very standalone tho.
Maybe substitute Raspberry Pi in the long game.

I would not see any objection to having a cheap laptop as part of the project and an RPi is just a PC in a small package.


Yes, wireless keyboard, mouse, and small LCD screen and you’re there. Can even do code development (painful on a 7" screen) in a pinch. Maybe just for some “magic number” changes, then compile & re-upload.
Or to upload a new batch of patterns for that week’s display.

While I was searching for dual shaft servos for another project, I ran across " serial bus servos" which I had never seen. From what I read, they can be used for fixed angle or continuous rotation with position feed back and speed control features and each servo can be addressed individually. Having their own control boards, it seems they save a whole lot of Arduino pins.
I searched the internet for "intelligent serial bus servos for dummies" but couldn't find much.
Has anyone used them ? Do you think it could be an option for this project or I'm out of the ball park ?

I posted an idea for creating the moves for the sculpture here


Good idea Robin.
Any thoughts on serial bus servos ?

Any thoughts on serial bus servos ?

None. Sorry.


Good idea Robin.
Any thoughts on serial bus servos ?

Never used them. They look interesting though. My only concern would be whether they are position controllable in continuous mode. From a brief scan of the docs for one model, I couldn't be sure.

I contacted the company which makes them will let you know the results.

No more news from CrossRoads, and wawa ?

controlling 70 Serial Bus Servos:

No more news from CrossRoads, and wawa ?

Paid work got in the way.
Constructed the framework though.
Tried to keep it "portable". About 60x200cm.
Will post pictures soon.

Busy here, but this is my progress so far.

New sketch, with a simple sequence that homes the balls half power half a turn (fools position),
then breaks free from the top 128 steps.

After that the program starts with all balls down, and lifted up one by one with half a second interval.
The program restarts (no homing or break-free), after a small pause, after they have all reached the top.
Didn't program other sequences yet, but there is plenty of room for that on the Nano.

 Nano | TPIC6B595
   5V | 2 (VCC)
   D8 | 8 (SRCLR)
  D10 | 12 (RCK)
  D11 | 3 (SER IN) of the first chip
  D13 | 13 (SRCK)
      | 9 to GND
      | 10, 11,19 to GND
      | 18 (SER OUT) to 3 of the next chip

#include <SPI.h>
const byte motors = 48; // sets of four motors
const byte clrPin = 8; // TPIC6B595 SRCLR pin8
const byte latchPin = 10; // TPIC6B595 RCK pin12
const byte rampSteps = 7; // accel/decel steps
byte rampDelay[motors]; // accel/decel delay between steps
byte lag[motors]; // speed reduction
int velocity[motors]; // signed, for direction
int nowPos[motors], newPos[motors]; // int is 16 rotations max (2.5m string with a 50mm dia wheel)
unsigned long prevMillis, prevMicros, interval; // timing
byte val[4]; // TPIC write bytes
bool torque; // reduced during homing
byte sequence, index; // patterns, motor index

void setup() {
 pinMode(clrPin, OUTPUT);
 pinMode(latchPin, OUTPUT);
 digitalWrite(clrPin, HIGH); // clear all shift register data
 for (byte i = 0; i < motors; i++) nowPos[i] = 1024; // homing all motors 1/2 turn

void loop() {
 switch (sequence) {
   case 0: // break free from the top, all motors
     if (nowPos[0] == newPos[0]) { // finished homing
       for (byte i = 0; i < motors; i++) nowPos[i] = -128; // 1/16 turn
       torque = true; // was low power during homing
       sequence = 1; // case 0 is not called anymore
       prevMillis = millis(); // so mark here
   case 1: // 4.5 turns down, all motors
     if (millis() - prevMillis > 8000) {
       for (byte i = 0; i < motors; i++) newPos[i] = 9216; // 4.5 * 2048
       sequence = 2;
   case 2: // all return to zero, one after the other
     if (millis() - prevMillis > 30000 + interval) {
       if (index < motors) {
         newPos[index] = 0;
         interval += 500;
         index += 1;
       } else { // when done
         index = 0;
         interval = 0;
         sequence = 3;
   case 3: // run sequence(s) again
     if (millis() - prevMillis > 75000) {
       prevMillis = millis();
       sequence = 1;

Video here. 48 balls - Sendvid

Wheels, two halves glued together, have been milled with a CNC machine, from 3mm MDF off-cuts.
Might redo them when I have a 3D printer (asked the dude in the red suit).

Excellent job, my compliments so professional.
Wawa, will you eventually share your boards specs ? Can I buy them from you or get them made ?
All controlled with a Nano ?
Is that the fastest the spheres can move ?

Busy here, but this is my progress so far.).

Looks great.

But your video won't play on either Opera or Chrome - seems to be loading forever.


played fine with Chrome for me.

Excellent job, my compliments so professional.
Wawa, will you eventually share your boards specs ? Can I buy them from you or get them made ?
All controlled with a Nano ?
Is that the fastest the spheres can move ?

Thank you.

The boards are just a chain of TPIC6B595 shift registers. Nothing special.
Just a lot of design time to get 24 chips (for 48 motors) on a 100mm x 100mm board.

I have some bare boards left, and some test board already populated.
I suppose I could make a small run if there is more interest.
Buying bare boards could be a problem. You really need a solder stencil and oven to populate this board.
(stencil is visible in the boards picture).

Speed of the motors is currently set to 15RPM. About max what they can handle without loosing steps.
Speed of the spheres also depends on the diameter of the wheel (mine are 50mm inside, 60mm outside rim).

Adafruit has motors with a different gear train.

Still want to try to drive a second board with that Nano (96 motors).
Should have enough resources for that second board.
Motor wiring could become a problem though. I used about 120m of hookup wire for this frame.

Just a quick update on "Serial Bus Servos" if wildbill or anyone else is interested.
Out of curiosity, I ordered 5 of STS3032 servos and one URT-1 control board from FeeTech.
You can daisy chain up to 70 servos to one control board and use only 4 pins on the Arduino.
To program them you can use a debug software, which I didn't use (only for Windows), or download SCservo library and write code.
Getting the servos to move was a long ordeal since there isn't much literature and most of the stuff was in Chinese. I was finally able to get one of their engineers on SkyPe and got them working.
The servos are really cool, 180°, continuous rotation or programmed like steppers with temperature, speed, current, voltage, load and position feed back.
All servos come with 1 as ID and you have to hook them one at a time to change their ID one by one in order to address them.

Wawa (Leo) I’ve been trying to reach you by PM and email with no avail.
Could you please drop me a line ?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.