前回、CR-10Sにオートレベリングを追加するために必要なモデルやアプリケーションを用意し、3DTouchの取り付けまで完了しました。
前回に引き続き、今回は「ファームウェアの書き換え」と「オフセットの設定」について紹介します。
基本的に、書き換える場所や値は決まっているのでチェックしてみてください。
もくじ
はじめに
今回紹介する内容は「Creality3D CR-10S」にオートレベリング機能を追加する方法の「ファームウェア編」についてです。
- CR-10S オートレベリング - 準備編
- CR-10S オートレベリング - 3DTouch取り付け編
- CR-10S オートレベリング - ファームウェア編 <- この記事
前回の記事でも紹介した通り、Creality3D CR-10Sという3Dプリンターに「3DTouch」という接触センサーを取り付けてオートレベリングを追加しました。
基本的な設定は簡単ですが、ファームウェアを書き換えることになるので、今回の作業は全て自己責任でお願いします。
3DTouchは「GearBest」でも販売されていたので、Amazonが在庫切れだった場合はこちらもどうぞ。
また、ファームウェアの書き換え後に「Z軸のオフセット値」を設定する必要があります。
各自値を調整するので、合わせてチェックしてみてください。
参考記事
3DTouch用にファームウェアの書き換える場所や値はこちらの記事を参考にしました。
ありがとうございます。
参考サイト様:
http://3dmakerita.it/2018/03/21/bltouch-on-cr10s-english-version-i-hope/
英語がわかるのであれば、こちらの記事を読んだ方が良いです。
今回のファームウェア書き換えも、ほとんどそのまま参考にさせていただきました。
マザーボードのバージョン
コメントにて、マザーボードのバージョンについて質問いただいたので追記します。
私が購入したCreality3D CR-10Sのマザーボードは「V2.1」でした。
マザーボードのバージョンによって、ファームウェアの記述方法が変わってくる可能性があるため、注意してください。
ファームウェアを用意する
CR-10Sにオートレベリングを追加するためにはファームウェアの書き換えが必要です。
今回は参考記事とバージョンを合わせて「Marlin 1.1.8」を使いました。
バージョンによって作業が変わる可能性があるので注意してください。
現在の最新バージョンは、Marlinのサイトからダウンロード可能です。
http://marlinfw.org/meta/download/
バージョン1.1.8はこちらから。
https://github.com/MarlinFirmware/Marlin/releases
ArduinoからMarlin1.1.8を開く
ダウンロードしたZipファイルを解凍すると「Marlin」というフォルダがあるので開いてください。
下の方にスクロールしていくと「Marlin.ino」というファイルが見つかります。
ダブルクリックすれば「Arduino」が開きました。
初期状態だとこんな感じ。
それでは順番にファームウェアを書き換えていきましょう。
Configuration.hを書き換える
まず最初に書き換える項目は「Configuration.h」の中にあります。
Arduinoで右側の「▼」をクリックすると全てのファイルが表示されるので、その中から「Configuration.h」を選択してください。
ずらーっとコードが表示されたと思います。
この中から「〇〇行目を〜〜」という感じで書き換えていくわけですね。
私自身すべてを理解したわけではないので、わかる範囲で解説をいれていこうと思います。
127行:
127行: CUSTOM_MACHINE_NAME
「custom_machine_name」を好きな名前に書き換えると、CR-10Sを起動した時にコントローラーボックスに表示されるテキストが変わります。
こんな感じで表示されるので、任意のテキストを入力しましょう。
私は「#define CUSTOM_MACHINE_NAME "CR-10S"」としました。
114行:
114行: #define BAUDRATE 250000
> #define BAUDRATE 115200に変更
140行:
140行: #define DEFAULT_NOMINAL_FILAMENT_DIA 3.0
> #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75 に変更
フィラメントの太さを設定します。
基本的な値は「1.75」
294行:
294行: #define TEMP_SENSOR_BED 0
>#define TEMP_SENSOR_BED 5 に変更
ヒートベッドを搭載していない場合は「0」
328行〜332行
328行: #define HEATER_0_MAXTEMP 250
329行: #define HEATER_1_MAXTEMP 250
330行: #define HEATER_2_MAXTEMP 250
331行: #define HEATER_3_MAXTEMP 250
332行: #define HEATER_4_MAXTEMP 250
333行: #define BED_MAXTEMP 110
ノズルとベッドの最大温度を設定します。
この値を超えた温度で造形しようとすると「MAXTEMP」のエラーが発生するため、少し高めに設定しても良いのかもしれません。
532行:
532行: #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 }
> #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 95 } に変更
539行:
539行: #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
> #define DEFAULT_MAX_FEEDRATE { 2500, 2500, 100, 25 } に変更
547行:
547行: #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
> #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 10000 } に変更
557行〜559行:
557行: #define DEFAULT_ACCELERATION >500 に変更
558行: #define DEFAULT_RETRACT_ACCELERATION >1000 に変更
559行: #define DEFAULT_TRAVEL_ACCELERATION >1000 に変更
751行〜753行:
751行: #define INVERT_X_DIR false に変更
752行: #define INVERT_Y_DIR false に変更
753行: #define INVERT_Z_DIR true に変更
784行〜785行:
"注意" この設定は「Creality3D CR-10S 300x300x400」の場合です。
サイズの違いによって値が変わるので注意してください。
784行: #define X_BED_SIZE 300 に変更
785行: #define Y_BED_SIZE 300 に変更
プラットフォームの大きさ設定です。
私が購入した「Creality3D CR-10S」のプラットフォームは300mm x 300mm x 400mmなので「X > 300(mm)」「Y > 300(mm)」となりました。
プラットフォームの大きさと合わせてください。
793行:
先ほど同様、3Dプリンターのサイズによって値が変わります。
793行: #define Z_MAX_POS 400 に変更
827行:
827行: #define FILAMENT_RUNOUT_SENSOR
>コメントを外す
「//〇〇」となっているコードを「〇〇」に書き換えてください。
コメントをを外すことで、その部分に書かれたコードが有効になります。
私の環境(Mac)では「Command + /キー」を押すことで、コメント(有り無し)を切り替えられます。
829行:
829行:#define FIL_RUNOUT_INVERTING false
#define FIL_RUNOUT_INVERTING true に変更
830行:
830行: #define ENDSTOPPULLUP_FIL_RUNOUT
> コメントを外す
BLTouchを有効化
ここからは「BLTouch(3DTouch)」を有効にするための設定です。
BLTouchや3DTouchを使わない場合は不要。
それ以外のセンサーを使った場合の記述方法はわかりません。
874行:
874行: #define AUTO_BED_LEVELING_BILINEAR
> コメントを外す
640行
640行: #define BLTOUCH
>コメントを外す
641行: 以下のコードを追加してください。
#define SERVO0_PIN 11
687行〜689行
687行: > #define X_PROBE_OFFSET_FROM_EXTRUDER -32
688行: > #define Y_PROBE_OFFSET_FROM_EXTRUDER -5
689行: > #define Z_PROBE_OFFSET_FROM_EXTRUDER 8
ノズルと「BLTouch(3DTouch)」のオフセットを設定します。
私の場合は「-32」「-5」「8」を設定しましたが、メジャーなどを使って、実際の距離を測定し値を書き換えてください。
- 値 | + 値 |
---|---|
左 | 右 |
手前 | 奥 |
上 | 下 |
914行
914行: #define GRID_MAX_POINTS_X 4
GRID_MAX_POINTS_X 「4」のように設定すると、プラットフォーム上の「16箇所」でオートレベリングを実行します。
もう少し少なくても良いという方は「3」を設定。
4を設定した場合:
| x x x x |
| x x x x |
| x x x x |
| x x x x |
3を設定した場合:
| x x x |
| x x x |
| x x x |
イメージとしてはこんな感じ。
細かく調整させるため私は「4」を設定しましたが、その分実行時に時間がかかります。
後からでも変えられるので、とりあえずどちらでもOKです。
918行〜921行
918行: #define LEFT_PROBE_BED_POSITION 20 に変更
919行: #define RIGHT_PROBE_BED_POSITION 240 に変更
920行: #define FRONT_PROBE_BED_POSITION 30 に変更
921行: #define BACK_PROBE_BED_POSITION 260 に変更
924行:
924行: #define MIN_PROBE_EDGE 10 に変更
プラットフォーム上の最大サイズに余裕を持たせるための設定だそうです。
値を10にすると、プラットフォームは「290 x 290」になります。
1117行〜1118行:
1117行: #define EEPROM_SETTINGS
> コメントを外す
1118行: #define DISABLE_M503
> コメントを外す
1035行:
1035行: #define Z_SAFE_HOMING
> コメントを外す
Z_SAFE_HOMINGの定義を有効にすることで、「AUTO HOME」などでホームに戻る時、「0, 0」の位置がプラットフォームの中心になります。
「X_BED_SIZE / 2」「Y_BED_SIZE / 2」
PREHEATの設定
続いて、プレヒート実行時の温度を設定していきます。
CR-10Sのコントローラーから「Prepare > Preheat PLA」というように実行した場合の温度ですね。
PREHEAT_X_TEMP_HOTEND xxx
Xの値が「1ならPLA」「2ならABS」用の設定になります。
1149行〜1151行
1149行: #define PREHEAT_1_TEMP_HOTEND 200
1150行: #define PREHEAT_1_TEMP_BED 70
1151行: #define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
プレヒートでファンの速度は不要なので「0」を設定。
使用するフィラメントの温度に合わせて温度を調整してみてください。
1153行〜1155行:
1153行: > #define PREHEAT_2_TEMP_HOTEND 240 に変更
1154行: > #define PREHEAT_2_TEMP_BED 100 に変更
1155行: > #define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255 に変更
PLA同様、Preheat ABSを実行した時の温度も設定します。
ノズル、ベッド共に「328行」で設定したMAXTEMPを超えた値は設定できないので注意してください。
1168行:
1168行: #define NOZZLE_PARK_FEATURE
> コメントを外す
1333行:
1333行: #define SDSUPPORT
> コメントを外す
1358行:
1358行: #define ENCODER_PULSES_PER_STEP 1
> コメントを外す
1364行:
1364行: #define ENCODER_STEPS_PER_MENU_ITEM 5
> コメントを外す
1404行:
1404行: #define SPEAKER
> 『コメントアウト』する
コメントを外すではないので注意。
1485行:
1485行: #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
> コメントを外す
Configuration_adv.hを編集する
続いて、Arduinoの右側「▼」から「Configuration_adv.h」を開いてください。
これまで同様「〇〇行を〜」という形で編集していきましょう。
658行:
658行: #define BABYSTEPPING
> コメントを外す
BABYSTEPPINGを有効にすることで、CR-10Sの「Tune」からノズルの高さを調整することができます。
コメントアウトしたままでもOKですが、あとで設定する「ノズルのオフセット」や、ノズルとベッドが離れすぎた時に便利なので有効化しておいた方が良いと思います。
662行:
662行: #define BABYSTEP_MULTIPLICATOR 5
> コメントを外す
664行:
664行: #define DOUBLECLICK_FOR_Z_BABYSTEPPING
> コメントを外す
後ろの方に記述してある「// Double-click on the Status Screen for Z Babystepping.」はそのまま。
733行:
733行: #define ARC_SUPPORT
> 『コメントアウト』する
コメントを外すではないので注意
879行:
879行: #define ADVANCED_PAUSE_FEATURE
> コメントを外す
pins_RAMPS.hを編集
続いて「pins_RAMPS.h」を編集します。
先ほど同様、Arduinoの「▼」から開いてください。
とは言っても、変更する値は1箇所だけ。
255行:
255行: #define FIL_RUNOUT_PIN 2 に変更
ライブラリを追加
最後にArduino「ライブラリ」や「ボード」を設定していきます。
メニューバーから「スケッチ > ライブラリをインクルード > ライブラリを管理」と進んでください。
表示されたウィンドウの「検索をフィルタ...」欄に「U8glib」と入力します。
一番下に「U8glib by oliver」というライブラリが表示されるのでインストールしましょう。
ボードを設定
Arduino > ツール > ボードと進み、表示された項目の中から「Arduino/genuino Mega or Mega 2560」を選択します。
同じようにして「プロセッサ」も変更しましょう。
「ATmega2560(Mega2560)」を選択してください。
検証・コンパイル
最後に「検証・コンパイル(Command + R)」を実行します。
コンパイルが実行されるので数秒〜数分待ちましょう。
コンパイルが完了し、エラーが発生していなければ完了です。
加えて書きますが、今回の作業は全て自己責任でお願いします。
じっくり確認してから「スケッチ > マイコンボードに書き込む」を実行しましょう。
この時、PCと3Dプリンター(CR-10S)をUSBケーブルで接続しておく必要があります。
書き込みが完了すると3Dプリンターが再起動し、UIが変わったCR-10Sが起動しました。
もし途中で失敗してしまい、青い画面から変わらない状態になった場合は、もう一度ファームウェアを書き込み直せば対処できると思います。
オフセットを設定
ここまでで、オートレベリングはほぼ完成したのですが、最後に「ノズルと3DTouchのオフセット値」を調整する必要があります。
準備編で紹介した「Pronterface」を起動しましょう。
CR-10Sを接続し、Pronterfaceからノズルの位置などを操作できる状態にしてください。
(X軸の+やーをクリックして動けばOK)
コマンドを実行
CR-10Sのオフセット値を調整するための命令を送る「コマンド」を使います。
以下の手順で実行してください。
- PronterfaceからHOMEに移動
- M851 Z0を実行
- M500を実行
- M501を実行
- M503を実行
- G28 Z0を実行
- G1 F60 Z0を実行
- M211 S0を実行
- Pronterfaceからゆっくりノズルを下げる
- ノズルとベッドの間にA4普通紙が入るくらいの高さに調整
- 3Dプリンタの画面でZの値をチェック
- M851 Z-?.??(さっきチェックした値)を実行
- M211 S1を実行
- M500を実行
- M501を実行
- M503を実行
- G1 F60 F0を実行
M851 Z ?.??の値に注意してコマンドを入力していきましょう。
それぞれの命令は以下のような意味になっています。
コマンド | 意味 |
---|---|
M851 Z0 | オフセット値を0にする(初期化) |
M500 | 値を保存 |
M501 | パラメータを読み込む |
M503 | 値を有効化 |
G28 Z0 | HOME(Z0)を実行 |
G1 F60 Z0 | Z 0の位置に移動 |
M211 S0 | ノズルをマイナス値に移動可能にする |
M851 Z-1.00 | 例) オフセット値を-1.00に設定 |
M211 S1 | マイナス値の移動を戻す(不可にする) |
ちなみに「G28はAUTO_HOME」「G29はAUTO_LEVELING」になっています。
続いて、造形の開始時に「オートレベリング」を実行するようにしましょう。
スライサーアプリごとに変わってくるので注意してください。
今回はCuraを使った場合です。
Curaを起動し「プレファレンス > Curaを構成する」を選択します。
英語でCuraを使っている方は「Ultimaker Cura > Preferences...」
こんな感じのウィンドウが開きました。
「プリンター」タブをクリックすると、初回起動時に作成した3Dプリンターが表示されるので、今回オートレベリングを追加した3Dプリンターを選択し「プリンターの設定」をクリックしましょう。
新たに「プリンターの設定」ウィンドウが開きました。
ウィンドウ内左下に「G-Codeの開始」という項目があると思います。
こちらは、造形開始時に行う命令を記述したもの。
造形開始前にオートレベリングを実行したいので「G28」でHOMEに戻った後、「G29(オートレベリングのコマンド)」を実行しています。
Curaから設定するのはこれだけ。
別のスライサーアプリでも基本的な書き方は同じだと思います。
勘違いをしていた点
オートレベリングの「オフセット値」を設定する際、いくつか勘違いをして間違った設定方法をしていたので参考にしてみてください。
HOMEの値
AUTO_HOMEを実行した時に、Z軸0の位置から少し上に上がります。
これはオートレベリング時の値に変化はないので、無理やり低い位置に調整する必要はありません。
ただし、オフセット値の最大(-20.00 ~ 20.00)を超えると設定できないので注意してください。
723行: #define Z_PROBE_OFFSET_RANGE_MIN -20
724行: #define Z_PROBE_OFFSET_RANGE_MAX 20
オートレベリング実行中
オートレベリングは、設定したポイントを順番にチェックしていくのですが、この時ノズルの高さは高くても問題ありません。
私は、オートレベリング実行時に紙が通るくらいの高さまでノズルが下がらないとダメだと思っていたので、無駄に頑張って調整しようとしていました。
無理に設定しようとすると「プラットフォーム」に当たったり、3DTouchが反応できないので注意してください。
CR-10Sからオフセット値を調整
オフセットの値を調整するだけなら「CR-10S」とPCを接続する必要はありません。
CR-10Sの「Control > Motion > Z Offset」と進むことで、先ほどコマンドから設定したオフセット値を調整することが可能です。
オフセットの値を変更した場合は「Store Settings」を選択すれば保存できるようです。
もしオフセットの値が低すぎたり高すぎたりした場合は、先ほど有効にした「Babystep」を試してみてください。
造形中にノズルの高さを調整し、ちょうどいいところの値をチェックすることができるので、それを参考にOffset Zの値を設定するのも良いと思います。
Tuneから「Babystep Z」の値を調整すればOK
+にすればノズルが上がり、ー値にすればノズルが下がります。
※Babystepの値は保存されないので注意してください。
まとめ
今回紹介したように、CR-10Sにオートレベリング機能を追加するためには「Marlin ファームウェア」を書き換える必要がありました。
書き換えはほとんど「コメント」を外したりが多いですが、3Dプリンターのサイズによって値が変わるものもあるので注意しましょう。
オフセットのコマンドはややこしいですが、意味がわかると簡単に使いこなせるのでぜひチェックしてみてください。
ではまた。