Introduction: Singing Plant. Make Your Plant Sing With Arduino, Touche and a Gameduino

Picture of Singing Plant. Make Your Plant Sing With Arduino, Touche and a Gameduino
This project is a part of experiments done while doing an artist in residence at Instructables. You can see the other projects here.

Making a plant sing has been a trick since the Theremin was invented. Here I am going to teach you how to do this with and arduino board, a gameduino shield and a the touch shield from my previous instructable.

A short introduction to capacitance 
If two objects are conductive you can measure the capacitance between them (e.g. objects like: metal, water, human bodies and plants). By connecting a capacitance sensor to a plant we can detect if people are touching it and convert the touch into sound. Normally you would do this with a theremin like interface. 



With the introduction of the touché frequency principle by Disney Research lab we can now make a really stable solution that can run entirely on the Arduino platform. The Touché works on a similar principle as a normal theremin, but does a frequency sweep instead. By hooking the touché up to the plant we can measure the capacitative interaction and convert it into sound.


Credits:
The singing plant as an artistic project has been done with multiple people as a member of illutron. I will just credit af few key people who I have worked with:  Åsmund Boye Kverneland, Nicolas Padfield, Thomas Jørgensen, Schack Lindemann, Thor Lentz, DZL, Vanessa Carpenter


Step 1: Components and Tools

Picture of Components and Tools
Components needed:
  • Arduino
  • Homemade touche shield (Instructable can be found here)
  • Gameduino (We are going to use it for sound).
  • Two buttons.
  • A couple of Alligator clips.
  • Two banana connectors.
  • Enclosure (I used a wooden box from http://www.containerstore.com/welcome.htm)

Components needed for the touche shield:
  • Prototyping shield
  • Pin headers
  • Resister: 10k, 1MOmh, 3,3k
  • Capacitor: 100pf, 10nf
  • Diode: 1N4148 diode
  • Coil / inductor: 10mH (cypax.dk  part no: 07.055.0510)

Tools:
  • Basic soldering tools.
  • Wood working tools.
For the enclosure I lasercut an acrylic plate, but you could just as well use a piece of wood and cut it manually.

Step 2: Touche Shield

Picture of Touche Shield

We are going to use the same shield that we used for this instructable. For the touche shield and the gameduino to work together we need to do a little hack. Since the touche shield is using pin 9 for frequency generation and the gameduino uses pin 9 for the chip select.  For now all you need to know is that you should not connect the wire to the pwm pin nine but let it hang loosely (at least you should be able to disconnect it again when you are done testing).

Step 3: Making the Touché Shield and the GameDuino Play Nice Together.

Picture of Making the Touché Shield and the GameDuino Play Nice Together.
Since the touche shield and the Gameduino are both using pin 9, we need to make the GameDuino use pin 4 on the Arduino board and we need to connect the touche shield directly to pin 9 on the Arduino board.

Here are the steps:
  • Bend pin nine on the gameduino out. Be aware that it will break if you bend it back and forth.
  • Connect a wire from the bend out pin on the gameduino board to pin four on the Arduino board.
  • Connect another wire from pin nine on the arduino to the pwm pin on the touch shield.
This is not an elegant solution, but it will work :)

For it to work we need to make sure the Gameduino library communicates properly on pin 4 instead of pin nine. I have included a customized library for that.


Step 4: Connect the Two Shields and Upload the Code

Picture of Connect the Two Shields and Upload the Code
There are lots of tutorials which already explains how to program an Arduino and they do a much better job than I could. So I will just give you a couple of links:
The 3 things that usually cause trouble:
  • On windows you have to install the proper drivers (sometimes also on mac).
  • Remember to select the right serial port in the gui.
  • Remember to select the right board in the gui.

Below are the simplified steps to uploading the code to your Arduino board:
  • Download Arduino: www.arduino.cc
  • Connect the Arduino board to the computer via usb.
  • Download the code from here.
  • Move the libraries in the libraries folder into your Arduino libraries folder. If you do not know how to this please refer to this toturial.
  • Upload the code to the Arduino board.

Step 5: Visualizing the Code and Calibrating It With Guino

Picture of Visualizing the Code and Calibrating It With Guino

We are using Guino to visualize the code. Guino is a new program to visualize data coming from the Arduino board and it enables you to calibrate it on the fly.

You can find the the Instructable here on how to use it. It is really simple to get up and running and it enables you to control some of the internal values. Download the program from here and run the program (you have already installed the libraries in the previous steps).

Step 6: Creating an Enclosure

Picture of Creating an Enclosure

The following steps are optional. It will work just fine without. I choose to use a wooden box from the container store and modify it for my needs. Further I lasercut and acrylic plate to put on top of it.


Step 7: Drill a Square Hole for the Arduino Usb Cable

Picture of Drill a Square Hole for the Arduino Usb Cable

Drilling a square hole in a wooden box has proven to be a tricky task. I have yet to find the perfect solution for it. My solution in this case was to use a drill press, a tiny drill bit and a larger drill bit.

Start out by marking with a pen the approximate area where the hole should be. Then drill many, many tiny holes inside this area. Since it can be tricky to get the precise placement of the square hole I usually compare it to the Arduino board to see what areas I am missing. When you have drilled enough holes for the wood to be porous then use the larger drill bit to remove all the loose bits.

I would love to hear if anybody has a better way to do this?

Step 8: Lasercut the Acrylic Plate

Picture of Lasercut the Acrylic Plate

I used a laser cutter to cut the acrylic plate to put on top. You can download the diagram here.

Step 9: Mount Two Buttons for Max and Min and Mount the Connectors.

Picture of Mount Two Buttons for Max and Min and Mount the Connectors.

The buttons for max and min should be connected to analog 1 and analog 2. Since we are using an internal pull-up resistor the other end of the buttons should go to ground. You can leave out this step and use the Guino interface instead for calibrating the plant.

Step 10: Connect the Audio Jack

Picture of Connect the Audio Jack

I used an stereo audio cable to wire the jack connector to the Gameduino. You can of course use the jack connector directly mounted on the Gameduino shield. 

Comments

TyB12 (author)2016-04-08

I am trying to avoid spending $30+ on a gameduino. I'm a beginner with a RedBoard and created the touche shield on a breadboard, but as far as the gameduino goes, is there any possible way I can avoid using it?

Johan6 (author)TyB122017-08-22

I did the same and purchased an audioshield by Velleman. I've got the sketch working, and the Guino showing nice graphs upon touching. But I now have to figure out how to let the arduino communicate properly with the audioshield (it seems the audioshield uses pin 10 for chipselect, so no need to bend any pins). Does anybody have an idea how to translate the original Gameduino code into the audioshield one, for the same results?

SergioH31 (author)TyB122016-10-26

Hi - I'm doing a similar project using an x-osc interface and linking it to Max MSP 5 on my computer which gives flexablitiy with my sound design

any success? I am looking to do a similar thing. Using touche to interface with Max msp for real time audio.

Im a bit of a (very much a) noob but I am learning quickly any help would be much appreciated. Codes would be amazing.

gerartoye (author)2017-01-12

would love to buy one from someone who has made a working model nz@globlgypsy.com

T0BY (author)2016-12-03

I am very impressed!

Benex11 (author)2015-08-04

I have problems when compiling/verifying the code of Singingplant.ino

it comes the error "'prog_uchar' does not name a type" when he's at

#include "mont.h"

long started =0;

int ticks = 0;

prog_uchar *pc;

// visualize voice (v) at amplitude (a) on an 8x8 grid

the detailed error is

Arduino: 1.6.5 (Mac OS X), Platine: "Arduino Uno"

In file included from singingPlant.ino:3:0:

/Users/benell/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:51:39: error: 'prog_uchar' has not been declared

static void copy(unsigned int addr, prog_uchar *src, int count);

^

/Users/benell/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:62:25: error: 'prog_uchar' has not been declared

static void microcode(prog_uchar *src, int count);

^

/Users/benell/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:63:45: error: 'prog_uchar' has not been declared

static void uncompress(unsigned int addr, prog_uchar *src);

^

In file included from singingPlant.ino:5:0:

mont.h:1: error: 'prog_uchar' does not name a type

static PROGMEM prog_uchar mont[] = {

^

singingPlant:8: error: 'prog_uchar' does not name a type

singingPlant.ino: In function 'void setup()':

singingPlant:82: error: 'pc' was not declared in this scope

singingPlant:82: error: 'mont' was not declared in this scope

singingPlant.ino: In function 'void loop()':

singingPlant:143: error: 'pc' was not declared in this scope

singingPlant:143: error: 'mont' was not declared in this scope

In file included from /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h:28:0,

from /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/SPI/SPI.h:17,

from singingPlant.ino:2:

singingPlant:157: error: 'pc' was not declared in this scope

singingPlant:170: error: 'pc' was not declared in this scope

singingPlant:173: error: 'pc' was not declared in this scope

singingPlant:178: error: 'pc' was not declared in this scope

'prog_uchar' does not name a type

Dieser Report hätte mehr Informationen mit

"Ausführliche Ausgabe während der Kompilierung"

aktiviert in Datei > Einstellungen

Seems that some other user had the same problem. Does anyone know about a solution?

gpinto2 made it! (author)Benex112016-04-05

Hi, try to go in GD.h and move this string: "typedef const unsigned char prog_uchar;"

how in the photo. You should resolve your problem. :)

Bye!

PetervdPol (author)Benex112015-08-31

That would be me. Have found no solution so far, which is a pity. It seems the subject is "dead".

Benex11 (author)PetervdPol2015-08-31

I made it to upload the code by using an older arduino version. It still doesn't work though, but it must be some other problem/mistake of mine.

shuffey (author)2016-03-29

I'm running into an issue. The guino library does not show up in the libraries section in the arduino application, and I am getting these errors when I try to run the singing plant code:

Guino Library doesn’t show up in arduino app

Arduino: 1.6.7 (Mac OS X), Board: "Arduino/Genuino
Uno"

In file included from
/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/singingPlant.ino:1:0:

/Users/shuffey/Documents/Arduino/libraries/Gameduino_midified_to_pin4/font8x8.h:1:16:
error: 'prog_uchar' does not name a type

static PROGMEM
prog_uchar font8x8[] = {

^

In file included from
/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/singingPlant.ino:2:0:

/Users/shuffey/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:51:39:
error: 'prog_uchar' has not been declared

static void
copy(unsigned int addr, prog_uchar *src, int count);

^

/Users/shuffey/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:62:25:
error: 'prog_uchar' has not been declared

static void
microcode(prog_uchar *src, int count);


^

/Users/shuffey/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:63:45:
error: 'prog_uchar' has not been declared

static void
uncompress(unsigned int addr, prog_uchar *src);

^

/Users/shuffey/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:
In member function 'int Asset::read(void*, uint16_t)':

/Users/shuffey/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:200:7:
error: 'SPI' was not declared in this scope


SPI.transfer(0x03);

^

/Users/shuffey/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:
In member function 'int Asset::load(uint16_t)':

/Users/shuffey/Documents/Arduino/libraries/Gameduino_midified_to_pin4/GD.h:225:11:
error: 'SPI' was not declared in this scope

SPI.transfer(buf[i]);

^

In file included from
/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/singingPlant.ino:8:0:

sketch/mont.h: At global scope:

mont.h:1: error: 'prog_uchar' does not name a type

static PROGMEM prog_uchar
mont[] = {

^

singingPlant:11: error: 'prog_uchar' does not name a type

prog_uchar *pc;

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:
In function 'void setup()':

Guino_library:85: error: 'pc' was not declared in this scope

SEND_DATA_STRUCTURE
guino_data;

^

Guino_library:85: error: 'mont' was not declared in this
scope

SEND_DATA_STRUCTURE
guino_data;

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:
In function 'void loop()':

Guino_library:146: error: 'pc' was not declared in this
scope

void
gGetSavedValue(int item_number, int *_variable)

^

Guino_library:146: error: 'mont' was not declared in this
scope

void
gGetSavedValue(int item_number, int *_variable)

^

In file included from
/Users/shuffey/Downloads/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h:28:0,

from
sketch/singingPlant.ino.cpp:1:

Guino_library:160: error: 'pc' was not declared in this
scope

{

^

Guino_library:173: error: 'pc' was not declared in this
scope


gSendCommand(guino_executed, 0, 0);

^

Guino_library:176: error: 'pc' was not declared in this
scope


gSendCommand(guino_iamhere, 0, 0);

^

Guino_library:181: error: 'pc' was not declared in this
scope


if(guino_maxGUIItems > guino_item_counter)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:
In function 'void gInit()':

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:254:28:
warning: deprecated conversion from string constant to 'char*'
[-Wwrite-strings]

}


^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:260:60:
warning: deprecated conversion from string constant to 'char*'
[-Wwrite-strings]


if(guino_maxGUIItems > guino_item_counter)


^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:261:34:
warning: deprecated conversion from string constant to 'char*'
[-Wwrite-strings]

{

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:262:58:
warning: deprecated conversion from string constant to 'char*'
[-Wwrite-strings]


gAddLabel(_name,guino_small);


^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:263:42:
warning: deprecated conversion from string constant to 'char*'
[-Wwrite-strings]


guino_item_values[guino_item_counter] =_variable ;

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:264:48:
warning: deprecated conversion from string constant to 'char*'
[-Wwrite-strings]


gGetSavedValue(guino_item_counter, _variable);

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_library.ino:265:36:
warning: deprecated conversion from string constant to 'char*'
[-Wwrite-strings]


gSendCommand(guino_addWaveform,(byte)guino_item_counter,_size);

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
At global scope:

Guino_libray:42: error: redefinition of 'boolean
guidino_initialized'

boolean
guidino_initialized = false;

^

Guino_library:42: error: 'boolean guidino_initialized'
previously defined here

boolean
guidino_initialized = false;

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void EEPROMWriteInt(int, int)':

Guino_libray:45: error: redefinition of 'void
EEPROMWriteInt(int, int)'

void
EEPROMWriteInt(int p_address, int p_value)

^

Guino_library:45: error: 'void EEPROMWriteInt(int, int)' previously
defined here

void
EEPROMWriteInt(int p_address, int p_value)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'unsigned int EEPROMReadInt(int)':

Guino_libray:55: error: redefinition of 'unsigned int
EEPROMReadInt(int)'

unsigned int
EEPROMReadInt(int p_address)

^

Guino_library:55: error: 'unsigned int EEPROMReadInt(int)'
previously defined here

unsigned int
EEPROMReadInt(int p_address)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
At global scope:

Guino_libray:64: error: redefinition of 'EasyTransfer ET'

EasyTransfer ET;

^

Guino_library:64: error: 'EasyTransfer ET' previously
declared here

EasyTransfer ET;

^

Guino_libray:66: error: redefinition of 'struct
SEND_DATA_STRUCTURE'

struct
SEND_DATA_STRUCTURE

^

Guino_library:66: error: previous definition of 'struct
SEND_DATA_STRUCTURE'

struct SEND_DATA_STRUCTURE

^

Guino_libray:76: error: redefinition of 'int
guino_maxGUIItems'

int guino_maxGUIItems
= 100;

^

Guino_library:76: error: 'int guino_maxGUIItems' previously
defined here

int guino_maxGUIItems
= 100;

^

Guino_libray:77: error: redefinition of 'int
guino_item_counter'

int
guino_item_counter = 0;

^

Guino_library:77: error: 'int guino_item_counter' previously
defined here

int
guino_item_counter = 0;

^

Guino_libray:78: error: redefinition of 'int*
guino_item_values [100]'

int
*guino_item_values[100];


^

Guino_library:78: error: 'int* guino_item_values [100]'
previously declared here

int
*guino_item_values[100];

^

Guino_libray:79: error: redefinition of 'int gTmpInt'

int gTmpInt = 0; //
temporary int for items without a variable

^

Guino_library:79: error: 'int gTmpInt' previously defined
here

int gTmpInt = 0; //
temporary int for items without a variable

^

Guino_libray:80: error: redefinition of 'boolean
internalInit'

boolean internalInit
= true; // boolean to initialize before connecting to serial

^

Guino_library:80: error: 'boolean internalInit' previously
defined here

boolean internalInit
= true; // boolean to initialize before connecting to serial

^

Guino_libray:85: error: redefinition of 'SEND_DATA_STRUCTURE
guino_data'

SEND_DATA_STRUCTURE
guino_data;

^

Guino_library:85: error: 'SEND_DATA_STRUCTURE guino_data'
previously declared here

SEND_DATA_STRUCTURE
guino_data;

^

Guino_libray:86: error: redefinition of 'int eepromKey'

int eepromKey = 1234;

^

Guino_library:86: error: 'int eepromKey' previously defined
here

int eepromKey = 1234;

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void guino_update()':

Guino_libray:87: error: redefinition of 'void
guino_update()'

void guino_update()

^

Guino_library:87: error: 'void guino_update()' previously
defined here

void guino_update()

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void gInitEEprom()':

Guino_libray:126: error: redefinition of 'void
gInitEEprom()'

void gInitEEprom()

^

Guino_library:126: error: 'void gInitEEprom()' previously
defined here

void gInitEEprom()

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void gSetColor(int, int, int)':

Guino_libray:139: error: redefinition of 'void
gSetColor(int, int, int)'

void gSetColor(int
_red, int _green, int _blue)

^

Guino_library:139: error: 'void gSetColor(int, int, int)'
previously defined here

void gSetColor(int
_red, int _green, int _blue)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void gGetSavedValue(int, int*)':

Guino_libray:146: error: redefinition of 'void
gGetSavedValue(int, int*)'

void
gGetSavedValue(int item_number, int *_variable)

^

Guino_library:146: error: 'void gGetSavedValue(int, int*)'
previously defined here

void
gGetSavedValue(int item_number, int *_variable)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void gBegin(int)':

Guino_libray:159: error: redefinition of 'void gBegin(int)'

void gBegin(int
_eepromKey)

^

Guino_library:159: error: 'void gBegin(int)' previously
defined here

void gBegin(int
_eepromKey)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gAddButton(char*)':

Guino_libray:179: error: redefinition of 'int
gAddButton(char*)'

int gAddButton(char *
_name)

^

Guino_library:179: error: 'int gAddButton(char*)' previously
defined here

int gAddButton(char *
_name)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void gAddColumn()':

Guino_libray:194: error: redefinition of 'void gAddColumn()'

void gAddColumn()

^

Guino_library:194: error: 'void gAddColumn()' previously
defined here

void gAddColumn()

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gAddLabel(char*, int)':

Guino_libray:204: error: redefinition of 'int
gAddLabel(char*, int)'

int gAddLabel(char *
_name, int _size)

^

Guino_library:204: error: 'int gAddLabel(char*, int)'
previously defined here

int gAddLabel(char *
_name, int _size)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gAddSpacer(int)':

Guino_libray:222: error: redefinition of 'int
gAddSpacer(int)'

int gAddSpacer(int _size)

^

Guino_library:222: error: 'int gAddSpacer(int)' previously
defined here

int gAddSpacer(int
_size)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gAddToggle(char*, int*)':

Guino_libray:237: error: redefinition of 'int
gAddToggle(char*, int*)'

int gAddToggle(char *
_name, int * _variable)

^

Guino_library:237: error: 'int gAddToggle(char*, int*)'
previously defined here

int gAddToggle(char *
_name, int * _variable)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gAddFixedGraph(char*, int, int, int, int*, int)':

Guino_libray:258: error: redefinition of 'int
gAddFixedGraph(char*, int, int, int, int*, int)'

int
gAddFixedGraph(char * _name,int _min,int _max,int _bufferSize, int * _variable,
int _size)

^

Guino_library:258: error: 'int gAddFixedGraph(char*, int,
int, int, int*, int)' previously defined here

int
gAddFixedGraph(char * _name,int _min,int _max,int _bufferSize, int * _variable,
int _size)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gAddMovingGraph(char*, int, int, int*, int)':

Guino_libray:278: error: redefinition of 'int
gAddMovingGraph(char*, int, int, int*, int)'

int
gAddMovingGraph(char * _name,int _min,int _max, int * _variable, int _size)

^

Guino_library:278: error: 'int gAddMovingGraph(char*, int,
int, int*, int)' previously defined here

int
gAddMovingGraph(char * _name,int _min,int _max, int * _variable, int _size)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gUpdateLabel(int, char*)':

Guino_libray:300: error: redefinition of 'int
gUpdateLabel(int, char*)'

int gUpdateLabel(int
_item, char * _text)

^

Guino_library:300: error: 'int gUpdateLabel(int, char*)'
previously defined here

int gUpdateLabel(int
_item, char * _text)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gAddRotarySlider(int, int, char*, int*)':

Guino_libray:314: error: redefinition of 'int
gAddRotarySlider(int, int, char*, int*)'

int gAddRotarySlider(int
_min,int _max, char * _name, int * _variable)

^

Guino_library:314: error: 'int gAddRotarySlider(int, int,
char*, int*)' previously defined here

int
gAddRotarySlider(int _min,int _max, char * _name, int * _variable)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'int gAddSlider(int, int, char*, int*)':

Guino_libray:335: error: redefinition of 'int
gAddSlider(int, int, char*, int*)'

int gAddSlider(int
_min,int _max, char * _name, int * _variable)

^

Guino_library:335: error: 'int gAddSlider(int, int, char*,
int*)' previously defined here

int gAddSlider(int
_min,int _max, char * _name, int * _variable)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void gUpdateValue(int)':

Guino_libray:356: error: redefinition of 'void
gUpdateValue(int)'

void gUpdateValue(int
_item)

^

Guino_library:356: error: 'void gUpdateValue(int)'
previously defined here

void gUpdateValue(int
_item)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void gUpdateValue(int*)':

Guino_libray:363: error: redefinition of 'void gUpdateValue(int*)'

void gUpdateValue(int
* _variable)

^

Guino_library:363: error: 'void gUpdateValue(int*)'
previously defined here

void gUpdateValue(int
* _variable)

^

/Users/shuffey/Documents/Arduino/AdvancedTouchSensing-master/singingPlant/singingPlant/Guino_libray.ino:
In function 'void gSendCommand(byte, byte, int)':

Guino_libray:383: error: redefinition of 'void
gSendCommand(byte, byte, int)'

void
gSendCommand(byte _cmd, byte _item, int _value)

^

Guino_library:383: error: 'void gSendCommand(byte, byte,
int)' previously defined here

void
gSendCommand(byte _cmd, byte _item, int _value)

^

exit status 1

'prog_uchar' does not name a type

Invalid library found in
/Users/shuffey/Documents/Arduino/libraries/Guino:
/Users/shuffey/Documents/Arduino/libraries/Guino

This report would
have more information with

"Show verbose
output during compilation"

enabled in File >
Preferences.

GoranK1 (author)2016-01-28

Works like a charm!!! Thanks for the schematics!

AlexandreF2 (author)2015-06-14

Hello, I try to construct a device like this one, but instead of touching plant, I want to use the potential difference between the root and the leave. Can you help me to do that ? It will be inspired of the work of Damanhur.

PetervdPol (author)2015-05-14

Brilliant idea! I found out that to use the Touche shield on an Mega you need to change the pin from 9 to 11 in the code. I assume there is no need to bend any pins on the gameduino etc. that way. However: I am having serious problems compiling. I get the same errors using a Uno and a Mega. Can someone please help me here? I really want to build this and use it at a international flowershow (I am a rose grower)

With the old IDE 1.0.5 I get:

In file included from singingPlant.ino:5:0:

mont.h:1:32: error: variable ‘mont’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

static PROGMEM prog_uchar mont[] = {

^

When using the new IDE 1.6.3 I get this:

Arduino: 1.6.3 (Linux), Board:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from singingPlant.ino:3:0:

/home/peter/Arduino/libraries/Gameduino/GD.h:51:39: error: 'prog_uchar' has not been declared

static void copy(unsigned int addr, prog_uchar *src, int count);

^

/home/peter/Arduino/libraries/Gameduino/GD.h:62:25: error: 'prog_uchar' has not been declared

static void microcode(prog_uchar *src, int count);

^

/home/peter/Arduino/libraries/Gameduino/GD.h:63:45: error: 'prog_uchar' has not been declared

static void uncompress(unsigned int addr, prog_uchar *src);

^

In file included from singingPlant.ino:5:0:

mont.h:1:16: error: 'prog_uchar' does not name a type

static PROGMEM prog_uchar mont[] = {

^

singingPlant.ino:8:3: error: 'prog_uchar' does not name a type

singingPlant.ino: In function 'void setup()':

singingPlant.ino:82:4: error: 'pc' was not declared in this scope

singingPlant.ino:82:9: error: 'mont' was not declared in this scope

singingPlant.ino: In function 'void loop()':

singingPlant.ino:144:6: error: 'pc' was not declared in this scope

singingPlant.ino:144:12: error: 'mont' was not declared in this scope

In file included from /home/peter/opt/arduino-1.6.3/hardware/arduino/avr/cores/arduino/Arduino.h:28:0,

from /home/peter/opt/arduino-1.6.3/hardware/arduino/avr/libraries/SPI/SPI.h:17,

from singingPlant.ino:2:

singingPlant.ino:158:35: error: 'pc' was not declared in this scope

singingPlant.ino:171:39: error: 'pc' was not declared in this scope

singingPlant.ino:174:39: error: 'pc' was not declared in this scope

singingPlant.ino:179:40: error: 'pc' was not declared in this scope

runintomycup (author)2015-03-17

Hi. Would a pre-assembled replacement for the homemade touche shield work? I was looking at the MPR121QR2 IC - https://www.sparkfun.com/products/12013

jamesbrosuk (author)2015-02-09

Brilliant for valentines night

force4200 (author)2014-11-06

Can someone help me out with this...I can't run the code these are errors I'm getting from the GUINO_library file:

Guino_library:65: error: 'EasyTransfer' does not name a type

Guino_library.ino: In function 'void guino_update()':

Guino_library:94: error: 'ET' was not declared in this scope

Guino_library.ino:105: warning: array subscript has type 'char'

Guino_library.ino: In function 'void gInitEEprom()':

Guino_library.ino:129: warning: comparison between signed and unsigned integer expressions

Guino_library.ino: In function 'void gGetSavedValue(int, int*)':

Guino_library.ino:150: warning: comparison between signed and unsigned integer expressions

Guino_library.ino: In function 'void gBegin(int)':

Guino_library:173: error: 'ET' was not declared in this scope

Guino_library:173: error: 'details' was not declared in this scope

Guino_library.ino: In function 'int gAddButton(char*)':

Guino_library.ino:185: warning: comparison between signed and unsigned integer expressions

Guino_library.ino: In function 'int gAddLabel(char*, int)':

Guino_library.ino:211: warning: comparison between signed and unsigned integer expressions

Guino_library.ino: In function 'int gAddToggle(char*, int*)':

Guino_library.ino:246: warning: comparison between signed and unsigned integer expressions

Guino_library.ino: In function 'int gUpdateLabel(int, char*)':

Guino_library.ino:305: warning: comparison between signed and unsigned integer expressions

Guino_library.ino:311: warning: no return statement in function returning non-void

Guino_library.ino: In function 'int gAddRotarySlider(int, int, char*, int*)':

Guino_library.ino:324: warning: comparison between signed and unsigned integer expressions

Guino_library.ino: In function 'int gAddSlider(int, int, char*, int*)':

Guino_library.ino:345: warning: comparison between signed and unsigned integer expressions

Guino_library.ino: In function 'void gSendCommand(byte, byte, int)':

Guino_library:391: error: 'ET' was not declared in this scope

thanks

cheshirecorn (author)2014-04-04

Thats tremendous

eking804 (author)2014-02-13

Hi everyone! I was wondering if anyone could help me find out the issues with this code for this project ( https://www.instructables.com/id/Singing-plant-Mak... ) If someone could help me ASAP because this project is for a science fair next week.

Here is the error codes:

CODE: SELECT ALL singingPlant.ino: In function 'void visualize(byte, byte)': singingPlant:38: error: 'GD' was not declared in this scope singingPlant.ino: In function 'void setup()': singingPlant:55: error: 'GD' was not declared in this scope singingPlant:57: error: 'RAM_SPRPAL' was not declared in this scope singingPlant:57: error: 'TRANSPARENT' was not declared in this scope singingPlant:61: error: 'RGB' was not declared in this scope singingPlant:62: error: 'RAM_SPRIMG' was not declared in this scope singingPlant.ino: In function 'void setvol(byte, byte)': singingPlant:104: error: 'GD' was not declared in this scope singingPlant:104: error: 'VOICES' was not declared in this scope singingPlant.ino: In function 'void loop()': singingPlant:174: error: 'GD' was not declared in this scope singingPlant:174: error: 'VOICES' was not declared in this scope Guino_library.ino: At global scope: Guino_library:64: error: 'EasyTransfer' does not name a type Guino_library.ino: In function 'void guino_update()': Guino_library:93: error: 'ET' was not declared in this scope Guino_library.ino: In function 'void gBegin(int)': Guino_library:172: error: 'ET' was not declared in this scope Guino_library:172: error: 'details' was not declared in this scope Guino_library.ino: In function 'void gSendCommand(byte, byte, int)': Guino_library:390: error: 'ET' was not declared in this scope

Full code is here: https://www.dropbox.com/sh/rwbm17bxc19pvu4/XbPjnT...

Picture of arduino program + errors: https://www.dropbox.com/sh/rwbm17bxc19pvu4/XbPjnT...

Any advice or help is greatly appreciated as this is very important :D

My Diet Area (author)2013-08-03

i do not have sound after uploading singingPlant.ino.

nojara (author)2013-06-16

Hi!
I really want to try out this but I am having difficulties.
I got stuck too..the same here, I followed all the steps.
the touche shield works perfectly, when I open Guino, I see the graphs.. but I can only hear white noises in my headphones..
It is necessary to have 100% same setup? same model arduino ,compiler, version and operating system?
Should be any difference if I am working with a macOsx and arduino UNO and arduino1.5.2..
Can you guys send me the binary? the compiled code that loaded into the mic?
It would be great if you could help me. Thank you!

11mh (author)2013-01-18

hope you guys can help me out here. I got stucked ... The touche shield works perfectly. I just can't make any proper sounds with the gameduino. Hear only white noises with my headphones. I did everything what the instruction told me to do. Except of mounting those two buttons on the shield. Also the Guino is not really a help for me. I tried every adjustments on that GUI. But nothing seems to create sounds. There are also no mistakes when uploading the code "matrixpatterns" on to the Arduino. The soldering of the singing plant construction is also fine. What can it be that it doesn't make any sounds? Please help me! Thank you for your help!

madshobye (author)11mh2013-01-19

I am terribly sorry - but must have made a mistake with a resent update. You are using the code for the matrix synth not the arduino. The link is wrong. Use this one instead:

https://www.dropbox.com/sh/rwbm17bxc19pvu4/XbPjnTq0r8

Remember to update your gameduino library with the one attached since it uses a different pin.

Thanks for pointing this out. I am updating the text now.

mgkal (author)madshobye2013-05-02

i do not have sound after uploading singingPlant.ino.
i soldered all ok. gameduino examples all works, i hear sound through headphones.
when i open guino, i see graph. it changes as i touch wire i put in water.
what am i missing?
many thanx in advance

dykeso (author)2013-02-28

I am very much a newbie to the world of Arduino but I am incredibly inspired by this project. I know that your main interest is in how sound can be interacted with differently but do you think that it would be relatively easy to have a visual response from touching the plant rather than sounds?

Thank you very much for putting this project up.

mbeltrão (author)2012-12-02

well, did it work as shown?
I'm thinking about doing it as a final project to an university course.
Do you have something else to tell me about this project?
I'm really surprised that the project worked so well, and can't believe that it's real, haha.
Is there any magic tricks? thanks a lot

Anvils (author)2012-10-20

I am stumped. What is a "Pin Stripe"?

madshobye (author)Anvils2012-10-21

Pin Headers ;) Fixed...

madshobye (author)Anvils2012-10-21

Pin headers ;) Fixed...

shayan doust (author)2012-10-19

very nice i made it yesturday

Machine (author)2012-10-09

Where you say "Download the code from here." what is the name of the code file(s). I see several directories (folders) there, but which one is the required code.

I love the music your machine generates and you have made it so simple.

madshobye (author)Machine2012-10-10

You need to download everything form the link.

blorgggg (author)2012-10-09

Thank you so much for adding all the instructables about making a Touche device! I was literally just scouring through the paper and trying to figure out how to build one myself, and then thought, well I might as well check instructables one more time!

blorgggg (author)2012-10-09

Thank you so much for adding all the instructables about making a Touche device! I was literally just scouring through the paper and trying to figure out how to build one myself, and then thought, well I might as well check instructables one more time!

Ortzinator (author)2012-10-07

I immediately thought of The Three Amigos.

schopra1 (author)2012-10-07

Hi I have tried making my very own singing plant, inspired by Botanicus Interacticus - Touche' technology by Disney. I am using the arduino and mp3 shield to create a capacitive sensor and playback sound. The readings are stable in the beginning but after a while / with too much touching the circuit starts giving problem with the voice feedback. Will your elaborate circuit that you developed for the same help me with my problem. My experiment can be found here http://www.youtube.com/watch?v=s2kd-uDgis8&feature=youtu.be

inkfzz (author)2012-10-07

i love this!
i'm a director and nt really that handy with arduino and what not, but i've always been inspired by this type of stuff.
i just finished a music video, that was inspired by the secret life of plants among many other obscure sciences. i can easily say that if i would have seen this, it would have inspired me to a similar thing.
here's the video if you 'd like to see it:
http://www.youtube.com/watch?v=yqN6BmI1BIk

great instructable!!
thanks

amandaghassaei (author)2012-10-05

this is so cool, I really hope I get the time to try out this touche system and the gameduino!
here's a solution for drilling square holes, would be awesome to get a bit like this that is usb sized:
http://www.youtube.com/watch?v=L5AzbDJ7KYI

About This Instructable

116,375views

268favorites

License:

Bio: IMPORTANT: Please do not message me personally with technical questions. Use the comments in the respective instructables. I really love sharing and helping people makes ... More »
Add instructable to: