Paper Piano Using Arduino

Required Components:

  1. Arduino Board
  2. Speaker
  3. Bread Board
  4. Resistors[220 ohms]
  5. Piano [using paper]
  6. Jumper Wires

Schematic Diagram:

Program:

// Import the CapacitiveSensor Library.
#include <CapacitiveSensor.h>
//Assign speaker pin to 11 
#define speaker 11

// Set the Send Pin & Receive Pin.
CapacitiveSensor   cs_2_3 = CapacitiveSensor(2,3);        
CapacitiveSensor   cs_2_4 = CapacitiveSensor(2,4);         
CapacitiveSensor   cs_2_5 = CapacitiveSensor(2,5);     
CapacitiveSensor   cs_2_6 = CapacitiveSensor(2,6);     
CapacitiveSensor   cs_2_7 = CapacitiveSensor(2,7);      
CapacitiveSensor   cs_2_8 = CapacitiveSensor(2,8);         
CapacitiveSensor   cs_2_9 = CapacitiveSensor(2,9);  
CapacitiveSensor   cs_2_10 = CapacitiveSensor(2,10);
CapacitiveSensor   cs_2_12 = CapacitiveSensor(2,12);     


void setup()                    
{
// turn off autocalibrate on channel 1 - just as an example
  cs_2_6.set_CS_AutocaL_Millis(0xFFFFFFFF);     
  // Arduino start communicate with computer.
  Serial.begin(9600);
}

void loop()                    
{
  // Set a timer.
  long start = millis();
  
  // Set the sensitivity of the sensors.
  long total1 =  cs_2_3.capacitiveSensor(3000);
  long total2 =  cs_2_4.capacitiveSensor(3000);
  long total3 =  cs_2_5.capacitiveSensor(3000);
  long total4 =  cs_2_6.capacitiveSensor(3000);
  long total5 =  cs_2_7.capacitiveSensor(3000);
  long total6 =  cs_2_8.capacitiveSensor(3000);
  long total7 =  cs_2_9.capacitiveSensor(3000);
  long total8 =  cs_2_10.capacitiveSensor(3000);
  long total9 =  cs_2_12.capacitiveSensor(3000);
  

// check on performance in milliseconds
  Serial.print(millis() - start);  
 // tab character for debug window spacing
      
  Serial.print("\t");                   
  Serial.print(total1);  // print sensor output 1
  Serial.print("\t");   // Leave some space before print the next output
  Serial.print(total2); // print sensor output 2
  Serial.print("\t");   // Leave some space before print the next output
  Serial.print(total3); // print sensor output 3
  Serial.print("\t");  // Leave some space before print the next output
  Serial.print(total4); // print sensor output 4
  Serial.print("\t");   // Leave some space before print the next output
  Serial.print(total5); // print sensor output 5
  Serial.print("\t");   // Leave some space before print the next output
  Serial.print(total6); // print sensor output 6
  Serial.print("\t");   // Leave some space before print the next output
  Serial.print(total7); // print sensor output 
 // Leave some space before print the next output
  Serial.print("\t");
  Serial.println(total8); // print sensor output 8
/* "println" - "ln" represent as "line", system will jump to next line after print the output.*/
  Serial.print("\t");
  Serial.println(total9);
  
  
  
  // When hand is touched the sensor, the speaker will produce a tone.
  // I set a threshold for it, so that the sensor won't be too sensitive.
  if (total1 > 500) tone(speaker,131);   // frequency
  if (total2 > 500) tone(speaker,147);   /* you can see https://www.arduino.cc/en/Tutorial/toneMelody if you want to change frequency*/
  if (total3 > 500) tone(speaker,165);
  if (total4 > 500) tone(speaker,175);
  if (total5 > 500) tone(speaker,196);
  if (total6 > 500) tone(speaker,220);
  if (total7 > 500) tone(speaker,247);
  if (total8 > 500) tone(speaker,262);
  if (total9  >500) tone(speaker,282);
  
  // When hand didn't touch on it, no tone is produced.
  if (total1<=500  &  total2<=500  &  total3<=500 & total4<=500  &  
    total5<=500  &  total6<=500 &  total7<=500 &  total8<=500 & total9<=500)
    noTone(speaker);

  delay(10);  // arbitrary delay to limit data to serial port 
}

Leave a Reply

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