Microtonal Musical Robot

Research project on the development of new tools for musical expression at the University College Ghent


a robotic and moving Bb cornet

dr.Godfried-Willem RAES


[Nederlandstalige versie]

Robot: <Korn>

This musical robot belongs to the category of our more experimental instruments. The experiment was not so much an attempt to realistically automate an existing instrument, although it does in fact make use of an old Bb cornet and there is an attempt to get a realistic cornet sound. In this case however, we did not start with a mechanical design for an artificial embouchure with mouth, lips and mouthpiece coupled to and in acoustic interaction with the tubing of the instrument, as we have done in <So> and the first version of <Bono>, but rather used a small motor-speaker compressor directly coupled to the cornet via a capillary. The motor driver causes resonance in the cornet tubing, but in this case there is no real windflow through the instrument. When a note is requested from the cornet, the firmware will calculate the optimum valve combination -including non orthodox fingerings- for the requested pitch. Microtonal pitches are implemented such that the instrument is capable of performing quartertone music, as well as a wide range of different tunings and temperaments with great perfection. The relatively low Q-factor of the horn (compared to strings...) as an acoustic resonator renders this very well possible. The signal generated in the motor was shaped after a physical model of the air pressure waveform in the mouth cavity of a player. Since there is no loop coupling from the resonator to the generator, the sound generation mechanism is a hybrid somewhere between synthetic/electronic and natural/acoustic. The advantage being that the reliability of the robot becomes very high, but this is obtained at the detriment of realism.

The valves are used in this instrument to tune the fundamental frequency of the instrument. The valves can be controlled independently from the mouth driver frequency. They are mechanically driven by unipolar solenoids (Lucas-Ledex types as used in our player pianos) and have a return spring. Bi-directional solenoids would have been superior (read faster and more silent in operation due to the absence of return springs) but we just did not have enough mounting space in this rather small instrument.

High brass instruments in their normal human biotopes tend to move quite a bit in space. The highly directional characteristic of these instruments make this also an expressive valuable parameter. Thus we tried to implement movement in two degrees of freedom in this robot: the cornet can be tilted in the vertical plane over an angle of about 90 degrees and in the horizontal plane, it can rotate over 180 degrees. This conforms pretty well to what human players do in terms of movement on stage. The movements cannot be very fast however, at least not much faster than what a real cornet player could do whilst playing. Horizontal movement is a lot faster than the vertical movement. However, the intention never was to render Doppler effects possible...

The electronic circuitry consists of four PC-boards:

1. Midi-hub board: This board, using a Microchip 18F2520 controller, takes care of the Midi I/O handling and communication as well as the control of some of the the lights and the movement of the horizontal movement stepping motor, including the two end sensors. For these we used two Pepperl & Fuchs inductive proximity sensors (NJ2-V3-N) . Provisions were also made for two PIR-sensors allowing the robot to 'search' in space for moving human bodies. The output data from these sensors can either be routed to the commands for the horizontal stepping motor or output as a midi data stream. Circuit details can be found at the very end of this webpage.

2. Horizontal stepping motor driver board using a Nanotec SMC42 compact microstep constant current driver. The noisy fan was removed as well as the DIN-rail mount.

This motor is designed for 360 steps for a complete rotation. In this robot, the motor is driven in microstepping mode at 8 clocks for a single step.

3. Pulse & Hold board: This board steers the three solenoids for the pistons as well as the vertical movement stepping motor. Component population on the board was modified to accommodate for required position sensors for the motor movement. For position sensing in the vertical plane we first used a beautiful antique mercury switch with 3 contacts. This switch had a glass tube in a circular shape filled with mercury. It was designed rotate over its 6 mm axis. However, the binary nature of this switch in combination with lost steps on motor slip made precize positioning problematic. Thus, in 2010, we replaced this switch with a Penny+Giles analog tilt sensor connected to the an0 analog input of the PIC microprocessor.

The light bulbs and LED's mapped on the midi notes 124 to 127 are also controlled by this microprocessor board.

4. Sound generator board: This board, using a microchip ds-PIC 30F3010, steers the 15 Watt motor compressor horn driver. Note that the output transformer forms a tuned circuit, tuned to the formant band of the cornet (1.8 kHz). The transformer at high sound pressure levels, operates close to saturation, thus causing a formant shift upwards. When a coil gets into saturation the inductance decreases. This clearly nonlinear behavior of the circuit was part of the design.

The wave forms generated in the firmware on the pwm1 and pwm2 outputs of the controller are PWM based modified sinewaves in opposite phases. The carrier frequency is around 20 kHz.

Power supply voltages and currents:

Midi Mapping and implementation:

Midi channel: 12 (fixed in the firmware)
Midi note range: 52 to 94. (Optimum sound in the range 66-89) Note on, velocity is implemented and has a wide control range. The most realistic sounds are obtained in the 100 range for the velocity byte.

Note Off commands are required, but can be dropped for pure legato playing.


Controller 10: (Panning) Horizontal movement controller. Value 64: center, 127->0= move left (CCW), 0->127=move right(CW). The firmware will calibrate on each of the extreme positions (0 or 127). The full semicircle takes about 2 seconds in time. The firmware assumes that after a cold start, the cornet is in a central position. It will recalibrate whenever an endposition is encountered.

Controller 13: [to be implemented] changes the lookup table for the valve-pitch correspondence. The default is 0 and conforms to an empirical mapping of valve combinations for optimal resonant sound. Value 1 selects the theoretical valve combinations calculated after simplified acoustic theory, values 2 and 3 select user programmable (sysex) lookup tables. Higher values can be used to send just any valve combination the user wants to see used for any note. The table below gives all details:

Ctrl 13 Value -1/2t -1t -1 1/2t remarks
0 default empirical [detailed mapping]
1 acoustic [detailed mapping]
2 user table 1 (sysex programmable)
3 user table 2 (sysex programmable)
4 off off off 4-7 valid
12 on off off 12-15 valid
20 off on off 20-23 valid
28 on on off 28-31 valid
36 off off on 36-39 valid
44 on off on 44-47 valid
52 off on on 53-56 valid
60 on on on 60-63 valid
other invalid

Using this controller it is also possible to change the fingering for a sounding note whilst it is sounding, thus rendering some sound coloration possible without changing the actual pitch.

Controller 17 is used to control the maximum sound level during the attack period and as a general volume controller while the note is playing. (Note that when this controller is set to 0, you can't play any notes. For a dal niente crescendo, start from value 1.) A good default setting to start working from is 90.

Controller 18 is used to control the duration of the note attack. The interdependencies of these controllers together with the velo byte is shown in the graph below:

A good default setting for this controller is 105.

Controller 19: Release controller: to be implemented.

Controller 22: Vertical inclination controller. Value 64: center, 63-0= move down, 65-127=move upwards. Note that downward movement is twice as fast as upwards movement. The traject is less than 90 degrees. The traject will be recalculated whenever the endposition read by the sensor is encountered. Thus, when you request shaky movements, the traject will be very limited because of the bouncing of the sensor that this causes.

Controller 25: valve movement force controller. With value 18, the movement is smooth and a bit sluggish, whereas with 127 it may get noisy but very fast. With values below 18, valve movement may become a bit unpredictable since the movement will depend on wear, temperature, return spring force variations and greasing of the pistons. After a cold start, this controller will be in a default 64 position.

Controller 31: Motor speed for the horizontal motor (left-right movements). The speed can be varied between a fixed minimum value and a (safe) and fixed maximum value. Value 0 sets the horizontal motor to move at the slowest speed.

Controller 32: Motor acceleration/deceleration time. On cold boot this controller is always set to 64. Larger values lead to a longer acceleration time on horizontal motor movement starts as well as to longer slowdown times at approaching the destination. Acceleration and deceleration are always symmetric. As a consequence, small movements will be performed slower than longer trajects.

Controller 66: Power on/off switch (0 = off, any other value is on)

Controller 67: brings the horizontal motor to the extreme left position (parameter value =64). The controller is a one shot and does not need a reset. Any other value than 64 is disregarded.

Controller 68: brings the horizontal motor to the extreme right position (parameter value = 64). The controller is a one shot and does not need a reset. Any other value than 64 is disregarded.

Controller 70: Calibrates both the vertical movement motor to a horizontal position as the horizontal position to a straight forward position. This command should only be sent on a full stop of all motors, i.e. no other midi motor related commands should be sent during this calibration. The parameter can be any non-zero value. This calibration also takes place automatically after a cold start of the robot. Do not use this controller in any sequenced composition.

Controller 71: Recalibrates the horizontal motor movement only and brings the instrument back to a full frontal position. During calibration no other motor related midi command should be sent to the robot.

Controller 90: used to select movement interactive modes. With value 0 this feature is switched off. Possible values are 1,2 and 3. More interactive modes may be implemented in the future. The movement data are derived from the two PIR sensors mounted in the front of the instrument.

Controller 100: Midi output mode setting. (See further below). Defaults to zero.

Controller 101: Midi output data rate. See below.

Controller 123: switches the sounding note off, unpowers the steppers, dims all the lights.

Program change: not implemented so far

Lights: The lights are mapped on very high midi-notes as follows:

Pitch bend: The <Korn> robot can be used in any tuning system. In the drawing below we give the coding example for a quartertone scale:

Most good sequencer software (such as Cakewalk or Sonar) use the signed 14 bit format. Note that one unit of the msb corresponds exactly to a 0.78 cent interval. To convert fractional midi to the msb only pitchbend to apply follow following procedure: if the fractional part is <= 0.5 then msb= 63 + (FRAC(note) * 128), if the fractional part is larger than 0.5, we should switch on the note + 1 and lower the pitch with msb= (1-FRAC(note)) * 128. Note off does reset the pitch bend for the playing note!

Midi OUTPUT control:

Data from the PIR sensors can be output as midi data as well as data with regard to the position of the robot in space. A controller (#100) has to be sent to Korn to enable midi out. This feature is meaningless for composers using sequencing programs, but can be very welcome for composers wanting to develop interactive applications using programming languages such as Power Basic, GMT or even PD. The implementation is as follows:

Controller 100: Midi output mode. The data byte consist of 7 bits (0 to 6), each used as a switch to enable/disable particular midi output streams.

Other values are implemented for internal research, firmware debug and development purposes. Note that on start up and calibration, the available motor traject in steps is always output using the pitchbend format, even when controller 100 is set to zero. The traject is in the order of 1480 steps.

Controller 101: Use to set the data rate for the midi output of the PIR sensors. The values accepted for this controller are between 1 and 8. The default value is always 4. The meaning is as follows:

Technical specifications:

Design and construction: dr.Godfried-Willem Raes

Collaborators on the construction of this robot:

Music composed for <Korn>:

Pictures taken during the construction in our workshop:

Back to composers guide to the M&M robot orchestra.

Back to Main Logos page:index.html To Godfried-Willem Raes personal homepage... To Instrument catalogue Go to Godfried-Willem Raes' homepage


Robot: <Korn>

De overgrote meerderheid van de muzikale robots die we ontwikkelden voor 2007, waren elk voor zich pogingen om bestaande akoestische instrumenten zo getrouw mogelijk te automatiseren in zoveel mogelijk aspekten van hun bespeling. Daartoe mimeerden we zoveel als mogelijk de menselijke bespelingswijze van deze instrumenten. Het <Korn> projekt wijkt van dit opzet in hoge mate af. Hier was het helemaal niet onze bedoeling een mimetisch bespeelde automatische kornet te bouwen (immers, een automatische Sousafoon -<So>- hadden we reeds met redelijk sukses voltooid, waardoor een automatische kornet niet direkt een nieuwe verwezenlijking zou zijn). Niettemin maakt deze robot wel degelijk gebruik van een oude Sib kornet die hier evenwel in eerste plaats dienst doet als afstembare resonator in een instrument dat verder alleen werd gekoncipieerd om min of meer realistische kornet-geluiden op een plastische en kontroleerbare wijze te kunnen produceren. In dit ontwerp werd uitgegaan van het simuleren van de drukvariaties in de mondholte van de bespeler en in het mondstuk middels een elektronisch aangestuurde motor driver, zoals gebruikt in kleine megafoons. Wat hier ontbreekt is de terugkoppeling met de resonator die het instrument zelf eigenlijk is. Het instrument fungeert hier als een passieve resonator en is niet via een dynamische regeling gekoppeld aan de eigenlijke toonvorming. Daardoor krijgen we enerzijds een heel hoge betrouwbaarheid, maar anderzijds dan weer een toch wat synthetisch klinkend klankresultaat met weinig of geen artefaktische bijgeluiden en een eerder stereotype gelijkmatige artikulatie. Wat we van bij het ontwerp evenwel zeker geimplementeerd wilden zien was een ruime gamma aan mogelijkheden op mikrotonaal gebied. Zowel kwarttoonsmuziek als muziek in de platonische juiste boventoonsstemmingen diende perfekt speelbaar te zijn. Om die reden kan deze robot heel goed overweg met alle niet-standaard vingerzettingen. Akoestisch gezien wordt dit mede mogelijk gemaakt door de relatief lage Q-faktor van de licht konische toeter gezien als akoestische resonator.

De ventielen werden geautomatiseerd met unidirektionele elektromagneten, helemaal naar plan en opzet zoals toegepast in de eerste versie van <So>. We hadden liever bidirektionele magneten gebruikt, maar daarvoor vonden we gewoonweg geen plaats in een zo klein instrument als de kornet. De ventielen werken dan ook met de gewone terugslagveren.

De elektronische schakeling bestaat uit enkele afzonderlijk funktionele boards:

1. Midihub board; Dit board, uitgerust met een 18F2520 PIC-controller van Microchip, staat in voor de midi-kommunikatie en voor de besturing van de horizontale stappenmotor. Twee ingangen worden gebruikt voor het inlezen van de horizontale positiesensors. Daarvoor werden aanvankelijk mikroswitches met lange naaldhefbomen in veerstaal gebruikt, maar die werden in 2010 vervangen door induktieve NAMUR proximity sensors van Pepperl+Fuchs. (NJ2-V3-N). Deze sensoren worden analoog door de microprocessor ingelezen, waardoor we geen problemen meer hebben met bouncing. Twee andere ingangen worden gebruikt voor het inlezen van de data afkomstig van twee pyrodetektoren (PIR-sensors). Deze laten toe de horizontale beweging van de kornet een menselijk lichaam in de ruimte te laten volgen.

2. Stappenmotor besturings board, waarvoor gebruik werd gemaakt van een Nanotech SMS42 module. De motor, een type met 360 stappen per omwenteling, wordt bedreven in microstepping mode aan 8 kloktikken per stap, wat een erg vloeiende beweging mogelijk maakt.

3. Pulse-Hold board voor de besturing van de ventielen evenals voor de besturing van de vertikale stappenmotor. Dit board maakt gebruik van een Microchip 18F4620 controller in 40pins DIL behuizing. De bestukking van het board werd enigszins gewijzigd om de beide noodzakelijke inputs voor de eindsensor van de motor mogelijk te maken. Voor deze sensor gebruikten we aanvankelijk gebruik van een cirkelvormige driepolige kwikschakelaar voorzien van een 6 mm as. Het onderdeel dateerde van vlak voor de tweede wereldoorlog.. Door de slip van de motor in kombinatie met het louter binair karakter van de sensor kregen we echter af te rekenen met problemen in het juist positioneren van de kornet. Daarom vervingen we de kwikschakelaar in 2010 door een hellingssensor van Penny & Giles (STT 280/60/P2) . Deze sensor wordt analoog ingelezen door de A0 analoge ingang van de mikroprocessor. en laat een erg nauwkeurige positionering toe.
De lampjes en LED's gemapt op de noten 124 tot en met 127 worden ook door deze mikroprocessor bestuurd.

4. Klankproduktieboard: Dit board werd uitgerust met een 30F3010 ds-PIC kontroller van Microchip. Dit board heeft ook een midi-out, dit in eerste plaats omwille van de debug mogelijkheden. Opgemerkt moet worden dat de uitgangstransfo hier een afgestemde kring vormt met een resonantie rond 1.8 kHz, overeenkomstig de gewenste formant voor een kornet.

Aangezien een kornet op zich genomen een vrij klein en licht instrumentje is, kwam de idee bij ons op om het ook meteen enige mate van beweeglijkheid mee te geven. Deze beweeglijkheid behoort immers ook tot het typische geluid van de hoge koperblaasinstrumenten, die immers zonder uitzondering een sterk direktionele akoestische afstraling hebben. Hiermee konden we meteen Toshiba & Yamaha de loef afsteken, want hun bewegende trompetspelende robot -die wel zowat alle kranten haalde- is vals! Het geluid komt immers uit een luidspreker uit de borstkas van de robot trompettist. Ook wilden we onze robot graag zo gaan bouwen dat hij het zou vertikken om debiele muziek te spelen... Dat is echter helaas nog steeds vapourware. Horizontaal kan onze robot 180 graden bewegen, en vertikaal 90 graden. Hiermee mimeren we heel goed wat menselijke spelers op het podium doen. Een erg hoge snelheid konden we voor deze bewegingen evenwel niet realizeren, wat niet wegneemt dat die snelheid (horizontaal) zeker niet moet onderdoen voor die van een menselijke bespeler. De vertikale beweging is door de gebruikte wormwieltechnologie aanzienlijk trager. Het was dan ook niet de bedoeling Doppler effekten mogelijk te maken.

De <Korn> robot werd gemonteerd op 3 rondom beweeglijke zwenkwielen voorzien van remmen. Wanneer de remmen niet worden vastgezet tijdens het spelen, kan de robot zich als gevolg van de eigen bewegingen ook wat over het podium verplaatsen... een leuk maar eigenlijk onvoorzien neveneffekt.

Construction & Research Diary:

(Terug) naar logos-projekten:


Terug naar Logos' index-pagina:


Naar Godfried-Willem Raes personal homepage... Naar katalogus instrumenten

gebouwd door

Godfried-Willem Raes

Go to Godfried-Willem Raes' homepage  

Last update: 2016-10-28 by Godfried-Willem Raes

The following information is not intended for the general public, but is essential for maintenance and servicing of the robot.

Technical drawings, specs and data sheets:

The moving upper part can be taken out of the base. First loosen the set screws on the dented wheel as well as on the ring under the base plate, then pull the rod out vertically. As an alternative one can also loosen the upper ball bearing (two M6 bolts) and take out the vertical mechanism. This however requires realignment of the ball bearing. Then, disconnect the large black rectangular connector. The wiring is drawn below:

Horizontal Stepping Motor: Sanyo Denko Co. LTD, Step-Syn, type 103-820-2 (IBM P/N 2526734) DC 4.5 V - 1.4 A, 2 degrees/step. Lot NR. 7749. Asmaat: 9.5 mm. Drive belt: Gates, Powergrip 180XL.

Vertical Stepping Motor: ASMO, Type 865100-0110 Part number AX020009A, 4 phase, 100 Ohms/winding. Operating voltage: 24 V. Wire colors: white blue black, yellow orange white. This component was recycled from an old Japanese photocopier. Asmaat: 6mm, met wormwielvertraging.

MOSFET's: IRL640: Specs: 17 A / 200 V, logic level mosfet. (Ug = 5 V). No cooling applied. IRLZ44N can be used as an alternative.

Solenoid type used for the valve pushers: Lucas Ledex (now distributed by Saia-Burgess) STA type 195207-228 (13.8 V DC @ 100% duty), 10 Watt, 7.8 N @ 5mm with 60 degree plungers. 26 mm diameter, height 52 mm. The required anchor displacement for the cornet pistons is 16 mm.

Note on the push tubular solenoids used to activate the pistons:

The following specs are valid at 20 degrees Celsius. Maximum holding force is 29 N

13.8V 100%

10 W
1.166 A.turns

17.78 mm in 41 ms
2 N starting force

2.54 mm @ 10 N

max. ON-time: 470"
pulsed: 360"

20 W
1.649 A.turns

17.78 mm in 32 ms
3 N starting force

2.54 mm @ 18 N

max. ON-time: 120"
pulsed: 32"

40 W
2.332 A.turns

17.78 mm in 22 ms
9 N starting force

2.54 mm @ 27 N

max. ON-time: 32"
pulsed: 8"

100 W
3.688 A.turns

17.78 mm in 15 ms
12 N starting force

2.54 mm @ 40 N

These solenoids may not deliver enough starting force to start the valve movement. Therefore we could switch them in series with a 14.3 Ohm resistor (10 Watt) and have a 2200 microfarad electrolytic over them. When we feed the solenoids from a 24 V supply, the solenoids when firing will see a voltage of 24 V across them for a time RC= 42 ms, enough to start the movement with a force of about 5 Newton. When energized, the voltage drops to 14V, enough to hold the valves pressed down. This was the approach as used in the original design for <So>. As an alternative, our design for pulse-hold solenoid drivers may be used here. This was the approach in <Bono>. This approach necessitates a bipolar power supply. The positive hold voltage can be reduced to 10 V, the negative velo-pulse voltage should be between 24 V and 36 V. Using this board, the final circuit becomes a lot smaller than if we used the capacitor discharge circuit.

Motor-compressor driver: taken from power horn, made in Taiwan for Realistic, type 40-1236C, rated 8 Ohms, 8Watt.

Ball bearings: Blok Polyamide NR. 1060.225.00 (cost: 43 Euro a piece, 01.2008 at MEA)

Proximity sensors: Pepperl+Fuchs, NJ2-V3-N

Tilt sensor: Penny+Giles STT280/60/P2 (Datasheet: STT 280/60/P2. )

Specifications for the PIC microcode for <Korn>.

Valve lookup tables for <Korn> (according to acoustic theory)

Power supply:

Modular 230 V ac to 5 V / 1 A DC linear convertor. (microprocessor and logic power supply)
XP Power module: ECL25US09-E, 9 V / 2.8 A output. (3.64 A peak), for the horizontal motor driver. [removed 28.10.2010]
Toroidal transformer 230 V - 2 x 22 V, 30 VA (Arabel EK3022)
Toroidal transformer: 220 V with two secondary 12 V windings rated 5 A each.

Wiring & circuit details midihub board:

One super bright 1 W blue LED was used in the first version of this robot. It is mapped on midi note 125 and controlled by the velo/hold PIC board. These LED's should be cooled and driven with a constant current limited to 350 mA. One of the following circuits -using cheap standard TO220 regulators- was to be used in this robot:

Due to -probably- a spike in the power supply, the LED circuit at some point short after its installation gave up functioning properly and instead of just passing away, it showed a very erratic behavior: becoming fully conductive (with very short current spikes of far over 20 A) and opening up again. This caused such heavy spikes on the ground lines, that it was the origin of erratic behavior of the PIC microcontroller. Thus we replaced the circuit with a much simpler assembly of two times three bright blue LED's connected in series with a 301 Ohms resistor. The total current at 12 V now is only 22 mA. Voltage drop over each of the blue LED's is 2.9 V.

Output transformer:

High precision wide frequency range MCE toroidal multitap transformer. Type nr. MCE E217T3F; Order number: 10018709, recycled from an American military aircraft.

Cornet details:

Builder: Melchior De Vries, Lier. The instrument was made -unfortunately, for we have an inborn hate for just about anything military- for the belgian armee. It is marked BS (this is short for Belgische Strijdmacht) an carries the number K.F.F.K. 14. We have no indication as to the year of construction, but since the tuning conforms to A=440, we suspect it was made after 1939.


Beauchamp, J.W. "Analysis and Synthesis of Cornet Tones Using Nonlinear Interharmonic Relationships". In: j-aes, volume 23, number 10, pages 778--795, 1975.

Beauchamp, J.W., "Analysis of Simultaneous Mouthpiece and Output Waveforms of Wind Instruments" . In: j-aes, 1980, Preprint No. 1626,

Benade, Arthur .H., "Fundamentals of Musical Acoustics". Ed.: Oxford University Press, 1976.

Fletcher, N.H. & Tarnopolsky, A. "Blowing pressure power and spectrum in trumpet playing" In: J. Acoust. Soc. Am., volume 105, number 2, part 1, 1999.

Martin, Daniel W., "Lip vibrations in a Cornet Mouthpiece", In: J.Acoust.Soc.Am. vol13 . 1942

National Semiconductor, LM18298 Dual Full-Bridge Driver, datasheet. April 1992

Raes, Godfried-Willem, "Kursus Akoestiek", Ghent University College 1982/2011, Internet: http://www.logosfoundation.org/kursus/4023.html

Raes, Godfried-Willem, "Expression control in musical automates", 1977/2016,

Robody Pictures with <Korn>:

concert performance: