FDD3

3つめのFDDもばらして、筐体の余分な部分をカットしました。

IMG_0166

IMG_0167

IMG_0171

IMG_0172

 

NEC製のFDDの鉄板が厚くて苦労しましたが、なんとか3つを切断。カットした歯は、ダイソーで売っているダイヤモンドカッターです。これしか手元になかったんですが、なかなか切れますね。

[youtube https://www.youtube.com/watch?v=5yeAIhoyprQ]

あとは、XYテーブルを作って、Z軸にペンを持たせてやる感じです。

 

XYテーブルは、稼動部分の上に乗せるんですが、フラットな面を作らないとなので、どうしようかなと考え中です。

現場あわせ的な感じで、やってみます。次回に報告!

FDD4

現場合わせで、XYテーブルを作成しましたyo。

IMG_0179

IMG_0180

フラットな面は、5インチベイの目隠し部分が手元にあったのでそれを流用しました。接着は、グルーガンです。それなりの強度もあるようだし、とりあえずこれでいいか的な感じですが。もともとFDDのピックアップ部分なので、乗せるにはそれなりの工夫が必要ですね。

 

次は、Z軸のペンを移動させる縦軸をどうするかです。ここは、ペンを交換したりしたいので、なにか一工夫が必要です。3Dプリンターがあれば、ジョイントの部分を作るのですが、残念ながら無いのでジョイント部分をどうするかをあれこれ思案中。

 

また重要なポイントで、「ボロさをどう演出するか?」です。

 

動画も作りましたので、よかったらどうぞ。

[youtube https://www.youtube.com/watch?v=lAH7oG_1HfU]

だんだんと、プロッターに近づきつつありますね。

 

コードは、こんな感じです。AccelStepper のライブラリを使っています。関数はまだ全部わかっていませんが、おいおい調べてみます。

/*
 Junk FDD Stepper Motor Control Sample.
 xy table moving sample.
 AccelStepper ver 1.47
 JunkHack 2015.04.26
 */

#include <AccelStepper.h>

AccelStepper y_stepper(1, 3, 2); // 1 > two wires. 3 > STEP pin , 2 > DIR pin.
AccelStepper x_stepper(1, 5, 4); // 1 > two wires. 5 > STEP pin , 4 > DIR pin.
int halfRev = 700; // 片道移動幅 ( Step )
int halfdelay = 10;

void setup() {
    y_stepper.setMaxSpeed(3000); // 最大許容速度
    y_stepper.setAcceleration(6000); // 加速
    x_stepper.setMaxSpeed(6000);
    x_stepper.setAcceleration(12000);
}
void loop() {
    if (y_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        y_stepper.moveTo(halfRev);
    }
    if (x_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        x_stepper.moveTo(halfRev);
    }
    y_stepper.run();
    x_stepper.run();
}

FDD5

Z軸用のEasyDriver を半田付け。

退屈な映像ですが、よかったらどうぞ。

[youtube https://www.youtube.com/watch?v=kW4_Ny8mHvA]

この小手、もう30年くらいつかっているやつです。

 

で、Z軸のペンをつける部分を100円均一で探してきました。

IMG_0184

こんなのを探していたんですが、ぴったりです。付け根の金具をはずして、ほっとボンドでくっつけました。

IMG_0182

筐体は、FDDをはずしたPCのジャンク筐体に使用されていたプラスティック製の物です。ほどよくカットして、台を調整すればちょうどいい感じかなと。

台は面積を広げれば、CD-ROMやDVDなんかのレーベル面にも書けるかもです。まぁ、2cm四方なので微妙ですが。

ブリキとかを使わないとボロさが出ないかなぁと思いますが、まぁ装飾はあとで考えることにします。

 

さて、QKしたらカットしてきますかね。

で、カットしました。

IMG_0185

位置関係などはよさそうです。

IMG_0189

CD-ROM も収まるくらいの奥行きが取れそうです。

 

まだ仮なので、横にして動作を確認しました。こんな感じです。

[youtube https://www.youtube.com/watch?v=Sh5Dr_-QU-A]

うーん、ぼろい!

CP2102 Serial Converter

前回、続々と素材をゲット した中のパーツを2つ試してみました。

まず、あまりの安さに手を出したPro Mini 168 Mini ATMEGA168 5V/16MHz の10個入りの中の1つを半田付け。で、こいつはUSBシリアルのインターフェイスを持っていないので、USB UARTのCP2102 Male USB 2.0 to TTL UART Module Serial Converter をつなげる形でプログラムを転送します。

 

で、Pro Mini 168 5V はなんの苦労もなくLEDが光って動作確認はできたのですが、このシリアルコンバータの接続が???。購入時は気に留めていなかったのですが、DTR端子が見当たりません。

とりあえず、以下のように4本をつなげてデータ転送してみたのですがエラーが出てだめ。

IMG_0194 2

うーん、DTRを取り出そうにもそんな端子が見当たらず、グーぐる先生に聞いてみたところ、どうやらリセットボタンを使ってやればよろしいようです。

 

映像で見たほうがわかりやすいので、どうぞ。

[youtube https://www.youtube.com/watch?v=k4aoLH-8WQw]

DTRがなくても、こんなヒト手間をかければよろしいようです。

とはいっても、やっぱりDTR端子は欲しいので、次回の買い物のついででAliexpress のどっかでゲットすることにします。

 

で、このProMiniは今作ってるJunkFDDプロッターに鎮座させる予定です。容量とか足りるのかどうかはまだ未知ですが。まぁ、そんなにたいしたプログラムを乗っけるわけじゃないのでオーバースペックかもですが。なんせ、1個160円くらいなので気安く使ってしまえという発想ですが。

 

とりあえず、ProMiniとCP2102の検証でした。

FDD6

さぁ、お休みに突入しましたのでJunkなFDDでプロッターを作る続きの作業をやりましたよ。

まず、筐体を仮組みしていたのを本格的に組み付け作業です。2つ穴をあけてボルト締めした後、いらないプラスティック部分を切り落とし、古いパソコンの筐体の裏側に貼り付けてあった金属板を切り出しました。

IMG_0216

これは、手曲げ加工して筐体に貼り付けて、ボロイ雰囲気を出そうという魂胆です。素材を見るとスリット加工してあり、ほどよく腐食している部分がかっこいいなと、ここを使うことにしました。

昔のPCには、電磁波防止だったのでしょうか? こんなパーツと筐体加工があったとはね。

IMG_0215

で、程よく加工して両面テープで貼り付けました。どうでしょうかボロイ雰囲気でていますかね? えっ?そんな加工しなくても十分ボロイですって? 確かに。

 

あと、ガレージのジャンクを物色していたら、バイクのバッテリーがありました。12Vのやつでもう使えないんだけども、モーターくらい回るかもと思い充電してみることに。

IMG_0222

容量が2.3Aくらいなので1/10くらいのの0.3Aで10時間くらい充電してみまいた。充電前は、4Vくらいあったのでもしかしたら使えるかもと思いましたが、充電後10.34Vくらい。うーん、13Vは超えていないようでだめっぽいかも。

 

いちおう、モーターは回りましたが電圧降下が激しくすぐに6V以下になってしまいます。鉛蓄電池の原理は知りませんが、電気を溜め込む要素が不足しているんでしょうね。これは寿命です。

筐体の一番下に置いて、重しにはなりそうなのでとりあえず作業を続行。最終的には、ソーラーパネルのちっこいのを上に乗せていつでも使えるCD-ROMレーベルプロッターにしようかなという魂胆だったのですが、、、まぁ、おいおい考えるとして。

 

で、ちょっと配線を変えて、コードはこんな感じにしました。AccelStepper でZ軸を追加した形です。Step と DIR のピン配線は前回と若干変えてあります。

 

/*
 Junk FDD Stepper Motor Control Sample.
 xy table moving sample.
 AccelStepper ver 1.47
 JunkHack 2015.04.26
          2015.05.04 Z-axies add
 */

#include <AccelStepper.h>

AccelStepper y_stepper(1, 2, 5); // 1 > two wires. 2 > STEP pin , 5 > DIR pin.
AccelStepper x_stepper(1, 3, 6); // 1 > two wires. 3 > STEP pin , 6 > DIR pin.
AccelStepper z_stepper(1, 4, 7); // 1 > two wires. 4 > STEP pin , 7 > DIR pin.
int halfRev = 700; // 片道移動幅 ( Step )
int halfdelay = 10;

void setup() {
    y_stepper.setMaxSpeed(6000); // 最大許容速度
    y_stepper.setAcceleration(12000); // 加速
    x_stepper.setMaxSpeed(3000);
    x_stepper.setAcceleration(6000);
    z_stepper.setMaxSpeed(3000);
    z_stepper.setAcceleration(12000);
}
void loop() {
    if (y_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        y_stepper.moveTo(halfRev);
    }
    if (x_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        x_stepper.moveTo(halfRev);
    }
    if (z_stepper.distanceToGo() == 0) {
        delay(halfdelay);
        halfRev = -halfRev;
        z_stepper.moveTo(halfRev);
    }
    y_stepper.run();
    x_stepper.run();
    z_stepper.run();
}

 

とりあえず、これで3軸が動きました。動画もよかったらどうぞ。

[youtube https://www.youtube.com/watch?v=eTOpfWcYASM]

次なる課題は、G-CODEという座標軸を操作するものを送り込むようにしたいのですが、どうやるのかよくわかりません。ちょっと調べることにします。

※現在、ものすごくはまり中。次号にて報告します。

FDD7

さて、前回まででプロッターとしての機械的な部分は完成したのであとは、それを送り込むソフトウェア側の問題です。

試してみて、堂々巡りになってきているのでとりあえず情報を整理してみます。簡単に言えば、はまってます。

 

全体の仕組みとしては、以下のようです。

・Arduino 側でG-CODE を受けて解釈し、モータードライバーへ信号を出す仕組み。

GRBL
https://github.com/grbl/grbl/wiki/Compiling-Grbl

HexUploader

https://github.com/paulkaplan/HexUploader/wiki/Using-HexUploader

http://paulkaplan.me/HexUploader/

・PCからG-Code をUSB シリアル経由で流し込む仕組み

いろいろあります。osx で対象となるものは、以下の2つが見つかりました。

Universal-G-Code-Sender
https://github.com/winder/Universal-G-Code-Sender/downloads

https://github.com/winder/Universal-G-Code-Sender

Grbl Controller
http://zapmaker.grblcontroller.s3-website-us-west-2.amazonaws.com/

・G-CODE を作成

こちらも、いろいろとあるようです。3次元加工ができるものから、プロッター用途までさまざま。フリーで使えるものを対象に選んでみました。

InkScape + Inkscape Gcodetools plug-in

https://inkscape.org/en/download/

http://www.cnc-club.ru/forum/viewtopic.php?t=35

or

InkScape + Big Blue Saw DXF Output

PyCAMでG-Code を生成 (以下に、Homebrew での手順)

http://www.shapeoko.com/wiki/index.php/PyCAM-MacOS

or

WEB Services の Easel

http://app.easel.com/

 

とりあえず、Arduino 側へgrblのバイナリを転送します。

以下からダウンロード。HexUploader を使いアップロードします。

https://github.com/grbl/grbl

osx だと、HexUploader が使えるらしいんですがアップロード方法がよくわからず、結局VirtualBox のWIN7で Xloader を使いアップロードしました。

screen1

http://xloader.russemotto.com/

 

VirtualBoxだと、一回USBをはずしてつければ認識するはず。ドライバーは以下を入れました。

image

http://wch.cn/download/CH341SER_ZIP.html

 

以下のように、COM4 で認識したのでXloader のポートを合わせて、Device にはNano を選択。

image

 

 

 

ちょっと、ここらで言葉の整理を。調べ物をしていると、CAD と CAM という言葉が出てきます。

CAD はデザインする computer aided design でなじみがありますが、CAM とはCNC マシンに渡すデータを作成する処理とのこと。つまり、CAM とはG-Code を作成する処理のことと理解しました。

 

1

これがスタンダードなワークフロー。そして、これをすっ飛ばすWEBサービスがEaselというのがあるようです。

 

2

 

Inventables 社のアカウントを作ります。

https://www.inventables.com/sessions/new

Inventables__The_Hardware_Store_for_Designers

ログインして、図を書きMachine から各種設定をしてAdvanced からG-Code が出るようです。

Easel_-_star

ちょっとよくわかりませんが、とりあえずG-Code を作成してみます。

Easel_-_star 2

Generate g-codeで3D画面に出ます。Export してファイルに出します。

Easel_-_star 3

このファイルは以下のよう。

G21
G90
G1 Z2.000 F228.6
M3 S18000
G1 Z2.000 F228.6
G0 X14.521 Y14.973
G1 Z-0.051 F228.6
G1 X14.521 Y14.973 F635.0
G1 X21.512 Y13.953 F635.0
G1 X16.456 Y9.024 F635.0
G1 X17.646 Y2.066 F635.0
G1 X11.397 Y5.350 F635.0
G1 X5.151 Y2.066 F635.0
G1 X6.341 Y9.027 F635.0
G1 X1.284 Y13.953 F635.0
G1 X8.276 Y14.973 F635.0
G1 X11.400 Y21.300 F635.0
G1 X14.521 Y14.973 F635.0
G1 Z2.000 F228.6
M5
G0 X0.000 Y0.000

 

で、これをGrbl Controller 3.6.1 から読み込んでみます。これは以下にユーザがビルドしたものがあります。

https://github.com/zapmaker/GrblHoming/issues/86

Grbl_Controller_3_6_1_Mac_Binary_·_Issue__86_·_zapmaker_GrblHoming

で、読み込んだ状態。

Grbl_Controller_3_6_1_と__Users_ishizaka_Downloads_と__Users_ishizaka_Desktop_cnc_GrblController361

 

おおおお~。

設定は以下のパラメーターをCommand のところから、流し込みました。

$0 = 60
$1 = 60
$2 = 50
$3 = 100
$4 = 220.000
$5 = 220.000
$6 = 28
$7 = 50
$8 = 25.000
$9 = 0.050
$10 = 0.100
$11 = 25
$12 = 3
$13 = 0
$14 = 1
$15 = 0
$16 = 0
$17 = 0
$18 = 0
$19 = 220.000
$20 = 220.000
$21 = 100
$22 = 1.000

このパラメータの意味は、以下のようです。よくわかりませんので、今のところ、適当に合わせます。

$0 = (steps/mm x)
$1 = (steps/mm y)
$2 = (steps/mm z)
$3 = (step pulse, usec)
$4 = (default feed, mm/min)
$5 = (default seek, mm/min)
$6 = (step port invert mask, int:00011100)
$7 = (step idle delay, msec)
$8 = (acceleration, mm/sec^2)
$9 = (junction deviation, mm)
$10 = (arc, mm/segment)
$11 = (n-arc correction, int)
$12 = (n-decimals, int)
$13 = (report inches, bool)
$14 = (auto start, bool)
$15 = (invert step enable, bool)
$16 = (hard limits, bool)
$17 = (homing cycle, bool)
$18 = (homing dir invert mask, int:00000000)
$19 = (homing feed, mm/min)
$20 = (homing seek, mm/min)
$21 = (homing debounce, msec)
$22 = (homing pull-off, mm)

ゼロポイントを合わせるやりかたがいまいちよくわかりませんが、これで動かしてみます。

※映像準備中

とりあえず、Z軸が逆に動いてしまう幹事ですが、動いているようです。

 

ふぅ。なんとかここまでたどり着きました。まだ課題があります。

・Z軸の動作を逆にしたい

・ゼロポイントを合わせる方法

・XYテーブルの移動量の設定

・速く動作させるための設定

 

なかなか、奥が深いですね。まさか、ジャンクはFDDでここまで勉強できるとは。