SilentMetronome

Metronome

Context

As someone who experiments with musical instruments regularly, understanding tempo and rhythm are essential to playing any kind of music regardless of how simple. In big bands, because there are many musicians playing together, synchronization is essential and it is usually maintained using headphones for each member or a maestro to keep everyone on-tempo. Besides being unusable to people with some disabilities, headphones can be annoying and can cause unnecessary sweating around the ears. Following that logic, I wanted to create a tool that I can use during a jam session to replace the headphones, a tool that allows me to hear and interact with my surroundings while keeping the tempo.

Vibration motors
Vibration motors

Objective

This experiment is an attempt at using Arduino and vibration motors to create a wearable metronome. This metronome will use vibration instead of audio to notify the user of each beat, making it a more accessible tool to people with hearing disabilities on one hand, and others who have a preference of not wearing headphones. The goal is to create a p5 interface that gives the user the control of the tempo, but this version of the metronome only allows modification through hard-coding the Arduino board. So, it is important to note that this version produces one tempo at a time, but the intention is to continue expanding and aiming for full interactivity without the need to edit the Arduino code.

Link to Video

Design Process

An idea of what the device could look like
An idea of what the device could look like
Initial sketch
Initial sketch

Class Experiments
Through the three experiments, we were asked to take note of the findings and test different methods of connecting the circuit and of coding the motors. This was a very useful step because I was able to learn at an early stage what type of connection I am interested in having depending on the purpose. For example, connecting the motor to a transistor made the vibrations much stronger but required a more complicated circuit. On the other hand, using a motor driver offered aq library of vibration patterns but the intensity of the vibration decreased significantly. The second experiment offered me what I was looking for to build the metronome because it required a very simple reliable connection, allowed multiple motors, strong enough vibration and enough flexibility to edit the vibration patterns.

First attempt using one motor
First attempt using one motor
Experimenting with two motors using simple connection
Experimenting with two motors using simple connection
Experimenting with the motor driver
Experimenting with the motor driver

Body Placement
Through my research for similar tools online, I came across the Soundbrenner Pulse, which is a smart wearable metronome that the user wears on his or her wrist, like a smartwatch. I also was considering the wrist as a placement for the metronome based on Clint Zeagler’s diagrams, suggesting that the wrist is a high sensitivity area. However, while the wrist metronome can work well for some instruments, percussions instruments, on the other hand, might not work well with a wrist metronome. So, after several trials in placing the motors on different parts of the skin, I eventually decided to place them on the back of the neck. This way, it will ensure there are no cables in the way, the vibration is not hindered by the instrument itself. In addition to that,  as part of my tattoo education, I know that the epidermal skin thickness of the neck is thin compared to the rest of the body. Placing the motors on the back of the neck brings the whole body into the musical experience because of the vibration that is pulsating into the body through the skin, which is more intense than placing the motors on the arms.

Testing the placement of the vibration motors
Testing the placement of the vibration motors

Circuit & Code
Going through the class experiments allowed me to see different approaches for the circuit. Considering that more than one vibrating motor is required to build this metronome, I wanted a simple circuit that is reliable and is not hindered the number of motors connected to the board. It is important at this level to write a code that is scalable because this is only the first version and future iterations will have more motors and more options available. Eventually, I used a simple connection, using the one side of the motors to two digital pins and the other to the ground pins.

Circuit
Circuit
Snippet of Arduino code
Snippet of Arduino code

Link to code

The code I used for this project is based on the fade example from the Arduino library. However, after trying different settings and values, I noticed that vibration with a (50) delay was enough to simulate a percussion tap. In addition to that, for this version, I decided to use a 75 bpm (beats per minute), which is a mid-range tempo. But since I am working with the “delay” function, I have to calculate the gap between the beats rather than the speed of the beats. So, through some calculations: 75 bpm will require an 800 milliseconds delay.

 

Tools & Materials Used

Arduino Mega
2x vibration motors

 

Challenges

The main challenge I faced in this experiment was figuring out how to code the gaps between the beats rather than the beats per minute measurement. It got really complicated when I added another motor and attempted to output different patterns on each at the same time. However, since I am using the delay function, it is causing some issues and I will be working on it more to straighten out those issues. 

In addition to that, one of the main challenges during this assignment was writing the p5 code. Although it is something we have done before, after numerous attempts to make it work, for some reason, it is still not sending any information through the serial port. I will continue working on that.

 

Future Steps

In order for this tool to be fully useful, it requires an equation that converts tempo values on the front-end to delay in milliseconds on the back-end. This is crucial since the tempo has to be changeable by the user easily. Also, I will explore using more than two motors for the next iterations and testing how the experience can change to the user. In addition to that, I will explore adding some more functionality into the metronome, like offering the option of splitting the beat into 3 or 4 sub-beats.