04 junho 2013

Sons no Arduino

Você sabia que é possível gerar sons a partir do Arduino ?

Não só é possível, como é bem simples: basta usar a função "tone". Perfeito para quem, ao contrário deste que vos escreve, tem intimidade com a música.

A função tone tem o seguinte formato :

tone(pino, frequencia, duração)

onde a frequencia do tom é setada em hertz, e a duração, em milisegundos.

Para efeito de testes, usei um pequeno buzzer, desses que se usam em placa-mãe de computador, como esse abaixo :

sons no Arduino

A ligação é feita com o pino 10 do Arduino ligado ao "+" do buzzer/falante, e o outro pino do buzzer ligado ao GND :

Circuito Arduino e Buzzer
 Para testar, carregue o programa abaixo e ouça uma linda melodia :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//Programa : Som no Arduino - Do Re Mi
//Autor : Arduino e Cia

void setup() 
{
pinMode(10,OUTPUT); //Pino do buzzer
}

void loop()
{
    delay(2000);
    tone(10,262,200); //DO
    delay(200);
    tone(10,294,300); //RE
    delay(200);
    tone(10,330,300); //MI
    delay(200);
    tone(10,349,300); //FA
    delay(300);
    tone(10,349,300); //FA
    delay(300);
    tone(10,349,300); //FA
    delay(300);
    tone(10,262,100); //DO
    delay(200);
    tone(10,294,300); //RE
    delay(200);   
    tone(10,262,100); //DO
    delay(200);
    tone(10,294,300); //RE
    delay(300);
    tone(10,294,300); //RE
    delay(300);
    tone(10,294,300); //RE
    delay(300);
    tone(10,262,200); //DO
    delay(200);
    tone(10,392,200); //SOL
    delay(200);
    tone(10,349,200); //FA
    delay(200);
    tone(10,330,300); //MI
    delay(300);
    tone(10,330,300); //MI
    delay(300);
    tone(10,330,300); //MI
    delay(300);
    tone(10,262,200); //DO
    delay(200);
    tone(10,294,300); //RE
    delay(200);
    tone(10,330,300); //MI
    delay(200);
    tone(10,349,300); //FA
    delay(300);
    tone(10,349,300); //FA
    delay(300);
    tone(10,349,300); //FA
    delay(300);
}

Depois dessa aula de música, que tal uma sirene de policia ? Use este programa :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//Programa : Som no Arduino - Sirene
//Autor : Arduino e Cia

#define tempo 10
int frequencia = 0;
int Pinofalante = 10;

void setup()
{
  pinMode(Pinofalante,OUTPUT); //Pino do buzzer
}

void loop()
{
  for (frequencia = 150; frequencia < 1800; frequencia += 1) 
  {
    tone(Pinofalante, frequencia, tempo); 
    delay(1);
  }
  for (frequencia = 1800; frequencia > 150; frequencia -= 1) 
  {
    tone(Pinofalante, frequencia, tempo); 
    delay(1);
  }

}

Leia também o artigo NewTone - Alternativa à biblioteca Tone do Arduino, onde falo sobre problemas de conflito da biblioteca tone padrão do Arduino com outras bibliotecas, e como resolver esse problema.

Até a próxima !



14 comentários:

  1. muito bom projeto. tem algum email para contato?

    ResponderExcluir
    Respostas
    1. Boa noite e obrigado ! Pode me encontrar no adilsonth@gmail.com. Abraço.

      Excluir
  2. Boa noite! Comprei um módulo destes, mas não consigo alterar os tons, fica sempre no mesmo agudo constante, estou errando algo na hora da programação?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Creio que não. você testou com o programa do post ? Veja também o post sobre a biblioteca Newtone, vale a pena testar e ver se o problema persiste.

      Abraço !

      Excluir
    2. Você provavelmente comprou um buzzer ativo (com circuito de oscilação já embutido). Com esses não tem como emitir som em diferentes frequências.

      Excluir
  3. Parabéns amigo grande postagem.

    Poderia me dizer que música é a do primeiro código, já devo ter escutado ela em algum lugar.

    Fico no aguardo. Valeu.

    ResponderExcluir
    Respostas
    1. Valeu ! rs.

      Vou pesquisar e te falo. Já ouvi essa música em alguma lugar. :-)

      Abraço !

      Excluir
    2. Esta musica chama-se "Pastorzinho"

      Excluir
  4. tem como ele falar palavras pré programada. tipo eu quero q ele fala CASA, mais só quando eu mandar um sinal especifico em algum terminal. tem como?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Nesse caso específico eu recomento este módulo: http://www.arduinoecia.com.br/2015/06/modulo-mp3-wtv020-sd-arduino.html

      Abraço!

      Excluir
  5. Bom dia!

    Eu fiz a programação para o Arduino falar uma frase gravada em arquivo .WAV e agora gostaria de usar o sensor ultrasonica para que quando um objeto passasse ele falava esta frase. Porém não consegui ligar os codigos do sensor ultrasonico com o do arquivo .WAV

    Poderia me ajudar.

    ResponderExcluir