<Flex>

Godfried-Willem RAES

2002/2016

[Nederlandstalige versie]

 

Robot: 'Flex'

Of all musical instruments, the singing saw very likely should be considered one of the most stubborn. It is very difficult to master well, and even mastered, it remains quite unreliable. Automating such a sound source constituted a real challenge. Our musical robot <Flex> consists of an assembly of two singing saw or flexatone like soundsources: two blades of hardened stainless steel either bowed by belt driven bow mechanisms or struck by beaters. For the latter we provided two possibilities: solenoid and/or motor driven beaters and bend by a system of heavy duty stepping motors. In this respect it may be considered a realization of Russolo's fifth category in noise makers (intonarumori): sound of metals, stone etc. The lengths of the singing blades relate to each other as Pi to e, the two most infamous irrational numbers both in physics and mathematics. One would expect the Pi saw being lower pitched than the e saw, but that assumption is insubstantial in this case. The lowest resonant frequencies of the saws are extremely low and far lower than the lowest pitches we can hear. Thus the sounds produced correspond always to very high partials and modes of vibration, very inharmonic in nature. Bending the blades changes their resonant frequency and therefore glissandi can be produced. With the bowing mechanism provided, it constitutes a double singing saw. With the beaters, it's rather a super large flexatone.
The building of this robot was started in 2002 and in its first version, was controlled through a printer port on a laptop computer. Internally it made use of some 8 Microchip PIC based Basic Stamps. Details on the original design, which we had to abandon as printer ports on PC's became obsolete, can be found on the archival webpage for this robot. In 2016 we undertook a complete rebuild of the robot, preserving all possibilities of the first version and adding quite a bit more. We redesigned the electronics completely and made use of five Microchip 18F2525 microcontrollers. All newly added mechanical parts are made off stainless steel now.

The circuitry used is very similar to that developed for our <Rotomoton> robot, although we used a different kind of stepping motor (4-phase, 0.45 Ohm coil resistance, 1.2mH inductance), requiring a much higher current of up to 4.5A per winding. Two stepping motors are used for bending the steel blades and two more steppers for the bow motion. The bows, 70cm in length, are mounted vertically, facing each other on the central tube of the robot. Here we made use of V-belts with rosin on the flat outside. The belts run over 10 cm diameter aluminum wheels. Positioning of the bows against the blades is achieved with two bi-directional solenoids, PWM-controlled by the bowing PIC-microprocessors. A sensor mounted on the bow arm makes precise positioning possible. Thus bowing speed as well as bow pressure can be user controlled as separate parameters. Since motor speed can be controlled by the software in the range of 0.5 Hz to 5 Hz, the bowing speed ranges from 160cm/s to 1.57m/s. Ramping is implemented on all motor functions, thus preventing stalling of the motors.

The individual beaters for the steel blades (two beaters on the backside of each saw blade) are driven by strong solenoids. Musical dynamics are implemented by applying pulse width modulation techniques in the driver circuits. However, the dynamic range is different from blade to blade and also depends on the amount of bending applied by the stepping motors. On the front side of the blades, we mounted small DC motors with rotating beaters. The speed of these can be controlled.

<Flex> uses five microprocessors, all of them Microchip PIC type 18F2525. Two processors are used for the bows, two for the trapezoidal threads and one for the beaters and lights.
The instrument is mounted in a TIG-welded triangular structure with three large and sturdy wheels, 40 cm in diameter each. The instrumental part is mounted on the wheel base with springs.

Of all our robotic instruments, <Flex> may be one of the most complicated and difficult to write music for. It is nearly impossible to write anything meaningful without working with the robot itself. A thorough study of the midi implementation table is absolutely mandatory.

The pictures below are taken by Moniek Darge, during the first construction in our workshop, 2002. They are arranged in chronological order such that you can follow the process of the making visually.

These are some pictures taken by the author during the rebuild in 2016:

Midi implementation table (Version 2.0):

Flex listens to midi channel 12 (0-16) [13 if counting 1-16]

Here is the complete midi implementation table:

Note numbers

 

function velocity

remarks

NOTE ON/OFF      
BENDING      
36 Pi-saw positioning command 1-127

the velocity byte controls the speed of the motor

Movement will stop as soon as the position set with the pitchbend command is reached. Motor speed can be further modulated using the keypressure command.

A note-off will stop the motor unconditionally.

37 e-saw positioning command 1-127

the velocity byte controls the speed of the motor

Movement will stop as soon as the position set with the pitchbend command is reached. Motor speed can be further modulated using the keypressure command.

A note-off will stop the motor unconditionally.

38 fully stretch the Pi saw 1-127

the velocity byte controls the speed of the motor

Movement will stop as soon as the fully stretched position is reached. This will cause a recalibration of the positioning mechanism.

A note-off will stop the motor unconditionally, but will annihilate calibration if sent before the saw reached the end position.

39 fully stretch the e saw 1-127

the velocity byte controls the speed of the motor

Movement will stop as soon as the fully stretched position is reached. This will cause a recalibration of the positioning mechanism.

A note-off will stop the motor unconditionally, but will annihilate calibration if sent before the saw reached the end position.

40 fully bend the Pi saw 1-127

the velocity byte controls the speed of the motor

Movement will stop as soon as the fully inward bend position is reached. If this happens it recalibrates the trajectory settings in the firmware.

A note-off will stop the motor unconditionally. but will annihilate calibration if sent before the saw reached the inward end position.

41 fully bend the e saw 1-127

the velocity byte controls the speed of the motor

Movement will stop as soon as the fully inward bend position is reached. If this happens it recalibrates the trajectory settings in the firmware.

A note-off will stop the motor unconditionally, but will annihilate calibration if sent before the saw reached the inward end position.

BOWING BOW MOVEMENT (Motor) Ramping is implemented, to avoid stalling
48 frontbow motor, turn clockwise 1-127

velocity controls motor speed

Motor can be further modulated with the key pressure command

  frontbow motor, stop turning 0  
49 frontbow motor, turn counterclockwise 1-127

velocity controls motor speed

Motor can be further modulated with the key pressure command

  frontbow motor, stop turning 0  
50 backbow motor, turn clockwise 1-127

velocity controls motor speed

Motor can be further modulated with the key pressure command

  backbow, stop turning 0  
51 backbow motor, turn counterclockwise 1-127

velocity controls motor speed

Motor can be further modulated with the key pressure command

  backbow, stop turning 0  
BOWS BOW POSITION and PRESSURE
60 pulse and hold frontbow to Pi-Saw 1-127 the bowing force is controlled with the velo byte. After the note on, the bow pressure can be further modulated using the key pressure command
  release pusher, return to center 0 sets bow pressure on the Pi-blade to 0
61 pulse and hold frontbow to e-Saw 1-127 the bowing force is controlled with the velo byte. After the note on, the bow pressure can be further modulated using the key pressure command
  release pusher, return to center 0 sets bow pressure on the e-blade to 0
62 pulse and hold backbow to Pi-Saw 1-127 the bowing force is controlled with the velo byte
  release pusher, return to center 0 sets bow pressure on the Pi-blade to 0
63 pulse and hold backbow to e-Saw 1-127 the bowing force is controlled with the velo byte
  release pusher, return to center 0 sets bow pressure on the e-blade to 0
64 center frontbow such that it does not touch any saw blade 1-127

velobyte is irrelevant.

This command will also stop the bow motor

    0

release the holding magnet (clutch)

also stops the bow motor

65 center backbow such that it does not touch any saw blade 1-127

velocity byte is irrelevant.

This command will also stop the bow motor

    0

release the holding magnet

also stops the bow motor

BEATERS
72 frontal motor beater on Pi-saw 1-127 velocity byte steers motor speed
73 motor beater on backside of Pi-saw 1-127 velocity byte steers motor speed
74 Backside beater on the Pi saw 1-127 velo steers attack force
75 Backside beater on the Pi saw 1-127 velo steers attack force
84 frontal motor beater on e-saw 1-127 velocity byte steers motor speed
85 motor beater on backside of e-saw 1-127 velocity byte steers motor speed
86 Backside beater on the e-saw 1-127 velo steers attack force
87 Backside beater on the e-saw 1-127 velo steers attack force
LIGHTS key pressure is implemented to modulate flashing speed
120-123 backside halogen lights on the e saw 0-127 the velocity byte steers the flashing speed, 0=off, 127=on without flashing.
124-127 backside halogen lights on the Pi saw 0-127 the velocity byte steers the flashing speed, 0=off, 127=on without flashing.
       
KEY PRESSURE      
36 changes the speed of the Pi saw bending motor 1-127 only applies if a note on command was given for note 36
37 changes the speed of the e saw bending motor 1-127 only applies if a note on command was given for note 37
48 frontbow motor speed CW 0-127 note must be on prior to sending the command
49 frontbow motor speed CCW 0-127 note must be on prior to sending the command
50 backbow motor speed CW 0-127 note must be on prior to sending the command
51 backbow motor speed CCW 0-127 note must be on prior to sending the command
60 key pressure frontbow on the Pi-blade 0-127

controls the bow pressure for the front bow

note must be on prior to sending the command

61 key pressure frontbow on the e-blade 0-127

controls the bow pressure for the front bow

note must be on prior to sending the command

62 key pressure backbow on the Pi-blade 0-127

controls the bow pressure for the back bow

note must be on prior to sending the command

63 key pressure backbow on the e-blade 0-127

controls the bow pressure for the back bow

note must be on prior to sending the command

72 speed of rotation for the motor beater on the Pi saw 1-127  
73 speed of rotation for the back motor beater on the Pi saw 1-127
74 repetition rate for Pi beater backside 0-127 0 disables repetition
75 repetition rate for Pi beater backside 0-127 0 disables repetition
84 speed of rotation for the motor beater on the e-saw 1-127  
85 speed of rotation for the back motor beater on the e-saw 1-127
86 repetition rate for e-saw beater backside 0-127 0 disables repetition
87 repetition rate for e-saw beater backside 0-127 0 disables repetition

CONTROLLERS

controller nr

  parameter  
41 Attack bow force on direction changes 0-127

Implemented for firmware development

default = 112

42 Hysteresis control 0-127

for bow centering PID regulation

Implemented for firmware development only

default = 56

43 Attack pulse duration for the bow movement 1-127 default = 127
44 Ramping speed for the bow motors 1-127 default = 64
45 sets the destination for the pitch bend command  

0-63 = pitchbend commands apply to Pi-blade

64-127 = pitchbend commands apply to e-blade

46 Ramping speed for the bending motors 1-127 default = 64
66 Power on/off switch 0 or >0 Power off resets all controllers and repetition rates. It preserves the calibration.
123 All notes off anything stops all activity, does not reset controllers nor repetition rates.
Program change not implemented    
PITCH BEND sets the bending position of either the Pi or the e blade, depending on ctrl #45

0-234

(msb=0 or 1, lsb=0 to 127)

0 = fully stretched. (Lowest pitch)

8 bits used. MSB-LSB format, to comply with the midi standard.

One unit corresponds to a full rotation of the thread. This equals a 3 mm displacement.

msb=1 and lsb=107 bring the saw blades to the fully bend inward position.

Remarks:

Back to Logos-Projects page : projects.html Back to Main Logos page:index.html To Godfried-Willem Raes personal homepage... To Instrument catalogue Pictures from M&M performances using Flex

Nederlands:

Robot: <FLEX>

<Flex> behoort tot de kategorie robots met niet precies bepaalbare, of -preciezer gesteld- voorspelbare, toonhoogte. Het klankopwekkingsprincipe is hetzelfde als dat wat ten grondslag ligt aan zowel de zingende zaag als aan de flexatone: gebogen veerstalen platen die gestreken (zingende zaag) of aangeslagen (flexatone) worden, waarbij de toonhoogte afhangt van de mate van buiging van de platen. Roestvast staal of veerstaal is hiervoor, vanwege de grote hardheid, het meest geschikte materiaal. Net zoals <ThunderWood> kan ook deze robot gezien worden als een realisatie van een geluidskategorie in de reeks intonarumori van Luigi Russolo, met name in dit geval de 5e groep (metaalgeluiden).

De beide uit roestvast staal gemaakte klankbladen waarmee <Flex> is opgebouwd, kunnen zowel worden aangeslagen als gestreken. Daartoe wordt elk zaagblad uitgerust met niet minder dan 4 elektromagnetische kloppers en van een motorgestuurd aanstrijkmechanisme. De strijksnelheid zowel als de ritmiek kunnen perfekt worden gestuurd. Voor de strijkstokken gebruikten we stappenmotoren voorzien van een loopwiel met een diameter van 100 mm. De motorsnelheid kan gestuurd worden tussen 0.5 en 5 omwentelingen per sekonde. Dat brengt een regelbare boogsnelheid met zich van 0.16m/s tot 1.57 m/s. De beweging van de boog wordt gestuurd met per boog een enkele zware bidirektionele elektromagneet. Hierdoor kan elke boog zowel tegen het Pi- als tegen het E-blad worden gedrukt en gestreken. Worden beide magneethelften geaktiveerd, dan keert de boog terug naar de middenstand en raakt hij geen van beide bladveren. Sensoren gemonteerd op de armen van de boog maken een nauwkeurige regeling mogelijk. Aangezien we twee strijkstokmechanismen voorzagen, is het perfekt mogelijk beide bladen tegelijkertijd aan te strijken, maar ook, om eenzelfde zaagblad met twee bogen tegelijkertijd te strijken, wat vaak de produktie van multiphonics voor gevolg heeft, ook al is het resultaat in dit geval niet helemaal voorspelbaar noch betrouwbaar.

De voedingen voor flex zijn erg uitgebreid, vooral vanwege de grote vermogens nodig voor de aansturing van de stappenmotoren.


Bouwdagboek (vanaf 2016 in het engels):

Omdat ons vaak wordt gevraagd hoeveel werk en tijd kruipt in, en nodig is voor, het bouwen van een muzikale robot, hebben we -zoals we het eerder deden voor <Belly>, ook voor <Flex> een beknopt bouwdagboek bijgehouden. De ervaring met Belly leerde ons bovendien dat het bijhouden van zo'n dagboek ook erg nuttig is wanneer naderhand bepaalde details moeten worden bijgesteld of onderdelen vervangen.

TODO:

Afmetingen & andere technische specifikaties:

Design en konstruktie: dr.Godfried-Willem Raes

Atelier medewerkers:

Music Composed for <Flex>:


(Terug) Naar logos-projekten:

projects.html

(Terug) Naar Logos' index-pagina:

index.html

Naar Godfried-Willem Raes official web page... Naar katalogus instrumenten

gebouwd door

Godfried-Willem Raes

Pictures from M&M performances using Flex

Robody Picture with <Flex>:

Emilie De Vlam en Godfried-Willem Raes (foto Bart Gabriel), Flex version 1.0, 2002.

Some pictures from performances with Flex version 1.0.

 

Last update: 2016-09-15 by Godfried-Willem Raes


Service manual:

Flex can be taken apart for servicing into following modules:

1.- Overview:

2.- Wiring diagram for adressing of flex components:

Source code for the front bow PIC controller

Source code for the back bow PIC controller

Source code for the Pi-blade PIC controller

Source code for the e-blade PIC controller

Source code for the Midi input and hub board

Circuit diagram for the motor control boards: (<Flex> uses four of these boards)

These are the boards for the movement of the Pi and e blades:

These are the boards for the two bow motors:

3. Calculations for trapezoidal threads and bending position:

Thread length: 100 cm, diameter 12 mm. Material: Stainless Steel. Type TR12x3

Total number of revolutions: 335 (thread speed), or 67000 stepping motor full steps. The HY200 motor has 200 steps per revolution.

Usefull length in <Flex> = 70 cm or 234 revolutions. (= 46800 stepping motor steps)

So, at 5 Hz rotation speed (= 5x60=300 rpm), we have a linear displacement velocity of 1.5 cm/s. In order to get a speed of 1 second for the full 70 cm traject, we would need a rotational speed of 234 Hz (= 14000 rpm). However, the maximum motor-speed will be ca. 1500 rpm, so the linear movement will be limited to 7.5 cm /s.

In the first implementations in the microcontroller we tried to keep track of the position by counting the motor steps (incrementing or decrementing according to the direction of rotation) in the interrupt code for the timer used. A word variable was used, so 16 bits unsigned. However, the midi pitchbend command is limited to 14 bits. Thus one unit of position in pitchbend format corresponded to four steps for the motor. Hence the usefull range for the pitchbend command became 0 to 11700. After many attempts to get this working, we gave up. Slipping and motor stalling seemed to be an unavoidable source of accumulating errors. Hence we mounted sensors on the TR12 spindles to count the really performed rotations. As a consequence the precision of the positioning is now limited to 1 rotation, corresponding to a linear displacement of 3 mm.

4. Solenoid data:

Bidirectional solenoids: August Laukhuff, trakturmagnet 24V, Force 24N. (in <Flex> these solenoids are operated on a 48V power supply, using PWM).

5. Bow belts: GATES QPIII XPZ 1800. These must get collophonium in order to bow well. The easiest way to apply rosin is by dissolving colophonium powder in alcohol (ethyl or methyl) a aplying the liquid with a small paint brush. Wat for the alcohol to evaporate before using the bows again.

6. Stepping motors: MAE HY200 3424 470 A8. Current: 4,7 A/phase, 8-wires. Holding force: 193 Ncm. In full-step mode the motor does 200-steps/rotation. Hence, for 60 rpm we need a clock frequency of 200 Hz. For 1500 rpm we need a clock frequency of 5000 Hz

7. Power supply modules:

8. Tilt sensors: Penny & Giles, STT280/60/P2. Datasheet or Murata SCA121T-D07 [Datasheet].

9. Inductive proximity sensors: Pepperl+Fuchs NBB2-V3-E2-V5 (used as revolution counters on the TR12x3 spindle)

10. End sensors: 4 x microswitch with rollers.

11. Power-on relay: PCF-112D1M (12V coil voltage, 25 A switching current).

12. Titanium M10x60 bolts: probolt-usa.com Part number MTIPB1060F and MTIFN10 (M10 nuts).[not yet mounted]

13. Connectors used on the PCB's (Weidmueller / Imo / Phoenix contact)