Главная chevron_right Наши уроки chevron_right Raspberry Pi Pico: Издаём звуки и играем мелодии (Модуль Зуммер)

Raspberry Pi Pico: Издаём звуки и играем мелодии (Модуль Зуммер)

Подключаем Trema-модуль Зуммер к Raspberry Pi Pico и управляем звуком через MicroPython в Thonny IDE: меняем частоту сигнала и собираем простой арпеджиатор с потенциометром.

Общие сведения

Иногда бывает полезно чтобы наше устройство подавало какие-то сигналы не только светом, но и звуком. В этом уроке мы научимся подавать сигналы при помощи Trema-модуля Зуммер.

Для этого урока нам понадобится:

Для работы данных примеров в Pi Pico необходимо загрузить прошивку MicroPython и установить Thonny IDE, о том как это сделать можно прочитать в этой статье /page/pi-pico-python-ide

Подключение

Подключим Trema-модуль Зуммер согласно таблице

Вывод модуляВывод Pi Pico
Vcc3V3(OUT)
GNDGND
SGP15

Подключим Trema-модуль Потенциометр согласно таблице

Вывод модуляВывод Pi Pico
VccADC_VREF
GNDAGND
SGP26

Управляем частотой звука

Зуммер состоит из платы, излучателя и транзистора, который преобразует низкое сопротивление переменному току (импеданс) излучателя в высокое сопротивление на затворе или базе транзистора. Благодаря этому мы можем управлять работой излучателя используя маленькие токи вывода Pi Pico. Выводы Pi Pico не имеют цифро-аналогового преобразователя, поэтому форма волны, излучаемая зуммером может быть только квадратной (единица и ноль). Но можно менять частоту этого сигнала, что мы сейчас и попробуем.

Во вкладке интерактивной оболочки введём:

>>> from machine import Pin, PWM

Затем создадим объект Зуммера:

>>> zum = PWM(Pin("GP15"))

Зададим широту импульса в 50% (65535/2 ≈ 32000)

>>> zum.duty_u16(32000)

Установим частоту 440 Гц - ля первой октавы фортепиано

>>> zum.freq(440)

Зуммер начнёт звучать. Как же теперь остановить это? Введём следующую строку:

>>> zum.deinit()

Уроки музыки: Арпеджио

В качестве проекта для этого урока сделаем простой пример, если поворачивать ручку потенциометра - то зуммер будет бегать вниз и вверх по заданным нотам (так называемое "арпеджио", а наш прибор будет называться "Арпеджиатор"):

# Подключаем Выводы, ШИМ и АЦП
from machine import Pin, PWM, ADC
# Подключаем функцию сна в миллисекундах и называем её
from time import sleep_ms as delay

# Создаём объект потенциометра
pot = ADC("GP26")

# Создаём объект зуммера
zum = PWM(Pin("GP15"))
# Устанавливаем широту
zum.duty_u16(32000)

# Аккорд C maj 7 (ДО-МИ-СОЛЬ-СИ) раскинутый на две октавы
scale = [523, 659, 784, 988, 1046, 1318, 1568, 1875]

# для хранения предыдущего индекса листа
previous_index = 0;

# Бесконечный цикл
while True:

    # Получаем индекс для листа с частотами нот относительно положения потенциометра
    current_index = int(pot.read_u16()/int(65535/(len(scale)-1)))
    # Если новая нота
    if (previous_index != current_index):
        # запоминае её
        previous_index = current_index
        # воспроизводим
        zum.freq(scale[current_index])
        # ждём длительность
        delay(200)
        # выключаем зуммер
        zum.deinit()
    delay(5)

В качестве эксперимента можно поиграться с числом передаваемым в zum.duty_u16() - это будет слега менять окрас звучания зуммера. Так же можно добавить или убрать ноты из листа scale

Ссылки

Комплект для повторения проекта

Что понадобится

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

3 позиции
Все уроки