ESE 190 Final Project Writeup
Initially, we built Guitar Hero using four buttons that corresponded to four music notes, a motion sensor that detected the “strumming” of a guitar string, and a medium-sized 8x8 LED matrix that acted as the screen of the game, showing four different colored streams of notes coming down each of four columns of the matrix, each leading to a separate button. We chose this because we both played Guitar Hero when we were younger, and the hardware and software that was available to us easily corresponded to the fake guitar and screen-view of the real Guitar Hero game. We set up all of the hardware and tested its functionality by the first demo day at which point we were waiting for the shipment of the LED matrix backpack to arrive, a necessary component for the integration of the matrix into our system. Tasks we had left at this point: (1) solder the wires to improve the UI, (2) integrate the LED matrix into the hardware, and (3) write the software behind its light display. Unfortunately, when the LED matrix and its backpack arrived, we saw that it was a “mini” LED matrix, measuring one-inch by one-inch in size in comparison to the four-inch by four-inch matrix that we had previously been working with. As the final demo day was quickly approaching, we had to quickly decide how we could transform the components of our existing project into a different game that worked with the mini-matrix.
We chose to implement a trivia game, inspired by the recent hype around HQ, the live trivia app. Our game had two buttons corresponding to the user’s “YES” and “NO” answers instead of our original four buttons that corresponded to music notes. It used the mini LED matrix to display questions and animations instead of streams of incoming music notes, and used the motion sensor to act as a “SUBMIT ANSWER” button rather than using it to mimic a guitar string. We also added an additional component to our system: Bluetooth, which sent and received two different audio signals corresponding to correct and incorrect answers submitted by the user. We think that this solution was a great way to incorporate all of the necessary components of our original Guitar Hero system, and the skills we learned while building this alternative project translate well if we were to order the properly sized matrix and complete our initial project plan.
The following is a breakdown of the subsystems of our final outcome: buttons for answer selection, light sensors for submit, LED matrix display, and Bluetooth for audio feedback. We used 10K ohm resistors to wire the buttons and light sensors, with connections to 5V power and GND, and read them through Arduino digital read. After soldering the LED matrix to the mini backpack, there were four required connections: GND, 5V Power, DAT -> Analog4, and CLK -> Analog5. The LED matrix was programmed using the Adafruit LED Backpack and GFX libraries and written to using analog write. Scrolling text was implemented using a cursor offset and character print while the smiley face visual was done with a standard 2D-bitmap. The Bluetooth connection was implemented as done in a previous lab, using a master and slave module. Questions and answers are stored in the same sized char arrays. The code steps through the array, and after a question is displayed on the LED matrix, the user may select “Yes” or “No” by pressing the buttons. The inner loop waits until the user locks in their answer by waving over the light sensor. After checking if the answer matches the matching index in the answers array, the master module sends the corresponding note frequency to the slave module. The sound is then emitted to the buzzer and the visual feedback is displayed.
The project wasn’t intended to be turned into a real project that could be sold, but rather it was a way for us to learn new hardware skills and practice integrating hardware and software. That being said, our Guitar Hero project was based off of an existing product that was sold at mass, and our trivia project was analogous to the hardware and software systems used by many game shows, which display questions using software and often LED displays, have buttons/buzzers for user reaction and user input (e.g. the buzzer used when two people are competing to answer a trivia question), and related audio that corresponds to the positive and negative reactions of correct and incorrect participant responses. If we needed to sell our project for economic reasons, we could place a case over the internal hardware and only expose the two buttons, scrolling display, and submit sensor, delivering a much cleaner and more secure UI.
As for improvements to our project, it would certainly be interesting to order the proper matrix and implement the rest of Guitar Hero, as we were more excited about this idea than we were about implementing a trivia game. Fortunately, as mentioned prior, the skills that we learned from building this trivia game should translate easily if we were to order the larger LED-matrix and finish our first implementation of Guitar Hero. Specifically, the hardware uses the same sensors, the Bluetooth component of our trivia game could extend to provide a negative buzzing sound if a user incorrectly strums or pushes a musical note at the wrong time, and the code that we wrote to display words and animations could easily be changed to instead display streams of notes.
We will build guitar hero using a light board, buttons, led lights, motion sensors as well as programs in arduino and java. It will work as follows:
The LED matrix will act as the screen that shows users the incoming notes. There are eight columns in the LED matrix. We will pair columns such that they reflect the 4 strings (and streams of notes) of our "guitar." The notes will be sent to the LED matrix accompanied by music based on pre-programmed arrangements. At the base of the LED matrix, we will place 4 buttons, each of which correspond to a string, allowing users to play the specified note by pressing or holding down on the string, depending on whether the input notes are coming in as a stream or separate notes. The user will hear the music and see the 4 streams of notes coming toward the four corresponding buttons and will be tasked with pressing or holding the appropriate button (string) as the lights (notes) reach the end of the LED matrix. In addition to pressing the strings, the user will also have to wave a motion sensor that corresponds to "plucking" the string. All of this is analogous to the actual guitar hero board, which has 4-5 buttons for notes and 1 string to pluck. We may or may not include another light display that has words like "nice job" or "oops."
We will separate the work as follows:
Milestone 1: Set up the hardware such that notes flow across the LED matrix and the buttons register user input. We will aim to have most of the hardware parts down and at least the schematic of the entire system.
Milestone 2: Write a more elaborate program that can then interact with the hardware from Milestone 1. By this point, we should have a basic functional implementation.