Skip to main content

Arduino Based Piano Project

This video will illustrate to you how to make a simple piano by using IR Modules.

Based on the frequency of sa, re, ga, ma, pa, dha, ni and sa the tone of the buzzer will change.

Components Required:

1> I.R. Modules

2> Arduino Uno

3> Jumper Wires

4>Small Breadboard

Circuit Diagram


Arduino Code:

int button_C = 2;
int button_D = 3;
int button_E = 4;
int button_F = 5;
int button_G = 6;
int button_A = 7;
int button_B = 8;
int button_Cup = 9;

int speaker = 10;

int buttonstate_C = 0;
int buttonstate_D = 0;
int buttonstate_E = 0;
int buttonstate_F = 0;
int buttonstate_G = 0;
int buttonstate_A = 0;
int buttonstate_B = 0;
int buttonstate_Cup = 0;

//NOTES         'c'  , 'd',  'e',  'f',  'g', 'a',  'b',  'C'
int tones[] = { 240, 254, 285, 320, 359, 280, 427, 956 }; //freq
int Cur_tone = 0;

void setup()
{
  pinMode(button_C, OUTPUT);
  pinMode(button_D, INPUT);
  pinMode(button_E, INPUT);
  pinMode(button_F, INPUT);
  pinMode(button_G, INPUT);
  pinMode(button_A, INPUT);
  pinMode(button_B, INPUT);
  pinMode(button_Cup, INPUT);

  pinMode(speaker, OUTPUT);
Serial.begin(9600);
}

void loop()
{
  buttonstate_C = digitalRead(button_C);
  buttonstate_D = digitalRead(button_D);
  buttonstate_E = digitalRead(button_E);
  buttonstate_F = digitalRead(button_F);
  buttonstate_G = digitalRead(button_G);
  buttonstate_A = digitalRead(button_A);
  buttonstate_B = digitalRead(button_B);
  buttonstate_Cup = digitalRead(button_Cup);
  Serial.print(buttonstate_C);
  Serial.print("||");
  Serial.print(buttonstate_D);
  Serial.print("||");
  Serial.print(buttonstate_E);
  Serial.print("||");
  Serial.print(buttonstate_F);
  Serial.print("||");
  Serial.print(buttonstate_G);
  Serial.print("||");
  Serial.print(buttonstate_A);
  Serial.print("||");
  Serial.print(buttonstate_B);
  Serial.print("||");
  Serial.println(buttonstate_Cup);

  if((buttonstate_C == LOW) || (buttonstate_E == LOW) ||
    (buttonstate_G == LOW) || (buttonstate_D == LOW) ||
    (buttonstate_F == LOW) || (buttonstate_A == LOW) ||
    (buttonstate_B == LOW) || (buttonstate_Cup == LOW) )
  {
    if (buttonstate_C == LOW)
    {
      Cur_tone = tones[0];
     
    }
    if (buttonstate_E == LOW)
    {
      Cur_tone = tones[1];
    }
    if (buttonstate_G == LOW)
    {
      Cur_tone = tones[2];
    }
    if (buttonstate_D == LOW)
    {
      Cur_tone = tones[3];
    }
    if (buttonstate_F == LOW)
    {
      Cur_tone = tones[4];
    }
    if (buttonstate_A == LOW)
    {
      Cur_tone = tones[5];
    }
    if (buttonstate_B == LOW)
    {
      Cur_tone = tones[6];
    }
    if (buttonstate_Cup == LOW)
    {
      Cur_tone = tones[7];
    }
    digitalWrite(speaker, LOW);
    tone(10, Cur_tone,100 );
        digitalWrite(speaker, HIGH);
    tone(10, Cur_tone,100 );

//    digitalWrite(speaker, HIGH);
//    delayMicroseconds(Cur_tone);
  }
  else //in case no button is pressed, close the piezo
  {
    digitalWrite(speaker, LOW);
  }

}


Comments

Popular posts from this blog

LED Brightness Control using Touch Sensor and ARM

Hey Folks, In this tutorial, we will learn, how to change  the intensity of light using touch sensor the ARM (FRDM-KL25Z). INTRODUCTION The FRDM-KL25Z is an ultra-low-cost development platform for Kinetis L Series KL1x (KL14/15) and KL2x (KL24/25) MCUs built on ARM® Cortex™-M0+ processor.  The FRDM-KL25Z has been designed by NXP in collaboration with mbed for prototyping all sorts of devices, especially those requiring the size and price point offered by Cortex-M0+ and the power of USB Host and Device. The FRDM-KL25Z is supported by a range of NXP and third-party development software. It is packaged as a development board with connectors to break out to stripboard and breadboard and includes a built-in USB FLASH programmer.               FEATURES NXP KL25Z Kinetis KL2x MCU (MKL25Z128VLK4) High-performance ARM® Cortex™-M0+ Core 48MHz, 16KB RAM, 128KB FLASH USB (Host/Device) SPI (2) I2C (2) UART (3) PWM (TPM) ...

Interfacing of Push Button With ATmega16

In this tutorial, we will learn how to interface a switch(push button) with ATMEGA16 using AVR studio. In the previous video, we learnt how to interface LEDs with ATMEGA16 using AVR studio. The push-button is a component that connects two points in a circuit when you press it. The example turns on an LED when you press the button. Here we have connected two push button to PORT C in  PC0 & PC1. And for LEDs connection please refer my previous blog. Components Required:- AVR Controller(Atmega16) LEDs Push Button Connecting Wires USBASP Programmer Dump the following code after connection  and select chip ATMEGA 16. #include<avr/io.h> #include<util/delay.h> void main()  {    DDRB=0b11111111;    int S1;    int S2;      while(1)    {     S1=PINC&0b00000001;     S2=PINC&0b00000010;     if(S1==0b00000001)     { ...

IoT Based LPG Gas Monitoring

MQ-5 Module(Overview ) In this tutorial, will learn, how to interface MQ-5 Module with Node Mcu(ESP8266). The Grove - Gas Sensor(MQ5) module is useful for gas leakage detection (in home and industry). It is suitable for detecting H2, LPG, CH4, CO, Alcohol. Due to its high sensitivity and fast response time, measurements can be taken as soon as possible. The sensitivity of the sensor can be adjusted by using the potentiometer. MQ-5 Module(backside) Components Required NodeMcu(ESP8266)  MQ-5 LPG SENSOR Module  Few male to female connecting wires  Breadboard  Follow the image below for circuit connection reference:- In this circuit, we have connected the A0 pin of the MQ-5 to the A0 pin of the NodeMcu module and D0 pin remain disconnected. After making the circuit dump the code given below:- // Karkhana Report // Analyse the volume of the gas using thingspeak.com // Hardware: NodeMCU,MQ-5 #include <ESP8266WiFi.h> String apiKey = "Ent...