Building Your Own Multi-Bell Interface
A multi-bell interface (MBI) for up to 12 bells does not have to be purchased; it is possible to build your own using one of the readily available Arduino microcontrollers. This article describes an MBI and sensors that I built for our tower. It is not a detailed specification, but (I hope) it should provide enough information for you to make one yourself of this or a similar design.
Some soldering and basic construction skills are needed, but perhaps the biggest challenge for most people is the programming required to make the Arduino work as an MBI. For that reason I have included the programming I wrote (modified for an 8-bell interface).
I am not an electrical or electronic engineer and do not provide any guarantees regarding any of this work. However, the design I have used has been operating successfully for some time (in the case of the sensors, for years without fault) and so I am presenting it here in case it is of interest to others.
What does an MBI do?
Sensors of all description are essentially switches. They cause the voltage in a wire to rise (or drop) momentarily as the bell passes a certain point in its swing (usually bottom dead centre). Computers, however, can't deal with these signals in their raw form. The easiest way to pass a signal to a computer is via a “serial port” through which characters ('1', '2', 'a', 'b' etc.) can be sent. MBIs sit between sensors and PC and act as interpreter. They have an array of contacts to which the sensors can be attached and they are programmed to detect the voltage spikes from the various sensors and send appropriate characters to the PC as a result.
Basic Design Considerations
You have some decisions to make about how the device will be installed in your tower.
The simplest system would have the Arduino connected directly to (and therefore also powered from) the PC via a USB cable. The downside of this approach is that the wires to all the sensors need to come all the way to the PC (or within a few meters of it) as there is a limit to the length of USB cables.
The alternative to this would be to install the interface in the bell chamber and use wireless communication from there to the PC. There will be a small wireless unit on the circuit board beside the Arduino and a matching one downstairs on a “dongle” attached to the PC by a USB cable. This avoids wires running between the floors, although it does require power in the bell chamber. There is no difference in programming between wired and wireless solutions. A potential disadvantage of the wireless solution is occasional missed signals if the distance is too great or there is a significant barrier such as a concrete floor between the two.
If the wireless approach proves problematic (as it did for us), you might consider a hybrid solution using two Arduinos. The Arduino in the bell chamber is the MBI as above. It detects signals from the bells and sends ascii characters down a wire (a shielded 2-core wire is all that is needed) to a second Arduino in the ringing room. The downstairs Arduino receives the characters sent by the upstairs one and forwards them directly to the PC through its USB connection. (In fact in our case we used a wireless connection from the downstairs Arduino to the PC to avoid the need for the wire to run across the floor to our central table.)
The sensors can be mechanical (reed switches), optical or magnetic, according to your preference. I used reed switches as they are cheap, easy to work with and seem very reliable. Also, they require only two wires per sensor. Other types of sensor require a third wire to supply power. This is significant for my choice of cabling between MBI and sensors, namely CAT5 network cable, in which the wires it contains are arranged in (twisted) pairs. More detail about cabling can be found in the next section.
This is not an article about making sensors, so I won't go into detail or discuss the range of options available, but this photograph shows a possible example of a reed switch sensor, mounted using one of the bearing bolts to secure the switch to the frame:
MBI to Sensors
I use the standard computer network cable between MBI and sensors (CAT5 is perfectly adequate). A single network cable contains four twisted pairs of wires, sufficient for four bells (provided reed switches are used, which only require two wires per sensor). To install sensors on eight bells would therefore require two lengths of CAT5 cable. One will follow a route that will pass close to four of the bells; the other will probably take a different route that passes close to the other four bells.
To connect a sensor to the appropriate pair of wires in the CAT5 cable that passes nearby, cut a short opening in the blue plastic outer sheath to expose the bundle of wires, cut the appropriate pair, then connect a short length of some other wire (old telephone wire, bell wire, anything really) to run from the CAT5 cable to the sensor. This photograph shows one such connection in our installation. The connecting wires are soldered to the CAT5 wires, with short lengths of heat-shrink insulator protecting the joints.
The twists in the pairs of wires in CAT5 cable are important, by the way. Without the twists, multiple wires running together for more than very short distances will generate spurious signals, which can be highly disruptive in a simulator session. The twists are effective at preventing these spurious signals. Separate coaxial cables from the MBI to every bell would be an alternative.
MBI to PC
The usual connection from MBI to PC is a USB cable. These have a length limit of a few metres, so the MBI has to be located close to the PC. This tends to imply that the CAT5 cabling must run through the floors from ringing room to bell chamber before going around the frame to each bell. If you are intending to put sensors on no more than four bells, the single CAT5 cable that would be required is probably acceptable, but if you plan to have sensors on every bell it could be cumbersome to have two or even three CAT5 cables running between floors. The ideas discussed above (wireless or hybrid solutions) get around this issue.
Assembling the MBI
This diagram shows the wiring for four sensors (the other four are the same, using the other pins D2, D4, D6 and D8):
If the MBI is directly connected to the PC the only other connection required is the USB cable (and the wires connecting the Arduino to the sensors will be very long, of course).
If the MBI is in the bell chamber with an XBee wireless chip attached, the associated wiring will look like this:
Use a 9 volt DC power supply.
The pair of switches on the serial lines between Arduino and XBee are intended to be both on or both off. They will be on when the circuit is functioning as an MBI. They should be turned off if you need to connect the Arduino to a PC with a USB cable (to load an update to the program, for example). You can damage the XBee if you do not remember to do this.
If the MBI is in the bell chamber with a shielded 2-core cable connecting it to a second Arduino in the ringing room, the associated MBI wiring will look like this:
GND connects to the shield of the cable. The other two wires connect to the core wires of the cable.
To fit the MBI in a box it would be a good idea to use RJ45 sockets glued into holes cut in one side of the box so that the CAT5 cables, terminated with regular RJ45 plugs, can be plugged in neatly and easily. The wires from the pins of the Arduino run to the RJ45 sockets. I chose to connect the solid colour wires to the data pins and all the striped wires to the GND pin. This photograph shows our MBI in its box:
- I have used an Arduino Nano as it is small and can be soldered onto a circuit board.
- There are three RJ45 sockets as there are 12 bells in the tower.
- I have used a separate LED to indicate when signals are sent, but the in-built LED associated with pin D13 does that job in the program code provided below.
- The sensor connections do not require resistors as the Arduino has built-in pull-up resistors that the programming (see below) calls into use.
In our case the MBI is not connected directly to the computer (it is on the wall in the bell chamber). If it were directly connected, the USB socket on the Arduino would need to be accessible via a hole in the side of the box. Ours doesn't need that (the USB socket on the Arduino was used to upload the program, but is not used for the MBI), but being remote from the PC does require some additional circuitry:
- It is powered from a 9 volt power supply, which enters the box on the right and is soldered to the GND and VIN pins of the Arduino.
- It sends characters to a second Arduino in the ringing room via a cable that enters the box on the left. The shielding in the cable connects to the GND pin. The two wires in the core connect to pins 0 and 1 (RX0 and TX1).
Note that the circuit board is bigger than necessary because it used to have an XBee wireless chip fitted in the space to the left of the Arduino. There is also a small double switch on the circuit board, mostly obscured by wires in this photograph, that is no longer functional as it related to the XBee chip. This image shows the circuit with its XBee transmitter still in place and the double switch clearly visible. It also shows the dongle that would connect to the PC with a USB cable:
If you plan to use the hybrid solution and have a second Arduino in the ringing room, the cable from upstairs must connect to it. The shielding connects to the GND pin (as upstairs). The two wires in the core connect to any two data pins other than RX0 and TX1. The programming of the downstairs Arduino will then treat those two pins as a serial connection for receiving characters, and forward them to the PC using the usual pins RX0 and TX1. The programming for the downstairs Arduino is also given below.
This is the code for an 8-bell MBI. Click on the link below to download it (you might have to right-click and choose "Save link as..."), then save it in a folder of the same name ("mbi_for_8_bells"). You will then be able to open the script in the Arduino development environment to compile it and upload it to your Arduino.
The script is written to use pins RX0 and TX1 for communicating with the PC (or with the wireless chip or second Arduino).
It uses digital I/O pins D2 to D9 to detect signals from the sensors.
It uses pin D13 to light up the built-in LED momentarily whenever a signal is detected.
If you decide to have a second Arduino downstairs, connected to the upstairs one via a shielded 2-core cable, the following program will run it:
The script is written to use pins RX0 and TX1 for communicating with the PC (probably via USB cable).
Pins D2 and D3 are used for the serial connection to the MBI Arduino (D2 connects to TX1 on the MBI, D3 to RX0 on the MBI).
Connect GND to the shield of the cable.
Expanding to 12 bells
The programming and the wiring of the MBI can be quite easily expanded to handle 12 bells (the downstairs Arduino, if you use one, would be unchanged). The design I used for 12 bells uses one of the analog pins on the Arduino for one of the sensors. This is not difficult to do, but it requires some slightly different programming. Contact the author
for details about this.