Você sabia que é possível gerar sons a partir do Arduino? Isso é muito fácil de fazer usando um buzzer.
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.
Você pode utilizar essa função do Arduino para criar sistemas de avisos e alarmes, usar em brinquedos, jogos, máquinas e explorar outras possibilidades, em conjunto com sensores, módulos e atuadores.
Sons no Arduino com a função TONE
Na programação do Arduino a função tone é responsável por comandar a geração de sons, e esse comando tem o seguinte formato:
tone(pino, frequencia, duração)
onde a frequência 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:
A ligação é feita com o pino 10 do Arduino ligado ao positivo (+) do buzzer/falante, e o outro pino do buzzer ligado ao GND:
Apesar de usarmos nos testes uma placa Arduino Uno, o circuito não funciona apenas nessa placa, funcinando também com outras placas da linha como Mega e Nano.
Para testar, carregue o programa abaixo e ouça uma linda melodia. Basicamente temos as notas musicais (do, re, mi…) e vamos alternando o uso dessas notas variando a duração de cada uma. Lembrando que o valor “10” no comando tone se refere ao pino onde está conectado o buzzer:
//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, que aumenta e diminui a frequência do som, criando o efeito que precisamos:
//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); } }
Se você curtiu esse post sobre Sons no Arduino, leia também o artigo NewTone – Alternativa à biblioteca Tone do Arduino.
Nele falo sobre problemas de conflito da biblioteca tone padrão do Arduino com outras bibliotecas, e como resolver esse problema.
Confira aqui no Arduino e Cia outros posts não só sobre Arduino, mas também sobre Raspberry Pi, ESP8266 e ESP32.