ECE434 Project - MIDI Controller

Team members: Donald Hau

Grading Template
I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!

 09 Executive Summary 09 Packaging 09 Installation Instructions 09 User Instructions 09 Highlights 09 Theory of Operation 09 Work Breakdown 09 Future Work/Conclusions 09 Hackster.io 09 Demo/Poster 00 Not Late

Score: 90/100

Executive Summary
Picture that summarizes the project.

This project is a MIDI / piezoelectric piano implementation. It utilizes 12 buttons and 2 rotary encoders to give a full octave worth of piano keys, with the ability to jump up or down the keyboard by either a full octave or individual notes depending on the encoder used. Using 3 piezoelectric buzzers, it also has the capability to play chords.

The piano part of it is fully functional. The buzzers work well and so do the encoders.

While the MIDI is fully implemented and tested, it hasn't been verified so it may not be sending the time signals perfectly. In summary, it is currently a very annoying but much more useful version of the ECE160 project, with added midi.

Packaging
If you have hardware, consider Small Build, Big Execuition for ideas on the final packaging.

Installation Instructions
Github has all required files. install.sh gives the python midi library via pip3, the setup.sh sets up pins, and piano.py is the actual file to run.

https://github.com/dfirestorm/ece434Project.

User Instructions
Simply run piano.py and wait for startup to complete.

Work Breakdown
I did everything in this project solo, and got a large amount working. I wanted to display the current base note on a 7 segment display but found that there wasn't enough speed to do that while watching for button presses.

Future Work
In the future, I plan on supplementing the project with using the 8x8 LED matrix to display the starting note.

Conclusions
The beagleboard is a very useful board and it is probably the only board I know of which could accomplish this without additional hardware, as it can run multiple hardware PWM simultaneously as well as having significantly more IO pins than other devices.