#14Intermediário

Ajuste de frequência com buzzer

4.6(69)
118 concluído
Ajuste de frequência com buzzer
Você controla o som de um buzzer com quatro botões: um inicia o som, outro o interrompe e os outros dois o deixam mais agudo ou mais grave. Mantenha pressionado o botão de aumentar ou diminuir, e o tom muda aos poucos, como uma sirene. Você descobre com os próprios ouvidos por que alguns sons são agudos e outros, graves.

Vídeo

Esquema do circuito

Ajuste de frequência com buzzer - Circuit

Código-fonte

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Ajuste de frequência com buzzer
4// ─────────────────────────────────────────
5// Quatro botões controlam o buzzer: Liga, Desliga, Frequência + e
6// Frequência -. Ao apertar Liga, o buzzer toca na frequência atual. Os
7// botões + e - mudam a frequência em 50 Hz a cada toque (começando em 300
8// Hz); a frequência fica entre 50-5000 Hz.
9//
10// Pinos:
11//   D8 -> Buzzer + (outra perna em GND)
12//   D7 -> Botão Liga
13//   D6 -> Botão Desliga
14//   D5 -> Botão Frequência +
15//   D4 -> Botão Frequência -
16//   Outra perna em 5V, pino em GND via 220 ohm
17
18int buzzerPin = 8;     // Pino de saída do buzzer
19int btnOn = 7;         // Botão Liga
20int btnOff = 6;        // Botão Desliga
21int btnIncrease = 5;   // Botão Frequência +
22int btnDecrease = 4;   // Botão Frequência -
23int frequency = 300;   // Frequência inicial (Hz)
24int state = 0;         // 1 = 1 = som ligado, 0 = desligado
25
26void setup() {
27  // Botões como entradas, com pull-downs externos
28  pinMode(btnOn, INPUT);
29  pinMode(btnOff, INPUT);
30  pinMode(btnIncrease, INPUT);
31  pinMode(btnDecrease, INPUT);
32}
33
34void loop() {
35  if (digitalRead(btnOn)) {          // Liga: inicia o som
36    state = 1;
37  }
38
39  if (digitalRead(btnOff)) {         // Desliga: para o som
40    state = 0;
41  }
42
43  if (digitalRead(btnIncrease)) {    // Aumenta a frequência em 50 Hz
44    frequency = frequency + 50;
45    delay(100);                      // Avança devagar enquanto está pressionado
46  }
47
48  if (digitalRead(btnDecrease)) {    // Diminui a frequência em 50 Hz
49    frequency = frequency - 50;
50    delay(100);
51  }
52
53  frequency = constrain(frequency, 50, 5000);   // Mantém entre 50-5000 Hz
54
55  // Toca ou silencia o buzzer conforme state
56  if (state == 1) {
57    tone(buzzerPin, frequency);
58  } else {
59    noTone(buzzerPin);
60  }
61}
62

Perguntas frequentes

Por que são usados resistores de 220 Ω nos botões?

Este código lê os botões no modo INPUT com resistores pull-down externos. Cada resistor conecta a entrada correspondente a GND para que a leitura seja LOW quando o botão é solto. Se o resistor de 220 Ω da lista for usado para isso em um circuito alimentado com 5 V, passarão cerca de 23 mA por ele ao pressionar o botão; usar 10 kΩ reduz essa corrente para aproximadamente 0,5 mA. Se o valor do resistor mudar, a lista de componentes também deve ser atualizada.

Em qual faixa a frequência deve ser ajustada?

O ouvido humano percebe frequências de aproximadamente 20 Hz a 20 kHz, mas os buzzers pequenos produzem som melhor na faixa de 500–5.000 Hz. Definir o passo de aumento ou redução em 50–100 Hz torna a mudança audível.

A frequência muda muito rápido ao manter o botão pressionado. Como desacelerar?

Se a frequência mudar a cada ciclo, manter o botão pressionado fará com que ela aumente muito rápido. Altere a frequência apenas uma vez por toque (detecção de borda) ou adicione uma pequena pausa após cada mudança.

Como impedir que a frequência ultrapasse os limites?

O código já faz isso: a linha `frequency = constrain(frequency, 50, 5000);` mantém o valor entre 50 e 5.000 Hz. Para mudar a faixa, altere esses dois números; por exemplo, definir o limite inferior como 100 evita sons muito graves e com chiado.