KlipperでGcodeMusic復活
ファームウェアをKlipperに乗せ換えたら、M300コマンドが無く、大好きなGcode 音楽で遊べなくなったので、なんとかならんかと調べたら、KlipperのMacroで対応できることが分かったのでメモ。
1,過去のGcode遊びリンクはここ
■G-Code音楽
https://note.com/fisherkijima/n/n9ee268a9ad69
■Anycubic Mega Pro プリント前の準備運動Gcode
https://note.com/fisherkijima/n/n6971a8a294b1
■Gcode music作成ワークシート
https://note.com/fisherkijima/n/n7fa2fa969db7
2,設定方法
下のcodeを、Printer.cfgに追加。
「pin: ar31」のPinナンバーを使用してるボードに合わせて変更する。
※ar31はTrigorilla 0.02 : Anycubic MEGA Proの場合
KINGROON KP3Sは「pin: PC5」
Anycubic i3 MEGA「pin: PC6」
※Reditに載っているコードがうまく動かず手を加えたのが下のマクロです
######################################################################
# Beeper
######################################################################
# GCODE macro. Usage:
# M300 [S<Hz>] [P<ms>]
# S the tone frequency, P is the tone duration
#
# for Exsample
# M300 S440 P1000 :440Hz 1000ms
[output_pin BEEPER_Pin]
pin: ar31
pwm: TRUE ; A piezo beeper needs a PWM signal, a DC buzzer doesn't.
value: 0 ; Silent at power on, set to 1 if active low.
shutdown_value: 0 ; Disable at emergency shutdown
cycle_time: 0.001 ; PWM frequency : 0.001 = 1ms will give a base tone of 1kHz
scale: 1
[gcode_macro M300]
gcode:
{% set S = params.S|default(1000)|int %} ; S sets the tone frequency
{% set P = params.P|default(1000)|int %} ; P sets the tone duration
{% set L = 0.5 %} ; L varies the PWM on time, close to 0 or 1 the tone gets a bit quieter. 0.5 is a symmetric waveform
{% if S <= 0 %} ; dont divide through zero
{% set F = 1 %}
{% set L = 0 %}
{% elif S >= 10000 %} ;max frequency set to 10kHz
{% set F = 0 %}
{% else %}
{% set F = 1/S %} ;convert frequency to seconds
{% endif %}
SET_PIN PIN=BEEPER_Pin VALUE={L} CYCLE_TIME={F} ;Play tone
G4 P{P} ;tone duration
SET_PIN PIN=BEEPER_Pin VALUE=0
保存してKlipperを再起動。
試しに M300 S440 P1000 を投げて「プー」と音が出たら成功です。
音が出ない場合はピン番号が違うと思うので pin: ar31のところを変更して下さい。(何番にすればいいか?といった質問には「知らん」として答えません)
あとは、最初に上げたワークシートなどを活用して、Gcode Musicを作成して楽しめます。
3.制限など
現時点で、P100以下の数字を投げても正常に処理できず変な感じになるので、P100以下は指定できません。♩=120 で 16分音符がギリの感じなので
短音をP50とかでアルペジオにして和音を再現するなどの技術が使えません。
また、音程や音調が指示通りに鳴らない事が多々あるのでKlipperでは難しいのかもしれませんが、全ての音符の後ろに休符を入れると比較的上手くいくようです。
例 M300 S0 P100
他にいい方法がわかれば修正しますが、今のところわかりません!!