Taiko Trainer Using Atmega

Taiko Trainer

High level Design


This idea was inspired by team member Gabriel Soares who is part of Cornell’s Taiko Drum Club (Yamatai). Through his practicing and performing with others, he recognized the opportunity to design a drum trainer that can help students better learn to perform their drumming when following the leader of the group and practicing with others. This device would provide them feedback of if they were performing the correct types of hits and whether they were staying at the correct tempo with everyone else.

Taiko Trainer

The following video is the promotional trailer for Yamatai’s annual concert that the group performs every Spring semester. For those who are not familiar with the Taiko drumming, this video does a good job at demonstrating the technique and style that the performers use. Pay close attention to the different beat types, beat intensities, and the important role that timing plays in the drummers’ performance.

Overall User Interface

When designing the user interface, we needed to be able to make it easy for the user to switch between which mode/application they were using (as well as knowing which mode they were using), and we needed to be able to have them easily see whether they were beating too slowly or too quickly, and an indicator of what type of hit the trainer was detecting.
To solve these problems, we included several user friendly features. We included a simple push button to switch between applications, and included a seven segment display to display a single digit to clearly show the current mode to the user. The seven segment display key is as follows:

  • 0 – Calibrate Mode
  • 1 – Follow the Leader Mode
  • 2 – Repeat After Me Mode
  • 3 – Metronome Mode
  • 4 – Free Play Mode

We also have a total of 8 different colored LEDs on the board that the user can see, grouped into a set of 5 and a set of 3. Depending on the mode the trainer is in, these LEDs serve special purposes. For most modes, the set of 5 LEDs tells the user the speed at which they are playing. If the middle LED is being lit, you are playing at the same exact speed as the other player, if the right LEDs are being lit (colored yellow) then you are playing too quickly, and if the left two LEDs are being lit (colored green), you are playing too slowly. The set of 3 LEDs usually tell you the type of hit that is being registered as you are playing the drum, with the exception of Metronome mode. The yellow LED indicates a Rim Shot, the red LED indicates a Loud Beat, and the green LED indicates a Soft Beat.

High Level Block Diagram

From a high level view of our project, our goal was to correctly determine the types of beats on each drum and transmit this data wirelessly over IR for use in various applications. We would first detect the beats on each drum using the piezo sensors. We put two piezos on each drum to better detect the difference between loud beats and rim shots. Once the beat types were detected on each drum that was active, we would use IR transceivers and receivers to send this data across the room to the other drums and be evaluated in very short, unnoticeable period of time. This project allowed drummers to communicate and play with one another, giving real time feedback on the drummer’s timing and performance.

Circuit diagrams

Schematic Taiko Trainer


Our software consists of code written by Adam Harris, Adam Jelfo, Gabriel Soares and Lucas Nissenbaum. The only file this code is on is main.c, and all of our functions are located there. We do reference Bruce Land’s code for infrared communications. For this code, see this page.

The software for our drum is based on many different routines. These routines are encapsulated as follows:

Different Software Routines

Each layer works by calling the layer below it, and having access mostly to functionalities by the functions below it. The top layer defines the applications, which are the different beat modes we are using. This layer will implement the different beat and display functionality combinations. Beats will be obtained by calling the layer below, get beat. The get beat layer will get a beat and will handle any event that can happen before a beat is received. This layer also implements infrared transmission. It calls the interrupt service routine which gets each sample, and classifies the beat given the samples.

The explanation of the software project is divided in a few parts. First, we will explain the data structures used. Then, we will focus on explaining the innermost layer, the interrupt service routine. After that, we will describe the get beat function. Finally, all the applications will be explained, as well as initialization.

Data Structures

There is one main data structure used, which is a beat. A vector of beats (with BEAT_TOTAL positions) is held in memory, such that all beats are pre-allocated in this vector statically. BEAT_TOTAL has been set as 1000 beats, but may be changed easily.

Read more: Taiko Trainer

Leave a Comment

Your email address will not be published. Required fields are marked *