Brushing III - technical note

How to build your own DIY pressure-sensing physical interface

Jaehoon Choi
8 min readDec 7, 2020

Brushing III(2020) is a sound installation piece that expresses the internal characteristic people can experience through a brushing activity sonically. When the audience brushes on the piece, multiple piezo microphones receive the brushing sound and output it through 8 speakers, providing a spatial sound experience. On the surface, there are 216 custom made FSR sensors which detect the position and pressure of the brush. These pressure parameters are mapped with a delay effect so that the sound can have a rhythmic feature based on the audience’s movement.

Video edited by Yeon Park

Before I start, I would also want to credit Dr. Romain Michon and Sey Min for their help. Dr. Romain Michon was the initial mentor of this project while I was a graduate student at the Center for Computer Research in Music and Acoustics(CCRMA), Stanford University. As an expert in the physical interface in computer music, he gave excellent guidance in the engineering side of the project. Sey Min mentored me when I was continuing this project in Seoul as I received a project funding from the Korea Creative Content Agency and Nabi Art Center. As a well-renowned media artists in South Korea, she mentored me on the artistic side of the project, which helped me keep the artistic ethos in a technical project.

In this document, I would want to focus more on the technical side. For this project, I’ve created my own FSR sensor and PCB boards, designed the circuit by myself, and programmed the Teensy microprocessor with Arduino code for this system. Therefore, the knowledge and techniques I’ve earned through this project can benefit other artists or makers who want to build a large scale, pressure sensing interface.

Demonstration

Before I jump into the details, I would like to share how stable and sensitive the sensor is through a video. In this video, the slider on the Max patch is only receiving the pressure data from one FSR sensor, which is located on the left edge. The size of the sensor is 3cm x 3cm wide. In Teensy, the serial data from the sensor was scaled from 80 ~ 280 to 0 ~127 MIDI value for convenience.

demonstration video

As this video demonstrates, the sensor effectively detects the delicate pressure applied through a brush. In addition, since serial data can go up to 1024, it can have more range depending on how you would want to design your interface.

This is how it looks below the paper the bronze-colored rectangular objects are the custom made FSR sensors.

Building a custom FSR sensor

For this project, I was planning to build a 55cm x 55cm size interface, with over 200 FSR sensors mounted as a grid. However, there were two problems with this if I use a regular FSR sensor. First, it was too expensive(there are between $7~$9 per sensor). Second, I cannot modify the size and shape of the sensor. Because of these issues, I’ve decided to find a way to create a custom FSR sensor that is stable, has a wide range of detection, easy and cheap to make, thin, and sensitive enough to detect a brushstroke.

Before I jump into my method, let me explain how the FSR sensor works. FSR sensors, or Force Sensitive Resistors, are consisted of a spacer layer between two conductive layers. The more one squeezes, the two conductive layers get closer that makes the resistance go down¹.

Photo from Adafruit¹

For my project, I used standard copper tape for the two conductive layers and used a material named Velostat, which is conductive fabric that its resistance decreases when pressure is applied. Sounds pretty familiar!

The first step is to solder a wire to the copper tape. I recommend to solder it on the side because a Velostat fabric and another copper tape will be applied on top of it. Soldering it on the side will help the sensor to be as flat and smooth as possible.

lower layer copper tape soldered with wire

The second step is to cut the Velostat fabric in a shape and size almost identical to the previously soldered copper tape. It is okay to be slightly bigger, but I won’t recommend it to be smaller because it may cause a shortage with the next copper tape that will be attached to the top of the Velostat fabric.

Velostat and the lower layer copper tape

The third step uses copper tape for the upper layer of the FSR sensor. A key point is that the length of the copper tape should be at least twice the length of the lower layer copper tape. Then, fold the copper tape in half and attach it together. The reason for doing this is to make the current flow on both sides. Copper tape is only conductive on one side, where there is no adhesive. Therefore, you must fold it in half to make it conductive on both sides.

Then, trim the folded copper tape so that it is slightly smaller than the Velostat. This ensures that the upper layer copper tape will not short with the lower layer copper tape. When you are trimming, be cautious that you do not cut the side you folded, because this is the part where it connects the current between the top side and the bottom side.

The upper layer copper tape on the Velostat(Left)

Next, pile the Velostat and the upper layer copper tape nicely, and tape it on the edge. After that, solder another wire on the center of the upper layer copper tape where there isn’t any tape attached. Then we are done!

‘Sandwich’ them and apply tape on the outer side!

Circuit

Image from Stanford University, Music 250A course website (2019)²

This diagram shows the most basic circuit for connecting an FSR sensor, Teensy, and a resistor. It connects the 3.3v power to one side of the FSR sensor. The other side of the sensor is connected to the analog input(A0) and to the ground with a resistor between. A resistor is required because it provides enough range for the sensor to detect. For my project, I used a 56Ω resistor.

The circuit I created for my project uses the exact same method, but 216 of them. Then the question is, how to connect that many sensors to one Teensy 3.5 microprocessor where there are only around 26 analog inputs? The answer is to use a multiplexer.

Multiplexer

A multiplexer “is a device that selects between several analog or digital input signals and forwards it to a single output line.³” This enables us to connect multiple sensors to one analog input. For my project, I used a SparkFun Analog/Digital MUX Breakout — CD74HC4067 which is a 16 channel multiplexer. This means that you can connect 16 sensors to one analog input. Teensy 3.5 microprocessor has 26 analog inputs, which means that we can connect up to 416 sensors to one Teensy board. Since the sample rate of Teensy is pretty high, the signals are received fast enough to be considered as simultaneous inputs.

SparkFun Analog/Digital MUX Breakout — CD74HC4067

C0 ~ C15 pinholes placed on the left side are places where the sensors are connected. If all 16 channels aren’t used, the unused pinholes must be connected to GND and if not, it may not work correctly. SIG pinhole is connected to the analog input of Teensy. VCC is power and GND is ground as usual. EN pinhole was not used for this project.

S0 ~ S3 pinholes are ‘selector pins’ and each of them is connected to the digital output of Teensy. Selector pins create a combination of 0 and 1, which determines the channel that will be sent to the Teensy’s analog input. For example, a combination of 3 selector pins(S0 ~ S2) can have 8 different combinations (2³ = 8) as followed.

There were two reasons I used the SparkFun Analog/Digital MUX Breakout — CD74HC4067 in particular. First, I was looking for a multiplexer that had plenty of channels. Second, there is an Arduino library for interfacing with the CD74HC4067 Mux, which makes the Arduino programming part easier. The information about the Arduino library can be found in the following links. (Arduino library website , Github Repository)

Printed Circuit Board (PCB)

In my first large-scale prototype, I’ve connected everything with wires through soldering. This was okay for making the hardware interface ‘function’, but had problems in terms of maintenance and stability. Therefore, I decided to use PCBs for building a circuit.

Large scale“wired prototype”. Yeah… it makes me feel worried…

PCB is a circuit board where the electronic connections are pre-printed with conductive tracks, pads and other features etched from one or more sheet layers of copper laminated onto and/or between sheet layers of a non-conductive substrate⁴. Usually, components such as resistors or sensors are soldered on the PCB. Before I explain more in detail, let me show how it looks like in real.

PCBs - before and after components soldered
all PCBs fully mounted and connected

The PCB I’ve designed takes care of the connection between the sensors and the multiplexer. This made the wiring much easier and configurable, prevent shortages, and more stable from external forces. However, a rule of thumb is that you must examine your circuit as thoroughly as possible with breadboards before you start working on your PCB.

There are two steps to build your own PCB. First, you have to design your own PCB with a PCB CAD software like Eagle CAD or KiCad. For my project, I used KiCad because it is free and open-source while Eagle CAD is not. I’ve learned how to use it through this tutorial which covers the entire process from start to end. After the CAD part is done, you can upload the Gerber files to any online fabrication service websites like OSH Park and receive them at home after a week.

Here are some screenshots from my KiCad project.

This is it! Hope this gave some inspiration and ideas to everyone who wants to build a DIY pressure sensing touch interface. Please feel free to leave comments if you have any questions!

[1] Adafruit Learning System. 2020. Force Sensitive Resistor (FSR). [online] Available at: <https://learn.adafruit.com/force-sensitive-resistor-fsr>

[2] Stanford Music 250A Course Website. 2020. Music 250A | Winter 2019 — Lab 1: Faust And Basic MIDI Control. [online] Available at: <https://ccrma.stanford.edu/courses/250a-winter-2019/labs/2/>

[3] Wikipedia. 2020. Multiplexer. [online] Available at: <https://en.wikipedia.org/wiki/Multiplexer#cite_note-Network+_Guide_to_Networks-1>

--

--