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:
Acionando alto-falante com Arduino

Veja um desenho das conexões dos componentes ao Arduíno:

Reproduzindo sons com Arduino

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!

 

Sobre Fábio dos Reis (1332 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

2 Comentários em Arduino – Tocando sons em um alto-falante – Sketch 02

  1. 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á!!

  2. Carlos Montalvao // 25/06/2019 em 10:52 // Responder

    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

Escreva um comentário

Seu e-mail não será divulgado


*