Manual
do
Maker
.
com
Para encerrar os posts de buzzer, vamos fazer uma sirene com Arduino, que utilizaremos nos exemplos com sensores, onde tocaremos esse som no buzzer para quando houver um alarme.
O som da sirene como se pode reparar, não é linear, ou seja, ouve-se uma escala larga de tons de grave a agudo e vice-versa. Com isso, podemos concluir que o som faz ondas, logo, para gerarmos tal onda utilizaremos a função matemática sin()
(seno) e o pi, para transformar os graus em raio e gerar a frequência.
Temos um circulo perfeito e a partir do centro pegamos um ângulo - no exemplo, 30º. O seno do ângulo é a linha pontilha vertical que vai até o limite do ângulo - no exemplo, até o extremo do círculo. O coseno do ângulo é a pontilhada horizontal, chamada obscissa (nome horroroso, nem sei se é assim que se escreve).
A fórmula básica para seno ou coseno é:2senX + 2cosX = 1
(graus) 0,30, 45 ,60, 90
(seno) 0, 1/2, raiz(2/2), raiz(3/2), 1
(coseno) 1,raiz(3/2), raiz(2/2), raiz(1/2), 1
Como se pode notar, os valores de coseno são a inversão dos valores de seno, então é muito fácil decorar, mas se quiser fazer os cálculos para outros ângulos, deixe-me discorrer a respeito.
O seno e cosseno são calculados a partir de um triângulo retângulo.
Um triângulo retângulo tem um ângulo de 90 graus e um ângulo agudo. A face oposta ao ângulo de 90 graus é chamado 'hipotenusa' e as outras duas faces são chamadas de 'catetos'. Só pra ficar bem completa a informação, a soma dos quadrados dos catetos é igual ao quadrado da hipotenusa:
b^{2}+c^{2} = a^{2}
Para calcular o seno e cosseno, primeiramente é necessário saber mais uma coisinha; a partir do ângulo agudo, a reta aposta é o seno. A reta que faz parte do ângulo agudo (adjacente à hipoternusa) é o cosseno.
O cálculo do seno então é:
sin = dfrac{b}{a}
E o cosseno:
cos = dfrac{c}{a}
A tangente é a divisão de um cateto pelo outro, em relação ao ângulo escolhido. Fim. Dá pra ir muito além dessa teoria e no exemplo usamos apenas o primeiro quadrante. Agora vem a parte legal; não precisaremos fazer essas contas utilizando a função sin para fazer a sirene com Arduino! Para fazer o som da sirene, apenas faremos um loop de 0 a 180 (representando graus) de forma que teremos uma onda que vai de -1 a 1. Para converter os graus em raio, utiliza-se o pi com uma precisão de 4 decimais. A fórmula do valor do sinal fica assim:
sin(x\*(3.1412/180)
Para o valor do tom dá-se uma 'ajeitada':toneVal = 2000 + (sin(x*(3.1412/180))*100)
Com o setup configurado para saída no pino 8 do Arduino, o código fica assim:
float sinVal;
int toneVal;
void setup(){
pinMode(8,OUTPUT);
}
void loop(){
for (int x=0;x<180;x++){
//converte graus em radianos
sinVal = (sin(x*(3.1412/180)));
//agora gera uma frequencia
toneVal = 2000+(int(sinVal*100));
//toca o valor no buzzer
tone(8,toneVal);
//atraso de 2ms e gera novo tom
delay(2);
}
}
Está pronta a sirene!
Vídeo da sirene com Arduino.
Inscreva-se no nosso canal Manual do Maker Brasil no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.