Logos Foundation

Flanders Robotics

<Ekla>



an automated D or Eb clarinet

Godfried-Willem RAES

2021- 2026

 

Version 1.0


<Ekla>


Instrument:

This small clarinet must be dated in the very first half of the 19th century. The lowest note it sounds now is F# (midi note 54) . This would lead us to assume it is a quite rare D-clarinet, however taking into account the pitch in the time of its construction, it most likely is an Eb instrument with a diapason somewhere around 415Hz. On the instrument no signs of the maker could be found. Our colleage dr.Ignace De Keyser agrees on this and tends to date it around or before 1820.

The mouthpiece on the picture is most certainly not original as mouthpieces from that time used to be in wood and used twine or rope to secure the reed to the mouthpiece. We bought the instrument in the mid seventies from the Maheu woodwind workshop in Ghent. We know for sure -as they told us- it was not made by them, but brought in for repair by a client that passed away and then never picked it up.

Automating the fingering requires 7 valve-solenoids for the open tone holes and 5 for the valves, 4 closed at rest, 1 open. The fingering table ought to be like this:

Tuning:

The clarinet was automated using the same mechanism as developed earlier for robots such as <Asa>, <Fa>, <Ob> and <Autosax>. Thus it uses a membrane compressor and an acoustic impedance convertor with a capillary to drive the following air column into resonance.

The diapason can be selected and/or adjusted using controller 20. By default the clarinet plays in equal temperament with a diapason set to A = 440Hz. The range corresponding to that of a (quite rare) high pitched D-clarinet.

Excitation:

Acoustic researchers for a long time have been looking into methods to capture the source of the vibration in wind instrument mouth pieces. Practical methods to measure and record the vibration of lips or reeds on wind instruments directly, never lead to convincing results, as the transducers required for measurement influence normal sound production to a great extend. Hence our idea to derive the vibration of the excitation source indirectly. A now verified method to generate the required wave-form lookup tables for driving the membrane compressor coupled to the impedance convertor we developed and tested thoroughly in 2020 for robots such as <Flut>, <Autosax>, <So>, <Hunt>, <Teno>, <Cornalto>, <Trumpeter> and now also <Ekla> consists of the following steps:

1. Excite the membrane compressor with a waveform (at least 4 periods are required and these must be looped in the firmware) corresponding to what you would like the robot to sound like. Lets call it WavIn(). This waveform must be without any modulation and recorded in an anechoic chamber using high quality microphones at a distance not larger than the size of the sound source. This signal can best be derived from a recording of the instrument, played in the traditional way. So, it should be recorded prior to modifications required to build the actual robotic instrument. Make sure you record sound samples for a large series of different notes in different dynamics and registers as excitation waveforms differ greatly in function of these parameters.

2.- Record the sound of the robot, using a high quality condenser microphone, with this excitation and convert it to a format suitable for the microprocessor selected. Lets call this waveform WavOut() . Make sure the sizes of WavIN() and WavOut() are the same and take care to align the phase as well as possible. Normalization is also required. This is a quite tedious job, in particular for instruments where the contribution of the instrument to the sound result is relatively small as compared to that of the playing style, the mouthpiece etc. For the saxophone this is noticeably the case, whereas we had less problems in this respect with the oboe and the flute. The clarinet comes in somewhere in-between.

3.- Calculate the required excitation waveform as: WavEx() = (2 * WavIn()) - WavOut(), in the time domain. Normalize this wave and remove any DC components. This wave now is a model of the excitation wave deprived from the influence of the instrument. Of course this cannot be fully true, as it doesn't take into account the mutual coupling of excitation and instrument. However, the model does work quite well on practical robots if enough waves are prepared to cover the different registers and dynamic levels.

4.- Reprogram the microprocessor to use WavEx() as an excitation waveform for as many notes and dynamics as the microprocessor can cope with.

This method was also applied in the construction of the <Flut> and version 3 of the <So> robot in 2020. Of course, the procedure ought to be performed for a note in each register the instrument is supposed to sound. It would be ideal -but tedious- to follow this procedure for each individual note. However, the microprocessor used should than have a very large memory. The 16 bit 24EP256MC202 type used for the <Ekla> robot, is limited to 32kBytes, enough for a maximum of 20 wavetables, 1024 bytes each.

The theory behind this approach is that the excitation-wave should correspond as much as possible with the vibration of the lips or reeds that cause the vibration in the instrument. As it is nearly impossible to capture this vibration by direct methods, we reason that the sound produced by the instrument is the sum of the excitation and whatever the instrument adds (or omits) to it. Thus, by sending a sample of the normally produced sound to the membrane compressor, we should get the excitation wave plus twofold the contribution of the instrument. By calculation of WavEx() = (2 * WavIn()) - WavOut() we get a model of the excitation wave. When studying and analyzing waveforms produced by real instruments, you will notice that in fact no two periods are the same, neither in shape, neither in length. That's why we take a minimum of four full periods. Do not use more than say 16 periods though, because it may introduce subharmonics, if not even rhythmical pulsation in the sound on long sustained notes. With four periods, you get a very soft subharmonic two octaves below the sounding pitch. For this reason we always add a tiny amount of jitter to the sampling rate. In theory it should be a Gaussean, but in practice straight random jitter over a narrow range leeds to very acceptable results. No two periods have exactly the same length, just as in humanly played wind instruments.

Construction:

This small clarinet can move slowly forwards up and down. A controller (#10) can be used to steer motor speed. The low PWM base frequency can be controlled with controller #67. It is mounted on a sturdy 3-wheel base. The front wheel has a brake. This brake should be set whenever the motor is in use as otherwize the robot may move on stage.



Midi implementation and mapping:


The midi channel <Ekla> listens to is 6 (If counting from 1, this would be channel 7).

Lights:

note 120: Red light under the robot (velo byte steers the flashing speed)
note 121: Tungsten light (can be dimmed, using the velo byte)
note 122:
note 123: White LED light strip on the front (velo steers flashing speed)
note 124:
note 125:.'Logos' display in front. Automated with motor movement.

Motor: automated movement if controller 69 is set. If controller 10 is set to zero, the motor will not run at all.

Controllers:

#1: controller 1: Wind noise in the sound of the clarinet [default setting 30]
#2: controller 2: Vibrato delay time after note-on [default is 48 for a delay time of 375 ms]
#3: controller 3: Vibrato depth for the clarinet [default setting 8]
#4: controller 4: vibrato speed for the clarinet [default setting 94]
#5: controller 5: tremolo depth (amplitude modulation) for the clarinet [default setting 4, high values give flatterzunge]]
#6: controller 6: tremolo speed for the clarinet . [default setting 20]
#7: controller 7: volume control - global volume controller for the clarinet.[default setting mp 80]
#10: Motor speed. Default value is 25..
#15: controller 15 - ADSR time scaling for the clarinet [default setting: 30]
#16: controller 16 - attack time controller [default setting: 20]
#17: controller 17 - attack level controller [default setting 100]
#18: controller 18 - decay time controller [default setting 8]
#19: controller 19 - release time controller (release time can also be controlled with the release byte of a note-off command) [default setting 110]


The interdepencies for the controllers 7, 15, 16, 17, 18 and 19 are shown in the graph below (It's the same graph as for <Teno> since the <Ekla> implementation is the same:

#20: controller 20 - tuning for the clarinet. By default equal temperament and A = 440 Hz for value 64.

#40: This controller selects the waveform lookup for the chalumeau register 53 to 65 . Possible values are 0 to 10. Default value is 2.
#41: This controller selects the waveform lookup for the throat register 66 to 73. Possible values are 0 to 10. Default value is 2.
#42: This controller selects the waveform lookup for the clarion register 74 to 88. Possible values are 0 to 10. Default value is 2.
#43: This controller selects the waveform lookup for the register 89 to 105. Possible values are 0 to 10. Default value is 2.
#66: Power on / off. This command also resets all controllers to their default cold-boot values.
#67: Motor slow pwm period. Values 0 to 4. Other values are disregarded.
#69: Enable or disable automation of the eye-lights and the motor. Default value : > 0, ON. To switch this off, send controller with value = 0.
#80: Dynamic range controller. Default is 32 for 30 dB dynamic range.
#104: sets the symmetry parameter for the square wave [default value is 42]
#105: parameter for dirty sine wave [default value = 35]
#106: noisyness parameter for the dirty sinewave [default value = 40].

#123: All notes off

Note: controllers 20, 40,42,42,43,104,105,106 should never we sent whilst notes are playing! It may cause a crash on the wave generator board.

pitch bend: range 1 semitone (-50 to + 50 cents) [note that pitch-bend must follow a note-on].

  subject to changes during the building process 



Technical specifications:

Design and construction: dr.Godfried-Willem Raes (2020- 2026)

Collaborators on the construction of this robot:



Music composed for <Ekla>:
none so far

Note that Igor Stravinsky's 'Le Sacre du Printemps' has an original part for a D-clarinet!
We made an <Ekla> version of Ludwig Van Beethoven's 'Drei Duos fuer Klarinette und Fagott'.

 

This robot is projected to be fully ready by the end of 2026, if Godfried's health permits and if we can get some subsidy again to continue our research. As of 27.08.2026, the <Ekla> robot can play and can be freely used although there is still place for improvements.

 

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

Construction diary:

15.02.2020: First sketches and designs.
02.02.2026: Project taken up again. We might use the bistable solenoids we still have in stock from the construction of <Tinti> for the open tone holes on this clarinet. Anyhow, we dont have the money anymore to buy new and more suitable solenoids for this project.
03.02.2026: Construction of an acoustic impedance convertor on the lathe, starting from brass staff material. For the compression driver we re-use a driver that we used in one of the early versions of our <Autosax> robot. It is certainly more than powerfull enough. 30 Watts is our estimate.
04.02.2026: First acoustic tests with the impedance convertor and the motor driver. The instrument appears to be either a D clarinet, diapason 440Hz or an Eb instrument, diapason 415Hz.
05.07.2026: Could we use this board for the fingering? : It was designed in 2025 as a hub board with 26 outputs for hold only solenoids.
06.07.2026: If we use the bistable solenoid assemblies (Syndyne) we have in stock, we need 14 outputs for the open holes and 5 to 10 outputs for the valve operated holes, depending on the solenoids to be used here. Thus a 26 output board would reach out here. What do we have in stock? Use older 14-output pulse-hold boards?
07.07.2026: Start construction of a carrier plate in stainless steel.
25.07.2026: Project taken up again after a pause as we had to work on our full evening 'Linac Elekta' production with Emilie De Vlam for the Ghent feasts.
26.07.2026: design and construction of brass 'fingers' for the open holes on the instrument. Welding of the driver part to the instrument carrier. Constructing of a holder for the 'eye' lights.
27.07.2026: Further work on the preparation and selection of suitable solenoids to operate the valves. For the right pink tonehole, the bidirectional solenoid will not work. We have to use a simple square 12V solenoid with a spring. A 32 mm pvc clamp digged up to clamp the clarinet at its bell. Do these clamps have an M7 thread really?
28.07.2026: Continued work on the left side solenoid assembly.
29.07.2026: Horizontal tube welded on the clarinet holder. So the robot will be able to move a bit, provided we can dig up a suitable motor. Mounting of the solenoid for the open dumb hole on the underside of the clarinet. Working on the automation of the side valves for the left hand little finger. By accident we perforrated the windings of a coil we were going to use for the low G# valve...
30.07.2026: Trying to find a replacement for the perforated valve... A Laukhuff type digged up and mounted. A day of work lost...
31.07.2026: Vertical L-profiles sawn and drilled to mount the bearings. Sizing: 30 x 30 x 3, stainless steel. Study of the possibilities for the wheel base as well as the mounting for the PCB's. We still have a couiple of rollator wheels, diameter 100 mm, width 50 mm, axle 8 mm, that could be used in combination with a frontal wheel, building heigth 105 mm. Heavy but sturdy: use a 10 mm thick bottom plate?
01.08.2026: Hele dag gewerkt aan het boren en handmatig tappen van de bodemplaat uit 10 mm dik inox. Gebruikte tapmaten: M4, M5, M6 en M8. Nog geen uitsluitsel met betrekking tot een bruikbare motor. Het MIDI-hub board moet nu onderaan gemonteerd worden.
02.08.2026: Boren van de montagegaten in de vertikale L-profielen. Lassen ervan op de basisplaat. Uitsnijden van een polykarbonaat drager-plaat voor de puls-hold boards, de power-amp module en de generator. Motor besteld bij RS-components: Mellor Electric UB T6, 24 W, 230 V RS bestelnummer RS 248-3659. Toerental 80 rpm, as 7.95 mm, as lengte 31 mm, moment: 1.68 Ncm. Kostprijs 97 Euro. Levering op 5 augustus...
03.08.2026: Tentatieve eerste montage van de robot, nog zonder voedingen en elektronika. Uitzoeken koelvin voor de Kemo versterkermodule. Montage van de versterker, de synth print en de pulse-hold bordjes op de achterzijde: De kogel is door de kerk: we gaan twee nog resterende puls/hold boards recycleren voor de besturing van de kleppen. Da's alvast weer wat uitgespaard... Voor het hub board kunnen we de film voor <Ubu> (06.10.2025) gebruiken om een nieuw board op te bouwen. Dit board heeft twee Crydom optorelais, waarvan de eentje kunnen gebruiken voor de Crouzet motor.
04.08.2026: CT-scan vanmorgen... Toestand blijkt redelijk stabiel. Even pauze voor het werk aan <Ekla>... De <Ekla> robot geimplementeerd in GMT. De testkode is gelijkaardig aan die voor <Teno>. De GMT fileplayer moet nog gecheckt worden. Midi hub board belicht en geetst, gebruik makend van de PCB film voor <Ubu>. Printje geboord en meteen het soldeerwerk aangevat.
05.08.2026: Print helemaal bestukt en gesoldeerd. We hebben echter onvoldoende optorelais op voorraad. Besteld bij Farnell.
06.08.2026: Motor besteld bij RS-components. Mellor Electric UBTG, 24 W, 230 V ac. 1.68Ncm kracht, 80 rpm , as 7.95mm. Bestelnummer RS 248-3659.
08.08.2026: Motor geleverd door RS-components.
09.08.2026: Konstruktie van een hefboom voor de motoras uit gehard profielstaal, vierkant 15 mm. Asgat 7.9 mm! Vastzetschroef: M6, inbus.
10.08.2026: Verder werk aan de montage en de mechanika rond de motor.
11.08.2026: Eerste tests met de motor: met een excentriek van 50 mm is de motor slechts marginaal voldoende sterk. Excentriek verkleind tot 35 mm (bewegingstrajekt wordt dan 70 mm) en getest met de motor. Dit lijkt te werken al is de 80 rpm snelheid aan de hoge kant.
12.08.2026: Aangezien we als klant bij Farnell klaarblijkelijk geclausuleerd zijn geraakt (... met dank aan vroegere medewerkers voor het te grabbel gooien van interne dokumenten en notas), hebben we de ontbrekende komponenten nu bij RS-components besteld. Vandaag zou een en ander geleverd worden...
13.08.2026: Polsters op de klepjes aangebracht, sommige uit kalfsleer, andere visblaaspolsters uit een setje voor klarinet van Boosey & Hawkes. De voedingsmodules werden inmiddels door RS-components geleverd. Farnell blijkt nu ook -na een heel boze mail van onzentwege- op zijn stappen teruggekomen om ons als klant te schrappen. Een eerste begin met de bedrading vandaag. Dit is het PH1 board voor de besturing van de bipolaire elektromagneten.
14.08.2026: Montageplaat in polykarbonaat voor de voedingsmodules uitgezaagd en geboord.
16.08.2026: Bedrading van de kleppen solenoiden afgewerkt. Dit is het tweede puls-hold board:
17.08.,2026: Voor het programmeren van de puls-hold boards hebben we nood aan een tabel met de historische vingerzettingen voor klarinetten met vijf kleppen. Hier zijn twee bronnen: Frans, 1802 en Duits, 1803. Het eerste board (PH1) bestuurt de bidirectionele magneten, het tweede (PH2) alle overige elektromagneten evenals de lichtjes voor de 'ogen'.
18.08.2026: Verder werk aan de firmware voor de vingerzettingen. Versie 1.0 afgewerkt van de firmware voor de twee 18F4620 processors. Klarinet vastgezet op de houder. Driver vast gemonteerd. Polster aangebracht op de kern van de elektromagneet voor de rechterpink.
19.08.2026: Versie 1.0 uitgewerkt voor de kompressor motor driver. Twee 24EP256MC202 chips geprogrammeerd. Verder hele namiddag gewerkt aan het goed functioneren van de duimklep. Die is nu in rust -onbekrachtigde spoel dus- geopend.
20.08.2026: Verder werk aan de polykarbonaat montageplaat waarop de PCB's gemonteerd worden. PH1 board, voor de bidirectionele magneten geprogrammeerd.
21.08.2026: Extra Weidmueller konnektors en 15 V / 3 A voeding (voor de Kemo amplifier) geleverd door Farnell. Verwarring tussen PH1 en PH2 boards... Korrekt is PH1 voor de bidirectionele magneten werkend op +9V/ -12V en PH2 voor de unidirectionale magneten en de oog-lampjes, werkend op + 12V / -12V. Bedrading van de voedingen afgewerkt.
22.08.2026: Voedingen getest. de kleine +/-15V module op het synth board doet het niet...
23.08.2026: Extra XP module +/-15V, 500mA gemonteerd op de vertikale polykarbonaat rugplaat. Nu lijkt alles te werken.
24.08.2026: Bug report: de elektromagneet voor het rechterpinkgat wordt veel te warm..., er is een inconsistentie in de reaktie op release (CC19) instrukties, de wave-lookups moeten verbeterd worden en we zouden er goed aan doen vier registers te onderscheiden en met eigen golfvormen te implementeren: chalumeau, throat, clarino, altissimo. Tessituurdokumentatie aangepast.
25.08.2026: Display printje bestukt zoals dat voor<Ubu>. Da's nog een PCB gemaakt in 2001. Stroomverbruik bij 12 V voeding is 150 mA, wat (bij 22 segmenten) neerkomt op 6.8 mA per segment. Lampjes bedraad en mapping aangepast in de firmware voor het hub board. Het gloeidraadlampje is nu 12 V / 15 W maar een 5 W exemplaar zou beter geschikt zijn hier. De lichtsterkte kan geregeld worden met PWM. Drie rode high-power LED eenheden vastgekleefd aan de onderzijde van de robot. Upgrade en upload van alle firmware. Het uitgangssignaal op de synth PCB is ca. 1.3 Vrms, over de membraankompressor gemeten is dat 13V rms. De gain van de Kemo module is dus precies 20 dB. Bij een driver impedantie van 8 Ohm zou dit een vermogen van 21 Watt moeten opleveren. (10 Watt bij een 16 Ohm driver). Driver nagemeten: het blijkt inderdaad een 16 Ohm exemplaar te zijn... 10 Watt dus.
26.08.2026: Velocity sturing nu ook geimplementeerd voor de open stand van de bidirectionele elektromagneten voor de open toongaten. Dit werkt heel wat beter nu. Aan de golfvormen is evenwel nog heel wat werk... Beschermkap gelast voor het E14 gloeidraadlampje vooraan. Verbindingsstang gemaakt om het verschuiven van het bewegend deel in het lager te verhinderen: 2 nylon schijven 30mm, 2 idem. 25mm, een M6 draadstang en twee M6 dopmoeren in inox. Staatsieportretjes van <Ekla> gemaakt. Test bestandjes met Beethoven's duo's voor klarinet en fagot aangemaakt. Het werkt!
27.08.2026: White led light strip added and mapped on note 123. Implementation for automatic legato playing added. For legato to work well, notes should be made to overlap slightly. Firmware for the hub and the synth board updated with the newest default controller values.

 




 

 

 


Maintenance information:

* +15 V/ 3 A amp power supply: Farnell order nr. 4668758. Multicomp Pro, part Nr. MP60-15003000. 45 W. (for audio amp)

* +9 V/11 A positive power supply for bidirectional solenoids (hold voltage), XP-Power ECM100US09

* +15V - o -15V, 500mA, XP Power module (for synth board, analog circuitry)

* +12 V / 5A power supply for hold voltage and lights

* -12 V / 5A velocity power supply (negative!) for all pulse-hold boards

 

 

 

 



Last update: 2026-08-27

by Godfried-Willem Raes

Further reading by the author on this topic (some in dutch):


Technical data sheet, design calculations and maintenance instructions:

Wheels: Back : 100 mm x 50 mm, axle 8 mm. Massive PU tires. Recycled from an old wheelchair/. Font wheel: pivoting, Green PU tire, building height 105 mm.

Base plate: stainless steel, thickness 10 mm. AISI 316. 400 mm x 200 mm.

Vertical profiles: Stainless steel, 30 x 30 mm, 3 mm thick.

Motor: RS-components. Mellor Electric UBTG, 24 W, 230 V ac. 1.68Ncm kracht, 80 rpm , as 7.95mm. Bestelnummer RS 248-3659.

Optorelay's: MP240D4 (CX240D5 is a somewhat cheaper alternative).

Analog amplifier module: Kemo, M034N. 40W into 4 Ohm at 16V power supply. Kemo Electronic Gmbh, Leher Landstrasse 20, D 27607 Geestland. BRD

 

Fingering table (based on 1802 clarinet chart):

RIGHT  

1

no

2

nc

3

nc

4

no

5 6 7 8 9 10

11

duim

12

nc

PH1 PH2
mi 54 1 1 1 1 1 1 1 1 1 1 1 1 % %
fa 55 0 1 1 1 1 1 1 1 1 1 1 1    
fa# 56 0 0 1 1 1 1 1 1 1 1 1 1    
sol 57 0                          
sol# 58 0                          
la 59 0                          
sib 60 0                          

si

61

0                          
do 62 0                          
do# 63 0                          
re 64 0                          
mib 65 0                          
mi 66 0                          
fa 67 0                          
fa# 68 0                          
sol 69 0                          
sol# 70 0                          
la 71 0                          
sib 72 0                          
si 73 1 1 1 1 1 1 1 1 1 1 1 1 1 1
do 74 0 1 1 1                    
do# 75 0                          
re 76 0                          
mib 77 0                          
mi 78 0                          
fa 79 0                          
fa# 80 0                          
sol 81 0                          
sol# 82 0                          
la 83 0                          
sib 84 0                          
si 85 0                          
do 86 0                          
do# 87 0                          
re 88 1                          
mib 89 0                          
mi 90 0                          
fa 91 1                          
  92 0                          
  93 0                          
  94 0                          
  95 0                          
  96 0                          
  97 0                          
  98 0                          
  99 0                          
  100 0                          
  101 0                          
  102 0                          
  103 0                          
  104 0                          
  105 0                          
  106 0                          
  107 0                          
  108                            
  109                            
  110                            
  111                            
  112                            
  113                            
  114                            
  115                            
  116                            
  117                            

 


References: