Mario's Lego Robotics Archive

S15 & S16

S15 & S16 form a sort of duet, where S15, the conductor, reads the score, and S16, the performer, plays a (real) keyboard.

I developed the "score" and the score reader following an idea of Anders Isaksson. He designed a "Lego Brick programmable robot", a simple threaded vehicle that interpretes a "program" made of small bricks on a plate to decide where to go.

I transferred this concept to a musical contest, making something similar to an old piano roll.

My score is a 6xN plate organized this way:

    Column 1 - Note Channel 1
    Column 2 - Separator (ignored)
    Column 3 - Note Channel 2
    Column 4 - Separator (ignored)
    Column 5 - Note Channel 3
    Column 6 - Feed rack (to advance the score)

Each channel is one stud wide and it's divided in two studs "bytes". The conductor's cycle is:

  • read the first stud/bit for each channel;
  • advance the plate one stud;
  • read the second stud/bit;
  • advance the plate one stud again (to be ready for the next byte);
  • code the bytes of the three channels into a single IR message code;
  • send the IR message to the performer;

On the performer, each score channel drives a motor, and each motor manages two keys, for a total of six keys. This allows some polyphony, as up to three keys may be pressed at the same time (provided that there aren't two keys controlled by the same motor).
Actually there is one unused state for each byte: 00 means motor floats (no note), 01 means forward (let's say play C), 10 means reverse (play D), 11 is interpreted like 01 (could be used as a meta command to enhance the execution: eg to play legato or staccato).

The position of the score is tracked by a rotation sensor connected to the gears that make the score advance. The 1x1 bricks on the score are detected using three touch sensors, connected to the RCX through the three touch sensor expander.

S16, the performer, is very simple in its design, but need to be very solid. The hardest problems I had to face: to find the proper gearing to get enough torque without loosing too much speed, and find a way to keep the keys pressed without running the motors continuously.
I solved the first simply trying some different reducing stages until I got the right ratio.
The second turned out a bit more complicated. I chose to use the 24t gear clutch to avoid overloading the motor when the "finger" reaches the lowest position of the key. But I couldn't simply put the motor in the "brake" state to hold the key, because the springs that pushes the keys up are too strong and the trick doesn't work. My final solution was to implement a start/stop cycle that runs the motor for a while every fraction of a second the a key must stay down.

S15 seems to examine a short "score" before starting the performance.

S15, left side. Note the 3 thouch sensor expander.

S15, right side. You can see the motor that moves the score, the rotation sensor and the cams that make the right arm move while the score gets played.

S15, back view. Only a very small part of the touch sensors is visible under the main body of the robot.
The motor is geared down through a gearbox (worm gear + 24t gear).

S16 is ready to play. Surprisingly enough, a standard piano key is almost exactly three Lego studs wide.

S16, top view (RCX removed). Here you can see the three motors with the 24t white clutch gears, the reduction stage and the fingers.

S16, front view. The body need to be very solid to resist the stress the geared down fingers impart to the structure. The feet of S16 are designed to fit under the keyboard to prevent itself from raising when more than a key is pressed at the same time.

Copyright © 1996-2013 by Mario Ferrari. All Rights Reserved.

This page is not connected with or endorsed by The LEGO Company. LEGO, LEGO TECHNIC and LEGO MINDSTORMS are trademarks of The LEGO Company.