Hardware

【XY-Plotter】Part4:ペンの上下機構実装

はじめに

ここまでの記事でXY平面の動作ができるようになった.今回はペンの上下機構について説明する.

XY-Plotter
「XY-Plotter」の記事一覧です。

材料

材料は次の通り.一部を除くほとんどの材料は前回のペンプロッタの部品転用,前回以前の説明で列挙した材料の再掲,手持ちのストック,のどれか.工具は省略.

組み立て

ペンの上下動作は,バネとサーボモータを利用する.高速で駆動するソレノイドもめちゃくちゃかっこいいんだけど,今回はPWMで制御する仕様にしておくことで,レーザー出力の調整や,スピンドルの回転速度調整にも転用しやすくする.

どこでどのネジを使うとか細かい図解が面倒なの,ざっくりとした画像とざっくりとした説明をどうぞ.

シャフトを通す部分は,手持ちのシャフト径に合わせてドリルで穴を拡張しておくと良い.

サーボを取り付けて,シャフト挿して,インサートナット挿して,裏からシャフトをネジ留めして,ペンを保持する部分にインサートナット挿して,ネジで留める.

フロントパネルの大きめの穴2箇所を通して,バックパネルとXY-Plotterのヘッドをネジ留めする.

ペンを保持する部分の高さはインサートナットを設置した2段階で調整できる.また,ネジ一本で留めておくことでペンの角度も調整できるようになっているので,斜めに保持したい筆記具にもいちおう対応できる.

Klipper設定

Klipperの設定は次の通り.

前回の設定内容からhoming_overrideを削除.代わりにサーボモータ制御用設定ファイルを読み込む設定を追加.サーボの制御設定をprinter.cfgから分離しておくことで,ヘッドツールの交換時に設定ファイルを切り替えやすくしておく.

[include mainsail.cfg]
[mcu]
serial: /dev/ttyS0
baud: 115200
restart_method: command

[virtual_sdcard]
path: ${/Path/To}/printer_data/gcodes
on_error_gcode: CANCEL_PRINT

[printer]
kinematics: corexy
max_velocity: 4000
max_accel: 4000

[gcode_arcs]
#resolution: 1.0
#   An arc will be split into segments. Each segment's length will
#   equal the resolution in mm set above. Lower values will produce a
#   finer arc, but also more work for your machine. Arcs smaller than
#   the configured value will become straight lines. The default is
#   1mm.


#######################################
## STEPPER
#######################################
[stepper_x]
dir_pin:PD2              # Arduino D02
step_pin:PD5             # Arduino D05
enable_pin:!PB0          # Arduino D08
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PB1       # Arduino D09
position_endstop: 0
position_max: 240
homing_speed: 100.0

[stepper_y]
dir_pin:PD3              # Arduino D03
step_pin:PD6             # Arduino D06
enable_pin:!PB0          # Arduino D08
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PB2       # Arduino D10
position_endstop: 0
position_max: 180
homing_speed: 100.0

[stepper_z]
dir_pin:PD4              # Arduino D04
step_pin:PD7             # Arduino D07
enable_pin:!PB0          # Arduino D08
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PB4       # Arduino D11
position_endstop: 0
position_min: 0
position_max: 1
homing_speed: 1


#######################################
## tool config
#######################################
[include ServoPenTool.cfg]

サーボモータのPWM制御設定に加えて,ペンの上下マクロ,ペンプロッタ用の基本動作(homing_override/PAUSAE/RESUME/CANCEL)を設定.サーボの角度は自分の環境に合わせて変更すること.

#######################################
## Pen Servo - MG92B
#######################################
[servo pen_servo]
pin: PB3                        # Arduino D11
minimum_pulse_width: 0.0006     # 0.5ms(MG92B 最小付近から若干マージンを取る)
maximum_pulse_width: 0.0024     # 2.5ms(MG92B 最大付近から若干マージンを取る)
maximum_servo_angle: 180
initial_angle: 120               # 電源投入時の位置

[gcode_macro PEN_UP]
gcode:
    SET_SERVO SERVO=pen_servo ANGLE=120
    G4 P200

[gcode_macro PEN_DOWN]
gcode:
    SET_SERVO SERVO=pen_servo ANGLE=30
    G4 P200

[homing_override]
gcode:
    PEN_UP
    G28xy-plotter_part3_xyaxis_config X Y
axes: xyz
set_position_z: 0.0

#######################################
## Klipper Control
#######################################
[gcode_macro PAUSE]
description: Pause the print and homing
rename_existing: PAUSE_BASE
gcode:
    {% set servo_value = printer["servo pen_servo"].value %}
    RESPOND TYPE=echo MSG="PAUSE servo value: { printer["servo pen_servo"].value }"
    SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=servo_value VALUE={servo_value}
    SAVE_GCODE_STATE NAME=PAUSE_STATE

    PAUSE_BASE
    G90
    PEN_UP
    G1 X 0.0000 Y 0.0000 F4000

[gcode_macro RESUME]
description: Resume the print from the home position
rename_existing: RESUME_BASE
variable_servo_value: 0.0
gcode:
    RESPOND TYPE=echo MSG="RESUME servo value: { printer["servo pen_servo"].value }"
    RESTORE_GCODE_STATE NAME=PAUSE_STATE
    RESUME_BASE
    {% if servo_value < 0.06%}
        PEN_DOWN
    {% else %}
        PEN_UP
    {% endif %}

[gcode_macro CANCEL_PRINT]
description: Cancel the print and home all axes
rename_existing: CANCEL_PRINT_BASE
gcode:
    M82
    G90
    G28
    CANCEL_PRINT_BASE

お絵描き

細かいチューニング内容やお絵描きデータ作成方法はたぶんいずれ説明するとして,このペンプロッタでを使うことでこんな絵がかけます.※色は加工してます

その他にもこのペンプロッタで書いた絵をx.comに投稿しているので,興味があればどうぞ.

おわりに

ペンの上下動作はもうちょっと最適化できそうな気がするけど,これでペンプロッタとしては完成.今回掲載している設定内容は私が試行錯誤した結果なので,全く同じ構成で動かすならそのまま設定コピペで動くはずたぶん.1つの実装例として参考にどうぞ.

次回はペンプロッタのチューニング関連の話にするか,レーザー加工の話にするか,他に書いておきたい備忘にするか.

コメント

タイトルとURLをコピーしました