Introduction: Polygraph for Recording Plant's Feelings

I am doing this for a science fair project, so I decided to post it here so others can do it as well.

First of all, what is a polygraph? Polygraphs are mostly used as lie detectors, because they detect resistance between to points. When someone lies, they sweat, so the resistance between the to points on there skin drops.

As it turns out, polygraphs also work on plants, to detect if they are excited/scared.

Step 1: Assemble the Electronics

Here is the circuitry. (the grey wires go to the contacts that come in a later step)

How to connect it:

5v --- contact #1

GND --- resistor (side1)

A0 --- resistor (side 2) & contact #2

Step 2: The Contacts

To make the contacts, take a strip of tinfoil and stick some tape on the back, with some extra (this will be used to stick it on the plant). Take the strips that you made and wrap them around whatever part of the plant you are using, and use the extra tape to stick them on. Put them 1 or 2 inches apart. attach the contacts to the strips, and you're done. (This is how I did it- all you really need is for the contacts to be touching the plant.)

Step 3: The Software

The program for the Arduino is a simple program that measures the resistance between pin 5v and GND. You can find it in File> Examples> Communication> Graph. The program for graphing it is a bit more complex. Here is the link to the website that I got it from:

Once you have uploaded all the software, hit "Run" in processing. It should Come up with a graph, which shows the resistance. Have fun! (You can also use this for many other things- including lie detection!)

Here is the program itself: (copy it into Processing)

//Here is the program to make a graph

//I hope it is helpful to you in your endeavours

import processing.serial.*;
Serial myPort; // The serial port

int xPos = 1; // horizontal position of the graph float

inByte = 0; float num = 0;

float lastNum=0;

void setup () {

// set the window size (you can change this to preference)

size(800, 600);

// Open whatever port is the one you're using.

myPort = new Serial(this, "/dev/ttyACM0", 9600);

// don't generate a serialEvent() unless you get a newline character:


// set inital background:

background(0); } void draw () {

// draw the line:

stroke(100, 0, 100);

line(0, 0.5*height, width, 0.5*height);

stroke(0, 255, 0);

line(xPos-1, 0.5*height-lastNum, xPos, 0.5*height-num);

// at the edge of the screen, go back to the beginning:

if (xPos >= width) { xPos = 0;

background(0); } else {

// increment the horizontal position:

xPos++; } }

void serialEvent (Serial myPort) {

// get the ASCII string:

String inString = myPort.readStringUntil('\n');

if (inString != null) {

// trim off any whitespace:

inString = trim(inString);

// convert to an int and map to the screen height:

inByte = float(inString);


num = (inByte)/10.0;//+28772.0 println(inByte+" "+num);