КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

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





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

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

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

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

Подключение

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

Вывод модуля Вывод Pi Pico
Vcc 3V3(OUT)
GND GND
S GP15

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

Вывод модуля Вывод Pi Pico
Vcc ADC_VREF
GND AGND
S GP26

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

Зуммер состоит из платы, излучателя и транзистора, который преобразует низкое сопротивление переменному току (импеданс) излучателя в высокое сопротивление на затворе или базе транзистора. Благодаря этому мы можем управлять работой излучателя используя маленькие токи вывода 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

Ссылки




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями