chimes icon indicating copy to clipboard operation
chimes copied to clipboard

Real Christmas bells / chimes that play music.

Made front pages of Hackaday and Hacker News!

Musical Christmas Bells / Chimes

This project is a battery powered musical chime set, loosely inspired by a set of microprocessor controlled electro-mechanical real bells we had as kids, I think the Ye Merry Minstrel Caroling Christmas Bells. Other similar products had light-up bell decorations with a speaker, like the Caroling Christmas Bells or Mr Christmas Bells of Christmas (but weren't real bells).

I wanted to recreate, but could not find a source of bells reasonably priced for this project. So I substituted DIY chimes, which worked quite nicely IMO.

Built with a black walnut stand using copper tubing, 3d-printed hangers and controlled by an ESP32 running MicroPython.

Table of Contents

  • Watch
  • Overview
  • Build
  • Software
  • Parts
  • Tools
  • Future Work

Watch

Some videos of it working:

Chimes playing 'Hark! The Herald Angels Sing'"

Overview

I chose to implement these 12 notes (which cover a decent number of songs), but it can be extended as needed (up to the free GPIO pins):

  • C5, D, E, F, F#, G, A, B, C6, D, E, F

I mapped C5 (and like) to C4 in software since an actual C4 chime didn't really sound like C4 due to secondary frequencies. This guide was very useful to understand what's going on.

I've simplified a number of MIDI files to play, available here.

Build

This took me somewhere between 40-80 hours to design, code and build, starting with a "mandatory fun day" event at work.

Get some wood. This is some black walnut I slabbed a year or two ago:

image

Make sure it's big enough to fit everything:

image

Cut and plane and do all the normal stuff to make it look pretty:

image image image

Cut 12 copper tubes to length. I found an excellent guide at http://leehite.org/Chimes.htm. I bought two 10' sections of type M 1/2" copper pipe and cut them accorting to this guide.

image image

Drill and chamfer holes to hang them by at the hang points.

image image

Make the stand as you please. I chose some pretty simple feet and through tenons.

image image image image

Make some electromagnets using 1.25" pieces of 3/8 in. Plain Steel Round Rod. 3D print end caps.

image image

Use a helper if available!

image image

Make some recesses in the underside of your wood for 12 hanger modules:

image

3D print hangers and assemble:

image image image image

Dead bug solder up each electromagnet.

image

Space is tight, I used more of the magnet wire for signaling.

image

Stainless screws for the capacitive buttons. (Line them up better than I did!)

image

Use a nice power button:

image

Batteries...

image

Assemble:

image image image

OLED screen and holder:

image

Finish with Danish Oil.

image

Software

The software uses regular MIDI files I whittled down in LMMS to simple melodies. I used a version of Mido I stripped down for memory reasons. The ESP-32 runs MicroPython.

The main code is in main.py. It's MVP (but not much more).

Parts

Tools I Used

Use what you have around, this is just what I used.

Future Work

The strikers return to their default position via gravity. This is not reliable. Sometimes they don't return at all due to friction, or they return part-way, resulting in the next strike being less effective. I'm working on a redesign w/ springs and a wider swing arc. This should make the chimes more consistent, and possibly allow harder strikes, variable intensity strikes, etc.

The ESP-32 has wifi. I want to be able to control this over mobile.

Memory is very tight. MicroPython supports baking in large libraries into the firmware to save memory. (Their equivalent of .pyc files can be run directly from flash according to documentation.) Figure out how to do this and create a custom firmware.

Be able to check and display battery voltage / % used.