ECE597 Fall 2014 Project Bonekey Bonekey
Embedded Linux Class by Mark A. Yoder
Team members: Jiayu Guo, Zizhao Wang
Contents
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 Installation Instructions 08 User Instructions 08 Highlights 10 Theory of Operation 09 Work Breakdown 10 Future Work 09 Conclusions 10 Demo 10 Not Late Comments: Nice project. Thanks for fixing up the wiki. Score: 92/100
Executive Summary
We got the idea from Makey Makey which is a invention-kit to use everything to be Keyboard. Like banana, water, even cat all can be keyboard. For this project, we created a Bonekey Bonekey to play with sound. Our Bonekey Bonekey uses banana as keyboard to play piano tones. This design is consisted of a main microcontroller, a PCB board, a USB sound card, and an audio player. We use Beaglebone to get the separate input informations and produce corresponding tones to the audio player. One of human's wrist is mounted by reference ground and human can use either figures to touch bananas to produce different tones. Our Bonekey Bonekey will not only use bananas as inputs but also apples, water and everything.
Installation Instructions
Hardware
PCB
The board and the schematic files can be found in the Github repository.
SV1 - Connect to the beagle bone from P8_7 to P8_17.
SV2 - Connect to bananas.
SV3 - middle pin connect to power and the two side pin connect to ground.
BOM
Qty | Value | Parts |
---|---|---|
7 | 1M | R1, R2, R3, R4, R5, R6, R7 |
7 | 2N2222 | T1, T2, T3, T4, T5, T6, T7 |
7 | 4.7M | R8, R9, R10, R11, R12, R13, R14 |
USB Sound Card
Since the beagle bone doesn't have an audio output we need to add a USB sound card to the bone.
We have tested two USB sound cards
USB 2.0 EXTERNAL 2.1 SURROUND SOUND ADAPTER
CREATIVE SOUND BLASTER X-FI GO! PRO
All together
Software
Build CSound from source
Build Csound from source Beaglebone. The BonekeyBonekey need CSound6 but the apt-get version is still CSound5
bone$ sudo apt-get build-dep csound bone$ sudo apt-get install cmake git bone$ cd ~ bone$ mkdir csound bone$ cd csound bone$ git clone https://github.com/csound/csound.git csound bone$ mkdir cs6make bone$ cd cs6make bone$ cmake ../csound bone$ make -j2 bone$ sudo make install bone$ sudo ldconfig bone$ cd cs6make
Clone BonekeyBonekey Repository
bone$ git clone https://github.com/MikuZZZ/BonekeyBonekey
Disable HDMI
Follow this link to disable HDMI, and make some GPIO pins available.
Make the USB sound card as the default output
copy the asoundrc file from the Github repository to your home folder.
bone$ cd asoundrc ~/.asoundrc
User Instructions
- Follow the installation instruction to make sure you got the hardware and software installed.
- Connect SV1 on the PCB borad to beaglebone P8-7, 9, 11, 13, 15, 17.
- Wire up seven bananas to the 7 inputs to SV2 of the PCB board.
- Connect the USB sound adapter to the beaglebone, and also connect a headphone or speaker.
- Run the Bonkey program.
bone$ python BonkeyBonkey.py
Then you can play the bananas.
Highlights
Bonekey Bonekey is project that can turn almost every conductors into a music keyboard, such as fruits, water or people.
The idea come from MakeyMakey by Jay Silver in Santa Cruz, CA
Please watch our video and have fun.
https://www.youtube.com/watch?v=SFFVrcGGZdw
Theory of Operation
Wow, that's much clearer. Thanks...
Hardware
Input
- First we disabled the internal pull-up resister of the GPIO, because we need a very large pull-up resistor.
- All the GPIO pins we used have a 4.7MOhm pull up resistor, and connected to a banana.
- The resister of human skin is about 10K-100KOhm, so when we touch the bananas, the GPIO pins are grounded.
Voltage level
- The GPIO pins on the beaglebone detect the voltage higher than 2.6V as high, but when we use a 4.7MOhm resistor, the voltage level can not reach 2.6V.
- We use a 2N2222 general purpose transistor as a switch to make the voltage level reach 2.6V.
Software
Python
The flow chart of the python program.
Csound
- Csound has an internal function to generate piano like sounds
- We just need to set up a Csound instrument and send a frequency message to it.
Piano instrument definition. Documentation for prepiano
instr 1 aa,ab prepiano p7, 3, 10, p4, 3, 0.002, 2, 2, 1, 5000, -0.01, p5, p6, 0, 0.1, 1, 2 outs aa*.2, ab*.2 endin
Initialize score.
f1 0 8 2 1 0.6 10 100 0.001 f2 0 8 2 1 0.7 50 500 1000
Then the python program will send a note to csound dynamically when the GPIO interrupt is activated.
perfThread.InputMessage("i1 0.0 0.5 1 0.9 200 " + freq[0])
Work Breakdown
PCB design
We did PCB design together. We tried to use several values of the pull-up resistor, however there was not low enough voltage value for GPIO reading as 0. Finally we decided to use transistor as a switch to pull down the voltage once the base of transistor connect to ground.
GPIO Read Input
Jiayu did the GPIO read input part in python. The GPIO will read high voltage as 1, and low voltage as 0. And also using javascript to disable internal pull-up and pull-down resistor.
Csound Play Sound
Zizhao did the Csound play part. In python, the .sco and .orc Csound files are created, Csound options are set, and the tones are played by Csound.
Hardware Parts
Zizhao bought the resistors and transistors, Jiayu bought the bananas.
Future Work
- Use serial port for input so that we can add more input keys and make a real midi device
- Optimize CPU usage in csound so the BeagleBone can generate more notes at the same time
- Add some more instrument tones, and use a push button to select them
Conclusions
In this project, we designed a banana midi piano, which is consist of a BeagleBone, a PCB, USB sound card and a audio player. So far we can only play very easy songs with these seven piano notes. In the future, we may add more features, like add more inputs or add different tones to play more songs. As well we may optimize CPU usage to play more notes simultaneously and Coherently.
Embedded Linux Class by Mark A. Yoder