Our project consists of three main components:

  1. Computer setup
  2. Pillow setup
  3. Transducer Setup

Computer Setup

This setup allows us to gather input from the amplifier to the audio jack breakout board. An electric guitar is first plugged to an amplifier. The amplifier’s line out is then connected to the breakout board. A voltage divider comprising two 47kΩ, one 2.2kΩ, one 10kΩ resistors and two 10μF is connected to the breakout board (Fig 1.0).  It is needed to drop down the voltage to typical analog audio voltage levels.

The audio input is then directed to pin A13 and AGND of a Teensy 3.5. Through FFT, the signal is transformed from amplitude over time, to amplitudes within 5 specific frequency bins. In order to visualize the amplitudes within the bins, we have connected a NeoPixel strip of light to the Teensy. Out of conveniency, we have used the NeoPixel ring from Circuits.IO as there were no RGB LED strips available on either Fritzing and Cirtcuits.IO.

In order to send out the values from the frequency bins to different pillows, we have connected an XBee Explorer Regulated with an XBee module. The DIN is connected to the TX1 pin of the Teensy.

Fig 1.0. Input from live guitar, computed in Teensy and output from XBee

Pillow Setup

The first circuit (Fig 2.0) for a single pillow managed the RGB LED lights, controlled by the public. Three pressure sensors were assembled by creating Velostat sandwiches between foam surfaces. All three controlled their respective colour (green, red or blue). The sensors’ ground lines were soldered onto a PCB board with a wire connecting to the GND of the Arduino.  The pressure applied on the sensor is then mapped onto a 60 NeoPixel light strip of a meter.

Fig. 2.0. Velostat pressure sensors as analog input to output to NeoPixel LED strip


Transducer Setup

This setup control the vibration of the pillows and is made up of four components:

  1. The xBee
  2. I2C DAC Breakout board – MCP4725
  3. Mono Audio Amp Breakout – TPA2005D1
  4. Surface Transducer

The xBee allows the Arduino to receive an amplitude signal. This amplitude signal comes in values from 0 to 100, which are mapped to 0 – 4096 (12 bits – preferable values for the DAC). Once the received signal is processed, Arduino sends PWM  values to the DAC so that they can be turned to analog voltages. Once converted, this analog signal is passed to the mono audio amp through the MOSFET, which controls the volume of the amp. The amp in turn modulates the sound frequency that it receives from the Arduino and sends it to the surface transducer to create a responsive vibration within the pillow.