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





Обсуждение