Biodata Sonification

Introduction: Biodata Sonification

Generate MIDI notes based on changes in Galvanic Conductance across two probes.

For the latest code version and updated tutorials please go to and checkout my github project

Step 1: Solderless Breadboard

A key tool in electronics experimentation is the Soldless Breadboard. Allowing users to connect components together and reconfigure easily, the Breadboard lets newcomers to electronics and seasoned engineers to prototype designs and connect electronic systems easily.

Breadboards have a series of holes which are electrically connected. Horizontal rows run across the Breadboard in Terminal Strips of 5 connected points points and are marked with the letters abcde and fghij. A large divide down the middle of the breadboard separates the horizontal rows, this facilitates the use of Dual Inline Package (DIP) microchips. On the sides of the breadboard are vertical columns of holes, usually marked with Red and Blue lines. These vertical columns are used most often for power connections (positive voltage and ground), and are called a 'Bus'. We will be attaching all of our Positive and Ground connections to these Buses on each side of the breadboard. In a later step we will tie together the Grounds and the Positive Buses on each side of the breadboard.

In order to 'connect' two electronic components, we simply place the leads (or 'legs') of the parts into adjacent horizontal holes. This allows a user to connect multiple components together using each horizontal row of 5 points.

Step 2: Insert 555 Timer

The 555 timer is an 8 pin DIP microchip, which we will configure as an astable multivibrator capable of measuring electrical conductivity. Orient the chip so that Pin 1 is at the top - you will see a small circle near pin 1 on the chip, also see the diagram which identifies each of the pins on the 555 Timer.

Place the 555 timer at the bottom of the Breadboard. The breadboard is arranged with a gap down the middle, the microchip should span across this gap. The rows of the breadboard are numbered, we will be inserting the 555 timer in rows 27, 28, 29, and 30, with pin 1 in row 27.

Step 3: Pin 1 to Ground

Attaching the 555 Pin 1 to Ground, add a jumper wire from row 27 column A to the Ground Bus.

Step 4: Timing Capacitor C1

Connect the timing Capacitor C1 (0.0042uF) between Pin 1 and Pin 2 of the 555 Timer. Insert the tiny blue capacitor into rows 27 and 28 in column B.

This capacitor sets the overall frequency range of the timer, here we use a very small value in order to get the highest resolution of pulses out of the 555 as we measure fluctuations in electric capacitance across the two probes.

Step 5: Decoupling Capacitor C2

Connect the high frequency decoupling capacitor C2 (1uF) across the 555 Timer's positive and ground, pins 1 and 8 in row 27, column D and G.

It can be helpful to trim the legs of the capacitor, for a better fit on the breadboard, but be careful to leave enough space for the legs to span the microchip and fully connect with the breadboard sockets.

Step 6: Decoupling Electrolytic Capacitor C3

Connect the low frequency decoupling Electrolytic Capacitor C3 (41uF) across the 555 Timer's positive and ground, pins 1 and 8 in row 27, column C and H.

Note that Electrolytic capacitors are polarized, identifying the negative end with a white stripe down the side of the cap; ensure that the negative side of the capacitor goes to Pin 1 (Ground) column C and the positive side of the capacitor goes to Pin 8 (Positive) column H.

Step 7: LED Output

Add the Red LED to the output pin 3 of the 555 Timer Row 29 pin A and across to the Ground Bus. Place the longer lead of the LED (anode) in Row 29 Column A, with the shorter leg of the LED in one of the Ground Bus holes.

**- LEDs are polarized and must be inserted in the correct orientation. The LED's Cathode leg (negative) can be identified by a flattened edge on the side of the LED, and the positive Anode can be identified by the longer leg. LED's polarity and color can be identified using a simple button battery, by sliding the battery in between the LED leads, you will either see the LED glow or not, try turning the battery the other direction. The LED will illuminate when the battery + (wide flat) end is connected to the Anode (longer leg) and the battery - (smaller button) is connected to the Cathode Ground leg. Grab a CR2032 3v button battery and try it out!

After you get everything working in the last step, you can come back and trim the legs of the LED if desired.

NOTICE: under all normal circumstances, a resistor would be added between the output pin and the LED. In order to simplify the build of this kit, the current limiting resistors have been omitted. We have included resistors for each LED in the kit. Modified instructions including current limiting resistors will be provided as an appendix.

Step 8: Jumper 555 Trigger to Threshold

Connect a Jumper wire between Pin 2 and Pin 6 of the 555 Timer Row 28 column D to Row 29 Column G.

This attaches the threshold and the trigger pins of the 555 timer, which form the input connection for the primary electrode.

Step 9: Jumper 555 Reset to V+

Connect Pin 4 of the 555 Timer to the Positive Bus using a Jumper wire Row 30 Column D to the Positive Bus

Connect Pin 8 of the 555 Timer to the Positive Bus using a Jumper wire Row 27 Column I to the Positive Bus

(add image and step for 555 VCC to V+)

Step 10: Resistor R1 100K 555 Discharge to Positive Bus

Connect Resistor R1 (100k) between Pin 7 of the 555 and the Positive Bus. Place one side of the Resistor in Row 28 Column J and the other side of the resistor to the Positive Bus.

Step 11: Probe Input Jack

The Probe input is an 3.5mm mono jack, which connects to the breadboard through two soldered pins. While its a tight spot, the header pins soldered to the jack will fit into Row 28 and 29 Column H.

The header pins have been added to the jacks to make it easier for the user to build the kit. Please note that excess stress on the jack or pins may cause damage to the solder connection. If your kit does not have the header pins soldered to the jack, please see the appendix for soldering instructions for the jack and header.

Step 12: Positive Bus Jumper

Connect the Positive Bus on both sides of the breadboard by inserting a Jumper wire between the top highest points on the left and right (red) Power Bus.

Step 13: Ground Bus Jumper

Connect the Ground Bus on both sides of the breadboard by inserting a Jumper wire between the top highest points on the left and right (blue) Ground Bus.

Step 14: Testing the Galvanometer

Now we are ready to hookup some batteries and test the Galvanometer we just built from the 555 Timer.

Insert 3 AA batteries into the black Battery box, ensure the power switch on the box is in the 'OFF' position. Attach the Battery box Red wire to the Breadboard Positive (red) Bus, attach the Battery box Black wire to the Breadboard Ground (blue) Bus. Now slide the power switch on the battery box to 'ON'. The LED should be illuminated, showing the 555 timer is powered on.

Attach the white electrode leads (don't bother using the sticky pads yet) to the 3.5mm jack connecting to the Galvanometer. By touching the metal button ends of the electrodes with your fingers, you will be able to see the LED flash based on changes in conductivity. Touching the electrodes very lightly can show the LED flash on and off slowly, by squeezing the electrodes really hard the LED flashes very fast, appearing like the LED remains lit or slightly dims.

Step 15: Insert ATMEGA328 28pin DIP

Your MIDIsprout Kit comes with a preprogramed ATMEGA328 micro controller, with fuses set to runn at 8Mhz on the internal oscillator (Fuses: Low-E2 High-D9 Ext-FF) , and preloaded with the MIDIsprout firmware. This 28 pin DIP has two parallel rows of 14 pins.

Insert the 328p chip at the top of the breadboard, identifying Pin 1 by the small circle on the chip, into Rows 1 - 14 spanning the DIP across the gap in Columns E and F.

**To easily reprogram and experiment, it is possible to add a 16Mhz oscillator on pins 9 and 10 of the breadboard, and program using an arduino Uno board with modifications of the MIDIsprout code. The ATMEGA328 can also be reprogrammed through ICSP with an external programmer (other arduino) and a maze of Jumper wires ;)

**Also as an addendum, MIDIsprout Kit can be built using the previous steps to assemble the Galvanometer, with the breadboard attached directly to an Arduino Uno! Stay tuned...

For reference, the code preloaded into the current version MIDIsprout :

Arduino Code:

Step 16: Power the ATMEGA328

Attach the VCC pin on the 328 to the Positive Bus using a Jumper between Row 7 Column A and the Positive Bus.

Step 17: Ground the ATMEGA328

Attach the Ground pin on the 328 to the Ground Bus using a Jumper between Row 8 Column B and the Ground Bus.

Step 18: Power the ATMEGA328 (analog)

Attach the analog Voltage pin on the 328 to the Positive Bus using a Jumper between Row 9 Column J and the Positive Bus.

Step 19: Ground the ATMEGA328 (analog)

Attach the Ground pin on the 328 to the Ground Bus using a Jumper between Row 7 Column J and the Ground Bus.

Step 20: 555 Timer Output to ATMEGA328 Input

Connect the output pin from the 555 Timer to the Input Pin 4 on the 328 with a Jumper wire between 555 Timer pin 3 Row 29 Column D and Row 4 Column D.

Here the digital output of the 555 triggers an interrupt pin on the 328, INT0, which measures and compares pulse durations.

Step 21: Knob

The included knob should be prepared by gently bending its three legs (bend all three at the same time) so the knob can stand vertically. Insert the Knob onto the left side of the breadboard in Column A Rows 19, 20, and 21.`

Step 22: Knob Wiper to ATMEGA328 Analog Input

Connect the center pin of the Knob to the Analog Input (A0) of the 328 using a Jumper wire. Attach a jumper between the Knob Row 20 Column E and 328 (A0 pin) Row 6 Column G.

Step 23: MIDI Jack

Insert the MIDI Jack into the breadboard. Prepare the jack by identifying the two pointed mounting pins located at the front of the MIDI jack and bending them upward to point out the front of the MIDI jack. Place the MIDI jack on the right side of the breadboard, with the jack facing the right side. Insert the MIDI jack into Column I and J, Rows 18, 19, 21, 23, and 24. The five MIDI jack pins will fit (snuggly) into the breadboard, be careful not to push too hard.

Step 24: MIDI Data Pin to ATMEGA328 Tx

Connect the MIDI Data output pin to the ATMEGA328 serial Transmit (Tx) pin, by attaching a jumper between Column F Row 23 (MIDI Data pin 5) and Column B Row 3 (328 Tx).

Step 25: MIDI Power Resistor to V+

Connect a resistor between the MIDI power pin (4) and V+ using a 220 Ohm resistor connected to Column H Row 19 (MIDI power) and the Positive Bus on the right side of the board.

Step 26: MIDI Ground Jumper

Connect the MIDI Ground pin to the Ground bus using a Jumper wire between Column F Row 21 (MIDI Ground) and the Ground Bus.

Step 27: Knob Positive Voltage

Connect the Knob positive voltage pin to the Positive Bus using a jumper between Column D Row 19 and the Positive Bus.

Step 28: Knob Ground

Connect the Knob Ground pin to the Ground Bus using a jumper between Column D Row 21 and the Ground Bus.

Step 29: LEDs (red)

There are 5 colored LEDs in the MIDIsprout which provide a light show and indication of the state of the MIDI notes being played.

Connect the LED (red) Anode - long leg to Column A Row 5 and the LED Cathode to the Ground Bus.

**- For simplicity, we are omitting current limiting resistors in this build, please see the appendix for steps to include resistors with the LEDs.

Step 30: LEDs (yellow)

Connect the LED (yellow) Anode - long leg to Column A Row 11Connect the LED (red) Anode - long leg to Column A Row 5 and the LED Cathode to the Ground Bus.and the LED Cathode to the Ground Bus.

Step 31: LEDs (green)

Connect the LED (green) Anode - long leg to Column A Row 12 and the LED Cathode to the Ground Bus.

Step 32: LEDs (blue)

Connect the LED (blue) Anode - long leg to Column J Row 14 and the LED Cathode to the Ground Bus.

Step 33: LEDs (white)

Connect the LED (white) Anode - long leg to Column J Row 13 and the LED Cathode to the Ground Bus.

Step 34: 16MHz Crystal Oscillator PlaceHolder

The 16MHz crystal oscillator should be added on pins 9 and 10 of the ATMEGA328 Row 9 and 10 Column C. The part is not polarized and the crystal can be inserted into pins 9 and 10 in either orientation.

Step 35: Battery Pack

Attach the battery pack to the breadboard by placing the battery pack Red wire into the breadboard Positive Voltage Bus and the Back wire into the breadboard Ground Bus. Insert 3 AA batteries and switch on the battery box. With the power on the LED by the 555 Galvanometer should illuminate.

Connect the electrode leads to the jack at the bottom of the breadboard, and touch the two button ends of the leads. The Galvanometer LED should flash in response to the conductivity across your fingers.

Step 36: Biodata Sonification

When the electrode leads are touched or attached using gel pads, the MIDIspout program will detect small changes in conductivity and represent these changes as MIDI notes and colorful lights!

Connecting a MIDI cable from the MIDI jack on the bread board, the MIDIsprout Kit can be attached to synthesizers, keyboards, sound generators, and computers supporting MIDI to produce sounds in reaction to the MIDI notes.

By turning the knob, the Threshold/Sensitivity of the MIDIsprout can be adjusted. By decreasing the threshold, smaller fluctuations in conductance from the galvanometer can be detected; by increasing the threshold, larger changes are required in order to produce notes. During long term installations, I use a low threshold setting which produces a pleasant babbling stream of MIDI data. For public interactive events with multiple plants, I turn the threshold up rather high, which results in MIDI notes only being produced when a person gets very close or physically touches the plant.

1 Person Made This Project!


  • 3D Printed Student Design Challenge

    3D Printed Student Design Challenge
  • Made with Math Contest

    Made with Math Contest
  • Organization Contest

    Organization Contest



Question 6 months ago

Is a kit of parts available, or the preprogrammed chip?
Thanks so much


7 months ago

Hi! Thank you for sharing these instructions. I find this biodata sonification utterly fascinating
and I would love to gain a better understanding of how this actually works. I am a total beginner so it's a lot for me to grasp.

As I was researching what could influence the conductivity of plants,
I came across this paper about plant conductivity that said: "only by immersing the electrodes into the plant's matter, a good contact with the plant can be assured"
As this project uses electrode-pads, I am curious to hear your
thoughts on this.

Furthermore, I wonder how the changes in conductivity are measured.
Is there a constant voltage flowing through the plant, in which
differences are measured?


Reply 7 months ago

Hello Drova, these are some great questions. You can find lots of info on my website

"Immersing electrodes", just to put it into perspective this is similar to subcutaneous or intramuscular sensors crammed into a body. While yes you will get specific detection of changing states within the body, it is quite invasive and misses an incredible opportunity present at the surface. (<-- it's just rude, unless working with mushrooms)

Human skin is a membrane, our largest organ, covering almost the entire body. We can detect subtle changes in perspiration, heart rate, capillation (blushing) using the incredibly sensitive and expressive outer membrane of our bodies. Lie detectors, EKGs, and many other sensors rely on the skin's variable electrical conductivity and it's 'barrier structure' in order to pull meaningful biological data.

Very similarly the leaf of a plant is a semipermeable membrane containing multiple layers of fluid capillation and respiration/perspiration pores (called Stomata).

I use 'tens electrodes' which connect to the surface of a plant's leaf in order to detect micro current fluctuations and changes across the leaf membrane. This sensor provides a highly expressive and environmentally reactive data feedback.

To your final question, yes the 555 timer is connected with a pullup resistor of 100k to the 5v rail and to pin 7 of the 555 timer, this provides a few microamps of current which flow through the leaf and are detected by the second electrode (connected to pin 6 and 2). This creates a micro current meter which is sensitive and outputs a variable pulse width based on the timing capacitor C1 value. Using very fast pulses, we can graph very fine changes in electrical conductance/resistance across the Plant's surface.



Reply 7 months ago

Ah, that's awesome! Thanks for your elaborate response.
And don't worry, I wasn't planning on harming any plants :)

I would like to ask you another question, if that's okay.
When touching a plant, I notice an almost immediate change in range of midi notes played. Let's say a plant has been playing notes within the range of C6 ad C7, and when put contact with human skin, starts playing notes within the range of C3 and C9. If I understand correctly, a larger range of midi notes would mean bigger changes in conductivity in the plant.

When assuming that the conductivity is directly related to the stomata's opening/closing, I get confused about the effect of touch on the changes in conductivity. Do you have any thoughts on why this shift in note range happens?


Reply 7 months ago

Everyone loves touching the plants. A light touch can create a cascading effect, and a tight squeeze can make a very audible change. But does the plant want to be touched? When I have performed in public installations I have found it is easy to damage the plant's leaf with pressure and the oils on our skin can quickly leave dark spots and holes in leaves.

When asked about the effect of touching the plant on the biodata, I use this analogy: If you tap on a doctor's stethoscope will they hear you? Yes it it will be hard for them to hear anything else!

You are thinking too literally about stomata response and specific MIDI notes, there is much more going on within the plant's biological system than we are considering here. The activity which this device detects and the notes which it produces are simply mathematical and visible in the code but the rhythms and sequences which you hear are heavily filtered through your ears and mind as you experience the sounds and your environment with the plant. People listening live to biodata sonification have a really great experience and they very often feel very interconnected with the changes in the sounds. It is very possible to use this device in a scientific setting, but as it is currently built and coded you will find a more complex output of MIDI notes representing changes rather than a simple "increase/decrease". Biodata takes time to florese.

Notice in the image attached, you can see a long duration recording of two different plants. Over multiple days you can see patterns. But as a casual observer listening for a few moments it will all appear to be noise. You can also see an artifact from the code, there are no 'C' notes played in the lower MIDI track, I might have a mistake in the scaling ;)


8 months ago

Hi there!
Im a student currently studying music in London and ive been trying to build this from mostly the GITHUB page you setup. I was really fascinated by the project and have built everything as in the instructions, however after using a virtual midi bridge to Pure data, Im only getting two tones and a lot of buzzing and noise... Im not really sure whats wrong, as im an amateur when it comes to coding and engineering like this... Ive added images of the board aswell as some of the midi data thats coming through. Do you know of any solutions?

Board.jpgboard2.jpgmidi data.jpg

Reply 8 months ago

Hello Sid, to begin with ... do you have any experience with MIDI? You should be using the MIDI din connector on the breadboard and connect that to a MIDI synthesizer/drum machine. It is possible to use USB and PD, but there are many steps involved. Looking at the Hairless MIDI bridge, you are getting garbled midi data and invalid notes. LOoking at the breadboard picture, everything looks like it is working and you appear to get the full light show on the color leds.

When you say you get 'buzzing and noise' what are you using to make audio from the MIDI data? The biodata setup looks correct, you may need to learn a bit more about using MIDI as your next step.


Reply 8 months ago

Thank you for this! Would you perhaps know how I could hook this up to Pure Data? I’m unsure why the midi notes are corrupted as if the program is making generated midi notes Pure Data should be able to read that and translate it to frequency (I think). I assumed it was as simple to take the midi data from the serial to Midi bridge and then use that to create oscillated frequencies. How might I be able to do this via the USB? And if so would you happen to know the simplest way I can now get sound out of it?


Reply 8 months ago

I recommend that you not use the Arduino USB and Pure Data. The best approach with this device is to connect directly to a MIDI synthesizer/drummachine or a high quality (not cheapo) MIDI-USB interface cable. If you use a hardware synthesizer, you can receive the MIDI notes on Channel 1. If you use a computer with a USB/MIDI cable, you will then need some sort of synthesis software. I use Ableton Live as a sound engine.

It looks like you got through all of the hard work of the build. But now you must learn about MIDI and sound synthesis. The whole 'MIDI sound' part is a big piece of knowledge and you will need to do your own research in order to learn how to use MIDI to create sounds.


Reply 8 months ago

Thank you very much I look forward to continue this journey and I’ll keep researching!


Question 8 months ago

Hi, thank you for these instructions, it is an amazing project.
I managed to set up the circuit, and I'm now ready to connect it to Ableton,
but I am confused about how to do this. The circuit has one 5 pin MIDI socket, but the only MIDI to USB cables I'm able to find, have two 5 pin MIDI male ports.
what type of midi to USB cable would you recommend?


Answer 8 months ago

You can use a standard 5pin MIDI Cable which is male/male to connect the biodata device to most synths, drum machines, or MIDI device. If you want a USB MIDI cable with Male ends try the EMU XMIDI 1x1 or another decent MIDI cable. Do NOT get a 'cheap' MIDI cable it likely won't work, you should focus on a known brand name (like Emu, Yamaha, MOTU, other).


Reply 8 months ago

Thank you for your response! I got a Roland USB MIDI interface, linked it up today with Ableton. Ableton recognizes the interface, but there is no signal coming in. The circuit seems to be working, as the 555 timer's LED is flashing, as well as the other LED's from the "light show". I've tried rebuilding the circuit but that doesn't seem to be the problem. Do you have any suggestions for what I could do to make it work?


Reply 8 months ago

One common problem is connecting the incorrect MIDI cable, make sure you are connecting the MIDI INPUT cable on the Roland USB device to the Biodata MIDI Output. If you are seeing the light show then everything should be working with the sensor and the programming, ensure the MIDI jack is wired correctly with a pull up resistor on the voltage pin and connecting to TX on the Arduino.


Reply 8 months ago

Hmm, I double checked and I am sure the MIDI cable as well as the MIDI jack are connected correctly. I really don't know what I can do/test anymore.


Reply 8 months ago

Have you tested that the Roland USB MIDI cable is able to get input with another hardware midi device? Since this is a new USB/MIDI cable for you, you might be connected correctly but have a configuration issue in Live or on your computer. If you can prove that the USB MIDI device is working then we can be certain the issue is the output of the arduino.

The last thing to check would be the serial data rate in the code must be
31250 (standard MIDI data rate), in case you may have modified anything in the code.


Reply 8 months ago

Sadly I don't own any other MIDI devices with this input. Is there another way to check this if the USB MIDI device is working? Also the serial data is still 31250.


Reply 8 months ago

It sounds like you have all the parts together and the main circuit is lighting up as expected. The last piece is to ensure that your MIDI device is working with a known valid MIDI output device. I'm sorry there are too many variables here for me to debug your hardware setup through chat. It is possible, tho unlikely, that the Roland USB/MIDI device you have is not truly MIDI compliant (like so many knock off devices).

Did you install the drivers for the USB device (if you are windows)?

The main three things a user needs to understand in order for this system to work are
1. Basic electronics knowledge to build the breadboard circuit
2. Basic Arduino knowledge to get the code uploaded
3. MIDI knowledge and hardware in order to translate the MIDI into sound

I'd recommend returning the Roland unit and getting an Emu XMIDI, or asking a friend with MIDI experience to help test out your setup.


Reply 8 months ago

Thank you for response.
I've tested the midi cable with another device and it works fine.
I don't understand how, but now I am getting midi signals in Ableton. So this is great! However, it only produces C notes. I noticed someone else having this same problem so I'll try to look at tips/clues you gave him.
Then I ran into another problem, which really confuses me, as it seems to contradict with your explanation on the importance of isolating the Arduino:
I only receive midi notes when my laptop is plugged in to a socket; the moment I unplug my laptop, the midi stream stops.
I understand that doing this through chat, and me lacking the needed knowlegde/skills/vocabulary, makes it extremely(too?) hard for you to help me with these issues. So if you feel like the picture is not clear enough for you to help me, I get it.
Have a great day/evening.