Don't get sad, Make something!

Lady Ada came up with this project when one of her favorite sites was taken down (http://daftpunkonsole.com/), so she made her version using Adafruit breakout boards.

In this project, the Trellis triggers samples on an Adafruit Audio FX soundboard. The Pro Trinket interfaces between the two over serial and i2c and ties the samples to the buttons.

All-In-One Soundboard

It's a really slick way to make a compact, all-in-one sound board. This version of the Audio FX Soundboard features a built in amp so you can wire speakers up to terminals or directly on the board.

Whenever a Trellis key is pressed, there's a loop in the arduino sketch that listens for button presses and plays back a sample from a list.

Prerequisite Guide

We recommend walking through the guides below to get familiar with the components used in this project.

Parts

You'll need the following parts below to complete this project.

  • Pro Trinket 5V
  • Trellis Driver PCB
  • Audio FX Soundboard w/ Amp
  • Pro Trinket Lipo Backpack Add-on
  • Silicone Elastomers 4x4 button keypad
  • Slide Switch
  • 1200mAh Lithium Polymer Battery
  • 3mm diffused LEDs (any color!)

Tools & Supplies

The follow tools will assist you in building this project.

  • Soldering Iron
  • Wire Strippers
  • Wire Cutters
  • 3D Printer
  • Panavise Jr.
  • Helping Third Hand
  • 3D Printing Filament
  • Blue Painters Tape
  • 30AWG Silicone Coated Stradned-core wire 
  • Heat Shrink Tubing
  • Screw Driver
  • #4-40 3/8 Phillips machine screws

Wired Connections

Follow the circuit diagram above for referencing the wired connections. Size and position of the components aren't exact but a representation of how the components will be wired.

Pro Trinket

5V
#6
#5
#4
A1
A2
A4
A5

Audio FX Soundboard

---
RX
TX
RST
ACT
---
---
---

Trellis PCB

5V
---
---
---
---
INT
SDA
SCL

Audio FX soundboard

The speakers are wired directly to the +L/-L and +R/-R pins on the PCB.

Pro Trinket Lipo Backpack

The Pro Trinket lipo backpack is wired to the following pins. The slideswitch is wired to the two pins for power.

BAT - BAT
G - G
Bus - 5V

Installing Arduino

You'll need to customize some settings in the Arduino IDE to get configured to compile code onto the Adafruit Pro Trinket.  Be sure to check out the Introduction to Pro Trinket guide for setting that up.

Library Dependencies 

The following libraries are needed to compile the arduino sketch.

Uploading Sketch

With the Adafruit Arduino IDE and libraries installed, create a new sketch. Paste the desired code into the text editor. Select Pro Trinket from Tools > Board. Then USBtinyISP from Tool > Programmmer. Proceede by pluging a micro USB cable from your computer to the Pro Trinket. Watch for the red LED to start blinking and click upload to compile the sketch onto the Pro Trinket. If everything is good, Arduino will prompt with you a successful message in the console window.

Customizing Tracks

You'll most likely want to change out the audio samples in this project. Look for the line where it lists out char PadToTrack[numKeys][12]. The track file names are listed here. These should have the same names of the audio files on the Audio FX soundboard. See this guide for file naming conventions.

The code is in this GitHub repo. If you find there are issues, you can use the GitHub Pull Request to suggest a fix.

// SPDX-FileCopyrightText: 2019 Anne Barela for Adafruit Industries
//
// SPDX-License-Identifier: MIT

#include <Wire.h>
#include "Adafruit_Trellis.h"
#include <SoftwareSerial.h>
#include "Adafruit_Soundboard.h"
 
/************ sound board setup ***********/
// Choose any two pins that can be used with SoftwareSerial to RX & TX
#define SFX_TX 5
#define SFX_RX 6
// Connect to the RST pin on the Sound Board
#define SFX_RST 4
 
#define SFX_ACT 1 // the 'ACT'ivity LED, to tell us if we're still playing
 
// You can also monitor the ACT pin for when audio is playing!
// we'll be using software serial
SoftwareSerial ss = SoftwareSerial(SFX_TX, SFX_RX);
// pass the software serial to Adafruit_soundboard, the second
// argument is the debug port (not used really) and the third 
// arg is the reset pin
Adafruit_Soundboard sfx = Adafruit_Soundboard(&ss, NULL, SFX_RST);
 
/************ Trellis setup ***********/
 
Adafruit_Trellis matrix0 = Adafruit_Trellis();
Adafruit_TrellisSet trellis =  Adafruit_TrellisSet(&matrix0);
 
// set to however many you're working with here, up to 8
#define NUMTRELLIS 1
#define numKeys (NUMTRELLIS * 16)
 
// Connect Trellis Vin to 5V and Ground to ground.
// Connect the INT wire to pin #A2 (can change later!)
#define INTPIN A2
// Connect I2C SDA pin to your Arduino SDA line
// Connect I2C SCL pin to your Arduino SCL line
 
 
char PadToTrack[numKeys][12] = {"T00RAND0WAV",
                                "T00RAND1WAV",
                                "T00RAND2WAV",
                                "T00RAND3WAV",
                                "T10HOLDLWAV",
                               
};       
 
/************ main setup ***********/
 
void setup() {
  Serial.begin(115200);
  Serial.println("Trellis Demo");
 
  // INT pin requires a pullup
  pinMode(INTPIN, INPUT);
  digitalWrite(INTPIN, HIGH);
  // ACT LED
  pinMode(SFX_ACT, INPUT);
  digitalWrite(SFX_ACT, HIGH); //pullup
  
  // begin() with the addresses of each panel in order
  trellis.begin(0x70);  // only one

  // light up all the LEDs in order
  for (uint8_t i=0; i<numKeys; i++) {
    trellis.setLED(i);
    trellis.writeDisplay();    
    delay(50);
  }
  // then turn them off
  for (uint8_t i=0; i<numKeys; i++) {
    trellis.clrLED(i);
    trellis.writeDisplay();    
    delay(50);
  }
 
  // softwareserial at 9600 baud
  ss.begin(9600);
 
  if (!sfx.reset()) {
    Serial.println("SFX not found");
    while (1);
  }
  Serial.println("SFX board found");
 
  uint8_t files = sfx.listFiles();
 
  Serial.println("File Listing");
  Serial.println("========================");
  Serial.println();
  Serial.print("Found "); Serial.print(files); Serial.println(" Files");
  for (uint8_t f=0; f<files; f++) {
    Serial.print(f); 
    Serial.print("\tname: "); Serial.print(sfx.fileName(f));
    Serial.print("\tsize: "); Serial.println(sfx.fileSize(f));
  }
  Serial.println("========================");  
  
  trellis.clear();
  trellis.writeDisplay();
}
 
int currentPlaying = -1;
 
void loop() {
  delay(30); // 30ms delay is required, dont remove me!
  
  if (digitalRead(SFX_ACT) && (currentPlaying != -1)) {
     // *not* playing anything according to ACT lite
     trellis.clear();
     trellis.writeDisplay();
     currentPlaying = -1;
  }
  
  // If a button was just pressed or released...
  if (trellis.readSwitches()) {
    // go through every button
    for (uint8_t i=0; i<numKeys; i++) {
       // if it was pressed, turn it on
       if (trellis.isKeyPressed(i) && (i != currentPlaying)) {
          Serial.print("v"); Serial.println(i);
    
          trellis.clear();
          
//          if (! digitalRead(SFX_ACT)) {
//            Serial.println("stop..."); // check ACT lite first?
//            if (! sfx.stop() ) {
//                Serial.println("Failed to stop");
//            }
//          }
 
          // play!         
          char * filename = PadToTrack[i];
          int ret = sfx.playTrack(filename);
          Serial.print("Playing "); Serial.println(filename);
          
          if (! ret) {
            Serial.println("Failed to play track?");
          } else {
            trellis.setLED(i);
          }
          trellis.writeDisplay();
          
          delay(25);  // give it a chance to start playing
          currentPlaying = i;
          break;
      }
    }
  }
}

Enclosure

This is a four piece enclosure that prints with no support material. The two breakout boards are secured with machine screws to the standoffs on bottom cover. The two speakers are mounted on the side of the enclosure and held in place with nuts. The Trellis PCB snaps onto a tray and placed on top of the enclosure - There's an inner lip that keeps the tray in place. The top and bottom covers are secured to the frame with machine screws.

CAD customization

The original solids are available in the 123DX file. You can modify the parts to fit your parts. If the tolerances are too tight or loose, you can easily adjust the parts by modifying the faces using 123D Design.

Filaments & Materials

The parts are optimized to print with PLA filament, but it should work with other thermal plastics. The parts can print with out any support material.

Slice settings

We recommend using the basic slice settings below. The parts are orientation to print 'as-is' so the parts should be centered on the build plate. For best quality, try printing part by part as opposed to a one print full set.

sfxb-top.stl
sfxb-bot.stl
sfxb-tray.stl
sfxb-frame.stl

Top cover of enclosure
Bottom cover of enclosure
Tray for Trellis PCB
Enclosure frame

PLA @220c
40/50 speeds
2 shells
10% infill

Finishing Parts

The enclosure frame tends to print with a bit of extra bits in the speaker cut outs. Remarkably, the bridge and standoffs print just fine without any support material.

You can remove the stringy bits using flush snips. Optionally smooth out the edges with a filing tool.

Prep Trellis LEDs

Let's start off by adding LEDs to the Trellis PCB. Secure the PCB to a Panavise Jr. Insert the first LED into one of the spots with the longer leg going into the positive+ through hole. Flip the board over and bend the terminals so the LED stays in place.

Solder LEDs

Double check the polarities for each LED before soldering. Snip off the leads from the LED when you're complete soldering. Try to do one LED at a time. You'll need to do this for all 16 buttons.

Trellis LEDs

Here's the Trellis PCB with all the LEDs soldered. I choose all white LEDs.

Prep Backpack & Slide Switch

Next up we need to wire up a slide switch to the Pro Trinket lipo backpack add-on. You'll need to measure and cut two pieces of 30AWG wire to about 10cm in length.  

Prep Backpack & Switch Wires

Break the trace in the Lipo backpack to enable the on/off slide switch. Use wire strippers to strips the ends of each wire. Apply solder to the tips so the stranded wires are tinned. 

Wire Slide Switch

Tin two fo the leads on the slide switch - the middle one and another one next to it. Solder the two 30AWG wires to the terminals on the slide switch. Add a pieces of heat shrink tubing to insulate the connections.

Solder Slide Switch to Backpack

Tin the two pins on the Pro Trinket lipo backpack. Hit the two pins with your soldering iron and slowly insert the wires into the pin through holes while the solder is melty.

Prep Pro Trinket & Backpack Wires 

We're going to connect the lipo backpack to the Pro Trinket. Measure and cut three pieces of 30AWG wires to about 10cm in length. Strip and tin the ends of each wire.

Wire Pro Trinket to Backpack

Tin the three pins on the Lipo backpack. Solder the three wires to BAT, G and 5V. Secure the Pro Trinket to the panavise jr. Tin the BAT, G and BUS pins on the Pro Trinket. Solder the wires BAT to BAT, G to G and 5V to BUS.

Wire Pro Trinket to Audio FX Soundboard

Secure the Pro Trinket to third-helping hands and the Audio FX Soundboard to the Panavise Jr. Tin the positive and negatives JST pads on both PCBs, located on the back, underneath the microUSB connectors.

Measure up two pieces fo 30AWG to about 5cm in length. Strip and tin the tips of each wire. Solder wires to connect the positive and negative pins together.

Test Circuit Power

Plug in the JST cable from the 1200mAh lipo battery. Power the circuit on with the slide switch and see if the boards power on. 

If it doesn't, make sure the lipo battery is charged. Also double check your wiring. If everything is powering up, move onto the next steps!

Wire Trellis PCB

Secure the Trellis driver to the Panavise Jr. Apply solder to the INT, G, 5V, SCL and SDA pins on the edge of the PCB. Measure and cut 5 pieces of 30AWG wire to about 10cm in length. Strip and tin each wire. Solder the wires to the tinned pins on the Trellis PCB.

Prep Pro Trinket & Audio FX Soundboard

Tin UG and GN pins on the FX board. Measure and cut a piece of 30AWG wire to about 3cm in length. Solder the wire to the UG and GND pins. Tin 5V, A2, A4 and A5 pins on the Pro Trinket.

Secure the Pro Trinket to the third-helping hands. Secure the Audio FX soundboard to the Panavise Jr. Bring them pretty close together so you can wire them up.

Wire Trellis to Pro Trinket

Connect the wires from the Trellis to the Pro Trinket. Solder wires on Trellis 5V to 5V, INT to A2, SDA to A4 and SCL to A5.

Wire Trellis Ground to Audio FX soundboard

We need to solder the ground wire from the Trellis PCB to one of the GND pins on the Audio FX sound board.

Wire Audio FX soundboard to Pro Trinket

Next up we need to connect the Audio FX soundboard to the Pro Trinket. Measure and cut four pieces of 30AWG wires to about 5cm in length. Strip and tin each wire. You'll need to connect the following pins together.

  • ACT to A1
  • RX to #6
  • TX to #5
  • RST to #4

Wire Speakers to Audio FX soundboard

Tin the negative and positive L/R pads on the FX sound board. Cut the wires short on both speakers so they're about 10cm in length. Strip the wires and tin them with solder. Solder the speaker wires to the positive L/R pads on the audio fx soundboard.

Final Circuit

Yay, you circuit is now complete! Try to keep the wiring organized, so avoid getting tangled while moving things around. Ideally you wanna have the Pro Trinket next to the Audio FX soundboard. So try keeping the wiring separate from each other. 

Plug in the JST cable from the 1200mAh lipo battery and see if it all powers on. If it doesn't, double check your wiring. If everything powers up, lets move onto mounting the circuit to the enclosure. 

Hardware

You're ganna need 16 #4-40 3/8 machine screws and 4 (or 8) hex nuts. Also, a screw driver.

Install Speakers

Line up the mounting holes on the side of the enclosure with the ones on the speakers. Insert the speaker into the frame and position it so it’s lined up with the speaker cut out. Insert four #4-40 machine screws into the mounting holes on the frame.

Mount Speakers to Enclosure

Place a hex nut into the screw and hold it in place while you fasten the screw until it's tight. You can do this to only two screws or all four - it's pretty secure with just two.

Thread Standoffs

You'll want to fasten #4-40 machine screws into the standoffs on the bottom cover. This will actually thread the threads and open up holes to make it easier to fasten later. 

Mount Pro Trinket

You'll want to loosen the two mounting holes on the Pro Trinket (the ones in front, close to the microUSB connector). I used #4-40 falt phillips screws (the sharp pointy kind) to do this. Fasten the screw slowly to avoid breaking the PCB.

Place the Pro Trinket onto the bottom cover and match up the standoffs. Hold the PCB in place while you fasten two #4-40 screws into the bottom cover. 

Mount Audio FX soundboard

The mounting holes on the audio FX soundboard PCB is a bit more open, but I recommend making the threads, so fasten machine screws into the two mounting holes up front and than take them out.

Place the Audio FX soundboard ontop of the standsoffs on the bottom cover. Insert the two #4-40 screws and fasten the PCB to the bottom cover.

Insert Trellis PCB through Enclosure

Place the Trellis through the bottom of the enclosure. The bottom has the port cut outs.

Close bottom cover

Place the bottom cover over the enclosure frame. Line up the microUSB connectors with the cut outs on the enclosure. 

Secure bottom cover

Hold the bottom cover in place. Insert and fasten four #4-40 3/8 flat phillips machine screws into the corner mounting holes on the bottom cover.

Install Slide Switch

Unsolder the two wires on the slide switch from the Pro Trinket Lipo backpack add-on. Insert the switch into the cut out on the side of the enclosure with the wires going in first. Press the slide switch into the cut out. Apply a bit of adhesive to perminently mount it in place. Don't forget to solder the wires from the slide switch back onto the Pro Trinket lipo backpack.

Plug in Power 

At this point you'll want to connect the JST cable from the 1200mAh lipo battery to the Pro Trinket lipo backpack. Place the lipo battery into the enclosure.

Install Trellis

Check the edges of the PCB for any sharp bits. Smooth them out using a filing tool. Place the Trellis PCB onto the tray and press it down to snap it in place.

Lay the tray on top over the enclosure frame and press it down until it rests on the inner lip.

 

Elastomers & Cover

Orient the nubs on the elastomers with the proper holes on the Trellis PCB. Lay the keypad over the PCB and lightly press it down.

Place the cover over the elastomers and press it down until it snaps into the enclosure.

Insert and fasten four #4-40 3/8 flat phillips machine screws into the mounting holes.

Finished Soundboard

And now you have a Trellis soundboard! Turn it on and try it out.

If you have the audio thing all sorted out, then you're ready to rock!

Next page will go over some basic things about uploading audio samples.

Uploading samples to Audio FX soundboard

Plug microUSB cable from your computer to the Audio FX soundboard. It load just like a USB memory stick. The audio fx soundboard supports OGG and WAV formatted audio files.

Match File Names

Remember that the audio names should be exactly the same as the ones listed in the arudino sketch

This guide was first published on Apr 13, 2015. It was last updated on Mar 30, 2015.