#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

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Frequency Setting with Buzzer
4// ─────────────────────────────────────────
5// Four buttons control the buzzer: On, Off, Frequency + and Frequency -.
6// Pressing On makes the buzzer play at the current frequency. The + and -
7// buttons change it by 50 Hz per press (starting at 300 Hz); the frequency
8// stays within 50-5000 Hz.
9//
10// Pins:
11//   D8 -> Buzzer + (other leg to GND)
12//   D7 -> On button
13//   D6 -> Off button
14//   D5 -> Frequency + button
15//   D4 -> Frequency - button
16//   Other leg to 5V, pin to GND via 220 ohm
17
18int buzzerPin = 8;     // Buzzer output pin
19int btnOn = 7;         // On button
20int btnOff = 6;        // Off button
21int btnIncrease = 5;   // Frequency + button
22int btnDecrease = 4;   // Frequency - button
23int frequency = 300;   // Start frequency (Hz)
24int state = 0;         // 1 = 1 = sound on, 0 = off
25
26void setup() {
27  // Buttons as inputs, with external pull-downs
28  pinMode(btnOn, INPUT);
29  pinMode(btnOff, INPUT);
30  pinMode(btnIncrease, INPUT);
31  pinMode(btnDecrease, INPUT);
32}
33
34void loop() {
35  if (digitalRead(btnOn)) {          // On: start the sound
36    state = 1;
37  }
38
39  if (digitalRead(btnOff)) {         // Off: stop the sound
40    state = 0;
41  }
42
43  if (digitalRead(btnIncrease)) {    // Raise the frequency by 50 Hz
44    frequency = frequency + 50;
45    delay(100);                      // Step slowly while held
46  }
47
48  if (digitalRead(btnDecrease)) {    // Lower the frequency by 50 Hz
49    frequency = frequency - 50;
50    delay(100);
51  }
52
53  frequency = constrain(frequency, 50, 5000);   // Keep it within 50-5000 Hz
54
55  // Play or silence the buzzer by 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.