Arduino Controlled Bell Tower/Carillon




Introduction: Arduino Controlled Bell Tower/Carillon

This is a set of musical bells which are driven by solenoids and controlled by an Arduino microcontroller.

There are 8 bells covering one octave.

The bells are controllable from a PC, or the tower can stand alone and play pre-programmed melodies.

Check out the final page for video of it in action.

Step 1: Parts

The following parts were used:

1 set of chromatic handbells. I got these from my local Aldi for $20. They span the range from C to C. (I.e. c,d,e,f,g,A,B,C).

Wood panel & brackets to hold the bells and solenoids in place. $10.

8 Solenoids to strike the bells. I had these laying around in my junk box. I got them from a typewriter repairman who was throwing them away. You can probably find similar on Ebay.

Arudino microcontroller. ~$45. I got mine from SparkFun electronics.

Proto/Perf board & misc components to make my custom 'shield' for the arduino. $10.

Darlington driver board. I used one I had laying around, but I believe they're not sold separately. Should be possible to make it using the ULN2803 chip for a couple of dollars.

Step 2: Woodworking

Surprisingly enough this step took the longest. The coding and wiring took less time than for the glue to dry.

The frame for this was pretty simple. Just a piece of plywood to hold all the bells, plus some pine brackets for the solenoids. Everything was glued together with PVA glue.

In order to make the solenoid brackets more repeatably, I made a stencil in MS Visio and then glued it to the wood. This helped a lot to have all the solenoids at a constant distance from the bell.

If you do this I can't stress enough to measure carefully for the striker locations. The bells sound quite different depending on where you hit them and the 'throw' of the solenoid.

Step 3: Electronics & Wiring

Driver side:
I was lucky enough to have a darlington driver laying around, which simplified the design a lot. The darlington is a power transistor that you can use to drive heavier loads than the tiny microcontroller pins would normally support. The board I used is based on the ULN2803 chip, which is quite common and cheap.

Please note: Solenoids are (usually) not designed to be driven constantly! They may melt if you do! See the software section for more info.

Arduino side:
This was just a matter of finding 8 IO pins from the arduino to drive the Darlington inputs.

Because I wanted to send and receive serial data, I couldn't use pins 0 & 1, so I ended up using digitals 2,3,4&5 on one side, and using four of the analog input pins on the other side as digital outputs. I also added a potentiometer hooked up to analog input #5, which is used to control the tempo. Two LEDs are used for visual feedback of the driver.

Pins 8-13 were of no use because of the funky arduino pin spacing (grr...)

Notes on Power:
Although I originally wired this up to use an external power supply to drive the solenoids, I discovered (by accident) that the USB power was sufficient.

I had been concerned that the sudden current pulse would cause the voltage to dip, and the microcontroller to 'brown-out', but this doesn't seem to be occurring. Your mileage may vary. Since it's way more convenient for me to just use the USB power, I'll keep doing that till I have a problem.

Step 4: Software Design

Design strategy
The goal for this was to have the bell tower driven from the PC. Arduino's USB-->Serial link was the ideal way to do this.

The arduino receives serial data from the PC which corresponds to which notes to play. The protocol is straightforward; the notes are all in their ASCII text equivalents. There's also a numerical number as a variable delay.

E.g. The PC sends: "cde2fgABC" and the Arduino plays bells 1,2,3, rests for half a note and then plays bells 4,5,6,7&8.

Tip of the hat to John Plocher for his ServoBells project, which partly inspired this project.

Arduino Side Code:
The arduino code receives the serial data, decodes which note or delay to play, and then toggles the solenoids appropriately.

Speaking of which. Make sure your code is designed so that solenoids are not kept on!. If you leave a solenoid on by mistake, it will melt. I solved this by making my note routines block until the solenoid is turned off, rather than constantly polling, etc.

PC Side Code:
The client program was written in C#. It has buttons for each individual note, as well as buttons for pre-programmed melodies. The note data is sent to the serial port.

The source code for everything is attached.

Room for improvement:
  • Polyphonic notes
I left off the possibilty for two notes to be played simultaneously, as I didn't think any tunes capable of fitting into 1 octave would require them. Additionally firing more than one solenoid can
  • Killing the queue
The PC sends big sentences of notes down to the arduino, which then processes them until the queue empties. However for big tunes this can be tiresome and it may be desirable to be able to interrupt a running tune. This could be accomplished by having some other letter in the serial sentence (e.g. 'x') as a code to flush the buffer.

Step 5: Operating the Bells

Operating the bells is pretty simple. Plug in the USB cable and open the PC software.

You can click on the individual bell buttons to play a tune. Optionally there are buttons to play scales, pre-programmed tunes and also a text-box for freeform text entry.

I've included a video of the bells playing. So far only simple tunes are programmed in.

video is here:

(If anyone knows how to play the Futurama theme in one C thru C octave, please let me know....)

Be the First to Share


    • Lamps Challenge

      Lamps Challenge
    • Puzzles Challenge

      Puzzles Challenge
    • CNC and 3D Printing Contest

      CNC and 3D Printing Contest



    2 years ago

    i know this is an old article, but i have a question. do you think the bells would sound properly if they were lined up together on a rod with spacers to separate them, and rung by solenoids/hammers striking the bottom edge? i'm designing a big 3d printed mechanical clock project and i'm thinking that rather than a single untuned bell salvaged from a rotary phone used to chime the hours i'd create a compact carillon with either 4 or 8 notes by putting a set of bells on an axle.


    7 years ago on Introduction

    Do the solenoids need to be large push or small push?


    13 years ago on Introduction

    Handbell choir in a box! Can we do wind chimes with these too?


    13 years ago on Introduction

    Thanks for the comments!

    Threebean, I got the board here from Softmark. It came as an addon board from a USB PIO kit, but unfortunately I don't think they sell them separately.

    I think I'll have to raid the bargain stores for cheap music books like PKM suggests.


    13 years ago on Introduction

    I'm pretty sure the Futurama theme has sharps in it so you probably can't play it on your setup as it is at the moment. I recommend hitting the charity shops for a children's "I can play t3h piano" book of simple "white notes only" tunes, or maybe getting more bells! You could always get a box of cheap wine glasses and some water.. :P


    13 years ago on Step 3

    Just out of curiosity, where did you get that darlington array board. That looks like it would be handy to have. Thanks!


    13 years ago on Introduction

    I like this. How about a simplified version omitting the Arduino, using the PC's parallel port instead. You can also pull 5v from this.
    I don't know about Futurama but "Over the Rainbow" fits into one octave. (I worked it out for a kalimba .)