Ferraganchos & Pinchos

Or how to rip all this stuff out of my head…

Archive for the tag “arduino”

OpenPipe Breakout & Arduino Musical Shield

UPDATE (October, 1st 2012)!!! We’ve moved to www.openpipe.cc.

If you want to use OpenPipe Breakout as a MIDI controller you need some sort of synthesizer. You could use generic synths with custom sound samples (GarageBand, Reason) or specific synths like UniversalPiper, but all of them need a PC (or smartphone) to run.

If you want something “portable” you need to use a specific hardware synthesizer. The guys from Sparkfun designed an Arduino Shield based on VLSI VS1053b chip (Music Instrument Shield). This chip is a CODEC with support for several audio formats, and It can also play real-time MIDI. I was wondering how good the sound synth inside this chip is, so I bought one.

Connecting OpenPipe breakout board and Arduino UNO is quite simple:

  • OpenPipe GND: Arduino GND
  • OpenPipe VCC: Arduino 3.3V
  • OpenPipe I2C SDA: Arduino Analog 4
  • OpenPipe I2C SCL: Arduino Analog 5

OpenPipe & Arduino Shield connectios

Then connect a sound amplifier or headphones to the jack audio output.

OpenPipe, Arduino Musical Shield and Headphones

Here is the code I’ve used. It’s basically the same for OpenPipe MIDI, but with some changes in the MIDI command functions, because this shield uses SoftwareSerial library.

I’ve tested several instruments (Bagpipe, Oboe, Church Organ, Clarinet, Trumpet, …) and the sound is good, but It’s not amazing.

You can draw your own conclusions from the video: our lovely geek (me) making noise… again…

OpenPipe breakout MIDI over USB with Arduino

UPDATE (October, 1st 2012)!!! We’ve moved to www.openpipe.cc.

Playing OpenPipe with PWM sound is amazing 🙂 but I got tired too soon. So the next step was to send MIDI commands in order to connect to a more realistic sound sampler/synthsizer like Garageband, Reason, etc.

OpenPipe breakout connected to Arduino Mega

There are several ways to address “Arduino sending MIDI commands” issue:

  • Send MIDI commands using MIDI DIN connector (MIDI Shield, etc.). A bit outdated?
  • Send MIDI commands using USB serial port and translate It to MIDI commands using PC software app. You can search “serial to MIDI” in Google. It’s OK but cumbersome.
  • Implement USB MIDI compliant class in Arduino. “The USB-HID specification has a specific type for MIDI input and MIDI output, which nearly all commercial musical controllers on the market use for class-compliant (driverless!) MIDI I/O.” (source)

IMHO the last option is the one because you need no additional software nor drivers (at least for Linux and Mac). How does it works?

Traditionally, Arduino boards used FTDI chip in order to translate UART to USB virtual serial port. Recent Arduinos changed this FTDI chip for an Atmel IC (atmega8u2, atmega16u2) capable of running UART-USB firmware (default) but also some other cool firmwares (ladyada wrote a good FAQ on this point). Flashing different firmwares your Arduino could act as a mouse, a keyboard, a MIDI device, and so on… (darran is doing a good job compiling this LUFA based firmwares for Arduino). The only drawback is that you need to reflash the Atmel IC  again if you want to update the Arduino sketch (You can’t please everyone… so far).

So here is the spet-by-step guide sumarizing how I proceeded with my Arduino Mega.

Download USB-MIDI firmware (Mega and UNO), demo and source from here. You can upload demo sketch (.pde) to the Arduino board as usual. Then we need to update atmega8u2 firmware (.hex).

Here you can find detailed information about flashing atmega8u2. Basically you need to reset atmega8u2 in order to enter DFU mode and the use dfu-programmer (sudo apt-get install dfu-programmer). In order to reset atmega8u2 connect RESET and GND pins in ISP header. The Arduino Mega pins are located the same way as Arduino UNO (see picture).

You can check that atmega8u2 is in DFU mode executing ‘lsusb’ after and before reset. The USB ID should have changed. Then flash Arduino-usbmidi-0.2-mega2560.hex.

sudo dfu-programmer at90usb82 erase

sudo dfu-programmer at90usb82 flash Arduino-usbmidi-0.2-mega2560.hex

sudo dfu-programmer at90usb82 reset

Now you can check if everything is working fine. Disconnect the Arduino and connect it again in order to boot as a MIDI device. Executing lsusb you shoud see somethin similar to:

Bus 003 Device 002: ID 03eb:2048 Atmel Corp. LUFA MIDI Demo Application

At this moment you have demo firmware running on Arduino, sending notes using UART, and atmega8u2 running MIDI device firmware translating UART commands to MIDI over USB protocol. Connecting a MIDI sniffer  (I’ve used KMidimon) you should see NOTE ON and NOTE OFF MIDI events.

Everything looks fine, so we are ready to flash OpenPipe breakout firmware…. but we need to restore atmega8u2 default firmware (the usbserial) before. Default firmware is located at /usr/share/arduino/hardware/arduino/firmwares/arduino-usbserial. In order to reflash again, enter DFU mode and then execute:

sudo dfu-programmer at90usb82 erase

sudo dfu-programmer at90usb82 flash Arduino-usbserial-mega.hex

sudo dfu-programmer at90usb82 reset

Now we can upload OpenPipe breakout sketch. I’ve mixed darran demo and OpenPipe breakout PWM code here. Then change atmega8u2 firmware again…

So the development process is:

  1. With default atmega8u2 firmware upload Arduino sketch
  2. Reset and flash atmega8u2 with MIDI firmware
  3. Reset the board and use It as MIDI device
  4. Reflash default firmware to atmega8u2
  5. GOTO 1

I’m sure we will be able to have composite firmwares with SERIAL and MIDI soon 🙂

Here is a geek playing galician bagpipes themes with several MIDI instruments in GarageBand…

Openpipe breakout

UPDATE (October, 1st 2012)!!! We’ve moved to www.openpipe.cc.

The past summer I discovered MPR121 Capacitive Sensor Controller searching cool stuff at Sparkfun and suddenly, mixed feelings came to my mind related to one of my past hobbies: mixing bagpipes and electronics.

Back in 2000 I developed a galician MIDI bagpipe chanter based on PIC16F84, and it was really funny.

MIDI bagpipe chanter electronics

MIDI bagpipe chanter electronics

MIDI bagpipe chanter HMI

MIDI bagpipe chanter HMI

In 12 years a lot has changed related to DIY electronics, especially related to Open Source Hardware, Arduino, etc., so I decided to give it a new try.

First thing to do was to test MPR121 capacitive touch controller, as I have related in a previous post.

Then I decided to move on PCB design (Eagle) and manufacture (Eurocircuits) in order to learn the whole precess from a DIY approach. Based on SparkFun breakout board I designed a new PCB with flute finger layout.

The two layer SMD design was focused to Eurocircuits default technology.

Openpipe breakout schematic

There is only one new feature regard MPR121 breakout from Sparkfun, and It is the 3.3V regulator, in order to allow connecting with 5V boards.

Openpipe breakout PCB layout

The layout is quite simple. Finger pads are located this way to facilitate routing. Pull-up resistors have solder jumpers, in case you need to disable them.

Openpipe breakout 3D

Eurocircuits PCB service is easy, fast and “cheap”. I was really surprised how easy It was to manufacture the boards.

Eurocircuits delivery

Next step is reflow. If you think you can solder QFN20 with a soldering iron… try it :).

In order to reflow QFN20 I used soldering iron to put some tin over the pads, then I carefully located the IC over the pads and then I used a high-tech reflow station (a.k.a. toaster).

I covered the “reflow station” with a glass ovenproof dish…

And surprisingly It worked like a charm!!! Remaining SMD components was soldered by hand.

I was very happy with the toaster reflow station, but I wanted to improve a bit the assembly process, so I ordered a polyester stencil to http://www.smtstencil.co.uk/. Stencil works fine for all components except for QFN20. I can’t manage to put the needed solder paste so every reflow I get bad QFN20 connections. So I’m currently putting QFN20 tin by hand and using the stencil for the remaining components. The following image shows QFN20 after reflow.

QFN20 after reflow

The electronics is OK, now the mechanics…

I soldered M3 hexagonal spacers to the finger pads. I used screws for testing.

Soldered M3 hexagonal spacers

Then I bought PVC pipe from a hardware store and made one 3mm hole for each spacer.

PVC pipe

Some wires and the Openpipe breakout board is ready to connecto to Arduino using I2C.

Openpipe breakout connected to Arduino Mega

The hardware is OK. What about the software?

I wrote an Arduino Mega sketch that reads MPR121 pads and uses PWM for sound generation. Quite simple and powerful enough for validation.

And here is the final result!!!

If you are interested in the Openpipe breakout please drop me a line to xulioc at gmail.com. I think I could manage to send you the “kit”.

MPR121 capacitive keyboard with Arduino Mega

UPDATE (October, 1st 2012)!!! We’ve moved to www.openpipe.cc.

I’ve got some MPR121 breakout boards from SparkFun in order to test latency and play a bit with this IC.

The setup is quite simple: eight drawing pins on a breadboard connected to the MPR121 breakout.

Then connect power and I2C signals to Arduino Mega. Be sure power is 3.3V because MPR121 is not a 5V IC.

I’ve attached a 16 Ohm speaker to PWM output (PIN 9 lower, PIN10 higher).

And here is the result.

And here is the code: http://dl.dropbox.com/u/196184/mpr121.zip. Use at your own risk 😉

Code is based on:

Post Navigation