#14Средний

Настройка частоты зуммера

4.6(69)
118 собрано
Настройка частоты зуммера
Ты управляешь звуком зуммера четырьмя кнопками: одна включает звук, другая выключает, а две оставшиеся делают его выше или ниже. Удерживай кнопку вверх или вниз, и высота звука меняется шаг за шагом, скользя как сирена. Ты своими ушами узнаёшь, почему одни звуки высокие, а другие низкие.

Видео

Схема

Настройка частоты зуммера - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Настройка частоты зуммера
4// ─────────────────────────────────────────
5// Четыре кнопки управляют зуммером: Вкл, Выкл, Частота + и Частота -. При
6// нажатии «Вкл» зуммер звучит на текущей частоте. Кнопки + и - меняют её
7// на 50 Hz за нажатие (начиная с 300 Hz); частота остаётся в пределах
8// 50-5000 Hz.
9//
10// Пины:
11//   D8 -> Зуммер + (другая ножка к GND)
12//   D7 -> Кнопка «Вкл»
13//   D6 -> Кнопка «Выкл»
14//   D5 -> Кнопка «Частота +»
15//   D4 -> Кнопка «Частота -»
16//   Другая ножка к 5V, пин к GND через 220 ohm
17
18int buzzerPin = 8;     // Выходной пин зуммера
19int btnOn = 7;         // Кнопка «Вкл»
20int btnOff = 6;        // Кнопка «Выкл»
21int btnIncrease = 5;   // Кнопка «Частота +»
22int btnDecrease = 4;   // Кнопка «Частота -»
23int frequency = 300;   // Начальная частота (Hz)
24int state = 0;         // 1 = 1 = звук вкл, 0 = выкл
25
26void setup() {
27  // Кнопки как входы, с внешними pull-down
28  pinMode(btnOn, INPUT);
29  pinMode(btnOff, INPUT);
30  pinMode(btnIncrease, INPUT);
31  pinMode(btnDecrease, INPUT);
32}
33
34void loop() {
35  if (digitalRead(btnOn)) {          // Вкл: запустить звук
36    state = 1;
37  }
38
39  if (digitalRead(btnOff)) {         // Выкл: остановить звук
40    state = 0;
41  }
42
43  if (digitalRead(btnIncrease)) {    // Поднять частоту на 50 Hz
44    frequency = frequency + 50;
45    delay(100);                      // При удержании менять медленно
46  }
47
48  if (digitalRead(btnDecrease)) {    // Понизить частоту на 50 Hz
49    frequency = frequency - 50;
50    delay(100);
51  }
52
53  frequency = constrain(frequency, 50, 5000);   // Держать в пределах 50-5000 Hz
54
55  // Включить или заглушить зуммер по состоянию
56  if (state == 1) {
57    tone(buzzerPin, frequency);
58  } else {
59    noTone(buzzerPin);
60  }
61}
62

Частые вопросы

Почему для кнопок используются резисторы 220 Ω?

Этот код читает кнопки в режиме INPUT с внешними стягивающими резисторами. Каждый резистор соединяет свой вход с GND, чтобы после отпускания кнопки читался LOW. Если для этого использовать указанный в списке резистор 220 Ω в схеме с питанием 5 V, при нажатии кнопки через него течёт около 23 mA; с 10 kΩ этот ток снижается примерно до 0,5 mA. При замене номинала резистора нужно обновить и список деталей.

В каком диапазоне регулировать частоту?

Человеческое ухо слышит частоты примерно от 20 Hz до 20 kHz, но маленькие зуммеры лучше всего звучат в диапазоне 500–5000 Hz. Если шаг повышения/понижения сделать 50–100 Hz, изменение будет слышно.

При удержании кнопки частота меняется слишком быстро. Как замедлить?

Если частота меняется на каждом цикле, при удержании кнопки она растёт очень быстро. Меняй её один раз за нажатие (определение фронта) или добавь короткую паузу после каждого изменения.

Как не дать частоте выйти за пределы?

Код уже это делает: строка `frequency = constrain(frequency, 50, 5000);` держит значение между 50 и 5000 Hz. Чтобы изменить диапазон, измени эти два числа; например, нижняя граница 100 убережёт от очень низких дребезжащих звуков.