Concert for Plants by Plants: Facilitated by Lindsey French

(LATARX PO Installation)

On April 26th, a cherry tree in western Massachusetts delivered a live performance to an audience of invited houseplants in Chicago, IL. Attached to the cherry tree was a piezo sensor, which measured the tree’s vibrations. These were uploaded to the world wide web using an Ethernet Pro as a server, and a friend’s wireless router, configured to allow port forwarding. On the chicago end, a processing sketch gathered the data and wrote it to the serial port my laptop. An Arduino attached to the laptop output the data to transducers, which were attached to ceramic saucers (and later, a plywood shelf) as the medium for the vibrations. The Arduino and breadboard were housed in a custom laser-cut box, based off of a modified thingverse template.

Poster for event.

Solo performer, a cherry tree in Massachusetts. (Thanks, Garth, for the image and for participating!)

Piezo sensor sprayed with Plasti-Dip rubber coating, Ethernet Pro board, power over ethernet adapters with power supply and green ethernet cord (not pictured), modified plastic box (sop box!)  for waterproofing.

Laser cut arduino box from modified template.

Image from concert.

(more work at


Arduino Code (Performer)

// This is for the tree whose vibrations were being transmitted.

// Piezo sensor attached to pin A0

// Ethernet plugged into wireless router, router configured to port forward from port 80 //to port 1000.

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(xxx,xxx,x,xxx);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup()
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);

void loop()
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c =;
// if you’ve gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == ‘\n’ && currentLineIsBlank) {
// send a standard http response header
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);

// write the analog value to the web page
if (c == ‘\n’) {
// you’re starting a new line
currentLineIsBlank = true;
else if (c != ‘\r’) {
// you’ve gotten a character on the current line
currentLineIsBlank = false;
// give the web browser time to receive the data
// close the connection:


Processing Code (Audience)

// This is used on the Chicago end to read the incoming data and

// write it to the serial port.

import processing.serial.*;

Serial myPort; // Create object from Serial class

float lastValue = 0;
float value = 0;
int x = 0;
float y0 = 0;
float y1 = 0;

void setup() {

String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);

void draw() {
String[] strings = loadStrings(“http:the.ip.address.and:port”);
if(strings.length > 0) {
value = int(strings[0]);
y0 = map(lastValue,0,1024,0,1);
y1 = map(value,0,1024,0,1);
lastValue = value;
int portValue = int(lastValue);


if(x > width) {
x = 0;
} else {




Arduino Code (Audience)

//transducers in pin 9.

//External power supply for transducers.

//Connected with USB to read serial
int incomingByte = 0;

// Constants for the output
int speakerPin = 9;

void setup() {

pinMode(speakerPin, OUTPUT);
Serial.begin(9600); // use the serial port

void loop() {
// read the sensor and store it in the variable sensorReading:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte =;
int thisPitch = map(incomingByte, 100, 1000, 100, 400);
int newPitch = (thisPitch*2)-200;
tone(9, newPitch, 10);


2 thoughts on “Concert for Plants by Plants: Facilitated by Lindsey French

  1. Pingback: Does Arduino dream of a playing tree? |

  2. Pingback: Does Arduino dream of a playing tree? » Geko Geek

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>