Touch Board

From Interaction Station Wiki
Jump to navigation Jump to search

What is the Touch Board?

The Touch Board is a microcontroller (like Arduino for instance), with already build in capacitive sensors (also known as touch sensors) as well as an audio socket. This set up makes the board really convenient for projects having interaction through touch (or proximity) and a sound output.
Touchboard.png
In detail, the Touch Board has:

  • 12 CAPACITIVE ELECTRODES

The Touch Board has 12 capacitive electrodes that respond to a touch. These electrodes can be extended with conductive materials, like Electric Paint,

  • MP3 PLAYER AND MIDI SYNTHESIZER

The Touch Board has on-board MP3 playback and a MIDI synthesizer. This means you can either play MP3 files or simulate a MIDI instrument by touching the electrodes.

  • 3.5MM AUDIO SOCKET

In order to hear the sounds coming from the Touch Board simply connect either headphones or speakers to the 3.5mm audio socket.

  • MICROSD CARD READER

Upload MP3 files onto the supplied microSD card and change it without having to reprogram the Touch Board.

  • USB SERIAL, MIDI INTERFACE AND MOUSE AND KEYBOARD

When plugged into a computer, the Touch Board can act as a USB serial device, USB MIDI interface or as a USB mouse or keyboard. Use the data from the electrodes as an input for software that utilises either serial, MIDI or keyboard strokes.
You can also have a look at the Technical Data Sheet [here].

Some links about it

Use the Touch Board to play sounds

The Touch Board has a practical SD card reader, enabling us to upload sounds in MP3 format.
You can follow Changing the sounds of the board this instructions to change the sounds on the board.
You can use your own sounds, or look for free to use sound material online.
Here you can find a list of websites where you can find copyright free and ready to use sounds:

NB. Files can be converted by VLC or online, in case they are not in mp3 format.

Setting up your Touch Board with the Arduino Installer

The touch board can be programmed on the Arduino IDE software. In order to do so it is first required to install some dependencies that make you able to work with the Touch Board. You can find the instructions here.
Once you completed the instructions you can check whether the library has been installed correctly by opening your Arduino IDE and go to:
File --> Sketchbook --> Touch Board Examples
Touch install.png
You should be able to find already a bunch of example code you can use and modify to make it your own. To play MP3 files from the SD card when touching the sensors you can use Touch_MP3. You can also use the touch board as a keyboard with the HID_keyboard sketch.

Making Distance Sensors: Trigger the Touch Board with proximity

Maybe you might want to use the touch board sensor in a different way, maybe without actual touching happening but only by proximity to the sensor. The board allows you to modify the sensitivity of the sensor to be able to detect presence without any touching. to do so you can follow the instructions here.

Other options (not in the example folder)

Hold electrode to play sound or Play only when touched

Here you can find an already made example code that allows you to play a track only while the sensor is touched. The sound will stop when releasing the sensor.
Hold To Play Code
Download this library

Play new track only when last one is over

This code is a variant on the Touch_MP3 example but instead of starting a the corresponding track when another sensor gets triggered it forces the board to finish to play the previous file. If you press another sensor while the last track it still playing it will ignore the touch. You will be able to trigger another file only when the previous one is over.

 
//#include "Compiler_Errors.h"
#include <MPR121.h>
#include <Wire.h>
#include <SPI.h>
#include <SdFat.h>
#include <FreeStack.h>
#include <SFEMP3Shield.h>

const uint32_t BAUD_RATE = 115200;
const uint8_t MPR121_ADDR = 0x5C;
const uint8_t MPR121_INT = 4;
const bool WAIT_FOR_SERIAL = false;

uint8_t result;
uint8_t lastPlayed = 0;
bool isTrackPlaying = false;  // Flag to track if a track is currently playing

SFEMP3Shield MP3player;

SdFat sd;

// Set your desired touch and release thresholds
const uint8_t TOUCH_THRESHOLD = 40;
const uint8_t RELEASE_THRESHOLD = 20;

void setup() {
  Serial.begin(BAUD_RATE);
  pinMode(LED_BUILTIN, OUTPUT);

  if (WAIT_FOR_SERIAL) {
    while (!Serial);
  }

  if (!sd.begin(SD_SEL, SPI_HALF_SPEED)) {
    sd.initErrorHalt();
  }

  if (!MPR121.begin(MPR121_ADDR)) {
    Serial.println("error setting up MPR121");
    switch (MPR121.getError()) {
      // Handle error cases as before...
    }
    while (1);
  }

  MPR121.setInterruptPin(MPR121_INT);

  // Set touch and release thresholds
  MPR121.setTouchThreshold(TOUCH_THRESHOLD);
  MPR121.setReleaseThreshold(RELEASE_THRESHOLD);

  // Set other MPR121 configuration parameters as needed...

  result = MP3player.begin();
  MP3player.setVolume(10, 10);

  if (result != 0) {
    Serial.print("Error code: ");
    Serial.print(result);
    Serial.println(" when trying to start MP3 player");
  }
}
void loop() {
  MPR121.updateAll();

  // Only make an action if we have one or fewer pins touched
  // Ignore multiple touches
  if (MPR121.getNumTouches() <= 1) {
    for (int i = 0; i < 12; i++) {
      if (MPR121.isNewTouch(i)) {
        if (i >= 0 && i <= 11) {
          if (!isTrackPlaying) {
            // If no track is currently playing, start playing the requested track
            MP3player.playTrack(i);
            lastPlayed = i;
            isTrackPlaying = true;
            Serial.print("Playing track ");
            Serial.println(i);
          }
        }
      } else {
        if (MPR121.isNewRelease(i)) {
          // Handle release logic (if needed)
        }
      }
    }
  }

  // Check if the current track has finished playing
  if (isTrackPlaying && !MP3player.isPlaying()) {
    isTrackPlaying = false;  // Reset the flag
    Serial.println("Track finished playing.");
    // Blink the LED at the end of the track
    digitalWrite(LED_BUILTIN, HIGH);
    delay(500);  // Adjust the delay as needed
    digitalWrite(LED_BUILTIN, LOW);
  }
}

When using this code check the Serial Monitor to see when the track is playing/over.

Playing more sounds simultaneously: Polyphonic Playback

As you might have noticed, the Touch Board is not able to play multiple sounds at the same time - or to do what is called Polyphonic playback. You can still achieve this by using your touch board as a keyboard and play sounds with the help of a software. You can find here a guide on how to set up your Touch Board with Soundplant. Soundplant.png