Nano Arduino
Piano
This project involves creating a simple piano using an Arduino Uno. It utilizes a set of push buttons to generate different tones corresponding to piano keys, showcasing how microcontrollers can simulate musical instruments through basic electronic components.
​
How It Works:
-
When you press a button, the corresponding pin goes LOW (only with INPUT_PULLUP logic).
-
The Nano maps each button to a musical note (C, D, E, F, G, A, B).
-
The tone() function sends a square wave of the right frequency to the buzzer, making it vibrate and produce sound.
Materials
To build a simple NANO Arduino Piano project with an Arduino Uno, you'll need the following materials:
Components:
​
1) Arduino Uno
-
The central control unit for the piano.
​
2) Push Buttons x 7
-
Several push buttons act as piano keys.
​
3) Active Piezo Buzzer
-
Generates sound when activated by button presses.​
​
4) Breadboard and Jumper Wires
-
For creating the circuit without soldering.
​
5) USB Cable (Type-A to Type-B)
-
To connect Arduino to a computer for programming and power.
Basic Setup


1) Connect the Piezo Buzzer:
VCC (middle pin) → Connects to 5V line of breadboard
GND → Connects to GND line of breadboard.
S → Connects to Pin 9
​
2) Setup the Push Buttons:
-
Connect one side of each push button to a separate digital pin on the Arduino (pins 2-8).
-
Connect the other side to GND (ground)
​
3) Power the Arduino:
-
Connect the Arduino to your computer using the USB cable for power and programming capabilities.
​
Software Setup
-
to set up which note you would like to use in the code section, here are the corresponding notes and their numerical value for the tone() function in Arduino:
​
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
​#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978


CODE BREAK-DOWN
int buttons[] = {2, 3, 4, 5, 6, 7, 8};
-
This line sets up an array named buttons that includes the pin numbers connected to the push buttons on the Arduino.
​
int buzzer = 9;
-
This assigns pin 9 to the variable buzzer, where the buzzer is connected on the Arduino.
​
int buttonState = 0;
-
Initializes buttonState to zero, a variable used to store the state of the buttons.
​
#define note1 523 // C5
#define note2 587 // D5
#define note3 659 // E5
#define note4 698 // F5
#define note5 784 // G5
#define note6 880 // A5
#define note7 988 // B5
-
Defines constants for musical note frequencies corresponding to the notes C5 through B5.
​
int notes[] = {note1, note2, note3, note4, note5, note6, note7};
-
Creates an array notes that holds the frequencies of the musical notes defined above.
​
void setup() {
-
Begins the setup function, configuring initial settings for the Arduino board.
​
for (int i = 0; i < 7; i++) { pinMode(buttons[i], INPUT_PULLUP); }
-
A loop in the setup function that sets each button pin as an input with a pull-up resistor.
​
pinMode(buzzer, OUTPUT);
-
Sets the buzzer pin as an output to control the buzzer.
​
void loop() {
-
Starts the loop function, continuously checking the state of each button and controlling the buzzer accordingly.
​
for (int i = 0; i < 7; i++) {
-
Begins a loop to check each button’s state.
​
buttonState = digitalRead(buttons[i]);
-
Reads the state of the current button in the loop and stores it in buttonState.
​
if (buttonState == LOW) {
-
Checks if the button is pressed (LOW because of the pull-up resistor).
​
tone(buzzer, notes[i], 200);
-
Plays the note corresponding to the pressed button for 200 milliseconds if the button is pressed.
​
delay(200);
-
Introduces a delay to ensure the note plays for the full duration.
​
noTone(buzzer);
-
Stops any ongoing tone on the buzzer to prepare for the next note or button press.
