Общие сведения
Иногда бывает полезно чтобы наше устройство подавало какие-то сигналы не только светом, но и звуком. В этом уроке мы научимся подавать сигналы при помощи Trema-модуля Зуммер.
Для этого урока нам понадобится:
Для работы данных примеров в Pi Pico необходимо загрузить прошивку MicroPython и установить Thonny IDE, о том как это сделать можно прочитать в этой статье /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 не имеют цифро-аналогового преобразователя, поэтому форма волны, излучаемая зуммером может быть только квадратной (единица и ноль). Но можно менять частоту этого сигнала, что мы сейчас и попробуем.
Во вкладке интерактивной оболочки введём:
Копировать1>>> from machine import Pin, PWM
Затем создадим объект Зуммера:
Копировать1>>> zum = PWM(Pin("GP15"))
Зададим широту импульса в 50% (65535/2 ≈ 32000)
Копировать1>>> zum.duty_u16(32000)
Установим частоту 440 Гц - ля первой октавы фортепиано
Копировать1>>> zum.freq(440)
Зуммер начнёт звучать. Как же теперь остановить это? Введём следующую строку:
Копировать1>>> zum.deinit()
Уроки музыки: Арпеджио
В качестве проекта для этого урока сделаем простой пример, если поворачивать ручку потенциометра - то зуммер будет бегать вниз и вверх по заданным нотам (так называемое "арпеджио", а наш прибор будет называться "Арпеджиатор"):
Копировать1234567891011121314151617181920212223242526272829303132333435`# Подключаем Выводы, ШИМ и АЦП 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 позиции
Зуммер (Trema-модуль)
Позволяет излучать звук определённой тональности (частоты).
Открыть в iArduino
Потенциометр v2 (Trema-модуль)
Сенсор для настройки скорости вращения двигателя, угол поворота сервопривода, яркости светодиода и т.д.
Открыть в iArduino
Raspberry Pi Pico IO Trema Shield
Плата расширения к контроллерам Raspberry Pi Pico для подключения Trema-модулей
Открыть в iArduino



