Перейти к содержанию

Buzzer

pibody.Buzzer() — это устройство, которое издаёт звук при получении сигнала. Зуммеры обычно используются в системах безопасности, таймерах и различных электронных устройствах, где требуется звуковое оповещение.


Базовое использование


Buzzer(slot) -> PWM

Чтобы создать объект Buzzer, вызовите Buzzer(slot).

Аргументы:

  • slot (string | int | tuple) — метка слота ("A", "B", "C", "D", "E", "F", "G", "H"), порт пина (0, 2 и т.д.), кортеж (0, Pin.OUT)

Возвращает: Возвращает выход pibody.PWM для slot.

from pibody import Buzzer

buzzer = Buzzer("A")

.make_sound(freq, volume, duration)

Воспроизводит тон с частотой freq Гц и громкостью volume в течение duration секунд.

Аргументы:

  • freq (int) — необязательный параметр, задаёт высоту звука (сколько раз в секунду вибрирует элемент). Полезный диапазон: [20, 5000]. По умолчанию: 1000
  • volume (float) — задаёт громкость и изменяет коэффициент заполнения ШИМ зуммера. Может принимать значение в диапазоне [0, 1.0]
  • duration (int) — длительность звука в миллисекундах
# Воспроизводит звук 660 Гц в течение 0.5 секунд на полной громкости
buzzer.make_sound(660, 1, 500)

.volume(volume | None) -> None | float

Получить или установить громкость.

Аргументы:

  • volume (float) — необязательный параметр, задаёт громкость и изменяет коэффициент заполнения ШИМ зуммера. Может принимать значение в диапазоне [0, 1.0]. По умолчанию: 1.0

Возвращает текущую громкость при вызове без аргумента, иначе устанавливает громкость и возвращает None.

buzzer.volume(0.1)

print(buzzer.volume())  # 0.1

.beep()

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

buzzer.beep()

.boop()

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

buzzer.boop()

.on()

Включает звук и возобновляет его на текущей громкости.

buzzer.on()

.off()

Отключает звук зуммера (сохраняет установленную частоту).

buzzer.off()

ШИМ

Зуммер генерирует звук через пьезоэлемент, который вибрирует при изменении сигнала. Для пьезоизлучателя freq управляет высотой тона, а duty — громкостью.

Рекомендуемая начальная точка

buzzer.freq(440)   # нота A4 — чистый среднечастотный тон
buzzer.duty(0.5)   # максимальная громкость

.freq(value | None) -> None | int

Аргументы:

  • value (int) — необязательный параметр, задаёт высоту звука (сколько раз в секунду вибрирует элемент). По умолчанию: 1000

    • 20–200 Гц — низкие, басовые тона (гудение, глубокий гул)
    • 200–2000 Гц — средний диапазон; здесь находятся большинство музыкальных нот и сигналов тревоги
    • 2000–5000 Гц — высокие тона (писк, звуки уведомлений)
    • Выше 5000 Гц — очень пронзительно; может быть тихо на маленьких зуммерах
    • Ниже ~20 Гц — не слышно как тон; создаёт отдельные щелчки на каждый цикл

Если value пусто, метод возвращает частоту, использованную ранее.

buzzer.freq(440)

print(buzzer.freq())  # 440

.duty(value | None) -> None | float

Коэффициент заполнения 0 или 1 создаёт «плоский» сигнал pibody.PWM. Такой сигнал не будет воспроизводить звук на зуммере. Коэффициент заполнения 0.5 делает громкость зуммера максимальной.

Для более удобного управления громкостью существует функция .volume(). Она принимает значения от 0 до 1, где 0 — тишина, а 1 — максимальная громкость.

Аргументы:

  • value (float) — необязательный параметр, задаёт коэффициент заполнения ШИМ и изменяет громкость зуммера. Может принимать значение в диапазоне [0, 1.0]. По умолчанию: 0.5 = максимальная громкость (меандр — равное время вкл/выкл)

Если value пусто, метод возвращает коэффициент заполнения, использованный ранее.

buzzer.duty(0.5)

print(buzzer.duty())  # 0.5

.duty_u16(value | None) -> None | int

То же, что и .duty(), но использует сырые значения в диапазоне [0, 65535].

Аргументы:

  • value (int) — необязательный параметр, задаёт коэффициент заполнения ШИМ и изменяет громкость зуммера. Может принимать значение в диапазоне [0, 65535]. По умолчанию: 32768 = максимальная громкость (меандр — равное время вкл/выкл)

Если value пусто, метод возвращает коэффициент заполнения, использованный ранее.

buzzer.duty_u16(32768)

print(buzzer.duty_u16())  # 32768

Простой пример мелодии

from pibody import Buzzer
from time import sleep

buzzer = Buzzer("A")
buzzer.duty(0.5)   # макс. громкость

# Ноты (частота, длительность_с)
melody = [
    (262, 0.3),  # C4
    (294, 0.3),  # D4
    (330, 0.3),  # E4
    (349, 0.3),  # F4
    (392, 0.3),  # G4
    (440, 0.3),  # A4
    (494, 0.3),  # B4
    (523, 0.5),  # C5
]

for freq, dur in melody:
    buzzer.freq(freq)
    sleep(dur)

buzzer.off()