Introduction: Arduino Due Based Fractal Audio Axe-FX II Controller
I have used guitar effects and preamps such as the Digitech GSP-21 and the ART SGX2000 in my live rig since the early nineties. Although great units for their period, it was time for an upgrade. After reading some reviews and playing countless devices, I finally settled down with the Fractal Audio Axe-FX II. I originally used the Behringer FCB1010 with the custom UNO mod chip to control the Axe-FX. This was a very versatile combo that served me well for a year or so. The only significant shortcoming was a lack of visual feedback on the foot controller. What preset is the Axe-FX on? What effects were currently enabled? What is the current Axe FX tempo?
For years, I've been planning to build my own custom MIDI guitar effects foot controller. These shortcomings in my live rig prompted me to begin.
I should point out that Axe-FX users would be better served using the brilliant MFC-101 foot controller, designed and built by Fractal Audio specifically for the Axe-FX. I built my "Bigfoot" controller simply to have fun, and as an excuse to play with some Arduino code.
Step 1: Test Bed for Proof of Concept
The goal of the proof of concept was to send a MIDI program change and CC to the Axe-FX, and interpret the resulting sysex data received from the Axe-FX. The Fractal Audio forums were invaluable for interpreting the sysex data received.
For the MIDI input/output circuit, I used a prototyping breadboard connected to an Arduino Uno board with 2 row x 16 character LCD shield and a 4x4 numeric keypad. The MIDI I/O circuit was based on the MIDI Manufacturers Association MIDI electrical specification diagram using the 6N138 optocoupler I had on hand.
To add MIDI support to the test code, I used the Arduino MIDI library written by Francois Best, version 4.2. No doubt, this excellent piece of software saved me months of development and testing. Thanks Francois!
Other Arduino libraries utilised in the proof of concept were the standard LCD library and the excellent Keypad library version 3.1, developed by Mark Stanley and Alexander Brevig. The keypad library negated the need for hardware debounce circuitry as software debounce is included in the library. Another massive time saver!
As demonstrated in the video clip, the proof of concept allows program and scene selection from the keypad, and display of the resultant program name/number and scene number on the LCD display. Effects status is returned as parseable data, however I left this functionality until I have a better idea of what I want to do with it.
Step 2: Planning the Functionality and Form
At this stage, I should define some basic terminology for those unfamiliar with Fractal Audio's Axe-Fx II:
- Preset - a preset stored in the Axe-FX memory. A preset defines which amplifiers, cabinets, effects, patches and mixes are available when that preset is selected. A preset also defines the parameters for all of the above.
- Scene - A combination of amplifiers, cabinets, active effects and levels stored within a preset.
- An Axe-FX II preset contains eight scenes.
For my project, allow me to define "Program" as an individual bigfoot switch layout that can send numerous preset change and continuous controller commands, including those that select scenes, as well as MIDI commands sent to other devices such as loopers, samplers, keyboards, garage doors, etc.
In summary, and within the context of this document, a "preset" is an Axe-FX preset and "program" is a Bigfoot switch layout.
Once basic MIDI communications with the Axe-FX had been established through the Bigfoot proof of concept, it was time to consider what functionality I needed from the foot controller. Requirements:
- Send program and continuous controller MIDI commands to Axe-FX
- Interpret the MIDI sysex returned after commands are sent and update the LCD display and LED states
- Implement programmable function switches to control effects, tempo, guitar tuner, extra MIDI commands
- Implement programmable ports for outboard expression pedals to control volume, wah, pitch
Having defined basic functionality, the form requirements followed:
- 4 x 20 LCD display to display program name and number, Axe-FX preset name and number, scene number, FX status, current tempo BPM, manager's phone number...
- Use 16 foot switches in a matrix, incorporating twelve programmable preset/scene/effect (program) switches and four function switches
- Use Freetronics programmable RGB LED modules as status indicators for each program switch
- Fit into confined stage spaces
- Use Neutrix Ethercon RJ45 connectors to 8 core CAT 6 cable to carry phantom power, MIDI in and MIDI out to reduce the number of cables on stage.
- Provide two 6.5mm jacks for MIDI expression pedals
- Provide additional MIDI in/out jacks for other foot controlled devices on stage such as loopers.
Time to choose an enclosure. The first consideration was to refactor the Behringer FCB1010 to contain the Arduino and associated circuitry. Hmmm... I might have a use for the Behringer foot controller elsewhere. Let's box it up fresh, in a typical wedge configuration with expression pedals connected remotely. I settled on the Hammond 1456PH1 enclosure, supplied on special order from WES components.
Step 3: Initial Assembly
Whilst waiting for the Hammond case to arrive, I ordered additional components:
- Arduino Due x 1 (eBay - be careful, make sure it's genuine Arduino)
- 2x20 character LCD display x 1 (eBay)
- Assorted 2.5mm pitch ribbon cables and PCB headers (eBay)
- Freetronics RGB LED module x 12 (Jaycar Electronics)
- 5 pin DIN panel socket x 2 (Jaycar Electronics)
- Vero board 95mm x 305mm (Jaycar Electronics)
- SPST foot switches x 16 (Bitches Love My Switches)
- Neutrix 6.5mm panel jack x 2 (WES Components)
- Neutrix RJ45 panel jack x 1 (WES Components)
- Neutrix USB panel jack x 1 (WES Components)
I began assembly by mounting the RGB LED modules to the Vero board using 2.5mm pitch M-F headers. The headers provided the clearance from the veroboard to clear the foot switches which were soldered to the same veroboard using hookup wire.
The RBG LED modules are connected in a daisy chain fashion, with four connections, +3.3V, GND, CLK and DATA. I used the veroboard to interconnect each LED module. The veroboard had header connectors soldered to allow connection to the Arduino using commonly available ribbon cables.
Once the case arrived. I drilled it for the 16 footswitches and 12 LED bezels. A rectangle hole was cut using a Dremel saw for the LCD display. I also cut a piece of Perspex to act as a screen over the LCD display.
The rear panel had four holes cut using a 24mm hole punch for the Neutrix panel jacks. Two 15mm holes were cut for the MIDI DIN plugs.
A suitable mounting method was required to hold the veroboards, the Arduino and the MIDI interface boards. I opted to use a horizontal/vertical lattice of 9mm timber, routed to provide the appropriate spacing for the the footswitch shaft. The veroboards and Arduino could the be mounted directly to the timber lattice with small spacers and small self tapping screws.
Step 4: MIDI Interfaces
The MIDI interface circuits used in the proof of concept needed to be assembled to a mountable circuit board. Once again, I raided the parts bin for some project board. This board also contained the comparator circuit used to isolate the expression pedals and easily mounted onto the timber lattice.
Step 5: Step 5.... Put It Together, Test It, Use It...
Since beginning this instructable, I've completed the foot controller and used it dozens of times at pub gigs. Unfortunately I haven't had time to finish the instructable, and probably won't for the near future. Hopefully someone gets some value from the efforts so far.