motor driven sirens and alarms robot

for Ballet Mecanique , George Antheil


Godfried-Willem Raes



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

The instructions in Antheil'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 heavy 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. Brand details are on the label:

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 unsuccesfull 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 failing 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. All parameters and in- and output values are normalized.

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


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 and application notes 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 on our siren with the required 16-bit precision.

Second and now working approach: (2018-2019)

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, to make a more universally useable machine. Thus we added two smallermotor driven sirens. One of them is a universal motor driven siren, still quite loud but way softer than the large siren. The range for this siren is a lot higher than what can be reached with the large siren. The third siren is a 24V DC motor driven siren, capable of reaching 1600Hz. Also we found place to add four car horns and a motor driven electric fire 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 and two orange pinker lights recycled from a motor bike.

The firmware for the three microprocessor boards, written in Proton Basic (as of 2022, Positron Basic) , can be downloaded here:

Midi implementation:

Note on/off:

Note 24: Siren 2 :small siren. The velocity byte steers the 7-bit MSB of the pitch, corresponding to the midi note. (Controller 24 can be used to steer the LSB with cents resolution), Noteoff switches the siren off and resets controller #24. The range for the LSB is more or less a semitone. Acceptable values for the velo byte are between 54 and 89. The minimum value for the velocity bit is 42, but at that motor speed the sound is barely audible. The value of the velo byte corresponds more or less with the midi note the siren will sound. Due to frictional losses in the sirens well as temperature changes, the pitch may be a quartertone up or down. More precise tuning can be achieved after the note on command by using controller #24.

Note 25: Siren 3: small siren. The velocity byte steers the 7-bit MSB of the pitch, corresponding to the midi note. (Controller 25 can be used to steer the LSB, with cents resolution), Noteoff switches the siren off and resets controller #25. The range for the velo byte is between 56 and 83. Values as low as 44 will be accepted, but are bare audible notes.

Note 28: bell. The velocity byte steers the speed of rotation. It's a motor driven bell and thus the volume is a function of the velo byte. The motor starts running from velocity values 27 on. Witk value 127 the bell sounds as loud as it can.

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. Pitch = midi note 68 (G#4)

Note 97: horn 2, on/off only. Key pressure implemented for note repeats. Pitch = midinote 69 (A4)

Note 98: horn 3, motorbike claxon . Pitch = midi note 63 (Eb4)

Note 99: horn4, Wersi claxon with horn. Pitch = midi note 66 (F#4)

Notes 120: Orange rotating light. 120 steers the light, controller 120 steers the rotation speed. The value for controller 120 stays in effect and does not have to be resent on each subsequent note-on command. De default startup and reset value voor this controller is 64. Note off for the light allways stops the motor.

Note 122: Blue police LED rotating light. On/Off only.

Note 123: Orange light, left side. On/Off. Flashing speed controlled by the velocity byte.

Note 124: Orange light, right side. Flashing speed controlled by the velocity byte.


#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. One unit corresponds to 1 cent, so the range is 0 to 127 cents.
#25: sets the LSB for the pitch of the 3th siren. The controller should be sent after the note-on command. Default value = 0. One unit corresponds to 1 cent, so the range is 0 to 127 cents.
#48: sets the LSB for the pitch of the large siren. The controller should be sent after the note-on command for any note within the range. 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
#120: motor speed for the orange rotating light. Default value = 64


dr.Godfried-Willem Raes

Collaborators on this project:

Technical specifications:

  • power: 230 V - 300 Watt, standard 3-prong Euro connector.
  • Sizes: h=1500 mm, w= 470 mm, d= 420 mm.
  • Weight: 65 kg
  • 1 Midi input, 4 midi thru (5-pole DIN connectors). Midi channel (offset 0): 15
  • microprocessors: 1x PIC18F2620, 2x PIC24EP128MC202 (Microchip)
  • Sound pressure level: can reach up to 120dBA. Danger!
  • cost in production and insurance value: 18.600 euro;.


Parts, technical specifications and maintenance notes:


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

Cost calculation:

<Balsi>: Midi controlled large siren


Purchase of a Polish military siren (flea market, used)
Siemens 3-phase motor - not used
PCB Motor controller board - rejected version
Separation transformer 500VA - not used
Version 2:
Scooter motor, chain and gears
24V -15A power supply Block GNC24-15
Stainless steel plate 6200 x 200 x 10 (2 pieces)
Stainless steel plate 50 x 400 x 10 (2 pieces)
Stainless steel plate 50 x 1000 x 5
Stainless steel plate 450 x 200 x 10
Stainless steel plate 450 x 340 x 3
Toroidal 210V ac transformer, 150 VA
Rectifier bridge 800V / 25A
Electrolytic capacitor 200uF / 400V
12V - 12A power supply LRS-150-12
Hub board -PCB and components
Motor board 1 - PCB and components
Motor board 2 -PCB and components
12V - 25A relay
Orange rotating alarm light
Blue flashlight CO ST 70
Car/Motorbike horn 24V
Motor driven alarm bell
Rolator (purchased for wheel recycling)
Welding electrodes 3.2mm stainless steel
Argon gas for TIG welding
Bolts and nuts
Schaffner IEC mains entry block with filter and fuses
Reflective optical sensor OPB742
Weidmueller connectors and spiral wrap
2 alarm horns 12V
1 Werma horn 24V
1 Klaxon sirene, 24V 0.5A 103dB


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 10d  

Firmware motor board 2

Firmware Hub board 4d  
Chassis construction 14d  
Wiring 5d  
GMT testcode writing, debug and test 8d  
Total nr. of working days 70d 14000.00

Endsum: 18903.61 Euro

Last update:2022-10-26