On this tutorial you will see how to use the tone function to play monophonic music.
Materials List:
1 x Arduino Uno R3
1 x Breadboard
1 x Speaker 8 Ω / 0,25 W
1 x Rotary Potentiometer 10 KΩ
1 x Capacitor 100μF / 25 V
Jumpers
How it works:
The syntax of tone function is:
tone (pin, frequency, duration);
The parameters are:
pin: the pin on which to generate the tone
frequency: the frequency of the tone in hertz - unsigned int
duration: the duration of the tone in milliseconds (optional) - unsigned long
The tone function generates a square wave of the specified frequency on a pin during the time of duration field (optional).
Each musical note is determined by a frequency and you can see on table below the frequencies:
Based on this table and pentagram above the archive pitches.h (of toneMelody example) was created.
The array melody[] is used to store the notes, using names to correspond to the note and frequency.
For example, the frequency of note A4 (A for "La" and 4 for the 4th octave) is 440 Hz in the array it will be called NOTE_A4.
The musical score represents the notes and the duration by symbols on the pentagram.
Below you see clef-G and clef-F.
The duration is determined by the following symbols:
In array noteDurations[], the durations were represented by numbers.See table below.
Symbol |
Value in array |
whole note |
1 |
half note |
2 |
quarter note |
4 |
eighth note |
8 |
sixteenth note |
16 |
thirty-second note |
32 |
sixty-fourth note |
64 |
The potentiometer was used to control volume and the capacitor as coupling.
Below you see the circuit on Fritzing.
The Sketch:
Verify circuit, and upload Sketch to Arduino:
#include "pitches.h"
#define NO_SOUND 0 // make the rests in music
//array of notes
int melody[] = {
/*NOTE_G4,NOTE_G4,NO_SOUND,NOTE_G4,NOTE_G4,NO_SOUND,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,
NOTE_B3,NOTE_G3,NOTE_C4,NOTE_G3,NOTE_CS4,NOTE_G3,NOTE_C4,NOTE_G3,NOTE_B3,NOTE_G3,NOTE_C4,NOTE_G3,NOTE_CS4,NOTE_G3,NOTE_C4,NOTE_G3,
NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_E4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_E4,NOTE_E4,NOTE_E4,*/
//Introduction
NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_E4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_E4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_E4,NOTE_E4,NOTE_E4,
NOTE_DS5,NOTE_D5,NOTE_B4,NOTE_A4,NOTE_B4,
NOTE_E4,NOTE_G4,NOTE_DS5,NOTE_D5,NOTE_G4,NOTE_B4,
NOTE_B4,NOTE_FS5,NOTE_F5,NOTE_B4,NOTE_D5,NOTE_AS5,
NOTE_A5,NOTE_F5,NOTE_A5,NOTE_DS6,NOTE_D6,NO_SOUND
};
// note duration: 1 = whole note, 2 = half note, 4 = quarter note, 8 = eighth note, etc.
int noteDurations[] = {
/*8,8,2,8,8,2,16,8,16,8,8,
2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,
8,16,16,8,4,8,8,8,
8,16,16,8,4,8,8,8,*/
8,16,16,8,4,8,8,8,
8,16,16,8,4,8,8,8,
8,16,16,8,4,8,8,8,
8,16,16,8,4,8,8,8,
8,2,8,8,1,
8,4,8,4,8,8,
8,8,4,8,4,8,
4,8,4,8,3
};
int pace = 1450; // change pace of music("speedy")
void setup() {
for (int Note = 0; Note <54; Note++) {//counter of Notes (54 limit the array)
int duration = pace/noteDurations[Note];//Adjust duration with the pace of music
tone(8, melody[Note],duration); //Play note
// to distinguish the notes, set a minimum time between them.
delay(duration*1.2);
}
}
void loop() {
//to repeat song, push reset button.
}
//End of Sketch
Let's listen James Bond!!!
Reference:
http://arduino.cc/en/Tutorial/tone
http://en.wikipedia.org/wiki/Note_value
http://en.wikipedia.org/wiki/Clef
Comment by نهاد عبدالله حسين السلمان on January 14, 2013 at 4:31am
Comment by نهاد عبدالله حسين السلمان on January 14, 2013 at 4:43am You could get this project file
Comment
Jonathan Dean replied to abhishek yadav's discussion how to record time between two events using arduion
Jonathan Dean replied to Jonathan Dean's discussion Two LCDs in Parallel?
Christian Rheinnecker replied to abhishek yadav's discussion how to record time between two events using arduion
Christian Rheinnecker posted a video
GarageLab posted a blog post
GarageLab posted a blog post
abhishek yadav posted a discussion
Danny Vigo commented on Fernando Gil's blog post Tutorial: Servomotor + Arduino
Danny Vigo replied to SATYA NARAYANA REDDY NIMMAKAYALA's discussion 5 stepper motor control code
Christian Rheinnecker posted a status
Christian Rheinnecker posted a video© 2013 Created by Marcelo Rodrigues.

You need to be a member of GarageLab (arduino, electronics, robotics, hacking) to add comments!
Join GarageLab (arduino, electronics, robotics, hacking)