Guitar Video Game Uses PIC32

Realism Revamp

While music-playing video games are fun, their user interfaces tend to leave a lot to be desired. Learn how these two Cornell students designed and built a musical video game that’s interfaced using a custom-built wireless guitar controller. The game is run on a Microchip PIC32 MCU and has a TFT LCD display to show notes that move across the screen toward a strum region.

By Jake Podell and Jonah Wexler

While many popular video games involve playing a musical instrument, the controllers used by the player are not the greatest. These controllers are often made of cheap plastic, and poorly reflect the feeling of playing the real instrument. We have created a fun and competitive musical video game, which is interfaced with using a custom-built wireless guitar controller (Figure 1 and Figure 2). The motivation for the project was to experiment with video game interfaces that simulate the real-world objects that inspired them.

Figure 1
Front of the guitar controller. Note the strings and plectrum.

Figure 2
Back of the guitar controller

The video game is run on a Microchip PIC32 microcontroller [1]. We use a thin-film-transistor LCD display (TFT) to display notes that move across the screen toward a strum region. The user plays notes on a wireless mock guitar, which is built with carbon-impregnated elastic as strings and a conducting plectrum for the guitar pick. The game program running on the PIC32 produces guitar plucks and undertones of the song, while keeping track of the user’s score. The guitar is connected to an Arduino Uno and Bluetooth control center, which communicates wirelessly to the PIC32.

The controller was designed to simulate the natural motion of playing a guitar as closely as possible. We broke down that motion on a real guitar into two parts. First, users select the sound they want to play by holding the appropriate strings down. Second, the users play the sound by strumming the strings. To have a controller that resembled a real guitar, we wanted to abide by those two intuitive motions.

Fret & Strum Circuits

At the top of the guitar controller is the fret board. This is where the users can select the sounds they want to play. Throughout the system, the sound is represented as a nibble (4 bits), so we use 4 strings to select the sound.

Each string works as an active-low push-button. The strings are made of carbon-impregnated elastic, which feels and moves like elastic but is also conductive. Each string was wrapped in 30-gauge copper wire, to ensure solid contact with any conductive surfaces. The strings are each connected to screws that run through the fret board and connect the strings to the fret circuit (Figure 3).

Figure 3
Complete controller circuit schematic (on guitar).

The purpose of the fret circuit is to detect changes in voltage across four lines. Each line is branched off a power rail and connected across a string to an input pin on an Arduino Uno. Current runs from the power rail across each string to its respective input pin, which reads a HIGH signal. To detect a push on the string, we grounded the surface into which the string is pushed. By wrapping the fret board in a grounded conductive pad and pushing the string into the fret board, we are able to ground our signal before it can reach the input pin. When this occurs, the associated pin reads a LOW signal, which is interpreted as a press of the string by our system.

Along with the fret circuit, we needed a way to detect strums. The strum circuit is similar in its use of a copper-wrapped, carbon-impregnated elastic string. The string is connected through the fret board to an input pin on the Arduino, but is not powered. Without any external contact, the pin reads LOW. When voltage is applied to the string, the pin reads HIGH, detecting the strum. To mimic the strumming motion most accurately, we used a guitar pick to apply the voltage to the string. The pick is wrapped in a conductive material (aluminum foil), which is connected to the power rail. Contact of the pick applies voltage to the string, which on a rising edge denotes a strum.

Figure 4
Shown here is a block diagram of the controller signals.

As shown in Figure 4, the direct user interface for the player is the guitar controller. The physical interaction with the guitar is converted to an encoded signal by an Arduino mounted to the back of the guitar. The Arduino Uno polls for a signal that denotes a strum, and then reads the strum pattern across the four strings. The signal is sent over USB serial to a Bluetooth control station, which uses a Python script to broadcast the signal to an Adafruit Bluetooth LE module. The laptop that we used as a Bluetooth control station established a link between the controller and the Bluetooth receiver, and was paramount to the debugging and testing of our system. Finally, the Bluetooth module communicated over UART with the PIC, which interpreted the user’s signal in the context of the game [2].  …

Read the full article in the March 344 issue of Circuit Cellar
(Full article word count: 3271 words; Figure count: 10 Figures.)

Watch the project video here:

Don’t miss out on upcoming issues of Circuit Cellar. Subscribe today!

Note: We’ve made the October 2017 issue of Circuit Cellar available as a free sample issue. In it, you’ll find a rich variety of the kinds of articles and information that exemplify a typical issue of the current magazine.

DIY Network-Ready Polyphonic Music Controller

Hans Peter Portner’s Chimaera project is a touch-less, expressive, network-ready, polyphonic music controller released as open source hardware. It is a mixed analog/digital offspring of the Theremin. An array of analog, linear Hall effect sensors make up a continuous 2-D interaction space. The sensors are excited with Neodymium magnets worn on fingers.

Portner's Chimaera project

Portner’s Chimaera project

The device continuously tracks and interpolates position and vicinity of multiple present magnets along the sensor array to produce corresponding low-latency event signals. Those are encoded as Open Sound Control bundles and transmitted via UDP/TCP to a software synthesizer. The DSP unit is a mixed-signal board and handles sensor read out, event detection and host communication. It is based on an ARM Cortex M4 microcontroller in combination with WIZnet W5500 chip, which takes care of all low-level networking protocols via UDP/TCP.

First Prize — Chimaera: The Poly-Magneto-Phonic Theremin, Hans Peter Portner (Switzerland)

The poly-magneto-phonic Theremin

In his project write-up, Portner explains:

With its touch-less control (no friction), high update rates (2-4 kHz), its quasi-continuous spatial resolution and its low-latency (<1 ms), the Chimaera can react to most subtle motions instantaneously and allows for a highly dynamic and expressive play. Its open source design additionally gives the user all possibilities to further tune hardware and firmware to his or her needs. The Chimaera is network-oriented and configured with and communicated by Open Sound Control, which makes it straight-forward to integrate into any setup.

The hardware of the Chimaera consists of two types of printed circuit boards and an enclosure. Multiple sensor units are daisy-chained to form the sensor array and connected to a single digital signal processing (DSP) unit.

Sensor unit

Sensor unit

A single sensor unit consists of 16 linear hall-effect sensors spaced 5mm apart and routed to a single output through a 16:1 multiplexer which is switched by the DSP unit. Downstream the multiplexer, the analog signal runs through an amplification circuitry.

A modular hardware design consisting of identical sensor units and a single DSP unit embedded in a wooden case allows building devices with array sizes of 16-160 sensors.
A modular hardware design consisting of identical sensor units and a single DSP unit embedded in a wooden case allows building devices with array sizes of 16-160 sensors.

The DSP unit is a mixed-signal board and handles sensor read out, event detection and host communication. It is based on an STM32F303Cx ARM Cortex M4 microcontroller in combination with WIZnet W5500, a hardwired 100Mbit IPv4/PHY chip taking care of all low-level networking protocols via UDP/TCP. The board’s analog part features 10 analog inputs providing connection points for the sensor units, leading to a maximally possible array of 160 sensors. Those analog inputs connect directly to three in parallel running 12bit analog-to-digital converters.

Schematic of the DSP unit (STM32F303Cx part)

Schematic of the DSP unit (STM32F303Cx part)

Networking technology in a zero configuration setup has advantages in respect to long-distance transmission, operating system independence and inherent ability for network performances. We thus use the Open Sound Control (OSC) specification via UDP/TCP as low-level communication layer.

Schematic of the DSP unit (WIZnet W5500 part)

Schematic of the DSP unit (WIZnet W5500 part)

Portner’s project won First Prize in the WIZnet Connect the Magic 2014 Design Challenge. The entire project and its associated files are now available.

Microcontroller-Based Markov Music Box

Check out the spectrogram for two FM notes produced by FM modulation. Red indicates higher energy at a given time and frequency.

Cornell University senior lecturer Bruce Land had two reasons for developing an Atmel AVR micrcontroller-based music box. One, he wanted to present synthesis/sequencing algorithms to his students. And two, he wanted the challenge of creating an interactive music box. Interactive audio is becoming an increasingly popular topic among engineers and designers, as we recently reported.

Land writes:

Traditional music boxes play one or two tunes very well, but are not very interactive. Put differently, they have a high quality of synthesis, but a fixed-pattern note sequencer and fixed tonal quality. I wanted to build a device which would play an interesting music-like note sequence, which constantly changed and evolved, with settable timbre, tempo, and beat… To synthesize nice sounding musical notes you need to control spectral content of the note, the rise time (attack), fall time (decay), and the change in spectral content during attack and decay.  Also it is nice to have at least two independent musical voices. And all of this has to be done using the modest arithmetic capability of an 8-bit microcontroller.

Land’s students subsequently used the music box for other projects, such as an auto-composing piano, as shown in the following video.

In early 2013 Circuit Cellar will run Land’s in-depth article on the Markov music box project. Stay tuned for more information.