May 2020

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

UPDATE: There is a more recent article with shorter instructions.

UPDATE: Now that a few other people are experimenting with the Arduino-based controllers, I have put some further thoughts at the bottom of this post. If you have any questions, feel free to ask, either in the comments here, or in the comments on my Facebook post, or you can easily find my email address by googling.

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();
  Wire.beginTransmission(ADXL345); 
  Wire.write(0x31); // Set the measurement range
  Wire.write(0); // Set 10-bit mode with range -2g..+2g. We should now find that values are in the range -512..+511
  Wire.endTransmission();

  // 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(-512, 511);
  Joystick.setYAxisRange(-512, 511);
  Joystick.setZAxisRange(-512, 511);
  // 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.

Further thoughts (7th June)

  1. If you want to avoid soldering, stick to the Arduino Leonardo and the Grove accelerometer unit.
  2. If you don't mind soldering, a Leonardo Pro Micro is smaller and cheaper. Also an MPU6050 accelerometer unit is cheaper than the Grove unit. You can find both of these on eBay, but make sure the supplier is based in the UK. The very cheapest ones are shipped from China, which takes a long time.
  3. The Joystick library that I used is not the one that you find in the standard list of available libraries, within the Arduino software development environment. Download it from the GitHub link that I showed above. Probably you can use the Joystick library from the standard list instead, but I haven't tried that.
  4. At the time of writing, there is a glitch in Handbell Stadium that you need to compensate for in the code that you put onto the Arduino. Ideally what you should be doing is programming the Arduino to send its X, Y and Z axis values - that's what the code shown above does. The axis value that's needed for handbell ringing depends on how you have mounted the accelerometer on your dummy handbell. For me it's the Y axis. By default, Handbell Stadium and Handbell Manager use the Z axis, but they have options to use a different axis, so you can just set it to Y. BUT in the currently released version of Handbell Stadium, these options don't work. To compensate for that, you need to adjust the code on the Arduino so that it has the line 
    Joystick.setZAxis(y_axis);
    Handbell Stadium will be fixed soon, and then this problem will go away.
  5. I have updated the code shown above a little bit, to properly set the range of values that the accelerometer is measuring in.
  6. I wrote that everything works with Handbell Stadium and Handbell Manager, but I haven't tested it with Handbell Manager because I only have it on an ancient Windows laptop that is barely working. If you are using Handbell Manager, you might need to make further adjustments to the range of values. I believe that the ActionXL controllers use the range -2048..+2047. Contact me if you need advice. 

Here is the latest version: an Arduino Leonardo Pro Micro and a GY-521 accelerometer board (based on the MPU6050), mounted on sticky-backed velcro.

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. 

A big step forward for Handbell Stadium

On Thursday I helped Graham John test a new version of Handbell Stadium, again with Lesley Boyle and Gareth Davies, and Simon Humphrey too. The new version has a feature that Graham calls "ping balancing", which compensates for the differing network transmission delays to different ringers. (In the online gaming world, the transmission time for a signal is known as the "ping"). The idea is to calculate a rolling average of the delay to each client, and make all the clients except for the slowest one insert a compensatory delay between detecting the handbell swing and making it strike. For example, usually Graham's delay is 0 (because he is directly plugged into his server) and mine is around 24ms. So the balancing system means that Graham's bells sound 24ms after he swings his controllers. Usually Gareth and Lesley's delays were about 13ms, so their compensatory extra delay is 11ms. Similarly for Simon.

This works really well, and removes almost all of the irregularity in rhythm that we were experiencing before. It feels very nearly like normal ringing, just a little slow. We rang some Kent Royal and then some Cambridge Royal, at a peal speed of about 3h05, which was a big improvement on the 3h35 (for major) that we were getting in our quarter peal attempt last Sunday. And there were no episodes of having to fight against delays and struggle to maintain a rhythm. I must say that my internet speed seemed much more consistent than before, which might also have helped. Tomorrow we're going to try a quarter of Cambridge Royal. It should be much easier than the quarter of major that we've lost twice.

Yesterday I joined Graham's open Handbell Stadium practice. We started at 8.30, and Graham put people into separate groups with an instruction to all get together again at 9.00. I was in a group that rang some Plain Bob Major and some Kent Major. We were still using the old version of Handbell Stadium, without the ping balancing, because Graham thought it would be disruptive to release the new version just before the practice. So the ringing wasn't as smooth, but my internet was still behaving reasonably well (although again with the longest delay in the group) and the ringing was manageable.

At 9.00 the groups were rearranged, and I was in a slightly different group that decided to ring Double Norwich. Now, I don't ring Double Norwich very often, and sometimes I decide that the best approach is to ring it by place notation. So I got the place notation into my mind (as I thought), we started ringing, and it didn't work at all. Clearly I was doing something very wrong, but what? After a little thought (and I confess that by that point in the evening I had drunk a couple of glasses of wine, which never improves my handbell ringing) I realised that I was actually trying to ring Superlative! Another double method constructed from the place notations 14, 58 and 36, but in a completely different order...surely an easy mistake to make. A bit more thought (and a "hang on a moment" while the others were trying to restart) and I got the correct place notation loaded up. We managed to ring a plain course, and then a plain course of Yorkshire, which also went well.

I enjoyed the practice, and I think stopping after an hour was about the right length. There was less setup delay at the beginning than in the previous week's practice, and everyone knows what they are doing with their computers by now. I think there's a future for online handbell ringing even when we are able to resume ringing in person - it will be a real boon for people who want to learn but don't have nearby bands to ring with.

In comparison with Ringing Room, Handbell Stadium only allows ringing with motion controllers - there is no option for pressing keys. This is a deliberate decision by Graham, to keep Handbell Stadium as a realistic ringing experience (and it satisfies the Central Council "norms" for performances, which basically means that quarters and peals on Handbell Stadium should be viewed in the same way as live ringing performances). But it does mean that everyone who is ringing needs to have suitable motion controllers. I will write more about that in another article.

Handbell Stadium and Ringing Room

On Sunday evening we had another unsuccessful attempt at the quarter in Handbell Stadium. In the first attempt, one of my bells got stuck when the computer stopped recognising the motion sensor. In the second attempt, which lasted well over half way, we were hit by a big increase in internet delays (at my end again, I think) and we didn't survive the disruption to the rhythm. Maybe my internet is worse than other people's. Handbell Stadium constantly displays the measured delay to each participant, and mine seemed to be not only higher, but also much more variable, sometimes becoming ten times higher than the others.

Yesterday evening the Glasgow handbell band tried Ringing Room. We started with rounds on 10, which was very encouraging because we hardly noticed any delay. Then we tried three leads of Kent Royal, in which we started to notice delays. At the second attempt we got it round. It takes some determination to get through the patches where the delays build up, but we survived a couple of incidents. After that we rang half a course of Cambridge Royal, again at the second attempt, which was pretty good considering that we haven't rung anything on handbells for two months.

Recently a band including some of our friends from Oxford rang a quarter of Bristol Royal on Ringing Room. Now that we've tried surprise royal ourselves, their quarter seems even more impressive.

I still have mixed feelings about the online ringing I have tried. It's much less enjoyable than real ringing, because of having to fight against the delays and lag. However, it has reassured us that we have not completely forgotten how to ring, and I think we will be able to use it for some useful practice. We've arranged to ring again next week, and try some Lincolnshire Royal, which is what we were going to ring when our last real session was cancelled because of the onset of the lockdown.

The other aspect of it that I like is getting together with my ringing friends to actually do an activity, rather than just chat. We've had some Zoom quizzes with the tower bell band, which are good too, but ringing is even better. On balance I think it's worth persevering with Ringing Room (we can't use Handbell Stadium as a band because not everyone has motion controllers).

A nice review of "Change-Ringing on Handbells"

This week's Ringing World contained a review of the handbell book, written by Bill Croft. He likes it! The review gives a good summary of what's in the book, and comments favourably on the style and presentation.

The headline summary of the review is worth quoting:

Like a thoroughly experienced conductor, perfectly at home with the method and the composition, the authors of this volume guide the reader from the very basics of handbell ringing through to method ringing on eight bells. At every stage the reader is guided, sign-posted and encouraged, reaching a final ‘Congratulations!’ in the concluding chapter.

We've put a small colour advert into the next Ringing World, to remind people, and then we'll do a few more black-and-white adverts at monthly intervals.

Also this week, the two previous Central Council publications about handbell ringing have been made available as free downloads. These are "The Beginner's Guide to Change Ringing on Handbells" by Bill Butler, and "Change Ringing on Handbells" by Chris Woolley.  I have heard that they have been downloaded at least 100 times already. I downloaded them myself to have a look, although I'm pretty sure we have printed copies somewhere. I must say that I think our book is a great improvement, better for complete beginners and with many more (and more beautiful) diagrams. Anyway, readers can decide for themselves.

Handbell Stadium

Today should have been the Scottish Handbell Day, but like so many other things, it can't go ahead. However, yesterday I tried out Graham John's Handbell Stadium, both for solo practice and online ringing with other people.

Handbell Stadium works with little motion controllers that plug into USB ports. They allow a realistic up/down action for simulated handbell ringing. Some people have been attaching them to handbells, with the clappers tied or removed, to give some extra weight and improve the feel, but I just used them as they are.

The 3D version of Handbell Stadium gives a much more realistic experience than ringing with Abel. There is a choice of room decor to ring in - these pictures show the "basement" - and you can choose either disembodied bells or the "men in black".

I have done so much practising with Abel / Mabel, when I don't look at the screen, that it took me a while to get used to watching the simulated bells. It certainly is possible to look at what they are doing, especially the treble as I normally do while ringing. I think it's a big step forward for simulated handbell practice.

Handbell Stadium also offers online mode, where you can ring with other people over the internet. Graham invited me to try a quarter with him and Gareth Davies and Lesley Boyle. We logged in to Discord, which is a text/audio/video messaging system much used by online gamers ("I didn't know old people used Discord", said my son Thomas) and went into a room in Handbell Stadium. The idea was to ring a new surprise major method for VE day. The method was reasonable, right-place, Cray above the treble with an 8ths place lead end - I won't reveal exactly what it is, in case Graham wants to keep it for another time. We found the ringing difficult because of the internet lag. It seemed that my lag was worse than the others'. Possibly connecting to my router with a cable instead of wifi would have helped, but I have left the necessary adapters in my office. Maybe we need to upgrade the router. I think we were ringing the method OK, but there were times when it became impossible to maintain a rhythm and it seemed as if everyone was ringing at once. We had two attempts of about a course and a half each, then gave up and rang a course of Yorkshire, which we found a little easier.

Later in the evening I joined one of the open practices that Graham has been organising. Everyone gathered on Discord and then Graham put us into groups in separate rooms. I was with three other people and we tried some Bob Major, but one of the others became disconnected and wasn't able to join in again. The remaining three of us rang Bob Minor and Kent successfully. I found it easier with fewer bells, because we were able to go at a slower pace without grinding to a halt. Then one of the three had to leave, and Graham gathered the other two of us into a group of six, which managed to ring some plain hunting on 12. Apparently it was the first 12-bell ringing on Handbell Stadium.

I'm really impressed that Graham and others have produced workable software for online ringing, so quickly. I haven't tried Muster (which connects up several instances of Abel) or Ringing Room (which has become fairly popular). I think it's worth persevering with online ringing, to see whether it can get close to the real thing if everyone has fast enough internet. I would like to try it again. But in any case, Handbell Stadium in practice mode is a fantastic development for individual practice and I'm sure it will be refined during the coming weeks.