motor driven siren robot

for Ballet Mecanique , George Antheil


Godfried-Willem Raes



<Balsi>: Large motor driven siren robot with volume control

The instructions in Anteil's score for Ballet Mechanique render it impossible to use a standard crank driven siren, as it is detrimental to the gears in these devices to be started and stopped fast. So an electrically driven mechanical siren with either safe braking possibilities or fast sound-muting control has to be designed. The score is very unclear as to the pitches the sirens are supposed to sound. In the score they appear notated as non-pitched percussion instruments.

The siren we used as a starting point for this automation project, before we changed its mechanical construction, looked like this:

It is a Polish made military siren we acquired on the local flea market in Ghent. The handgrip and the crank were removed first. The mount for the handgrip was modified to accomodate a bidirectional solenoid to drive a damper mechanism.

Of course, from a mechanical point of view, driving the sound producing rotator of the siren directly with a motor would seem the easiest solution. After all, this is how electrically driven sirens generally work. However, starting from an existing and historical crank driven siren, this would require an almost complete redesign and balancing of the instrument as we would have to remove the system of dented wheels inside. If we estimate the maximum speed of rotation on the crank as 3 rotations per second, and if we choose a standard motor with 2750 RPM - that is ca. 46 rotations per second, we need belts or gears with a speed down proportion of ca. 1:15. So, if we take a small V-belt wheel on the motor, diameter 40 mm, the driven wheel needs to have 600 mm in diameter. That's way larger than whats readily available on the market... Moreover, frictional losses would become quite large. So, a two step gear, two times 1:4, looked like a better design at first...
Before we tackled this project, we made already a few siren driven robots: <Sire> , a robot using 24 small sirens as well as the large siren integrated in <Springers>. In these earlier projects, we used DC motors and PWM control to drive the sirens. There was no reliable way to control the produced pitch precisely though. After many experiments with gears and AC motors to drive this new siren, we came across a motor from an electric scooter. This motor had a dented wheel and drove the backwheel of the scooter with a chain. It looked like a perfect solution to the problem at hand here. Here is a detail of the chain solution as set up for the experiment:

First approaches: (2017)

For <Balsi> we first decided to give a throw at using a regular AC 3-phase induction motor. Next to the fact that such motors are readily available at low prices, we took profit of the availability of 16-bit Microchip controllers specifically designed for applications in 3-phase motor controllers, type nr. 24EP128MC202 being our favorite for the time being.

The circuit as we designed it looks like: The PWM base frequency was taken as 20 to 25 kHz and is used to generate 3 sine waves with the required phase shift of 120 degrees.Control range for the speed of rotation is 150 to 3000 rpm. The filtering components on the MIDI input appeared to be essential, as the amount of glitches produced by the fast switching MOSFETS at high frequencies and voltage are considerable and caused erroneous and missing data. This is what the signals look like, as measured op the testpoints tp1, tp2 and tp3: This was the setup for the test:

The motor control firmware builds on a pretty straightforward PID regulating loop. Here is the algorithm, coded in Power Basic:


' The machine constants have to be passed on the first call only. Seinvalue is the measured reality value, generaly derived from a sample. Sollvalue is the goal we want to achieve. The function returns the correction factor for regulation and should be used in a regulation loop.

STATIC propconstant, integrationconstant, differenciationconstant AS SINGLE

STATIC oldfout, iterm AS SINGLE

LOCAL fout, pterm, dterm AS SINGLE

IF kp THEN propconstant = kp


IF ki <> integrationconstant THEN RESET iterm ' reset! integrationconstant = ki



IF kd <> differenciationconstant THEN RESET oldfout ' reset differenciationconstant = kd


IF fout = sollvalue - seinvalue ' calculate the error pterm = propconstant * fout. Proportionality term iterm = iterm + (integrationconstant * fout). Integration term dterm = differenciationconstant * (fout - oldfout)

oldfout = fout

FUNCTION = pterm + iterm + dterm ' return value for the PID correction signal


Although the software worked pretty well, unsurmountable problems plagued us with the motor driving components. Neither high voltage MOSFET's nor IGBT's survived our experiments. We started realizing that the design of a decent high voltage ac-motor controller is more involved than what can be found in the many textbooks on the subject. Looking into available designs by Siemens, Lust, Hitachi, ABB, we noticed they had about tenfold as many components as our designs. Taking into account that these drives sell for 150 to 300 Euro's, it just appeared vain to undertake a new design. We performed many experiments with these industrial controllers, but finally we abandoned them for the speed resolution appeared limited to maximum 10 bits, not enough to control the pitch with the required precision.

Second approach: (2018)

As we never got our motor controller circuit to operate properly and reliably on the high voltages involved, we abandoned the first design. As an alternative, we changed for a DC motor taken from an electric scooter. These motors work on a nominal 24V and deliver a power of 350W. These motors also are characterized for a pretty high starting torque. To drive the siren, we used a chain and chainwheels, recycled from the scooter. As the current drawn is quite high (16A according to the motor shield plate), we decided to use optocouplers in the motor controller.

A novel component in this design is the addition of a damper mechanism. An often inconvenient property of sirens in music, is that the sound volume is always proportional to the pitch produced. To overcome this inconvenience to a great extend, we made a damper consisting of a circular plate that can cover the suction side of the siren. The plate is driven by a bidirectional solenoid, mounted in top of the siren. The construction is shown in the picture: Experiments with the siren running and the damper quickly made us encounter some problems: as the speed of the siren goes up, the suction force excerted on the damper plate rises considerably. To such an extend even, that the solenoid is not strong enough the open the damper anymore. Thus it became mandatory to use the solenoid on an overdriven voltage and to provide the firmware with some intelligence to make the solenoid force a function of the siren speed. Another effect we noticed, is that the pitch of the siren becomes a function of the damper position. With the damper closed, and the siren driven with a same voltage, the pitch can be up the a fourth higher. To make precise control of the produced pitches possible, we added a tacho circuit, using the classic LM2907 chip. Here the chip is used in a non-standard frequency doubling configuration. The output pulses are fed to an external interrupt input on the microprocessor for period calculation. A PID regulator was to be implemented in the firmware.

As we had another smaller motor driven siren on our shelves, we decided to add this one to the project as well. This siren appeared to be driven by a 230V universal motor. Thus, a candidate to be driven with DC under PWM control. As this addition required another set of PWM controls, we designed a second board, adding a rotating police flashlight at the same time. The circuit is very similar, except for the universal motor drive.

The overview of the required circuits now became:

The circuit for the midi-hub board, also housing the 5V power supply for the pic microcontrollers looks like:

The PCB for this circuit is almost identical to the board we made for the <HybrLo> robot. In the firmware, a midi-parser is implemented as well, such that the midi TTL outputs carry only information relevant for the boards connected. The 1 ms delay caused by the parser is of no practical musical consequence as at is neglectible compared to the inherent slugishness of the siren itself. Here is a picture of the finished hub-board:

During the design and construction process we decided to add a few more automated components in this <Balsi> robot. Thus we added a smaller universal motor driven siren, still quite loud but way softer than the large siren. Also we found place to add a few car horns and a motor driven electric alarm bell. For the large siren, we implemented very precise pitch controll using PID regulation and a sensor. Some visual components were added as well: two rotating flashlights, one orange, one blue.

The firmware for the three microprocessor boards, written in Proton Basic, can be downloaded here:

Midi implementation:

Note on/off:

Note 24: small siren. The velocity byte steers the 7-bit MSB of the pitch. (Controller 24 can be used to steer the LSB), Noteoff switches the siren off and resets controller #24

Note 28: bell. The velocity byte steers the speed of rotation

Notes 29 to 86: Switches the large siren on and sets the pitch to the requested note. Due to the large inertia of the rotor, reaching the requested pitch allways needs some time. Sending consecutive scales to the siren makes no sense. If up and down going glissando is required, just send the ending note and the beginning note of the required span. Note-off commands with a release value can be used to steer the action of the damper at the end of a note. With a high value, the damper will stay open and no damping will occur. With a zero value, damping will be at maximum.

Note 96: horn 1, on/off only, Key pressure implemented for note repeats.

Note 97: horn 2, on/off only. Key pressure implemented for note repeats.

Notes 120-121: Orange rotating light. 120 steers the light, 121 steer the rotation speed

Notes 122-123: Blue police rotating light. 122 steers the light, 123 steer the rotation speed


#7: Volume controller for the damper on the large siren. Default value = 64
#24: sets the LSB for the pitch of the small siren. The controller should be sent after the note-on command. Default value = 0.
#66: power on/off. Power off resets all controllers to their default cold boot values. Default value = 0
#67: large siren PID pitch regulation ON/OFF switch. Default value = 0.
#68: lock-in range for the PID regulator on the large siren. Value range: 0 to 12. Default value = 1


dr.Godfried-Willem Raes

Collaborators on this project:


Cost calculation:

<Balsi>: Midi controlled large siren


Purchase of a Polish military siren (flea market)
Siemens 3-phase motor
PCB Motor controller board
Separation transformer 500VA  
Version 2:  
Scooter motor, chain and gears 350.00
24V -15A power supply 600.00
Stainless steel plate 450 x 200 x 10  
Toroidal 210V ac transformer  
12V - 5A power supply  
Hub board  
Motor board 1  
Motor board 2  
12V - 25A relay  


Disassembly and cleaning of siren 1d  
PCB design of motor controller board V1.0 2d  
PCB revision V1.2 1d  
Firmware development 10d  
Version 2:    
construction of mounting plate 2d  
circuit design 4d  
pcb design motor boards 3d  
Firmware motor board 1    

Firmware motor board 2

Firmware Hub board    



Parts, technical specifications and maintenance notes:


Order numbers spare parts and special (harder to find...) components:

Last update:2018-12-13