3Dプリンタ魔改造沼へようこそ

コロナで引きこもり生活が続いて思わず3Dプリンタを購入してしまった人いますよね

でもマイ3Dプリンタを買ったのに研究室や会社の3Dプリンタと同じように
ただ使っているだけってもったいなくない？

というわけで今回は3Dプリンタの改造について紹介していきます

# 改造したい人におすすめの3Dプリンタ

3Dプリンタにもいろんな種類がありますが
個人的におすすめのプリンタはEnder 3です
お値段なんと3万円！

![51EgxnkWopL (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/cb3402e0-096e-5615-6221-2e57d05783ae.jpeg)


### おすすめポイント
- 囲われてないので部品の交換が楽
- メカも回路も全てがオープンソース
    - [Github](https://github.com/Creality3DPrinting/Ender-3)に全部のってる
- 改造している人が多い
    - 改造するときの情報が得やすい
    - 改造パーツのSTLファイルが[Thingiverse](https://www.thingiverse.com/search?q=Ender+3&type=things&sort=relevant)に転がっている


具体的にどんな改造ができるのか紹介していきます

# アップグレードパーツを取り付けてみよう（★☆☆☆☆）
Ender 3をより使いやすくするためのパーツをいろんな人が作って無料で公開しています

Thingiverseなどで`Ender 3`と検索するといろいろ出てきます

私が実際に使っているのは[ディスプレイカバー](https://www.thingiverse.com/thing:2987100)です
リンクからSTLファイルをダウンロードしてプリントしたら取り付けるだけでプチアップグレード

![ender_display.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/9c31dc10-1396-c116-8d5e-5140b9b2ff81.jpeg)


# 改造に必要なパーツを自分で設計しよう（★★☆☆☆）


他人が作ったSTLファイルをダウンロードするだけだと簡単すぎて物足りないあなた

Ender 3はメカもオープンソースなので改造パーツを設計しやすいです

[Github](https://github.com/Creality3DPrinting/Ender-3/tree/master/Ender-3%20Mechanical/STP)に全てのパーツのSTEPファイルが上がっているのでまずはダウンロードしましょう
*SOLIDWORKSユーザーは[こっち](https://github.com/Creality3DPrinting/Ender-3/tree/master/Ender-3%20Mechanical/Ender-3%20Parts)の方がいいかも*

![スクリーンショット 2020-06-10 17.47.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/7e9ae985-75a3-c7da-cfa3-3279bfcb05a7.png)



ダウンロードしたファイルを全部まとめてFusion360にアップロードすると

<img width="756" alt="スクリーンショット 2020-06-08 16.48.02 (1).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/9f9a0fd9-3642-845b-19ec-ce0e5d71b85b.png">


あら不思議
アセンブリまでちゃんとされた状態で見れるじゃないですか

あとは元のモデルをみながら改造パーツを設計していくと

<img width="722" alt="スクリーンショット 2020-06-10 17.55.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/114c045e-36e8-f76e-abcc-cc707c7f49f9.png">


フード3Dプリンタに生まれ変わりました

注射器の中にペースト状の食べ物を入れて使うことができます

# メインボードを交換してみよう（★★★☆☆）

ここまできたらもう後戻りはできませんね
将来のことを考えてメインボードを交換しておきましょう

## メインボードを買おう

私が使っているのは[SKR V1.4](https://www.amazon.co.jp/gp/product/B08332X4YL/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)です
*他にもいろんな種類がありますがSDカードスロットがついてるものを選んだ方が使いやすいと思います*

SKR V1.4はモータドライバを5個まで載せることができるのでエクストルーダーを2個まで拡張できます
またデュアルZ軸にも対応しています

SPIモードやUARTモードのモータドライバを使用するときに煩雑なジャンパー線を増やさなくてもボード上のジャンパーピンの設定だけで容易に対応可能です

拡張機能としては

- [オートレベリングセンサー](https://www.amazon.co.jp/BLTOUCH-%E3%82%AA%E3%83%BC%E3%83%88%E3%83%99%E3%83%83%E3%83%89%E5%B9%B3%E6%BA%96%E5%8C%96%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC-To-Be-A%E3%83%97%E3%83%AC%E3%83%9F%E3%82%A2%E3%83%A03d%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF/dp/B079WCN4FP)
- [WiFiモジュール](https://www.amazon.co.jp/BTT-SKR%E3%81%AEV1-4-1-4%E3%82%BF%E3%83%BC%E3%83%9C%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%9C%E3%83%BC%E3%83%89WIFI%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%80%813D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%81%AE%E9%83%A8%E5%93%81%E7%94%A8DCDC%E3%83%A2%E3%83%BC%E3%83%89V1-0%E9%9B%BB%E6%BA%90%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%ABBTT%E3%83%A9%E3%82%A4%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A1%E3%83%BC%E3%83%A0%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E7%82%B9%E6%BB%85-%E3%83%97%E3%83%AC%E3%83%9F%E3%82%A2%E3%83%A0%E4%BA%A4%E6%8F%9B%E9%83%A8%E5%93%81-Color/dp/B089KJLCQK/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=wifi+%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB+skr&qid=1591780655&sr=8-6)
- [タッチディスプレイ](https://www.amazon.co.jp/BIQU-%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%9C%E3%83%BC%E3%83%89-%E3%82%AF%E3%83%AA%E3%82%A8%E3%82%A4%E3%82%BF%E3%83%BC%E3%82%BA%E3%82%A8%E3%83%B3%E3%83%80%E3%83%BC3%E7%94%A8/dp/B083331D77/ref=sr_1_11?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=wifi+%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB+skr&qid=1591780655&sr=8-11)
- [NeoPixel](https://www.adafruit.com/category/168)

などに対応しています

公式のマニュアルは[Github](https://github.com/bigtreetech/BIGTREETECH-SKR-V1.3/tree/master/BTT%20SKR%20V1.4)にありますよ

![スクリーンショット 2020-06-10 18.13.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/ebc968a9-4255-f317-1ea3-26b858561016.png)



## ファームウェアを書き換えよう

メインボードを買ったらファームウェアを書き換えましょう

3Dプリンタで多く使われているのは[Marlin](https://marlinfw.org/docs/basics/introduction.html)というファームウェアです

まずは[公式サイト](https://marlinfw.org/meta/download/)からダウンロードしましょう
SKR V1.4では32bitのARMマイコンが使われていますが、Marlinのv1は対応していないのでv2にしましょう

![スクリーンショット 2020-06-10 18.24.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/e5ff3fb7-ba31-611b-a84e-b54c527c57dc.png)


次に[Marlin/config](https://github.com/MarlinFirmware/Marlin/tree/2.0.x/config)に書かれているリンクからEnder 3用のフォルダをダウンロードしてMarlinディレクトリ以下におきます
*リンクからいろんな3Dプリンタの設定ファイルが入ったzipをダウンロードすることができます*

Ender 3の設定ファイルは`config/examples/Creality/Ender-3`にあります

この中の4つのファイル

- _Bootscreen.h
- _Statusscreen.h
- Configuration_adv.h
- Configuration.h

をMarlinディレクトリ以下におきます
*元々あったファイルは置き換えてください*

それでは編集していきましょう

と言いたいところですがMarlin v2では[PlatformIO](https://platformio.org/)を使うので
まずはVSCodeのExtensionの中から[`PlatformIO IDE`](https://platformio.org/install/ide?install=vscode)をインストールしましょう
*Atomにもあるらしい*

インストールできたら以下の3つのファイルを編集していきます

- platformio.ini
- Configuration.h
- Configuration_adv.h

詳しくは[Teaching Techの動画](https://www.youtube.com/watch?v=-Gdk0wHg51w&list=PLGqRUdq5ULsPQv_rpBL_BGG11rvIKgXoI&index=1)を見てください

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/-Gdk0wHg51w/0.jpg)](http://www.youtube.com/watch?v=-Gdk0wHg51w&list=PLGqRUdq5ULsPQv_rpBL_BGG11rvIKgXoI&index=1)


ここではメモ程度に変更点を列挙しておきます

```platformio.ini
[platformio]
src_dir      = Marlin
boards_dir   = buildroot/share/PlatformIO/boards
default_envs = LPC1768
```

```Configuration.h
#define SERIAL_PORT -1

#define SERIAL_PORT_2 0

#ifndef MOTHERBOARD
  #define MOTHERBOARD BOARD_BTT_SKR_V1_4
#endif
```

```Configuration_adv.h
#define E0_AUTO_FAN_PIN P2_04
```

ここまでできたらPlatformIOでBuildしましょう


Buildしてできた`.pio/build/LPC1768/firmware.bin`というファイルを
をSDカードにコピーして
メインボードのSDカードスロットに挿し込めば準備完了です

## 配線しよう

配線する前にSKR V1.4用のケースをプリントしておくのがおすすめです

[ラズパイとSKR V1.4が入るケース](https://www.thingiverse.com/thing:3688967)のSTLデータが公開されているのでこれをプリントしましょう
（合計24時間ぐらいかかるので注意）


プリントできたら[Teaching Techの動画](https://www.youtube.com/watch?v=k83M5H796U8&feature=youtu.be)を見ながら配線を行いましょう

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/k83M5H796U8/0.jpg)](http://www.youtube.com/watch?v=k83M5H796U8)

リミットスイッチのコネクタのつめを切ったりします

配線が終わったら電源をつけてみましょう

ディスプレイがちゃんと表示されたら成功です

## モータドライバを載せよう

ディスプレイがついてもまだモータを動かすことはできません
モータドライバを載せてファームウェアの設定をする必要があります


3Dプリンタで使われるモータドライバにもいろいろありますが

とりあえず[A4988](https://www.amazon.co.jp/gp/product/B010Q17CAI/ref=ppx_yo_dt_b_asin_title_o08_s01?ie=UTF8&psc=1)を使いました

TMC2208などを使えばモータを静音化できますがそれは次回にします

モータドライバに合わせてファームウェアを変更しましょう

```Configuration.h
#define X_DRIVER_TYPE  A4988
#define Y_DRIVER_TYPE  A4988
#define Z_DRIVER_TYPE  A4988
#define E0_DRIVER_TYPE A4988

#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true
#define INVERT_E0_DIR false
```

Buildして`.pio/build/LPC1768/firmware.bin`をSDカードにコピーして電源を入れてください

これができたらA4988のポテンショメータを回して出力電流の制限を行いましょう

詳しくは[このブログ](https://iot.keicode.com/arduino/arduino-stepper-motor-a4988.php)を見てください

ちゃんと調整できたらディスプレイから`Move Axis`などの機能を使って
それぞれの軸の動作チェックを行いましょう


## SDカードからプリントできるようにしよう
SDカードにGcode入れてプリントしたいですよね

一行変更しましょう

```Configuration_adv.h
#define SDCARD_CONNECTION ONBOARD
```

これでいつも通り`Print from Media`でSDカードからファイルを選択して
プリントできるようになっているはずです！


# 軸を追加してみよう（★★★★☆）

あー！あと1軸あればあんなことができるのにな！
と思うことありますよね

SKR V1.4ならできます

[`NEMA17`という規格のステッピングモータ](https://www.amazon.co.jp/gp/product/B06XRFGTR4/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1)をもう一個買いましょう
そしてもちろんモータドライバも買っておきましょう

## ファームウェアを変更しよう

本当はX,Y,Z軸とは独立の新たな軸U軸みたいな感じにしたかったのですが
どうすればいいかわからず、、
*（誰か教えてください）*

2個目のX軸という設定にすると

- 1個目と同時に動くデュアルX軸モード
- 2個目のエクストルーダを取り付ける用のX軸として動くモード（2個目のエクストルーダの設定が必要）

のどちらかのモードになってしまったので

仕方なく2個目のE軸として設定を行いました

```Configuration.h
#define EXTRUDERS 2

#define TEMP_SENSOR_1 1

#define E1_DRIVER_TYPE A4988

#define INVERT_E1_DIR false
```

### ノズルの予熱が不要の場合

ちなみに私はこのプリンタをフードプリンタとして使っているので追加で変更点があります

通常はPLAやABSなどをフィラメントとして用いていますが
その場合、ノズルが冷えた状態でE軸を動かしてフィラメントを無理やり押し出すと
故障の原因になりますよね

そこでデフォルトでは`PREVENT_COLD_EXTRUSION`というモードが設定されています

しかしこのままだとノズルの温度を170度ぐらいにあげないと出力してくれないし
そもそもフードプリンタには不必要なホットエンド部分の配線もしなければならないので
私はこのモードをオフにしています

```Configuration.h
//#define PREVENT_COLD_EXTRUSION
//#define EXTRUDE_MINTEMP 170
```

これでファームウェアの変更ができたら
ディスプレイに2個目のE軸が表示されているはずです

`Move Axis`から動作チェックしてみましょう

## Gcodeについて

Gcodeでは

`G1 X100 Y100 E10`

のようなコマンドを使ってモータを動かしますが

E軸を追加した場合は
1個目のE軸と2個目のE軸を`T0`, `T1`というコマンドで切り替えることができます

*ただしEnnで指定するnnは2軸で共通なので注意*

自分でGcodeを生成している人はこのコマンドを使って制御を行いましょう

もちろんCuraなどのフリーのスライサーソフトでもE軸の追加を行うことができます
（CuraだとEnder3はE軸の追加に対応していないのでオリジナルの3Dプリンタを追加で設定する必要があるはず）

詳しくは[Teaching Techの動画](https://www.youtube.com/watch?v=xRtvbICRh1w)を見てください

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/xRtvbICRh1w/0.jpg)](http://www.youtube.com/watch?v=xRtvbICRh1w)

## 5軸目のパーツを設計しよう

5軸目も動くようになったら
モータに取り付けるパーツを設計しましょう

好きなところに軸を追加すれば完成です


# ラズパイと繋いでみよう（★★★★★）

WiFi経由でGcode送りたいなー、プリント中の様子をカメラでチェックしたいなー、ホットエンドに目標温度を与えた時のステップ応答見たいなー

[OctoPrint](https://octoprint.org/)ならできます

![スクリーンショット 2020-06-26 11.11.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/ac21f146-fc8d-a3a0-0274-7c432a7c9af9.png)

[ダウンロードページ](https://octoprint.org/download/)からzipファイルをダウンロードしたら
OctoPiというラズパイ用のイメージファイルがあるので
ラズパイのSDカードにイメージファイルを書き込みます
[Raspberry Pi Imager](https://www.raspberrypi.org/downloads/)を使うのがおすすめですよ

<img width="792" alt="スクリーンショット 2020-06-26 11.23.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/8f46dc95-02de-bdd2-3e42-42b3b74447c2.png">

書き込みが終わったら[ダウンロードページ](https://octoprint.org/download/)の説明にしたがって設定を行います

まずはSDカード内のファイル`octopi-wpa-supplicant.txt`を編集してWiFiの接続情報を加えます

```octopi-wpa-supplicant.txt
## WPA/WPA2 secured
network={
  ssid="KemakoWiFi"
  psk="12345"
}
```

準備できたらSDカードを挿入したラズパイとメインボードをUSBケーブル(TypeA - TypeB)で繋ぎます

![IMG_6024.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/f61a4de4-1a4f-1cbd-871c-2f489de3aaa7.jpeg)

この状態でラズパイの電源を入れてしばらく待ったら

```
$ ssh pi@octopi.local
```

でssh接続できます
（パスワードはraspberry）

接続できたら必要な設定をしていきます

```
$ sudo raspi-config
```

パスワードを変えたり、タイムゾーンをTokyoにしたりします

ここまでできたら http://octopi.local にアクセスしてみましょう

出てきた画面にしたがって設定を進めていくと

OctoPrintの画面が見れますね

左のConnectionというところからConnectというボタンを押すと

Ender-3の状態が確認できます！

![スクリーンショット 2020-06-25 17.06.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/997d8c20-810f-e102-12fc-faecc400ee1a.png)

ラズパイのカメラをEnder3につければ

![スクリーンショット 2020-07-06 12.16.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/b0413a0d-1f3c-786c-d7ef-5b088f7ad975.png)

カメラでチェックすることもできます

*使ったカメラマウントは[これ](https://www.thingiverse.com/thing:2886101)と[これ](https://www.thingiverse.com/thing:2987719)*

さらにターミナルからGcodeを送信することもできるし

![スクリーンショット 2020-07-06 12.06.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164897/7007e150-6744-3a71-bf1d-29407161d146.png)

Gcodeファイルをアップロードして印刷することもできます

3万円の格安プリンタが高機能になって高価なプリンタに近づいてきましたね

# 最後に

[キットではじめる3Dプリンタ自作入門](https://www.amazon.co.jp/gp/product/B083WJVLNL/ref=ppx_yo_dt_b_d_asin_title_o08?ie=UTF8&psc=1)という本がおすすめです
この本を読むとざっくり理解できます

そのあと私の推しYoutuberの[Teaching Tech](https://www.youtube.com/channel/UCbgBDBrwsikmtoLqtpc59Bw)をみると
他にもいろんな改造が紹介されていて楽しいですよ

モータドライバの交換やNeoPixelの接続、PIDチューニングについては
[続編](https://qiita.com/kemako/items/93c02796676c3bbf62a4)をご覧ください


# 参考
- [Teaching Tech](https://www.youtube.com/channel/UCbgBDBrwsikmtoLqtpc59Bw)
- [キットではじめる3Dプリンタ自作入門](https://www.amazon.co.jp/gp/product/B083WJVLNL/ref=ppx_yo_dt_b_d_asin_title_o08?ie=UTF8&psc=1)
- [【Ender-3改造】3Dプリンターのメインボードとモータードライバを取り替えて静音化した（TMC2208）](https://terutakke.com/diary/review-of-creality-3d-ender-3-tmc2208/)
- [Arduino と A4988 でステッピングモーターを制御する方法](https://iot.keicode.com/arduino/arduino-stepper-motor-a4988.php)
- [Ender 3 all in one, universal rear electronics case](https://www.thingiverse.com/thing:3688967)
- [GitHub - MarlinFirmware](https://github.com/MarlinFirmware/Marlin)
- [BIGTREETECH-SKR-V1.3/V1.4](https://github.com/bigtreetech/BIGTREETECH-SKR-V1.3/tree/master/BTT%20SKR%20V1.4)