基板切削 Arduino ボードの作成

CNCでの基板作成の練習をしている話の続き(といいつつ、仕事で1週間ほど出張に行っていたので前がどこまでやったか忘れちゃった!)です。

基板を切削してみたものの、一部Gコードになっていないパスができちゃったということで、そのまま半田づけをしても余計面倒なことになりそうなので、修正をしようと考えました。銅箔パターン図を見るとちゃんとArduinoのページにある通りの銅箔なので、Gコードの生成をしているULPに問題があるんだろうな、ってことで、他の方法でGコードを生成してみることにしました。

使ったのは、pcb-gcode というulpのセット。
これでG-CODEを生成させて、Optiという最適化ソフトで最適化します。

そのうえで、Gコードをチェックして前の切削がされていなかったパスを探してその部分だけを抜き出して追加の切削をしました。切削されていなかったパスは2本だけでしたが、探すのがかなりめんどくさかったです。また、前のGコードと座標が違うので、位置合わせをするために穴を一つ選んでG-CODEに追加、その場所を基準にすでに切削してあるパターンと追加切削のパターンを合わせこみました。

DSCN3215
追加切削をやり、基板部分を切り出せるよう切削をしたところ。

基板は両面テープで張っていますが、これをはがすのにえらい苦労した。みんなどうやっているのだろうか。。。
一部基板を痛めてしまったので補修をしつつ、パーツを載せてArduinoボードを作ってみました。

部品をひたすら半田づけをしていきますが、私はこの作業を「半田セラピー」と呼んでいます。ああ、癒されるひととき・・・
DSCN3217

DSCN3218
部品は、ジャンク箱の中から漁って拾い出したので28pin 幅狭DIP ICソケットやジャンパピンやら、1列ピンソケットなどぴったりくるのがなく、適当にあるのから切り出して作りました。

また、パーツを乗せて半田づけしてから、部品の背が高くてシールドと干渉しそうなことが分かり、部品の取り付け方を縦から横に変更したり、それなりにハマりました。あ、そうそう。このボード、RS232Cの通信にトランジスタをPNP,NPNそれぞれ1個ずつ使っているのだけど、イタリア(?)製の基板なので、使用しているトランジスタが2SC1815, 2SA1015とかじゃなくて謎のTRなのはいいけど、ECBの並びじゃなくてCBE というもっとも収めにくい順序になっていたため、2SC1815をツイストする羽目になってしまいました。

ハードもハマったのですが、ソフトもなかなかハマりまくり(まだハマっているところだけど、忘れたら困るのでメモとして書いておきます)。
まず、ATmega328PにArduinoのブートローダーを書き込もうと思ったら、Arduino IDE, Atmel Studioのどちらでも、AVRISP mkII が認識できてない。Atmel Studioでできないのは、OSがWindows8.1 になって、ドライバーに問題が出ているためのようで、デバイスマネージャのJungo Connectivityというところにあるデバイスのドライバ更新をやり、デバイスの一覧から、Jungo ConnectivityのWINDriverというのを選んだら、Atmel Studio からはAVRISP mkIIを使ってAtmega328pに接続できるようになった。

Arduino IDEから書き込みができないのは相変わらずで、ブートローダーの書き込みをしようとすると、avrdude: usbdev_open(): did not find any USB device “usb”
というエラーがでてしまう。
いろいろググってみたけど、いまだ問題解決せず。Atmel studio からブートローダーを書き込めばいいような気がするけど、まだやり方がわからないし、どのブートローダーが適切か調べないとなあ、と思ったところで、今日はおしまいにしました。
DSCN3219
こんな感じでつないでます。
とりあえず、LEDチカチカをやって動作確認までしたかったけど今日は挫折。

跳ね上げ棚をつくる (2)

跳ね上げ棚一応作って取り付けしたんですが、金具の一部に改善点を見つけたので、とりあえず今のところ半分だけ修正をして取り付けています。また、時間があるときに残りの修正をしないといけないのですが、金物の修正は結構手間なので、しばらくこのまま?かも。

DSCN3199
わーぁ。ごみごみした倉庫!まさに大きな子供の遊び場という感じです。

棚を取り付けて荷物をこんな感じでおいているのですが、最初は吊り金物の左右方向の拘束が全くなかったため、かなり左右に動けるようになっていてまずい感じでしたので、棚の後ろ側の吊り金物2本の間に1×4の板を渡して、4本のM6ねじで固定したところ、かなり剛性感が高まりました。これが、まず修正点の1.

もう一点は、吊り金物の軸受を最初は金物に最初からついている長穴をそのまま使うという横着をしていたのですが、吊っているときはいいものの跳ね上げたときに軸が定まらないということに気が付いたので、丸穴がついている2mm厚のフラットバーを共締めすることで、フラットバーの丸穴を軸受として使うようにしました。これが修正点の2.

3番目は、四角い吊り金物(L金具)を最初そのまま使っていたのですが、跳ね上げをするためには、コーナーを丸くしないと取り付けている梁に金物がぶつかって梁が削られることが分かったので、CNCルーターでRをとるようにしました。2mm厚のフラットバーを取り付けた状態で一緒にRをとる切削をしました。前回、一発でエンドミルをおしゃかにしたので、今回かなりおとなしい設定で切削をしてまあまあの結果でしたので、パラメターを忘備録として書いておきます。

6mmエンドミル(HSS)、フィードF=100 切り込み量 0.2mm Z方向はF=60 回転数8600rpm (まだ速すぎるかも)
切削にあたっては、ワークに手元にあったミシン油を注油して潤滑、冷却をしたところ、かなり音が小さくなったので効果はある様子。
(かなりべたべたになりますが気にしない)
4mm厚の切削をするので、かなりの回数往復をすることになりますが、エンドミルを損傷せずに最後まで加工ができましたのでいいでしょう。

基板切削 練習問題

今度ちょっと自分の回路を設計して、そいつの基板をCNCで作ってみようと考えているのですが、CNCルーターを導入して初めて基板切削をやるということで、まず練習問題として、基板CAD EAGLEの設計ファイルが公開されているArduinoのボードを切削してみることにしました。

公開されているArduinoのボードデザインはこちらのもの。片面基板のデザインはなかなかないので、手始めにはちょうどいいです。

基板切削をするにあたって、CNCルーターのテーブルの平面性が問題になるという話がありますので、こちらの面だしの記事に倣って、ジュラコン板を切削して基板用の捨て板のようなものを作りました。

DSCN3201
制作したジュラコンの上に基板を強力両面テープ(日東のはがせるタイプ)でつけたところ。
基板は、カッターの寿命を温存したいので、柔らかい紙フェノールの安物を選びました。

テーブルへの固定はM6の+ねじを使ってやっていますので、取り付け用の穴を11mm径で6.5mmほどざぐって、エンドミルやドリルと干渉しないようにしてみました。

ジュラコン板の面だしは、0.3mmほど縦横に1.5mmピッチで6mmのエンドミルでF=800程度で切削。Z軸方向のフィードはF=120程度と遅いですが、出来上がりを見るとまあ妥当なところでしょうか。かなりかったるいので、途中ほったらかして食事したりテレビ見に行ったりしました。戻ってくると切りくずが堆積していましたが、出来具合には問題がありませんでした。

基板切削のためのGコードの作成は、Eagle のCADファイルを開いて、キデッジさんのところの、こちらに書かれている通りに、ULPを適用して、G-codeを生成しました。

ULPで設定する切削条件ですが、今回、購入したCNCに付属してきた中華Vカッター(0.4mm?)を使いますので、線幅0.4mm に設定したほかは、深さはdefaultの0.1mm Z方向のF=25 フィードF=200に(これらもdefault)設定です。

DSCN3207
切削中の様子。

DSCN3208
切削のパスをCAMプログラムで表示されているところ。

かなりかったるいですが、まず、パターンをVカッターで切削、その後、ドリル位置をVカッターで切削、0.8mmと1.0mmのエンドミルでドリル穴開けをしました。3.2mmのドリル穴があるのですが、これは1mmであけておいて後でボール盤で自分であけることにします。

DSCN3214
カッターの設定は問題がなさそう。きれいに切れています。ちょっとこの見栄えには感動しました。

一応出来上がり、ってことになっていますが、パターンにバグがある様子。RS232Cのコネクターのところの配線が、へんてこりんになっていて謎です。ULPの動作に問題があるのか、もともとのEagleファイルがバグっているのかは謎ですが、このままではいけないので、後で手動でGコードを作成するかして追加パターンを切削した後で基板は外そうと思います。

とりあえず今日はここまで。

跳ね上げ式棚を作る(1)

我が家の倉庫には、シャッターがついているのですが、シャッターの前のスペースには当然ものが置けません。

今のところ、シャッターのすぐ内側には自転車を入れているのですが、その上側のスペースにはぽっかりと空いた空間が・・・・ということに気がついて、ここに吊り棚を作ることにしました。

棚を作ってここに普段は収納をするわけなんですが、シャッターがついたスペースなので、何かあった時には、棚を上に跳ね上げて、シャッターの面をフルに使えるようにしたいということで、跳ねあげができるような構造の棚を作ってみようと思います。

可動式の棚なので、出来るだけ軽量に作りたいというところが難しいところですが試行錯誤してみることにしました。

まず、棚のフレームワークを作ります。これは、倉庫に転がっていた残り材で作りました。
DSCN3160

そこに同じく転がっていた残りの合板を張ってすのこ状の棚板とします。
DSCN3164

跳ね上げ式の棚を吊る金物をいろいろ考えてみたんですが、なかなかいいものがありませんね。
これがうまくいくかはわかりませんが、スチールの棚の材料で30mm幅のLアングルが比較的安価(600mmで500円)なので、これで吊るつもりで金具の材料を買ってきました。

棚を跳ね上げた時に、シャッターの高さにすでに作りつけてある棚と同じ高さまで上げたいので、吊り下げの金物をドッグレッグ状のものにすることを考えてみました。
ところが、そんな金具売っていません。ので、スチール棚のコーナー板をCNCで切ってオリジナルのL字金具をつくってみました。

結構、加工は大変です。というのも、腐ってもスチール棚なので、プレートは鋼鉄製。硬くて削りにくいです。
DSCN3167
いつも通り、JW_CADで図面を書いてNCVCでGコードを作って切削です。

今回、プログラムでは最初F=180とかにしていたのですが、あまりに負荷が重いので、最終的にはF=100にオーバライドして切削を行いました。
6mmのハイスエンドミルを使ったんですが、鉄を切るのは初めてなので、回転数は様子を見ながら試行錯誤。最初10000rpm程度に設定していたが、遅い気がして、20000rpm程度に速くしたら、回転が速すぎたようで、ビットの先から炎が出てあっという間に1本エンドミルをオシャカにしてしまいました。そこで、F=100に落として、10000rpm程度に抑えて切削をしました。

機械の剛性が足りないため、10000rpmで切削をしていると、機械が共振していて危ない感じ。速度を上げると共振はしなくなりますが、今度はビットが過熱してオシャカになります。今思うと、設定した切り込み量0.5mmはこの機械には荷が重すぎた。0.2mm程度なら大丈夫な感じなので、時間をかけてゆっくりと削っていくしかないようです。

DSCN3166
こんな具合に、コーナープレートを8枚重ねにして、一緒に切削してやりました。

DSCN3168
出来上がった金物はこんな感じで、2枚1セットにして重ねて使うつもりです。

金物はだいたいこんな感じで組立てて、ドッグレッグの吊り金物にしますが、軸受がこれも売っている金物が適切なものがないので、スチール棚の金物(比較的安価)をまた切削して作る必要がありそうです。
DSCN3185
今日は金物の切削に思いのほか苦労したので、取り付けまではいきませんでした。

weatherduino 風速・雨量の計測コード修正

我が家では、sparkfun の
weathermetersを使って、風向・風速・雨量の計測をやっています。

プログラムはガリレオ7さんのこちらから公開されているArduinoのライブラリを使わせていただき、プログラムを書いて計測をしているのですが、近隣のアメダスと比べて、2倍程度、値が大きくなる傾向がみられていたので、ちょっと修正が必要だなと思っていましたが、とりあえずデータは取れるので放置状態でした。

weathermeters は、風速計などの中にスイッチが入っていてそれの入り切りをarduinoでカウントして計測しているのですが、おそらくこのスイッチがチャタリングを起こしており、それを余計にカウントしているのだろう。という予想をしました。

weatherduino3の風速計などの計測は、Cで書かれたArduinoのライブラリで、スイッチによるINT0, INT1割り込みを受けてカウントを行っているのですが、ここにチャタリングの影響を除去するコードを差し込んでみました。

具体的には、Arduinoで時刻を測るのにmillis() でtimer0によってカウンタ(timer0_millis)を更新しているのですが、これを調べて、前のスイッチイベントから一定時間経ってないとチャタリングとみなしてカウントをしないようにしました。

下記は、変更した部分の抜粋です。

extern volatile unsigned long timer0_millis;
static unsigned long int0_millis=0, int1_millis=0;
#define CHATTERING_MILLIS 12

// 割込み 風速
void wmeters_int0 () {
if (timer0_millis – int0_millis >= CHATTERING_MILLIS ) {
wmanemo_count ++;
int0_millis = timer0_millis;
}
}

// 割込み 雨量
void wmeters_int1 () {
if (timer0_millis – int1_millis >= CHATTERING_MILLIS ) {
wmrain_count ++;
int1_millis = timer0_millis;
}

}

weather_3

時刻7017 あたりで、チャタリング除去コードに更新しました。
平均風速(赤い線)がかなりプログラム変更によって小さくなっていることがわかります。

時刻7018 以降にさらにチャタリングの待ち時間を最初に設定した7ms からさらに12msにしましたが、結果が変わっていないので、チャタリングは7ms 未満で収まっているようですね。

プログラムを変更しても依然近隣と比べ風が強めですが、これは地形の効果だと思います。
これで測定としてはちゃんとしたものになりますので、今週また来るであろう台風の風について調べてみようと思います。