フィラメント自動供給装置

FlashForge Dreamerは、1kgのフィラメントはホルダーをプリントしないと装着できない。
やってみたけど、どうもフィラメントの重量と回転慣性でプリントの品質に影響があることが判明しました。
（スプールが重たいとエクストルーダーの供給量が減るのと、ステッピングモーターの脱調）

スプールが自動的に回転して、フィラメントの張力をなくす装置がないのか調べたところ、
そのような製品は全く販売されていない。
かろうじてベアリングを使った、回転がスムーズになるスプールホルダーがあるくらい。

調べまくったところ、スプール回転装置の動画をyoutubeで見つけたので
真似して作ってみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/4bdf4819-e49d-6f22-5532-7d480fe9e3b4.png)
(基板をまだ箱に入れてない）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/5ce0cea5-c6e4-021a-af6d-214faba45961.png)
（実物よりも幅を小さくして再設計したもの。設計時はスプールがもっと蛇行？ふらつき？するかと思ってましたが、蛇行は無かったためウレタンローラーはギリギリの幅でも問題ありません）

3DCAD図はこちら
https://grabcad.com/library/fdm-filament-spool-feeder-1

部品表（合計1万3千円超えてますね・・・1万円未満を目標にしてるけど、いつも超えちゃう）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/3d2efd36-332d-eaf3-b46f-88fb55e9c75a.png)
（CAD図と同じ、幅が狭い設計での部品表です）

スイッチ部分の構造（3Dプリント）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664748/c4410b24-1684-40fb-c51d-c2a5eb9a71e2.png)
（CAD上はゴム紐が穴を通ってない・・・（笑））

ゴムが引っ張られるとリミットスイッチがONになって、モーターが回る仕組み。
ゴムのテンションとレバー根本のM3ネジの締め付け強さを調整して、
うまくテンションがかかる（かからない）ようにする必要があります。

ステッピングモーターを動かすためのArduinoスケッチ
（accelstepperの例をよく理解せずいじっただけなので、
ムダや間違いがあるかもしれません（笑））

```
/**
 * spool feeder with TMC2130 SPI
 * PIN 4 = limit switch or other sensor input
*/
#define EN_PIN           7  // Enable
#define DIR_PIN          5  // Direction
#define STEP_PIN         6  // Step
#define CS_PIN           10 // Chip select
#define SW_MOSI          11 // Software Master Out Slave In (MOSI)
#define SW_MISO          12 // Software Master In Slave Out (MISO)
#define SW_SCK           13 // Software Slave Clock (SCK)

int val = 0;
int cc = 0;
constexpr uint32_t steps_per_mm = 80;

#include <TMC2130Stepper.h>
TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN, CS_PIN);

#include <AccelStepper.h>
AccelStepper stepper = AccelStepper(stepper.DRIVER, STEP_PIN, DIR_PIN);

void setup() {
    SPI.begin();
    Serial.begin(9600);
    while(!Serial);
    Serial.println("Start...");
    pinMode(CS_PIN, OUTPUT);
    digitalWrite(CS_PIN, HIGH);

    pinMode(4, INPUT);
    
    driver.begin();             // Initiate pins and registeries
    driver.rms_current(600);    // Set stepper current to 600mA. The command is the same as command TMC2130.setCurrent(600, 0.11, 0.5);
    driver.stealthChop(1);      // Enable extremely quiet stepping
    driver.stealth_autoscale(1);
    driver.microsteps(16);

    
    stepper.setMaxSpeed(4000);
    stepper.setAcceleration(2000);
    stepper.setEnablePin(EN_PIN);
    stepper.setPinsInverted(true, false, true);
    stepper.enableOutputs();
}

void loop() {
    val = digitalRead(4);
    if (val == HIGH){
       stepper.move(50*steps_per_mm);  // moving 50
       stepper.enableOutputs();
    }
stepper.run();
}
```

arduinoとTMC2130SPIの接続はここを参照しました。
https://grahamjessup.com/tmc2130/




動いているところ（2倍速）
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">フィラメント自動供給機　仮稼働中 <a href="https://t.co/xoT5EbYHMt">pic.twitter.com/xoT5EbYHMt</a></p>&mdash; あっしー (@AK_spiral) <a href="https://twitter.com/AK_spiral/status/1494937556013977603?ref_src=twsrc%5Etfw">February 19, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>