
Vídeo
Esquema do circuito

Código-fonte
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.
