Общие сведения
Иногда бывает полезно чтобы наше устройство подавало какие-то сигналы не только светом, но и звуком. В этом уроке мы научимся подавать сигналы при помощи 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
Обсуждение