Урок 8: Пассивный Зуммер

1. Цель эксперимента

С помощью Arduino можно создавать множество интерактивных проектов. В этом уроке вы познакомитесь с пассивным пьезо-зуммером — устройством, которое само по себе звучать не будет: ему нужен внешний импульсный сигнал (PWM) с частотой 2–5 кГц. Вы научитесь генерировать разные частоты и даже сыграете небольшой «мелодический» фрагмент.

2. Компоненты

Кол-во

Деталь

1

Плата Arduino UNO

1

Пассивный зуммер (модуль или сам излучатель)

1

Макетная плата (breadboard)

3

Перемычки «папа–папа»

1

USB-кабель A-B

3. Немного знаний

В виде модуля
Пассивный зуммер на модуле
Без модуля
Пьезо-зуммер без модуля

Пассивный зуммер — интегрированное пьезо-устройство без внутреннего генератора. Чтобы он издал звук, требуется квадратная волна 2–5 кГц (чем выше частота, тем выше тон). Отличить его от активного просто: у пассивного зуммера сверху нет наклейки «REMOVE SEAL» и видна зелёная печатная плата.

4. Схема подключения

Подключение пассивного зуммера к Arduino
  • VCC → 5 V

  • GND → GND

  • I/O (S) → цифровой пин 8

5. Пример кода

Первый вариант — классический for-цикл, который генерирует две частоты:

passive_buzzer_for.ino
int buzzer = 8;           // цифровой пин №8 — сюда подключаем зуммер
unsigned char i;          // счётчик для повторений

void setup() {
  pinMode(buzzer, OUTPUT);    // объявляем пин выходом
}

void loop() {
  // ----- Тон ~500 Гц -----
  // 1 мс HIGH + 1 мс LOW = 2 мс период ⇒ 1/0.002 = 500 Гц
  for (i = 0; i < 80; i++) {  // 80 периодов ≈ 160 мс звучания
    digitalWrite(buzzer, HIGH);   // включаем звук
    delay(1);                     // 1 мс звучания
    digitalWrite(buzzer, LOW);    // выключаем
    delay(1);                     // 1 мс пауза
  }

  // ----- Тон ~250 Гц -----
  // 2 мс HIGH + 2 мс LOW = 4 мс период ⇒ 1/0.004 = 250 Гц
  for (i = 0; i < 100; i++) {    // 100 периодов ≈ 400 мс звучания
    digitalWrite(buzzer, HIGH);   // звук
    delay(2);                     // держим 2 мс
    digitalWrite(buzzer, LOW);    // тишина
    delay(2);                     // 2 мс пауза
  }
}

Тот же самый алгоритм, но внутри бесконечного while (1):

passive_buzzer_while.ino
int buzzer = 8;                 // тот же пин 8

void setup() {
  pinMode(buzzer, OUTPUT);      // пин — выход
}

void loop() {
  unsigned char i;              // локальный счётчик

  while (1) {                   // бесконечный цикл (хотя loop() уже зациклен)
    // Тон 500 Гц
    for (i = 0; i < 80; i++) {
      digitalWrite(buzzer, HIGH);   // включаем звук
      delay(1);                     // 1 мс звучания
      digitalWrite(buzzer, LOW);    // выключаем
      delay(1);                     // 1 мс пауза
    }

    // Тон 250 Гц
    for (i = 0; i < 100; i++) {
      digitalWrite(buzzer, HIGH);   // звук
      delay(2);                     // держим 2 мс
      digitalWrite(buzzer, LOW);    // тишина
      delay(2);                     // 2 мс пауза
    }
  }
}

6. Как работает код

  • Изменяя длительность задержек delay( ) вы меняете частоту звуковой волны, а значит и высоту тона.

  • Пассивный зуммер воспроизводит тот сигнал, который вы ему подаёте. Хотите сыграть мелодию — последовательно выводите ноты с разными частотами.

7. Пошаговый запуск

  1. Соберите схему по рисунку выше.

  2. Подключите Arduino, выберите плату UNO и правильный COM-порт.

  3. Загрузите скетч. Зуммер начнёт издавать чередующиеся тоны высокого и низкого звучания.

8. Что может пойти не так

Симптом

Причина

Решение

Нет звука

Неправильная полярность, не тот пин

Проверьте подключение и убедитесь, что пин 8 объявлен OUTPUT

Очень тихо

Слишком маленькая амплитуда сигнала

Используйте 5 V питания и убедитесь, что задержки не слишком велики

Зуммер пищит без кода

Используется активный зуммер

Поменяйте модуль на пассивный или используйте активный вариант урока 7

9. Эксперименты

  • Используйте функцию tone(pin, freq, duration) для генерации чистых тонов.

  • Попробуйте сыграть простую мелодию: создайте массив частот (нот) и длительностей.

  • Прикрутите фоторезистор: чем ярче свет, тем выше тон зуммера.