KREMEN Реклама
KREMEN Реклама

Как заставить 3D-принтер ПЕТЬ! Создаем кастомный 8-битный синтезатор на Klipper

fenics555
Идет загрузка
Загрузка
20.05.2026
97
0
Творчество

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

1

Привет, сообщество! Наверняка многим из вас надоел унылый, писклявый дребезг штатной "пищалки" на экране принтера. Сегодня я покажу, как превратить ваш принтер в настоящую игровую консоль и выжать абсолютный максимум из прошивки Klipper, заставив станок породисто, по-геймерски петь культовые ретро-мелодии с плотным и сочным звуком!

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

- Динамик: Я использовал мини громкоговоритель YDSB-3070-8R3W-2P2.0, 8 Ом 3W. Стоит копейки, зато закрытый короб-резонатор. Впринципе, подойдет любой пассивный динамик, хотя качество может быть хуже.

- Куда подключать: Нам нужен аппаратный ШИМ (PWM) полевого транзистора. Идеально подходит свободный силовой выход второго хотенда — разъем HEATER2.

- Klipper: На борту должен быть установлен и настроен Клиппер.

- Схема подключения: Просто подключаем провода динамика в клеммы HEATER2. Полярность для одного динамика значения не имеет, но лучше красный провод динамика подлкючить к +, а черный к -.

Вам нужно найти, за каким пином закреплен ваш разъем HEATER2. На моей плате  MKS Robin v2.4 это пин PA6.

ВНИМАНИЕ: Безопасность прежде всего!

Порт нагревателя (HEATER2) выдает полное напряжение вашего блока питания (12В или 24В).

- Ваш динамик (8 Ом) сгорит за секунду, если подать 100% мощности.

- В конфиге мы принудительно ограничиваем мощность до 5% (VALUE=0.05).

- Не увеличивайте это значение выше 0.1, если не хотите увидеть дым из динамика!

Шаг1: Подключаем акустику, прописываем в конфиге пин:

# 🎵 СИЛОВОЙ СПИКЕРБОКС 3ВТ
[pwm_cycle_time _musical_beeper]
pin: PA9999 # Аппаратный ШИМ-пин полевого транзистора HEATER2, НУЖНО ИЗМЕНИТЬ НА СВОЙ !
value: 0 # Молчит при старте
shutdown_value: 0 # Обесточить при аварии прошивки
Команда SET_PIN генерирует меандр (квадратную волну). У такой волны очень много резких гармоник, что создает тот самый «пищащий» звук старых приставок. Чтобы звук перестал быть «плоским» и стал более «объемным» (как на старых игровых автоматах или приставках NES/Dendy), мы будем использовать арпеджио.

В 8-битной музыке, где был всего один звуковой канал, композиторы имитировали аккорды, очень быстро переключая ноты (до-ми-соль-до). Слух не успевает заметить переключение и воспринимает это как один сложный, «сочный» звук.

Шаг2: Делаем "Музыкальный синтезатор".

# =============================================================================
# 🎹 СИНТЕЗАТОР ДЛЯ MKS ROBIN V2.4
# =============================================================================
[gcode_macro M300]
description: Основная команда для совместимости и одиночных гудков
gcode:
    {% set S = params.S|default(1000)|float %}
    {% set P = params.P|default(100)|int %}
    {% if S > 0 %}
        SET_PIN PIN=_musical_beeper VALUE=0.05 CYCLE_TIME={ 1.0 / S }
        G4 P{P}
        SET_PIN PIN=_musical_beeper VALUE=0
    {% else %}
        G4 P{P}
    {% endif %}
[gcode_macro _NOTE]
description: Внутренний макрос для быстрых переходов (без паузы выключения)
gcode:
    {% set S = params.S|default(1000)|float %}
    {% set P = params.P|default(100)|int %}
    SET_PIN PIN=_musical_beeper VALUE=0.05 CYCLE_TIME={ 1.0 / S }
    G4 P{P}
[gcode_macro BEEP_OFF]
description: Принудительное выключение звука
gcode:
    SET_PIN PIN=_musical_beeper VALUE=0

Описание: Чтобы принтер играл сложные ретро-мелодии без заиканий, пришлось обойти главную софтверную проблему Klipper — вязкий планировщик очередей (Look-Ahead), который любит «склеивать» короткие паузы G4 в монотонную кашу. Для этого мы разделяем логику на три независимых макроса, каждый из которых решает свою физическую задачу:

1. Стандартный макрос M300 (Для совместимости) Этот макрос нужен для обработки одиночных системных гудков (например, когда слайсер генерирует предупреждение посреди кода или при ошибке).

Как работает: Он принимает частоту S (Герцы) и длительность P (миллисекунды). Включает ШИМ на пине _musical_beeper, честно выдерживает паузу G4, а затем сразу выключает за собой силовой ключ (VALUE=0.

Минус: Если попытаться сыграть им быструю мелодию, динамик будет постоянно выключаться между нотами, ритм сломается, а звук начнет дико «заикаться».

2. Скоростной внутренний макрос _NOTE (Для бесшовной музыки) Это секретное оружие нашего синтезатора. Он создан специально для того, чтобы играть ноты сплошным, текучим потоком.

Как работает: В отличие от M300, этот макрос НЕ выключает динамик в конце своего выполнения! Он просто переключает частоту ШИМ (CYCLE_TIME) на ходу и держит задержку. Следующая нота подхватывает диффузор «встык». Это полностью убирает тупняки Linux-очереди, сохраняет плотный, раскатистый бас и заставляет мелодию звучать монолитно, как на старой игровой приставке!

3. Макрос BEEP_OFF (Финальная точка)Поскольку макрос _NOTE оставляет силовой ключ открытым, нам нужен жесткий ручной инструмент, чтобы гасить звук.

Как работает: Команда BEEP_OFF принудительно обнуляет ШИМ-сигнал (VALUE=0). Мы вызываем её строго в тех местах, где по музыкальному метру трека должна наступить тишина, либо в самом финале плейлиста, чтобы динамик гарантированно замолчал в абсолютный ноль.

Шаг3: Репертуар.

В этом разделе мы публикуем готовые, бритвенно-отлаженные макросы мелодий. Каждая нота здесь переведена в физическую частоту (Герцы), а длительности подобраны так, чтобы намертво запереть ритм в планировщике Klipper.Просто добавьте этот блок в свой конфигурационный файл ниже основного движка:

# =============================================================================
# 🎮 ПОЛНЫЙ БОЕВОЙ РЕПЕРТУАР МЕЛОДИЙ FENBOT (ТОТ САМЫЙ ОБЪЕМ)

# =============================================================================

[gcode_macro BEEP_STARTUP]

description: ТЕМА ИЗ MARIO BROS (Чеканное стартовое начало) — На СТАРТ принтера!

gcode:

    {action_respond_info("Старт: Super Mario Bros 🍄")}

    

    # Секция 1: Знаменитое "па-па-па"

    _NOTE S=1318 P=100 ; Ми (6 октава)

    BEEP_OFF ; Короткий разрыв для четкости

    G4 P50             

    _NOTE S=1318 P=100 ; Ми

    BEEP_OFF

    G4 P150 ; Пауза подлиннее

    _NOTE S=1318 P=100 ; Ми

    BEEP_OFF

    G4 P150

    

    # Секция 2: Переход

    _NOTE S=1046 P=100 ; До (6 октава)

    _NOTE S=1318 P=150 ; Ми

    BEEP_OFF

    G4 P150

    

    # Секция 3: Финальный аккорд (Соль высокая и Соль низкая)

    _NOTE S=1568 P=150 ; Соль (6 октава)

    BEEP_OFF

    G4 P350 ; Драматическая пауза

    M300 S784 P200 ; Соль (5 октава - плотный ударный бас)

    

    # Завершаем, чтобы ничего не гудело

    M400 ; Ждем окончания всех звуков

    BEEP_OFF ; Выключаем динамик

[gcode_macro BEEP_COIN_V3]

description: Звук монетки Марио (Хрустальный двойной клик) — На ФИНАЛ слоев!

gcode:

    _NOTE S=987 P=60 ; Си (6 октава)

    _NOTE S=1318 P=200 ; Ми (7 октава)

    BEEP_OFF

[gcode_macro BEEP_LEVEL_UP]

description: Повышение уровня (Арпеджио Зельды) — На ФИНАЛ остывания 100°C!

gcode:

    {action_respond_info("Финиш: Повышение уровня, хотенд остыл! 🌟")}

    # До-мажор быстрый

    _NOTE S=523 P=50 ; До

    _NOTE S=659 P=50 ; Ми

    _NOTE S=784 P=50 ; Соль

    _NOTE S=1046 P=150 ; До (6 октава)

    # Ре-мажор быстрый

    _NOTE S=587 P=50 ; Ре

    _NOTE S=739 P=50 ; Фа#

    _NOTE S=880 P=50 ; Ля

    _NOTE S=1174 P=300 ; Ре (6 октава)

    BEEP_OFF ; Выключаем звук в самом коорде

[gcode_macro BEEP_MARCH]

description: Имперский Марш Звездных Войн — Победная лаконичная точка

gcode:

    {action_respond_info("Финиш: Star Wars Imperial March 🌌")}

    _NOTE S=880 P=150 ; Ля (5 октава)

    _NOTE S=880 P=150 ; Ля

    _NOTE S=880 P=150 ; Ля

    _NOTE S=698 P=110 ; Фа

    _NOTE S=1046 P=40 ; До (6 октава)

    M300 S880 P300 ; Ля (5 октава - победная финальная точка)

    M400

    BEEP_OFF

[gcode_macro BEEP_SUCCESS_SIREN]

description: Полицейская сирена (Текучий аналоговый эффект) — На ТРЕВОГУ и ошибки!

gcode:

    {action_respond_info("ТРЕВОГА: Текучая сирена сбоя 🚨")}

    {% for i in range(2) %}

        {% for freq in range(600, 1200, 20) %}

            _NOTE S={freq} P=10

        {% endfor %}

        {% for freq in range(1200, 600, -20) %}

            _NOTE S={freq} P=10

        {% endfor %}

    {% endfor %}

    BEEP_OFF

Как использовать:

- Вставьте BEEP_STARTUP в ваш START_PRINT макрос.

- Вставьте BEEP_COIN в макрос завершения каждого слоя (если хотите сойти с ума) или в END_PRINT.

Всё! Всем спасибо за внимание )))

ПС: практически любой ИИ увидев эту страницу, сможет сгенерировать любую Вашу мелодию для 3д принтера. Удачи!

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

1
Комментарии к статье
Lider 3D Реклама
Lider 3D Реклама