Augmented motion controllers

The ActionXL USB motion controllers can be very light and fiddly to ring, so many ringers attach them to something handbell-shaped, or to a handbell to give it a more natural feel.

John Schreiner, being an organ-builder, has the benefit of his own workshop, and used those facilities to make some dummy handbell holders - much more elegant than our controllers.  We are looking forward to giving them a test next weekend.

Homemade handbell controllers for Handbell Stadium and Handbell Manager

There's a lot of ringing going on over the internet. Some people ring by pressing keys on the keyboard, but others use Graham John's Handbell Manager to enable ActionXL motion controllers to be used as dummy handbells. Handbell Manager converts the up/down motion of the ActionXL into keypresses which can be fed to Abel, Ringing Room or anything else. Graham John's Handbell Stadium platform requires the use of motion controllers and doesn't allow ringing by keypresses. This is a deliberate design so that ringing on Handbell Stadium replicates as closely as possible the normal experience of handbell ringing. It's possible to use the ActionXL directly as a dummy handbell, which is what I have been doing, but it feels better if you add some weight. Some people attach the ActionXL to a heavy object such as a spanner. Others attach it to the handle of a real handbell, with rubber bands, and then either tie the clapper (like silencing a tower bell) or unscrew the clapper altogether.

The story of the ActionXL controllers, as told by Graham, is that only one batch was manufactured. Graham started using them about ten years ago, which is when I bought my set. At that time they could be bought from Amazon. They were intended for PC gaming, but apparently there wasn't really a large market. Graham has been in contact with the producer, in the US, and at some point he bought most of the remaining supply and has been selling them from his home. I think they are all gone now, and the ones that the producer kept have probably also been sold to American ringers, so basically it's not possible to get hold of them unless you can find them secondhand on eBay.

I wondered about using a hobbyist computer board such as a micro:bit to make a motion controller. My daughter Dorothy has one, which we've done a few projects with. It has an accelerometer built in, which is the key component needed for the motion sensing - it enables the orientation of the device to be measured, and then Handbell Manager or Handbell Stadium trigger the bell to strike when the device moves to the appropriate angle, upwards or downwards.

Recently I have been involved in a lot of discussion about Handbell Stadium, with some test ringing that I have written about already. Some of the discussion included Richard Johnston (of mini-bell fame) who pointed out that making a device behave like a game controller (such as the ActionXL) when plugged into a USB socket requires a particular kind of USB interface, which the micro:bit doesn't have. However, some further research showed that it is possible with an Arduino, which is another hobbyist electronics system, and many people have used Arduino boards to make game controllers.

Yesterday Dorothy and I made two prototype handbell controllers based on Arduinos. They work well with Handbell Stadium. They don't have the little buttons that the ActionXL has, which can be used to start and stop the ringing when using Handbell Stadium or Abel in solo practice mode. But for ringing with other people that's not necessary - and in any case it would be easy to add buttons later. They are based on an Arduino Leonardo (the large board) and a Grove 3-axis digital accelerometer (the small board). The handbell shape is made from scrap wood, proving yet again that you should never throw anything away. Once the necessary software has been installed on the Leonardo, the controllers just plug into a USB socket and work immediately with Handbell Stadium or Handbell Manager.

I will now describe how we made the handbell controllers. This is a simple design that doesn't require electronics expertise or soldering. If you don't mind doing some soldering, then it's possible to reduce the cost. There are three aspects: the electronics, the software, and the dummy handbells.

The electronics

The main component is an Arduino Leonardo with headers. The headers are little sockets that enable wires to be plugged in without soldering. If you don't mind soldering, then a board without headers is slightly cheaper, or you can use a Leonardo Pro Micro which is smaller and much cheaper. There are many varieties of Arduino, but for the handbell controllers it's important to use a Leonardo because of the way its USB interface is configured. (I have come across other projects that use different Arduinos and replace their USB configuration firmware, but that seems more complicated).

I bought the Leonardo from the Arduino store for €21.60, which meant that it had to be delivered from Italy. If you are in the UK, it's probably more convenient to get it from RS for £18.36. Other suppliers are available. There are some very cheap ones on eBay, but they tend to be shipped from China with much longer delivery times.

The other key component is the accelerometer. We used a Grove 3-axis digital accelerometer, which was €11.40 from the Arduino store. Again there are other suppliers, for example (in the UK) Okdo for £9.06. Again you can find a version slightly cheaper without the socket, if you are into soldering. There are many other accelerometers that can work with the Arduino. The software I'm going to describe later is specific to the AXDL345 chip in the Grove sensor, but I'm sure it can be adapted for other components.

The Grove accelerometer comes with a little cable that has plugs on both ends. This isn't quite what you want. I cut one of the plugs off, and then had to solder some little solid-core wires onto the bare ends so that they would plug nicely into the header sockets on the Leonardo. A better way is to buy a "Grove 4 pin Male Jumper to Grove 4 pin Conversion Cable" which comes in a pack of 5 from Cool Components for £2.83. I have ordered some and will update my wiring as soon as they arrive.

Finally, you need a USB cable. One end needs to be "micro type B male" to plug into the Leonardo. The other end should be either USB or USB-C to suit your computer. I bought the USB cables from the Arduino store with everything else, where they were €3.48, but you can find a more convenient supplier. It's worth getting fairly long cables. The ones I bought say they are 1.8m, but I'm not convinced. The ActionXL cables are closer to 2m, which sounds long but you want to be able to sit far enough away from your computer so that the dummy handbells don't get caught on the table.

To connect the accelerometer to the Leonardo, match up the pin names on the two boards. The Grove cable has black, red, white and yellow wires. Black is ground (GND) and it plugs into a GND socket on the Leonardo (on mine there are 3 GND sockets to choose from). Red is the power supply. The accelerometer can work on either 3.3V or 5V. I plugged it into the 3.3V socket on the Leonardo. The other two wires are called SDA (white) and SCL (yellow), which are serial data and serial clock. They plug into sockets of the same name on the Leonardo. Finally, plug the Leonardo into your computer with the USB cable.

The software

For this stage, it's useful to have some familiarity and confidence with downloading and installing software. It's difficult to describe exactly the steps required. To upload software onto the Arduino, you can either use the Arduino Create web-based system or install the IDE (integrated development environment) on your computer. I have had better results with the IDE. When you have set it up, you need to add the Joystick library. To do that, use the "clone or download" button in the GitHub page to download the ZIP file. If you are using the IDE, put the whole unzipped folder ArduinoJoystickLibrary-master into your working folder for Arduino projects. Then you need this code as your main program:

/*
 * Software for the Arduino Leonardo with an ADXL345 accelerometer. 
 * Based on the tutorial by Dejan at https://howtomechatronics.com
*/

#include <Wire.h> // This is a standard Arduino library - used for I2C communication with the ADXL345 and other devices

#include "Joystick.h" // This library has to be installed

Joystick_ Joystick;

int ADXL345 = 0x53; // The ADXL345 sensor I2C address

float x_axis, y_axis, z_axis;  // The values received from the ADXL345

void setup() {
  // Initiate the Wire library
  Wire.begin(); 
  // Set ADXL345 in measuring mode
  // Start communicating with the device 
  Wire.beginTransmission(ADXL345); 
  // Access / talk to POWER_CTL Register - 0x2D
  Wire.write(0x2D); 
  // Enable measurement
  // (8dec -> 0000 1000 binary) Bit D3 High for measuring enable 
  Wire.write(8); 
  Wire.endTransmission();

  // Setting each axis to the range -800..800 works well with Handbell Stadium
  // Handbell Stadium just uses one axis, which can be set to X, Y or Z
  // This can allow for mounting the accelerometer differently on the dummy handbell
  Joystick.setXAxisRange(-800, 800);
  Joystick.setYAxisRange(-800, 800);
  Joystick.setZAxisRange(-800, 800);
  // Set up the Joystick. false means that data is not transmitted automatically.
  Joystick.begin(false);
  delay(10);
}

void loop() {
  // === Read accelerometer data === //
  Wire.beginTransmission(ADXL345);
  // Start with register 0x32 (ACCEL_XOUT_H)
  Wire.write(0x32); 
  Wire.endTransmission(false);
  // Read 6 registers total, each axis value is stored in 2 registers
  Wire.requestFrom(ADXL345, 6, true); 
  x_axis = ( Wire.read()| Wire.read() << 8);
  y_axis = ( Wire.read()| Wire.read() << 8);
  z_axis = ( Wire.read()| Wire.read() << 8);

  // Store the axis values in the Joystick.
  // This takes care of mapping the values into the -800..800 range.
  Joystick.setXAxis(x_axis);
  Joystick.setYAxis(y_axis);
  Joystick.setZAxis(z_axis);
  // Send the joystick data to the PC.
  Joystick.sendState();
  // Short delay - data will be sent every 10ms
  delay(10);
}

If everything is set up correctly, this code can be uploaded to the Leonardo. If you try this and have problems, write a comment and I will try to help.

After uploading the code to the Leonardo, you can start Handbell Manager or Handbell Stadium and see the effect of moving the accelerometer. Within either software, you can choose which accelerometer axis controls the striking of the bell. The way I mounted the accelerometer on the dummy handbell, it ended up being the Y axis, but you might do it differently.

The dummy handbells

We marked out a simple handbell shape on a piece of scrap wood and cut it out. The Leonardo is screwed to one side (picture above) and the accelerometer is screwed to the other side. The screws here are far too big; I have ordered some smaller ones. Notice that the socket of the accelerometer is pointing towards the handle of the handbell shape. The orientation works with the program shown above. If you put the accelerometer on the other side of the handbell shape, next to the Leonardo, you might have to experiment with its orientation and possibly adapt the code. Ask in the comments section if you need advice.

These dummy handbells are very basic, but they already give a better ringing feel than the plain ActionXL controllers. Adding a bit of weight would make them even better. I am thinking of using plastic flowerpots to cover the electronics and make a 3D bell shape. Graham John suggested using badminton racquet tape around the handle to improve the feel - I have ordered some and will try it. That made me think of using a table tennis bat as the dummy handbell. You would get a nice comfortable handle, and a large flat surface for mounting the electronics and maybe some weight. There are all sorts of possibilities.

More adventures with online ringing

I'm still helping Graham John with his tests of Handbell Stadium. On Sunday we tried to ring a quarter of Cambridge Royal, but we lost it twice, first for technical reasons (one of my bells got stuck) and then with a good old-fashioned fire-up. We were having problems with network delays, despite the new delay-balancing system, so we agreed to try again yesterday morning in the hope of a more responsive internet. However, we suffered from different technical problems which were stopping some of the bells sounding consistently in response to the motion controllers. Graham has done some more development work, and we are meeting again this evening.

Meanwhile, yesterday evening we had a Ringing Room session with Jonathan, Angela and Peter. We had planned to try Lincolnshire Royal, which was next on our list before the lockdown started, so that's what we did. And we managed to ring a whole course, twice. That was a good achievement. There were periods when the bells seemed quite laggy, and we had to count our way through determinedly, but overall it was quite good. Tina commented that online ringing is going to be very good for our resilience. Also I am resisting the temptation to start making conducting comments as soon as I hear something that sounds like a method mistake, because very likely it's just network delay. Usually the ringing sorts itself out.

Our next plan is for some eight-bell ringing next Wednesday, because Angela's quite busy in the evenings next week.

The hidden bonuses of virtual ringing

Last Saturday Simon and I took part in the Illinois Online Bell Bash, where we were invited by Tom Farthing to give a talk about handbell ringing and our new book.  Usually this is an event that ringers travel to and ring together, but Tom and his crew managed to convert it into a online event instead, using invited speakers, Zoom and Ringing Room.

It was an excellent day out (day in?).  The other presenters were Jonathan Agg, who demonstrated Muster (and there was an attempt an international rounds); Graham John, who talked about Handbell Stadium; and Leland Kusmer and Bryn Reinstadler to talk about how they came to create Ringing Room.  Those were tough acts to follow.

Throughout the day, Tom organised groups for sessions in Ringing Room, and it was my first experience at what a mass meeting could look like in a virtual environment.  The 'administration' (assigning rooms, assigning bells, getting everyone's bell to ring, etc) took more time than pointing to people and ropes.  But I got to participate in someone's first go at Stedman with other ringers, someone first blows of Cambridge Major and someone's first effort at Cambridge Major two in hand. 

That last was the same touch, because this is the North American Guild, where you can find handbell groups in the Towers list.  All my Ringing Room events had a mix of people ringing one bell (as if in the tower) and two bells (what would be an adjacent handbell pair).  The ringing started Up-Down-and-off.  Everyone treated this as perfectly normal. 

Simon and I talked about how our experiences ringing handbells informed our book, and we enjoyed a lively and interesting Q&A session afterwards.  Some very good questions were asked, about recruiting, and how to organise a mixed handbell practice. I've been giving them some thought.

Chicago is very near where I learned to ring in Kalamazoo, and Tom and his wife Chris rang in my first peal (Kent, and I'm pretty sure they talked me through the places every course).  Ordinarily, we'd never be able to get away in May to travel from Glasgow to Chicago to participate in this (much as I might like to).  A virtual event made it possible for me to greet and ring with some very old friends, and meet some new ones too.  I wasn't the only one to take advantage of that either. 

We are making plans to connect again and do some more 'bells over the water', across the pond, Mid-Atlantic Guild ringing, and we are looking forward to it. 

Pages

RSS feed Subscribe to Blog feed