NC翼型スチロールカッター 作成:2005-05-09〜

NC制御で発泡スチロールを切る装置を作ります。刃物で切るのではなくニクロム線で切ります。


汎用のNCソフトは使えないのでソフトも開発する必要があります。

精度はあまり必要ないのでアリミゾのX−Yテーブルではなく、平行に並べたシャフト上をスライドさせる方式にします。
手始めにシャフトを互いに組み立てるためのジョイントから作り始めます。

これがジョイントの図面。シャフトの直径は13mm。シャフトはS45Cのミガキ棒です。16個も作らなければなりません。バイスに固定する作業の手間だけでもばかにならないのでバイスハンドルを先に作ってからにします。


作成途中のジョイントと素材。これを全部加工しなければならない。1個1時間でも16時間かかる計算です。


端面を削るだけで一苦労でした


上の写真の状態から、ここまで加工するのに5時間かかりました。完成までまだまだです。


これだけのドリルを使うのでドリル交換の手間がかかります。16個の部品の穴あけが半分終わって出たキリコがこれだけ。


直交する穴の間隔は精度が必要なので13mmのミガキ丸棒を差し込んで、それをバイスの側面に当てて全部品が同じ間隔になるようにしています。


ドリルの交換が面倒なので2本減らして3本で穴あけをするように変更しました。少しずつあけても精度にあまり影響はないようです。上の5本組であけたものとの差は認められません。


モーターを回す実験回路の回路図を作りました。232Cインターフェースやフラッシュメモリーが付いていますがモーターを回すだけなら不要です。この回路図はDROからの流用です。使えそうな部品を残してありますが最終形で残っているか否か現時点では定かではありません。
NCAIRFOIL.pdf へのリンク

1mmのすりわりを入れて完成。バンドソー並の速度でスリワリを入れたところでメタルソーの刃がダメになりました。過熱が原因と思われます。完成したのはまだ3個だけです。


秋葉原の秋月電子でモーターを買ってきました。制御は4軸ですがモーターは6個使用します。黒いのはFETが4つ内蔵されたモータードライバー(東芝MP4401)です。当初トランジスターを4つ使う予定でしたがこちらの方がプリント基板のパターンがシンプルになります。これ1つでモーター1個をドライブできます。


基板を作るのはまだ先だが、パターンを作ってみました。サイズは100mm×150mm


MP4401に合わせて回路図も少し変更。
NCAIRFOIL2.pdf へのリンク

固定しやすいようにモーターの上蓋と下蓋を入れ替えることにしました。中身はこんなになっています。


メタルソーでのスリワリを入れはどうもうまくいきません。購入したばかりのメタルソーを2枚もダメにしてしまいました。あきらめてバンドソーでスリワリを入れました。仕上がりはあまりきれいではありませんが、実用上は問題ありません。


このように組み立てるわけではありませんが作ったジョイントを使ってスライド部分の構造を考え中。


16個のジョイントを使って枠を組み立てました。左右の長さは1mです。高さ奥行きは約30cmです。


スライド部分もジョイントと同じく18mm角のミガキ棒から作ることにしました。


モーター駆動回路の実験開始。足が太いモータードライバーを直接挿すとブレッドボードが痛むのでZIFソケットを使っています。


間違っている回路図を元に組み立てたのでモーターを回すだけでちょっと手こずりました。
回りました。 <− MOVIE

回路図が間違っていればプリント基板パターンも間違ってしまいます。修正したパターンをA3のコピー用紙に印刷して誤配線がないか確認。実物大でも印刷して部品が干渉していないかも確認しなければなりません。地味な作業です。


新品の感光基板なのに現像に4〜5分もかかる。何か変???


ライトが何となく暗いような気がする。これが原因か? 塩化第2鉄溶液も真っ黒、これもまた寿命か?


まとめて5枚作りました。現像がうまくいかなかったので、あまりきれいに出来ませんでした。


調べると感光用ライト(ブラックライト FL10BL)の寿命は3500時間らしい、2時間程度しか使ってないので寿命はまだのはず。天井の蛍光灯に繋ぎ換えてみましたが明るさは同じ。機械の方がいかれているわけではなさそうです。


寿命ついでに、これはドリルの寿命。切れなくなると周囲が盛り上がります。並んであいているのは新品のドリルで開けた物。基板4〜5枚で寿命がくるみたいです。この写真の穴径は0.8mm。リード線は0.6mm以下の物が多いので0.8mm径のドリルを一番多用します。


今日は休暇中なので昼間工作をしています。直射日光で再感光しています。昨日保存しておいた現像液に浸けて感光剤を除去します。感光時間は十分すぎるくらいなので、いつもなら10秒できれいになります。...が、今回は落ちるのに2〜3分かかりました。感光剤の成分が変わったか、室温が高かったせいで感光剤が変質してしまったのかもしれません。現像液で感光剤が再除去出来るということは現像中にも感光が進んでいることを意味しています。感光が進むと青から緑へ変色します。上の写真よりだいぶ緑色になっています。


銅表面は数時間すると茶色く酸化します。現像液を落としたら直ぐこれを吹きかけておきます。湿度が高い時吹きかけると白い斑点が出るので出来るだけ湿度の低い昼間に吹きかけます。通常は雨の日を避けるだけで十分ですが、ここは山の麓なので湿度が高く使う時間を選ぶ必要があります。


基板上に取り付けるスイッチのピン間隔を間違えてました。寸法上このスイッチの取り付けは断念して一回り小さい物を又裂き状態で取り付けました。右上に4つ並んでいる穴がモーター用コネクターが付く箇所です。


6本足のコネクターの足を2本引き抜いてモーター用コネクターとして使用します。ラジオペンチで軽く引っ張るだけで簡単に抜けます。コネクターを全部付けた後で気が付きました。モーターは5本足であることを。コネクターを全部はずして足を再度差し込んで、基板に穴を開け基板に無理矢理ハンダ付け。5番目の足にはパターンがないのでかなり強引なハンダ付けになっています。


コントローラーが完成しました。1.5mmのアルミ版に取り付けてあります。アルミ版は20V電源レギュレター(基板の裏側に張り付いています)のヒートシンクになっています。100Vむき出しですがこのまま使います。回路図にはヒューズやスイッチもありますが面倒なので止めました。コンデンサーの容量もパーツケースにあった物を適当に取り付けたので回路図とあまり合っていません。この回路のコンデンサー容量はいいかげんでも大丈夫です。計算してませんが全部で¥7000〜¥8000になると思います。(トランスが高い)


Gコードを解釈して動作するだけの処理能力はありません。だいたいの処理フローはこんなです。
 1)一定の時間間隔(10msec程度)でモーターを1ステップだけ「正転」「そのまま」「逆転」させるかPC側のソフトで計算しておく
 2)RS−232C経由でコントローラーに計算したデータを送り込む
 3)コントローラーはデータが送られてくるとそれをフラッシュメモリー(8ピンのIC)に書き込む
 4)コントローラーは全てのデータを受信したらそのまま待機する
 5)コントローラー上のスイッチ(3つある物の内どれか)を押すと、一定間隔でフラッシュメモリーからデータを読み込んでそれに従ってモーターを回す
フラッシュメモリーに一端データを書き込むのはPCと切り離しても動くようにするためです。

発泡スチロールを切るために必要な速度は1mm/秒程度です。秋月電子のステッピングモーターの回転速度は最大0.5回転/秒程度しか出ません。1.25mmピッチのM8ネジで送ると0.625mm/秒しか出ません。ネジで送る方式が最も構造が簡単でよいのですがもっと高速なモーターに変えなければならなくなります。出費が大きくなるので歯付きベルトで駆動する方式にしてみます。

ブレッドボードで実験していたときより何故か早く回るようになりました。最大1.66回転/秒で回ります。但しこの回転数ではトルクがほとんど無いので実用最大回転数は1回転/秒といったところです。直列抵抗を入れると時定数が変化して最大回転数が上がるらしいのですがあまり変化はありませんでした。直列に抵抗を入れると電圧降下してしまうので電源電圧も上げなければ実際の効果は確認できません。写真はちょうど良い抵抗値のセメント抵抗がなかったので10Ωの抵抗を5〜6個数珠つなぎにして実験しているところです。何とかぎりぎりの速度が確保できそうなのでベルト駆動は止めてネジ送りに再度方針変更です。


限界速度 <− MOVIE 電圧20V

モーター6個を全部繋いでみましたが何故か一つだけ動きません。原因を調べるためにブレッドボードに回路を組み立ててみましたがどうやらCPUとモータードライバーの接続の方法に問題があるようです。うまく動く回路をブレッドボード上に組み上げたいのですがモータードライバーをハンダ付けした基板から取り外すのは困難です。いつもなら必ず1つよけいに購入しておくのですが今回は必要数の6個しか購入していませんでした。とりあえず1個動かなくても先に進めるので原因調査はあとまわしにします。


5個まとめて回してみました <− MOVIE 5個いっぺんに回すとかなりうるさい 背景に映っている茶色い小瓶はドリンク剤ではなくキンカンです。

翼の形に添ってそのままニクロム線を動かすと線径の半分だけ小さい物が出来ます。実際はニクロム線径(約0.45mm)よりかなり多め(だいたい0.8mm)に溶けるので0.4mmほど小さい物が出来ます。発泡スチロールのままでは強度が不足するので表面には厚さ1mm程度のバルサを張ります、その分だけ小さい物を作るためには翼型より0.6ミリより内側にオフセットしたラインを通るようにニクロム線を動かせばよいことになります。内側の輪郭がニクロム線を動かす軌跡です。
オフセットした翼型の作図はCADを使用すると簡単に出来るのでNCデータはCADで作り、CADのスクリプトでオフセットしたデータをCSVに書き出し、さらにそれを加工(Perlで作ろうと思います)してモーター駆動データを作ることにします。


書き出されたCSVはこんな物です。
翼型は曲線に見えますが、ミクロで見ると連続した線分の集合です。
1列目:内部データ。これは座標ではない。BUG取りの参考のために書き出しているだけ
2列目:線分始点X座標値
3列目:線分始点Y座標値
4列目:線分終点X座標値
5列目:線分終点Y座標値

これを書き出す鍋CADのスクリプト

翼のつけ根と翼端の形状や大きさが違うとき、ニクロム線の両端は翼型の傾きが変化するポイント(○が付いている部分)を同時に通過しなければ翼の前縁や後縁がへこんだ翼になってしまいます。傾きが変化している部分はプログラム(鍋CADのスクリプト)で機械的に求められます。この画面はプログラムで傾きの変化点に○を書いたものです。慣れてきたせいもあってNCデータまで鍋CADのスクリプトで作ってしまった方が簡単に思えてきました。


プログラムは簡単ですが、とにかく面倒です。元の図形は線分だけで構成されていますが図形をオフセットすると線分と円弧になります。以下の図は正方形を外側にオフセットしたものですが。その図形は直線と円弧で構成されています。これと同じ理屈で翼型を内側に0.6mmオフセットした上の図形も翼の下面が直線と円弧で構成されています。Rが緩やかなので円弧部分は円弧の始点−終点を結ぶ直線として扱えば十分ですが、鍋CADでは円弧を「中心のXY座標、円弧の半径、円弧の開始、終了角度」で表しているので始点終点の座標は計算しなければなりません。


何故か1個だけ動かないモーターがあるので、その問題の絞り込みをします。同じプログラムがブレッドボードに組んだ回路では動くのでMP4401が1個だけ死んでいる可能性が高い。


やはりMP4401が死んでました。交換したら動くようになりました。電気工作を長い間やっていますが、半導体が死んでいたことは滅多にありません。(死んでいたのではなく殺してしまったのかもしれません) 差し替えて動くのですから、静電気かハンダ付けの熱でやられたかのどちらかでしょう。ブレッドボードで回路を組んでいると誤配線はしょっちゅうやりますが、今までに死んだ(殺した)半導体は、これを含めて2年間で2個だけです。案外丈夫なものです。


NCデータは一端このメモリーに蓄積するようにします。ATMEL製の24C1024です。1024という数値はメモリー容量のビット数を表していてバイトに換算すると128Kバイトになります。フラッシュメモリーなので電源を切っても内容は保持されます。128Kバイトを書き込むのに要する時間は実測6.5秒でした。1バイト単位で書き込むと1バイト書き込むたびに5ミリ秒待たなければなりませんが、最大の256バイト単位で書き込むと256バイトにつき5ミリ秒の待ち時間で済むので高速に書き込めます。読み込み速度のほうは5ミリ秒の待ち時間が必要ないので4割くらい早く読み込めます。次は232Cのプログラムに取りかかります。


これはRS232CのインターフェースIC、ADM3202ANです。上の物同様、秋月電子で購入した物です。特にインテリジェントな機能があるわけではなく5VのTTL電圧をRS232Cの±12Vに変換するだけの物です。ICの回りに並んでいる青い物はコンデンサーです。このコンデンサーに電気を蓄えて5Vから12Vを作り出しています。


115200bpsでも問題なく通信できました。テストにはWindows付属のハイパーターミナルを使いました。NC基板側のソフトは232Cから1文字受信して、受信した文字をそのままハイパーターミナルに返す簡単な物です。双方向通信プログラムの開発はRS232Cに限らずTCP/IP等でも「受信した1文字を、そのまま送信する」プログラムを作ってみるのが定石です。電子回路部分の基本的な機能確認はこれでおしまいです。次は平面座標上の2点間を直線移動させるためのロジックを考えます。


直線補間は簡単そうで結構面倒でした。
太い線の升目がステッピングモーター1ステップで動く距離を表しています。M10のネジで送るとピッチが1.5mm、ステッピングモーターは200ステップで1回転なので1マスの1辺の長さ=1.5/200mmになります。1マスをさらに細い線で4等分しています、これは数学で言う補助線です。
定規で引いた赤い矢印と青い矢印が動かしたい軌跡です。この軌跡が通過する升目をピンクと水色のラインマーカーで塗ってみました。そして塗られた升目に接している太い線の交点に○印を付けていきます。そして○印を順番につないでいったもの、この図ではフリーハンドの矢印が実際にデジタル制御で動かす軌跡になります。


「線が通過するマスをラインマーカーで塗る」と言葉で書くと簡単ですが、これは1マスを構成する線分A−B、線分B−C、線分C−D、線分D−Aのうち、どれか2つの線分が線分E−Fと交わる事を意味します。
とりあえず、線分C−Dと線分E−Fの交点について考えてみます。(1つが出来ればあとは4回同じ事をやればいいのですから)
線分が交わることは、直線(無限長)と直線の交点が線分C−D、線分E−Fの間にある事を証明すればOKです。直線の式は Y=aX+b で(懐かしい...)aが直線の傾き、bがX=0の時のY座標の値(確かy切片という)です。点Eの座標をEx、Eyってな具合に書くとすると、傾きは(Fy−Ey)/(Fx−Ex)、y切片のほうはY=aX+bの式をb=Y−aXと変形してXとYにEもしくはFの座標を入れてあげれば求めることが出来ます。直線E−Fの式が出来れば後は簡単です。直線C−Dの式は、もし点CのX座標が「5」ならX=5という簡単な式です。既に直線E−Fの式Y=aX+bのaもbも値が求められていますから、この式のXに「5」を代入すれば、交点のY座標を求めることが出来ます。
線分が交わるのと直線が交わるのは意味が違います。平行でなければ直線は必ず交わりますが、線分の場合はそうではありません。交点の座標をKx,Kyとすると
 Dx>=Kx>=Cx
 Dy>=Ky>=Cy
 Fx>=Kx>=Ex
 Fy>=Ky>=Ey
の4式が成り立っていれば線分E−Fと線分C−Dは交わっているといえます。


1ステップ移動するのにかかる時間は移動させる経路の長さをステップ数で単純に割ったものとします、下の例ではA−B間の距離を5で割ります。結果的に1ステップ移動させるのにかける時間は各線分毎に異なったものになります。移動させる距離はSQRT((Bx−Ax)^2+(Bx−Ax)^2)です。時間はタイマーで生成します。


今度は例外ケースについて考えてみます。
このようなド真ん中を通る垂直、水平線は赤い経路を取る方法と青い経路を取る方法の2通り存在してしまいます。また右のように、垂直、水平線以外でもド真ん中を通る線は赤い経路と青い経路の2通りが存在します。どちらでも問題はないので、どちらかに決めてしまえばよさそうです。


計算を簡単にするためにどちらの領域でもない(どちらの領域でもある)境界線上は原点に近い方の領土とすることにします。従って、下の写真の例ではC点やD点は通過せずにA点から一気にB点に移動します。斜め45度の移動を認めずに「斜め45度に移動するときは必ず左回りで目的地にたどり着く」という水色の線で書いた方法もありますが、モーターを同時に2個動かすことに問題はないので「45度移動も有り」とします。


A,Bはそれぞれ翼のつけ根の断面形状、翼の先端の断面形状です。(もちろん実際の断面はこんなものではありません)。発泡スチロールを切断するニクロム線は「A1とB1」−>「A2とB2」−>「A3とB3」−>「A1とB1」を同時に通過しなければなりません。下の例のように線分の本数が異なっていると計算が複雑になるのでB3−B1間をA3−A4とA4−A1の長さの比率で分割し実際には存在しないB4点を生成して線の本数を合わせてしまうことにします。


翼のつけ根と翼端の形状が異なると状況はさらに複雑になります。青い水色の部分が翼の両端の断面形状です、翼を設計するときはこの断面形状のみを考えます。ニクロム線の両端はワークの両端より外側にあるため、実際にニクロム線の両端が描く軌跡はA1〜A4,B1〜B4のように翼断面形状とは異なったものになります。また、A側の動きに合わせてB側を動かすようにします。Bは常にAの動きに従うように動かします。移動速度はA側のみに与えます。A側の軌跡がB側の軌跡より小さいとA側に最高速度を与えたときB側がついてこられなくなるのでプログラムでこれを見つけてエラーを出せるようにする必要があります。この例のように極端にサイズが異なると小さい側が加熱されすぎになりますが、これは防ぎようがありません。


引越の時に分解してしまったので再度組み立て直しました。平らな鉄板の上で組み立てます。


モーターを取り付ける部分を設計中。


こんな例外があることに気づきました。線分AもBも移動するステップ数は同じ1ステップ。だけど長さがだいぶ異なります。「1ステップ移動するのにかかる時間は移動させる経路の長さをステップ数で単純に割ったものとする」としましたがこれでは1ステップの移動にかかる時間が線分の長さに比例しなくなります。線分の長さが十分に長ければ「ほぼ比例する」といっていいのですが、極端に短いとこのような問題を発生させます。数学的に美しい解決方法が思いつかないので、速度の上限と下限を設けてみることにします。


モータ取り付け用の部品を作り始めます。全部アルミです。茶色いのは保護シート。


これも部品の一部。


鍋CADスクリプトだけでは、ファイルの入力やスクリプト間の変数の受け渡しがコピペ方式以外に出来ず、一連の操作を連続実行するのが困難であるため、別の言語を採用することにしました。 1年間の限定でちょうど今マイクロソフトが「Visualなんたらシリーズ」を無料で利用可能にしているのですが、単に「線を引く」「RS232C経由で1バイト送信する」という処理だけで、いろいろな「お作法」を守らねばならず、10数行(数十行?)の決まり文句のコーディングを強いられるため、もっとシンプルに使える無料の「HSP」という言語を使うことにしました。 この言語は、昔、パソコンといえばNECのPC88やPC98だった頃に使われていたN88−BASICをWindows環境に移植したような仕様になっています。 Visualシリーズは初心者向きではありませんが、このHSPという言語は初心者にもお勧めの言語です。

意味のある物ではありませんがこの画面を表示するプログラムは...


こんなです。画面にいろいろな部品を貼り付けて、翼型CSVファイルをを読み込みそれを表示して100行以内に収まっています。さすがに命令数が昔のBASICとは比較にならないほど多く(たぶん5倍はある)必要な命令をその中から探すのが大変ですが、古いBASIC風のプログラムでWindowsアプリケーションが作れてしまうというのが新鮮です。


ソフトは少しずつ出来上がってきていますが、駆動部分の部品加工が止まってしまっていたので再開しました。各部品の型紙を枠に貼り付けて干渉などの問題がないか確認してみました。


大量のキリコが出ました。この構造はシャフトを長い物に交換するだけで、より大きなワークに対応できますが、これ作っている間にもう一つ装置が作れてしまうほど手間がかかります。


既にスリワリをいれた部品をガイドにしてバンドソーでスリワリを入れています。構造上はネジの頭を沈める必要はありませんがタップが深く切れないので沈め穴を掘っています。


ソフトは完成半ばです。簡単そうに見えますが翼端と翼根では形状も構成する点の数も異なるので、ここまで作るのかなり大変でした。現時点のプログラムの行数はコメントも含めて1400行ほどあります。

ワイヤーの動きをシミュレートしているところ <− MOVIE

ネジ穴の位置は正確であった方がいいのでバイスの側面を基準にして同じ位置に穴があくようにしています。刃物の交換回数が多いのでネジ穴開けるのに4時間近くかかりました。


ホームセンターにネジを買いに行きましたがM4×10のネジが1個¥30もしたので、とりあえず必要な10個にしておきました。50〜60本買うと送料入れても通販で買った方が安くつきます。送りネジはホームセンターに必ずある長ネジにしました。M10です。引きネジならもっと細くてもいいのですが、押しネジにもなるので、この太さにしました。M12だとフレームがφ13なので頑丈すぎ。


モーター一つ取り付けましたが長ネジとモーター軸を繋ぐジョイントを取り付ける余裕を考えるの忘れてました。やりなおし。


6個のモーターマウントできあがり。


またしても同じ失敗。修正するの面倒なのでネジ穴を皿ネジにして、モーターはネジ2本で固定することにしました。ネジ2本でも必要以上の強度があるはずです。


さらに問題。シャフトはスライドするようになっているのですが、ネジ2本を締め込みスライドすることを確認した後、バイスから外すと動かなくなります。ネジ穴の位置がほんの僅かずれているのだと思います。組み付けた後リーマー通してごまかすことにします。もう一方のモーターマウントは問題なくスライドします。


モーターシャフトが全部フランジ側に出るようにまとめてひっくり返し。これだけのために4爪チャックの爪を付け替えました。テーパーリーマーでグリグリやっても出来るのですが旋盤のほうが効率いいので。爪を付け替える時間が長いのでテーパーリーマー使ったのと作業時間は同じくらいです。


直線をカクカク補間させるプログラム作りました。2ステップ目でYの値が1ステップ増加するところが何となく不自然ですが


赤丸の付いているマスにほんの僅か直線がかかっているため、上は正しいのです。点線はモーター1/2ステップの移動距離。実線は1ステップの移動距離です。モーターの回転1ステップは0.0075mm(1.5mm/200ステップ)です。傾きがちょうど1の時は2軸を同時に動かして斜め45度移動しますが、傾きが僅かでも1からずれていたらジグザグに補間していきます。


補間アルゴリズムは、1/2ステップ間隔の升目と直線の交点の座標(
赤○)の中点(青□)の座標を1ステップ単位に丸めることにより求めました。


ネジを通販(ウィルコ)で買いました。これだけ買って¥3245。1個¥120のステンレスのスペーサーを10個買ったので高くなりましたが、それ以外は1個¥6以下です。袋に重さが印字してあるところを見ると数を数えているのではなく重さを量っているようです。0.1mg単位で計測してあるので不良品でも混入しない限りたぶん1個の誤差も無いのだと思います。スペーサーは真鍮だと安いのですが扱っていないみたい。電気工作系のネジ部品屋と一つになったネットショップがあると便利なんですが。


ソフトは現在、1700行、上の補間機能とワークの寸法を入れる機能を追加。まだ最低限必要な機能が出来ていません。最終的には2500程度になりそうです。最後の詰めは機械と組み合わせて動かすのでまだまだ時間がかかりそうです。


大きくなりすぎたのでページを変えます。続きはこちら

inserted by FC2 system