Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Reproduzindo som com o Arduino

Imprimir
Avaliação do Usuário: / 17
PiorMelhor 

 

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

E

Mi

F

G

Sol

A

B

 

 

E suas respectivas frequências e durações:

 

Nota

Nome

Frequência

Duração

C

261 Hz

1915 ms

D

294 Hz

1700 ms

E

Mi

329 Hz

1519 ms

F

349 Hz

1432 ms

G

Sol

392 Hz

1275 ms

A

440 Hz

1136 ms

B

523 Hz

956 ms

 

 

Com o código abaixo podemos percorrer todas as notas:

 

// 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);
}

 

 

 

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:


 
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);
}


 

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.

 

 

 

Comentários  

 
0 #8 Perfeito!!!Thiago Condé 14-10-2016 10:49
Parabéns pelo tutorial!
tenho um filho, e queria construir um brinquedo, pensei em um teclado musical! Minha ideia seria colocar as notas musicais e um led, colocar a musica no cartao de memoria, tipo um guitar hero. Só que a musica so vai se seguir se cada nota for apertada! Mas nao entendo nada de musica!! mas sei como programar precisava apenas converter as musicas em notas e tempos em um texto e o programa faz o resto.. tem alguma ideia de como posso faazer?
Citar
 
 
0 #7 Res: maksudeFernando Bryan Frizzarin 03-03-2016 17:14
Veja em http://www.seucurso.com.br/index.php?option=com_content&view=article&id=386:reproduzindo-som-com-seu-arduino&catid=901:arduino&Itemid=65
Citar
 
 
+1 #6 legal !!!maksude 03-03-2016 16:41
Amigão queria saber como faço para gravar uma fala que se comunicara com um sensor de presença ou seja ao presenciar algo ele fale valeu obrigadooo
Citar
 
 
0 #5 Eureka!Edson Panis Kaseker 30-04-2015 22:30
Estava querendo aprender justamente isso! Valeu!!! Obrigado!
Citar
 
 
+1 #4 Pequena correçãoLucas Martins 10-01-2014 23:41
Gostei bastante da dica,
porém um detalhe pode mudar o som resultante, você colocou o vetor de tempos como int, porém colocou numeros reais nele (1.5, 0.5, 0.125) o que vai fazer o c++ converter para 2, 1 e 0 respectivamente , se colocar como um vetor de float acho que o som sai ainda melhor.
Citar
 
 
+2 #3 Ajudou muitoLucas Gonçalves 13-09-2013 19:34
Obrigado, vocês ajudaram me exatamente com o que eu precisava *-*
Citar
 
 
+1 #2 Tamanho do falanteFernando Bryan Frizzarin 21-01-2013 14:58
Diemesleno, sim, falantes grandes vão queimar o Arduino! Diria que falantes de até 1W com 8 ohms vão direto como no tutorial, acima disso é necessário usar um circuito de amplificador.
Citar
 
 
+4 #1 Tamanho do falanteDiemesleno Souza Car 21-01-2013 11:42
Olá Fernando,

Legal o tutorial. Mas qual o tamanho do falante? Se ele for muito grande pode queimar a saída do arduino?

abraço.
Citar
 

Adicionar comentário


Código de segurança
Atualizar

You are here: