Overview
Before you begin, read the Getting Started with FLORA guide! You'll have installed the Adafruit Arduino software by now, OR you can program your FLORA directly from your browser using Codebender. Fancy!
You may also want to brush up on your soldering skillz with our guide.
For this project you will need:
- FLORA main board
- 4x small piezos
- USB miniB cable
- 4x 1M ohm resistors
- ribbon wire
- glove
- scrap fabric to match glove
- pencil
- soldering iron and solder
- third hand tool
- heat shrink tubing
- wire strippers, pliers, and flush diagonal cutters
- heat gun
- painter's tape or masking tape
- sewing needle and thread
- scissors
Page last edited June 18, 2014
Text editor powered by tinymce.
Sew Piezos
Thread your needle and double the thread over, then tie a knot at the end of the tails.
Stitch through one of your pieces of fabric and affix it to the glove fingertip over the pencil mark with a whip stitch.
Be careful not to stitch the glove finger closed! Check periodically to be sure your stitches only pierce the intended layer.
Stitch halfway around the pocket, tucking the seam allowance in a you go.
Page last edited June 18, 2014
Text editor powered by tinymce.
Circuit Diagram
Four piezos each have a 1M ohm resistor across them, with the red wires each going to a different analog input (labeled D6, D9, D10, and D12).
Page last edited June 18, 2014
Text editor powered by tinymce.
Solder FLORA circuit
We're going to extend the piezo wires and also attach a pull-down resistor.
Start with one piezo and trim the black wire a little shorter than the red wire. Slide on a piece of heat shrink tubing and strip the end of the wire.
Wrap the wire end around one of the resistor's leads (doesn't matter which one), and situate the two in the grasp of your third hand tool.
Strip one end on a piece of wire, and wrap this end around the same resistor lead. Solder the two wires to the resistor lead.
Now it's time for the other wire-- wrap the piezo's red wire and the other wire around the other side of the resistor, remembering to add a piece of heat shrink tubing before soldering.
Use a heat gun to shrink both pieces of heat shrink and repeat this process for the three other piezos.
Solder all the piezo's black wires to ground.
Page last edited June 18, 2014
Text editor powered by tinymce.
Code
/*
Piezo Keyboard glove
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried & Becky Stern for Adafruit Industries.
BSD license, all text above must be included in any redistribution
*/
const int indexFinger = A9; // the piezo is connected to analog pin 9 (aka D9)
const int middleFinger = A7; // the piezo is connected to analog pin 7 (aka D6)
const int thumb = A10; // the piezo is connected to analog pin 10 (aka D10)
const int pinkyFinger = A11; // the piezo is connected to analog pin 11 (aka D12)
const int pins[] = {thumb, indexFinger, middleFinger, pinkyFinger};
char Keys[] = {'z','x','c','v'};
boolean currentPressed[] = {false, false, false, false};
const int threshold = 40; // threshold value to decide when the detected sound is a knock or not
void setup()
{
//while (!Serial)
Serial.begin(115200);
Serial.println("start");
Keyboard.begin();
}
void loop()
{
for (int i=0;i<4;i++) {
delay(1);
long total1 = 0;
long start = millis();
long total = analogRead(pins[i]);
// check if we are sensing that a finger is touching
// and that it wasnt already pressed
if ((total > threshold) && (! currentPressed[i])) {
Serial.print("Key pressed #"); Serial.print(i);
Serial.print(" ("); Serial.print(Keys[i]); Serial.println(")");
currentPressed[i] = true;
Keyboard.press(Keys[i]);
}
else if ((total <= threshold) && (currentPressed[i])) {
// key was released (no touch, and it was pressed before)
Serial.print("Key released #"); Serial.print(i);
Serial.print(" ("); Serial.print(Keys[i]); Serial.println(")");
currentPressed[i] = false;
Keyboard.release(Keys[i]);
}
delay(5);
}
}
Adding MIDI support to Flora
Advanced users might want to talk straight USB MIDI-- you can do that with FLORA too! You'll have to mod your Adafruit Arduino 1.0.5 installation. The following instructions are derived from PhilB's upcoming OONTZ tutorial.
To start, download and install PJRC’s Teensyduino package, an add-on for the Arduino IDE. This brings support for theirTeensy line of microcontroller boards, including excellent MIDI support. A graphical installer guides you through setup. Make sure to do the Teensification to the Adafruit Arduino IDE so you get both Flora & Teensy support
Installing George Werner’s TeeOnArdu package then lets us use the Teensy MIDI library on the FLORA. Ladyada made some changes so this package can use the stock Leonardo/Flora bootloader, saving headaches.
Locate your Arduino sketchbook — the folder where your own Arduino code and related files go (not the Arduino application, but the folder containing your personal work). The location is a little different for each operating system:
-
Windows: (home)\My Documents\Arduino
-
Mac: (home)/Documents/Arduino
-
Linux: (home)/sketchbook
Move the TeeOnArdu folder (the one alongside the README, not its parent folder) into this hardware folder.
Start the Arduino IDE. Or, if it’s already running, exit and restart it.
On the Tools→Board menu there should be a new item labeled “Flora (TeensyCore).” Select this.
You should have previously selected Flora (TeensyCore) from the Tools→Board menu.
Now, from the Tools→USB Type menu, select Serial. Then unplug and re-plug the USB cable. This resets the FLORA bootloader, and for the next 10 seconds it appears to the system as a serial device. Quickly now…from the Tools→Serial Port menu, select the port corresponding to the Arduino board.
From the Tools→USB Type menu, now select MIDI. It’s necessary when compiling MIDI code.
Load the code below into your Arduino IDE. Before uploading the code to the board, press the mini reset button on the Flora to launch the bootloader again. There’s a 10 second window to then click Upload. If you miss it on the first try, just try again!
If you return to MIDI after working on other Arduino projects and have problems uploading code, remember to do this Serial-then-MIDI selection rigmarole. (You don’t need to do this every time you upload code, just when switching back to MIDI from a different Arduino project.)
/*
Piezo MIDI glove
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried, Phillip Burgess, & Becky Stern for Adafruit Industries.
BSD license, all text above must be included in any redistribution
*/
#define LED 7 // Pin for heartbeat LED (shows code is working)
#define CHANNEL 1 // MIDI channel number
int note;
const int indexFinger = A9; // the piezo is connected to analog pin 9 (aka D9)
const int middleFinger = A7; // the piezo is connected to analog pin 7 (aka D6)
const int thumb = A10; // the piezo is connected to analog pin 10 (aka D10)
const int pinkyFinger = A11; // the piezo is connected to analog pin 11 (aka D12)
const int pins[] = {thumb, indexFinger, middleFinger, pinkyFinger};
//char Keys[] = {'z','x','c','v'};
boolean currentPressed[] = {false, false, false, false};
const int threshold = 40; // threshold value to decide when the detected sound is a knock or not
void setup()
{
pinMode(LED, OUTPUT);
// We dont have Serial or Keyboard available in MIDI mode!!!
//while (!Serial)
//Serial.begin(115200);
//Serial.println("start");
//Keyboard.begin();
}
void loop()
{
for (int i=0;i<4;i++) {
delay(1);
long total1 = 0;
long start = millis();
long total = analogRead(pins[i]);
// check if we are sensing that a finger is touching
// and that it wasnt already pressed
if ((total > threshold) && (! currentPressed[i])) {
//Serial.print("Key pressed #"); Serial.print(i);
//Serial.print(" ("); Serial.print(Keys[i]); Serial.println(")");
currentPressed[i] = true;
//Keyboard.press(Keys[i]);
//note = LOWNOTE + (i & 0x0F) * 8;
usbMIDI.sendNoteOn(60+i, 127, CHANNEL);
}
else if ((total <= threshold) && (currentPressed[i])) {
// key was released (no touch, and it was pressed before)
//Serial.print("Key released #"); Serial.print(i);
//Serial.print(" ("); Serial.print(Keys[i]); Serial.println(")");
currentPressed[i] = false;
//Keyboard.release(Keys[i]);
usbMIDI.sendNoteOff(60+i, 0, CHANNEL);
}
delay(5);
}
while(usbMIDI.read()); // Discard incoming MIDI messages
}
This requires either a software synthesizer — a program that generates sounds using your computer’s audio hardware — or a MIDI patchbay utility, which forwards the MIDI data to a hardware synthesizer.
If you’ve done music on your computer before, you probably already have one or both of these tools. Otherwise, there are a ton of options out there, many of them free. For example, on Windows there’s the freeware Firebird2. Mac has the very basic SimpleSynth or the soup-to-nuts GarageBand. Even Linux has options. Google around for “software synthesizer”, "MIDI", “free” and “Windows”, “Mac” or “Linux” and see what you find.
There are so many options, we can’t walk you through this for every app or operating system. It’s usually pretty straightforward though, we’re confident you can find something and get it installed and running.
Page last edited June 18, 2014
Text editor powered by tinymce.
Finishing Touches
Page last edited June 18, 2014
Text editor powered by tinymce.
Use It!
Page last edited June 18, 2014
Text editor powered by tinymce.