Himanshu Bharti
Created October 4, 2021

Gesture based keyboard

The project is a keyboard based on Arduino UNO contains 12 piano keys which are pressed based on the distance from the sensor.

Showcase (no instructions)29
Gesture based keyboard

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×2
Speaker:0.5W & 8ohm
×1
Jumper wires (generic)
Jumper wires (generic)
×20
Male/Female Jumper Wires
Male/Female Jumper Wires
×10
Micro SD Card Adapter Module
×1
LM386 Low Voltage Audio Op-Amp IC
×1
9V battery (generic)
9V battery (generic)
×1
9V Battery Clip
9V Battery Clip
×1
Breadboard (generic)
Breadboard (generic)
×1
Resistor 10k ohm
Resistor 10k ohm
×2
10uF 50V Electrolytic Capacitor
×2
100uF 16V Electrolytic Capacitor
×2
Resistor 1k ohm
Resistor 1k ohm
×1
Flash Memory Card, SD Card
Flash Memory Card, SD Card
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Tape, Double Sided
Tape, Double Sided

Code

Arduino IDE code for the project

Arduino
/*
 Gesture based piano using HC-SR04 , microSDcard reader and arduino uno 

 */
 
#include "SD.h" //Lib to read SD card
#include "TMRpcm.h" //Lib to play auido
#include "SPI.h" //SPI lib for SD card

#define SD_ChipSelectPin 4 //Chip select is pin number 4
TMRpcm music; //Lib object is named "music"
const int trig=2;
const int echo=3;
const int trigb=7;
const int echob=5;
int lkey = 500; // Last white key of piano
int lkeyb = 500; // Last black key of piano 
void setup(){
music.speakerPin = 9; //Auido out on pin 9
Serial.begin(9600); //Serial Com for debugging 
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
return;
}
pinMode(echo, INPUT);
pinMode(trig, OUTPUT);
pinMode(echob, INPUT);
pinMode(trigb, OUTPUT);
music.setVolume(6);   
music.quality(1);            
}

void loop()
{ 
    long dur;  // In Micro-seconds
    long dis;  // In milli-meter
    long durb;  // In Micro-seconds
    long disb;  // In milli-meter
    digitalWrite(trigb,LOW);
    delayMicroseconds(2);
    digitalWrite(trigb,HIGH);
    delayMicroseconds(10);
    digitalWrite(trigb,LOW);
    durb = pulseIn(echob,HIGH);
    disb =  (durb*343)/2000;  // Function defined to convert duration to distance in mm
    Serial.print("Distance black : ");
    Serial.println(String(disb));
    digitalWrite(trig,LOW);
    delayMicroseconds(2);
    digitalWrite(trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(trig,LOW);
    dur = pulseIn(echo,HIGH);
    dis =  (dur*343)/2000;  // Function defined to convert duration to distance in mm
    Serial.print("Distance white : ");
    Serial.println(String(dis));

   if(disb > 210){
    
    if( dis > 25 && dis < 50 && (lkey > 50)){  // White key width is taken 2.5cm
      music.play("1.wav");
      delay(400);
      }
    if( dis > 50 && dis < 75 && (lkey < 50 || lkey > 75)){
      music.play("2.wav");
      delay(400);
      }
    if( dis > 75 && dis < 100 && (lkey < 75 || lkey > 100)){
      music.play("3.wav");
      delay(400);
      }
    if( dis > 100 && dis < 125 && (lkey < 100 || lkey > 125)){
      music.play("4.wav");
      delay(400);
      }
    if( dis > 125 && dis < 150 && (lkey < 125 || lkey > 150)){
      music.play("5.wav");
      delay(400);
      }
    if( dis > 150 && dis < 175 && (lkey < 150 || lkey > 175)){
      music.play("6.wav");
      delay(400);
      }
    if( dis > 175 && dis < 200 && (lkey < 175 || lkey > 200)){
      music.play("7.wav");
      delay(400);
      }

   }
   // Black key width is taken 2cm
     if( disb > 65 && disb < 85 && (lkeyb > 65)){ 
      music.play("8.wav");
      delay(400);
      }
     if( disb > 90 && disb < 110 && (lkeyb < 90 || lkeyb > 110)){
      music.play("9.wav");
      delay(400);
      }
     if( disb > 140 && disb < 160 && (lkeyb < 140 || lkeyb > 160)){
      music.play("10.wav");
      delay(400);
      }
     if( disb > 165 && disb < 185 && (lkeyb < 165 || lkeyb > 185)){
      music.play("11.wav");
      delay(400);
      }
     if( disb > 190 && disb < 210 && (lkeyb < 190 || lkeyb > 210)){
      music.play("12.wav");
      delay(400);
      }
   delay(1000);
   if(dis>25){
       lkey = dis;
   }
   if(dis>65){
       lkeyb = disb;
   }
}

Credits

Himanshu Bharti
2 projects • 0 followers

Comments