見出し画像

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のところを変更して下さい。(何番にすればいいか?といった質問には「知らん」として答えません)

画像1

あとは、最初に上げたワークシートなどを活用して、Gcode Musicを作成して楽しめます。

3.制限など

現時点で、P100以下の数字を投げても正常に処理できず変な感じになるので、P100以下は指定できません。♩=120 で 16分音符がギリの感じなので
短音をP50とかでアルペジオにして和音を再現するなどの技術が使えません。
また、音程や音調が指示通りに鳴らない事が多々あるのでKlipperでは難しいのかもしれませんが、全ての音符の後ろに休符を入れると比較的上手くいくようです。
例 M300 S0 P100
 
他にいい方法がわかれば修正しますが、今のところわかりません!!




もし気に入って頂けたのであればサポートお願いします。 今後の励みになります!