Que montar uma caixinha de música? Ou montar um despertador? Ou até mesmo colocar aquela musiquinha tradicional em um PABX usando o Arduino? Pois bem, com muito pouco é possível tudo isso!
Você vai precisar de:
Um Arduino:
Um alto falante (speaker):
Ligue o negativo do seu falante ao GND do Arduino e o positivo ao pino 3:
Na linguagem C para Arduino existe o comando tune(), com ele é possível enviar uma frequência por um determinado tempo para um dos pinos PWM (pulse with modulation) existentes. A sintaxe é:
tone(pino,frequência,duração);
ou
tone(pino,frequência);
Importante também é saber que ao enviar um novo tom para o pino o tom anterior é cessado e que também há um comando que faz com que o som pare, cuja sintaxe é:
noTone(pino);
Sabendo que existem 7 notas musicais básicas:
C |
Dó |
D |
Ré |
E |
Mi |
F |
Fá |
G |
Sol |
A |
Lá |
B |
Sí |
E suas respectivas frequências e durações:
Nota |
Nome |
Frequência |
Duração |
C |
Dó |
261 Hz |
1915 ms |
D |
Ré |
294 Hz |
1700 ms |
E |
Mi |
329 Hz |
1519 ms |
F |
Fá |
349 Hz |
1432 ms |
G |
Sol |
392 Hz |
1275 ms |
A |
Lá |
440 Hz |
1136 ms |
B |
Sí |
523 Hz |
956 ms |
Com o código abaixo podemos percorrer todas as notas:
{code}
// Constantes com as notas
#define DO 262
#define RE 294
#define MI 330
#define FA 349
#define SOL 392
#define LA 440
#define SI 523
void setup() {
pinMode(3,OUTPUT);
pinMode(13,OUTPUT);
}
void loop() {
digitalWrite(13,HIGH);
tone(3,DO);
delay(500);
tone(3,RE);
delay(500);
tone(3,MI);
delay(500);
tone(3,FA);
delay(500);
tone(3,SOL);
delay(500);
tone(3,LA);
delay(500);
noTone(3);
digitalWrite(13,LOW);
delay(5000);
}
{/code}
{youtube}0tP-zRhaSu4{/youtube}
Com um pouco mais de aprimoramento podemos até arriscar algo como Ode para Joy (partitura obtida em http://www.music-scores.com/midi.php?sheetmusic=Beethoven_Ode_to_Joy_easy):
O código fonte:
{code}
void setup() {
pinMode(3,OUTPUT);
}
void loop() {
int C = 262, D = 294, E = 330, F = 349, G = 392, A = 440, B = 523;
int P = 0;
int i;
int ode[] = {
E,E,F,G,G,F,E,D,C,C,D,E,E,D,P,D,P,
E,E,F,G,G,F,E,D,C,C,D,E,D,C,P,C,P,
D,D,E,C,D,E,P,F,E,C,D,E,P,F,E,D,C,D,P,
E,E,D,G,G,F,E,D,C,C,D,E,D,C,P,C };
int tempo[] = {
1,1,1,1,1,1,1,1,1,1,1,1,1.5,1,.5,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1.5,1,.5,1,1,
1,1,1,1,1,1,.5,1,1,1,1,1,.5,1,1.5,1,.5,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1.5,.125,1,1};
for(i=0;i<sizeof(ode)/2;i++) {
if(ode[i] != 0) tone(3,ode[i]); else noTone(3);
delay(tempo[i] * 500);
noTone(3);
}
noTone(3);
delay(10000);
}
{/code}
Confesso que não ficou um clássico do piano, mas dá para entender como se deve fazer usando-se uma partitura e o conceito de notas semibreves, mínimas, semínimas, colcheias e etc.
{youtube}BIcf8jHmgUM{/youtube}