Controlando um Sonorizador Piezoelétrico sem a Função tone() com Potenciômetro no Arduino

 

Controlando um Sonorizador Piezoelétrico sem a Função tone() com Potenciômetro no Arduino

Introdução

Neste projeto, vamos explorar como controlar um sonorizador piezoelétrico (buzzer) sem utilizar a função tone(), criando um sinal PWM manualmente para gerar diferentes frequências sonoras. Um potenciômetro será usado para ajustar a frequência, conectado à porta analógica A5, enquanto o buzzer será ligado à porta digital 9 (PWM). Este projeto é importante para entender geração de sinais sonoros, modulação por largura de pulso (PWM) e leitura de valores analógicos no Arduino.


Materiais Necessários

  • Arduino (Uno, Nano ou similar)

  • 1 Buzzer piezoelétrico (ou alto-falante pequeno)

  • 1 Potenciômetro (10kΩ)

  • 1 Resistor (220Ω, opcional para proteção)

  • Protoboard e jumpers


Montagem do Circuito

  1. Buzzer:

    • Conecte o terminal positivo (+) ao pino digital 9 (PWM).

    • Conecte o terminal negativo (-) ao GND.

    • (Opcional) Use um resistor em série para limitar a corrente.

  2. Potenciômetro:

    • Conecte o terminal central ao pino analógico A5.

    • Conecte um terminal externo ao +5V e o outro ao GND.




Programação no Arduino

Como não usaremos a função tone(), vamos gerar um sinal PWM manualmente usando digitalWrite() e delayMicroseconds() para controlar a frequência do buzzer. O potenciômetro ajustará a frequência em tempo real.

Código Completo

cpp
Copy
Download
const int buzzerPin = 9;      // Buzzer no pino 9 (PWM)
const int potPin = A5;        // Potenciômetro no pino A5

void setup() {
  pinMode(buzzerPin, OUTPUT); // Configura o buzzer como saída
}

void loop() {
  int potValue = analogRead(potPin); // Lê o valor do potenciômetro (0-1023)
  
  // Mapeia o valor do potenciômetro para uma frequência (50Hz a 5kHz)
  int frequency = map(potValue, 0, 1023, 50, 5000); 
  
  // Calcula o período em microssegundos (T = 1/f)
  int period = 1000000 / frequency; 
  
  // Gera um sinal PWM manual (50% duty cycle)
  digitalWrite(buzzerPin, HIGH);
  delayMicroseconds(period / 2);
  digitalWrite(buzzerPin, LOW);
  delayMicroseconds(period / 2);
}

Funcionamento do Projeto

  1. Leitura do Potenciômetro:

    • O valor lido (0-1023) é mapeado para uma faixa de frequência audível (50Hz a 5kHz).

  2. Geração de Frequência Manual:

    • O sinal é criado alternando o pino entre HIGH e LOW com um delay proporcional à frequência desejada.

    • Exemplo:

      • Se frequency = 1000Hz → period = 1000µs (500µs ligado, 500µs desligado).

  3. Controle em Tempo Real:

    • Girando o potenciômetro, o usuário altera a frequência instantaneamente.


Importância do Projeto

Este projeto é fundamental para o aprendizado em Arduino e eletrônica porque:

✅ Ensina a gerar sinais PWM manualmente, entendendo o princípio por trás da função tone().
✅ Aprofunda o conhecimento em temporização com delayMicroseconds().
✅ Mostra a relação entre frequência e período, conceito essencial para síntese sonora e comunicação digital.
✅ Introduz o uso de potenciômetros para controle analógico de parâmetros.
✅ Pode ser aplicado em projetos avançados, como:

  • Sintetizadores de áudio simples.

  • Alarmes com frequência ajustável.

  • Sistemas de feedback sonoro em robótica.


Expansões Possíveis

  • Adicionar um segundo potenciômetro para controlar a duração do som.

  • Implementar melodias simples usando um array de frequências.

  • Usar um sensor (ex: LDR) no lugar do potenciômetro para criar um theremin básico.


Conclusão

Este projeto demonstra como controlar um buzzer sem a função tone(), oferecendo um entendimento mais profundo de geração de sinais e PWM. Ele é ideal para quem deseja ir além das funções prontas do Arduino e explorar a eletrônica de forma mais granular.

Experimente modificar a faixa de frequências ou adicionar novos controles! 🎛️

Comentários

Postagens mais visitadas