Arduino – Tocando sons em um alto-falante – Sketch 02
Tocando sons em um alto-falante com Arduino
Neste artigo iremos criar um projeto simples mas muito interessante: iremos fazer com que o Arduíno toque sons de frequências diversas em um alto-falante (ou outro transdutor de áudio qualquer).
Para isso usaremos a função tone do Arduino. Essa função gera um sinal sonoro com uma frequência e duração ajustáveis, sendo que ajustaremos a frequência usando um potenciômetro e a duração via código.
Conectaremos o potenciômetro de tom ao pino de entrada analógica 0 (A0) do Arduino, e usaremos um outro potenciômetro para controlar o volume do som que será reproduzido no alto-falante. Confira a lista de componentes necessária e o esquema do circuito:
Lista de componentes:
- 1 Arduíno Uno1 Potenciômetro de 1KΩ
- 1 Potenciômetro de 10KΩ
- 1 Alto-falante de 8Ω (ou outro transdutor, como um buzzer)
Esquema do circuito:
Veja um desenho das conexões dos componentes ao Arduíno:
E, finalmente, o código que será utilizado:
const int pino_falante = 9; // Conectar falante ao pino 9 const int pot_freq = 0; // potenciômetro para ajuste de frequência - pino A0 void setup(){// Aqui não vai nada neste sketch} void loop(){ int ler_potenc = analogRead(pot_freq); // Ler entrada para ajuste de frequência // mapear os valores analógicos lidos para valores significativos: int frequencia = map(ler_potenc, 0, 1023, 100, 3000); // 100 Hz a 3 KHz int tempo = 300; //duração do tom, em ms tone(pino_falante, frequencia, tempo); // envia som ao falante delay(300); //pausa de 300ms }
Explicando o código
Vamos à explicação do código empregado.
Começamos declarando duas constantes, pino_falante, que servirá para ajustar o pino digital 9 para a conexão do alto-falante, e pot_freq, que determina que o pino analógico 0 será o local de conexão do potenciômetro de mudança de tom.
Na função setup() não precisamos ajustar nada neste sketch – mas ela tem de estar lá, mesmo que vazia.
Dentro da função principal do programa (loop) começamos por declarar uma variável de nome ler_potenc, a qual receberá o retorno da chamada da função analogRead, a qual lê o valor de tensão a partir do pino pot_freq (A0). Essa leitura será utilizada para determinar a frequência do tom a ser gerado.
Na sequência declaramos uma variável chamada frequencia, que receberá o retorno da função map. A função map é usada para mapear um par de valores (no caso, o intervalo de 0 a 1023) para outro par de valores mais significativos para o programa em questão (no caso, os valores de 100 a 3000). Lembre-se que a entrada analógica tem uma resolução de 10 bits, o que significa que ela pode discriminar 1024 valores distintos de tensão. Esses valores mapeados representarão as frequências que serão geradas posteriormente, na faixa de 100 a 3000 Hz.
Declaramos então a variável inteira tempo, que receberá um valor para ajustar o tempo de duração do tom executado, em milissegundos.
A função tone será usada para gerar o tom e enviá-lo ao pino digital pino_falante (9), onde está conectado o alto-falante. Essa função recebe três parâmetros: número do pino, frequência do som em Hertz e duração do tom em milissegundos. O terceiro parâmetro é opcional – se omitido, a função tocará o tom até que seja interrompida.
E para finalizar, adicionamos um intervalo entre os sons, de 300 milissegundos, com o uso da função delay. Você pode mudar esse valor à vontade.
É isso aí! Até o próximo projeto!
Olá, gostaria de saber como ligar o auto falante usando a linguagem Python, já utilizo ela no Arduíno, porém não sei a sintaxe para ligar o tone. Grato desde já!!
Na programação á um 1 erro, eu abri o programa colai, mas o programa diz que á
um erro a compilar.
E não me em dica onde está o erro.
Eu pus este código:
const int pino_falante = 9; // Conectar falante ao pino 9
const int pot_freq = 0; // potenciômetro para ajuste de frequência – pino A0
void setup(){// Aqui não vai nada neste sketch}
void loop(){
int ler_potenc = analogRead(pot_freq); // Ler entrada para ajuste de frequência
// mapear os valores analógicos lidos para valores significativos:
int frequencia = map(ler_potenc, 0, 1023, 100, 3000); // 100 Hz a 3 KHz
int tempo = 300; //duração do tom, em ms
tone(pino_falante, frequencia, tempo); // envia som ao falante
delay(300); //pausa de 300ms
}
e o erro foi este:
Arduino: 1.8.9 (Windows 10), Placa:”Arduino/Genuino Uno”
C:\Users\UTILIZ~1\AppData\Local\Temp\ccRcLqbh.ltrans0.ltrans.o: In function `main’:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined reference to `loop’
collect2.exe: error: ld returned 1 exit status
exit status 1
Erro ao compilar para a placa Arduino/Genuino Uno.
Este relatório teria mais informação com a
opção «Mostrar mensagens detalhadas durante a
compilação» seleccionada nas Preferências.
O que se passa?
grads pela sua atenção
Nome*
Carlos Montalvao