Voltando para as sirenes, você acha difícil ouvir o som das sirenes nas ruas?
Então, a polícia de Nova York acha que sim. Para entender a situação deles, imagine uma situação na qual você está distraído enquanto dirige com som alto e falando no celular. Além desse comportamento ser ilegal, você pode não ouvir a sirene das ambulâncias. Para contornar o problema, a polícia de Nova York está implantando uma tecnologia chamada “The Rumbler”. Com esse novo projeto, as sirene vão, além do barulho, emitir “sons” que vão “chacoalhar” o veículo e o motorista, fazendo com que elas sejam literalmente sentidas. De acordo com os responsáveis, as vibrações podem ser notadas a uma distância de até 60 metros, mesmo com as janelas do carro fechadas. Esse novo sistema já está recebendo críticas, já que pode assustar os motoristas as pessoas que perto de de rodovias em que o carros de policia passam.
Nessa aula, vamos ver como criar sons com o Arduino utilizando um buzzer. Esse buzzer também é chamado de transdutor piezoelétrico. Os buzzers funcionam transformando a energia elétrica do Arduino em vibrações que geram som. Os auto falantes convencionais funcionam da mesma forma. O som que ouvimos é a vibração de partículas no ar. Nossos ouvidos captam esse som e transforma em impulsos nervosos para o cérebro interpretar. Uma das características que todo tem, junto com o volume, é a frequência. Nosso corpo consegue entender frequências de 20 Hz a 20.000 Hz. Quanto mais próximo de 20, chamamos de sons graves. Se a frequência está mais próxima de 20.000 Hz, denominamos esses sons de agudos. Não conseguimos ouvir sons abaixo de 20 Hz e acima de 20.000 Hz, mas chamamos esses sons de infrassom e ultrassom, respectivamente.
Na imagem acima, temos um buzzer típico encontrado no mercado de produtos eletrônicos Na imagem abaixo temos o buzzer encapsulado. Os dois são iguais em termos de funcionamento. Então, a única diferença entre eles é estético.
Vamos precisar de:
- Arduino
- Protoboard
- Buzzer piezoelétrico encapsulado
- LEDs de diferentes cores
- 4 resistores de 220 Ω
Montagem Prática
Como não é possível ouvir o buzzer tocando através do simulador, vamos partir diretamente para a construção do circuito simples apenas com a presença do Buzzer e o Arduino. Para isso, monte o circuito conforme a figura abaixo.
É na programação onde vamos determinar os sons que o buzzer vai emitir. No código abaixo escolhemos tocar todas as frequências sonoras fundamentais. Para isso, usamos a função “tone (pino, frequência)”. Fique a vontade para mudar as frequências do código e ouvir os mais variados sons. Lembre-se que nós, humanos, só podemos ouvir sons com frequência entre 20 Hz e 20.000 Hz.
void setup() { pinMode(3,OUTPUT); } void loop() { tone(3,440); // Do delay (150); tone(3,494); // Re delay (150); tone(3,523); // Mi delay (150); tone(3,587); // Fa delay (150); tone(3,659); // Sol delay (150); tone(3,698); // La delay (150); tone(3,784); // Si delay (150); }
- Linha 2: Definimos o pino 3 como saída.
- Linha 6: Emite som com 440 Hz de frequência no pino 3.
- Linha 8: Emite som com 494 Hz de frequência no pino 3.
- Linha 10: Emite som com 523 Hz de frequência no pino 3.
- Linha 12: Emite som com 587 Hz de frequência no pino 3.
- Linha 14: Emite som com 659 Hz de frequência no pino 3.
- Linha 16: Emite som com 698 Hz de frequência no pino 3.
- Linha 18: Emite som com 784 Hz de frequência no pino 3.
Sirene de polícia
Para programar a sirene de polícia, precisamos que frequência varie do agudo para o grave e vice-versa. Para isso, construímos um loop para alterar o valor de frequência até o máximo desejado e depois construímos outro loop para variar esse mesmo valor até o mínimo desejado.
int freq = 0; void setup(){ pinMode(3,OUTPUT); //Pino do buzzer } void loop(){ for (freq = 2000; freq < 3000; freq++) { tone(3, freq); delay(2); } for (freq = 3000; freq > 2000; freq--) { tone(3, freq); delay(2); } }
- Linha 1: Cria a variável “freq” do tipo inteiro que armazenará o valor de frequência.
- Linha 4: Define o pino 3 como saída.
- Linha 9: A variável “freq” começa em 2000, vai até 3000 e é incrementada uma unidade por vez.
- Linha 11: Emite o Som no pino 3 e na frequência do valor armazenado em “freq”.
- Linha 14: A variável “freq” começa em 3000, vai até 2000 e é decrementada uma unidade por vez.
- Linha 16: Emite o Som no pino 3 e na frequência do valor armazenado em “freq”.
Para saber mais:
Perceba que o valor armazenado em “freq” varia de 2000 a 3000, ou seja, a frequência emitida pelo buzzer vai variar de 2000 Hz até 3000 Hz. Então, podemos usar a função seno para representar essa oscilação nos valores de frequência. No código abaixo, fizemos a mesma sirene do exemplo anterior, mas usando a função seno.
void setup(){ pinMode(3, OUTPUT); } void loop(){ int freq = 0; float seno = 0; for(int i = 0; i < 180; i++){ //converte graus para radiando e depois obtém o valor do seno seno = sin(i*3.1416/180); // Com base no valor do Seno, criamos uma frequencia entre 2000 Hz e 3000Hz freq = 2000 + (int(seno*1000)); tone(3,freq); delay(2); } } // Crédito para Allan Mota do site "vida de silício".
- Linha 2: Declaramos o pino 3 como saída.
- Linhas 7 e 8: Criamos a variável “freq” do tipo “int” e inicializamos com Zero. Criamos a variável “seno” do tipo “float” e iniciamos com Zero.
- Linha 10: Criamos a variável “i” e inicializamos com Zero. Essa variável vai de Zero a 180 sendo incrementada em uma unidade a cada iteração.
- Linha 12: Transformamos o valor de “i” em radianos e calculamos o seno desse valor. Então, colocamos esse valor na variável “Seno”.
- Linha 14: colocamos na variável “freq” o valor de frequência desejado. Esse valor vai variar de 2000 até 3000, já que a variável “seno” tem, necessariamente, um valor entre o e 1 e estamos multiplicando esse valor por 1000. Em seguida, como a variável “freq” é do tipo “int” e a variável “seno” é do tipo “float”, temos que transformar o resultado da multiplicação “seno*1000” em um valor inteiro. Por isso, colocamos a multiplicação em parenteses e adicionamos “int” ao lado.
- Linha 15: Emite som com um valor de frequência armazenado dentro da variável “freq” no pino 3.
Sirene de Policia 2.0
Agora que sabemos fazer sons no Buzzer, refaça o circuito da sirene na segunda aula e adicione o buzzer. Abaixo temos o passo a passo da forma como devemos construir esse circuito. Na imagem 1 temos os componentes necessários para construção desse circuito e na imagem seguinte mostramos a montagem do buzzer na protoboard. A imagem 3 representa as conexões necessárias para ligar os LEDs.
Na programação, basta adicionar o código da segunda aula no código dos exemplos acima. No entanto, precisamos alterar o tempo em que o LED ficará ligado. Por isso, mudamos de 200 milissegundos para 15 milissegundos para que os LEDs pisquem mais rápido na linha 17.
void setup() { for(int i= 8;i < 12; i++){ pinMode(i, OUTPUT); } pinMode(3, OUTPUT); } void loop() { int freq = 0; float seno = 0; for(int i = 8; i <= 10; i++ ){ digitalWrite(i, HIGH); digitalWrite(i+1, HIGH); delay(15);// Espera 15 milisegundos digitalWrite(i, LOW); digitalWrite(i+1, LOW); } for(int i = 0; i < 180; i++){ //converte de graus para radianos e depois obtém o valor do seno seno = sin(i*3.1416/180); // Com base no valor do Seno, criamos uma frequencia entre 2000 Hz e 3000Hz freq = 2000 + (int(seno*1000)); tone(3,freq); delay(2); } }