ガラクタ市2017年春

今日から近所のホームセンター「ハンズマン」のガラクタ市が始まりました。
例によって出勤前に参戦です。

GARAKUTA1

朝6時33分。
まだそれほど並んでいません。

本来は7:00開店ですが、今日は10分早く開きました。
そのため、昨年秋ほどの長い列はできていません。

どれも安いのですが、今回はあまり「おぉ!」となるものがありません。
あとから登場する品もあったりするので、来週月曜日までマメに足を運んでチェックしたいと思います。

GARAKUTA2

購入した品

Laser加工機製作 ~その17 操作パネル~

続きです。
カットする図形をJW-CADで描き、文字データをInkscapeで作成したので厚紙に試し打ちします。文字は裏から印字する方が表面がツルッとして感じがいいので文字もカットも裏から加工します。なおアクリルの長さが加工機の許容範囲を少し超えているのでデータを2分割し、後半は材料を180度回転させたうえで加工します。

LaserPanel7

厚紙に試し打ち。スイッチも取り付けてみた。

厚紙での試し打ち結果ですが、なんか所々ミスっています。
まずボリュームの目盛りとマニュアル発射スイッチが重なってしまいました。
文字や目盛りはラスター加工するのでデータ作成ソフト(前に紹介したgrasterです)に印字位置を座標で与えます。この時の値がミスっていた様なので修正します。
また 「Manual Shot」印字のMの文字が半分切れてしまいました。これは心当たりがあります。Raster加工を立ち上げたとき、LinuxCNCのStreamerと呼ばれるバッファ(ここにレーザーを発射する座標が格納されている)を最後まで読み込まず、後ろに400行ほどダミー行を追加する事で回避しました。最後まで読まない原因は分かっておらず、400行では不足する場合があるのかもしれません。そこで今回はgrasterを変更してダミー行を600行に増やすと最後まで印字が出来ました。

いよいよアクリルを加工します。

LaserPanel8

アクリル加工完了

 

LaserPanel8

ちょっと見づらいですが、オフセットがずれたままスタートしてしまい、慌てて止めたのですが’e'の文字の部分に不要な穴をあけてしまいました。接着剤で付け直しています。

 

そして加工機に取り付けます。アクリルが2mm厚で少し薄い上に、左側を固定していないため、ちょっとポヨポヨしています。そのうち左側も固定したいと思います。

LaserPanel9

取付け完了。

パネルに搭載したのは上から、電流計、マニュアル発射スイッチ、パワー調整ボリューム、水ポンプスイッチ(横に水センサーのLED)、非常停止スイッチです。
マニュアル発射スイッチは秋月電子で購入した’ミサイルスイッチ ‘と押しボタンスイッチを直列に繋ぎました。ミサイルスイッチは蓋を開けないとONにできない構造になっており、誤ってボタンを押して発射してしまう事を防ぎます。

これでまた少しレーザー加工が快適になりました。

レーザー加工機 排気

現在いろんな事がやりかけのままですが、ここでレーザー加工機の排気用に換気扇を付けようと思いたちました。  が、やらかしてしまいました。 素人がいい加減な事をするとこうなるという見本です。

まず我が家は2年程前に中古で購入したのですが、その時点でトイレにはかなり強力な換気扇が付いていました。扉を閉めて換気扇を回すと空気が薄くなりそうな気がします。そこでまずこの換気扇をそれなりのサイズのものに交換します。

換気扇交換後1

換気扇の交換後です。
まだスイッチに課題アリです。

トイレ換気扇2

外側にはガラリを取り付け。

で、取り外したのがこれ。
これを工作室の壁にとりつけ、前を箱で囲ってそこにレーザーの排気ダクトを接続しつつ、普段は箱の蓋を開ければ部屋の換気にも使えるという計画です。

換気扇1

木枠は新たに作りました。
外壁につけるフードは先日も書いたハンズマンのガラクタ市購入品です。

取り付け先である我が家の工作室は、前の持ち主がオーディオルームとして使われており、音楽室みたいな有孔ボードが貼ってあります(きっとオーディオ好きの方にはいい環境なのかもしれませんが、私には猫に小判です)。
まずは壁の中を調べる為、ホールソーで直径10cmぐらいの穴をあけてみました。

壁穴1

石膏ボードが見えてきました。

石膏ボードの向こうがどうなっているか分かりません。そこで100均のコンクリートドリルビットで中心に穴をあけてみます。

壁穴2

ドリルで石膏ボードに穴。

穴をのぞくと断熱材が見えます。グラスウールみたいなやつです。穴から針金を突っ込んでみましたが、それ以上の情報は得られません。そこで更にホールソーで石膏ボードに大き目の穴をあけてみました(木工用ホールソーなので手動でゆっくりと切ってみました)。
ここでまた針金で上下左右を探ったところ、換気扇取り付け予定範囲に柱はなさそうです。なお有孔ボードのつなぎ目には柱らしきものが見えているのですが、これは石膏ボードの手前だけで、石膏ボード裏側の柱は別の位置にある事が分かりました。一瞬戸惑いましたが有効ボード用の柱っぽい木材も結構がっちりしているのでこのままここに取付けようと思います。

後で考えると、ここでの確認が不足していたのですが・・・ノコギリで有孔ボードを切ってしまいました・・・

壁穴3

有効ボードをカット

そして石膏ボードもカッターで切って・・・・

壁穴4

石膏ボードも切ってしまった。

四角い穴をあけました。しか~し、
ここで断熱材よりも奥に筋交いがある事を発見!まずいです。
柱と筋交いの場所に斜線を描いてみました。
筋交いって断熱材よりも外側にあるのね・・・。(T_T)

壁穴と筋交い

筋交いと左右の柱の場所

また地震が来るかもしれませんし筋交いを切るのはマズイと思われ、とにかくこの位置には設置できません。
柱と筋交いを避けて上にずらすと天井ギリギリになってしまいます。かといって下げるとかなり低い位置になってしまいます。また全く違う場所にすると中がどうなっているか分からず、再び同じ失敗を繰り返すかもしれません。

素人が無茶するとこういう事になります。
対策を考える間、とりあえずビニールで塞いでいます。

壁穴5

取りあえず塞いで考え中。

対策ですが、今のところダクトでの排気に変更しようかと考えています。Φ100程度の丸穴なら筋交いを避けて出せそうなので、ここに加工機のトイレファンを接続しようかと。
よく考えてから再開します。

 

皮にレーザーマーキング~その2~

前回はくまモンを試し描きしたところまででした。
すこし大きすぎて皮の端切れからはみ出したので今回は少し小さくしてみます。

まず少し小さめのくまモンをPNG型式で作成します。背中も含めました。

そしてレーザーでマーキング。方法はこのあたりに書いた通りです。

少しですが加工中の動画を撮ってみました。

リングをつけてカシメで止めてキーホールダーにしてみました。
(この金具はカシメっていうんですかね。皮革加工は初めてなのでわかりませんが店ではそういう名札が付いていました。なんかそのままのネーミングです。因みにこれをカシメる道具は持ってないので万力で挟みました)

KumamnoKeyholder

くまモンキーホールダー
輪郭はハサミで適当に切ったのでガタついてしまいました。

暫く使用した後撮影したので既に剥げています。レーザーがスキャンした方向にスジ状に剥げているのでもう少し密度を上げてマーキングすると良いかもしれません。因みにこの時は144dpiの設定でした。

このキーホールダーは家の鍵に付けて使用しています。

NONSAYAさん ご訪問

地震の前の話になりますが、NONSAYAさんが九州旅行のついでにわが家に立ち寄ってくださいました。 スケジュールの都合で1時間程度でしたが楽しくお話をさせていただきました。

記念撮影

息子と私とNONSAYAさんで記念撮影。
念のため、お顔は隠しております。

その際、ほいほい堂のOpenStick基板キットと、NONSAYAさんのレーザー制御基板とを交換することにしていました。 こちらからは普通にキットをお渡ししたのですが、NONSAYAさんから頂いたのはなんと完成品です!全くつり合っていません。

Laser制御基板

プリント基板1枚を想像していたらArduinoやステッピングモータードライバ、アクリルケースにケーブルまでついた完成品でした。
ありがとうございました。

是非また熊本にお越しください。今度は色々とご案内させていただきます。
(でも地震が落ち着いてからが安心ですね)

FMトランスミッター(と言われる基板)

訳あってスマホのイヤホン端子の出力をFMで飛ばして車内で聞きたくなった。
そこで息子がデジットで購入していたFMトランスミッター基板(ジャンク)を奪い取って調べてみた。

その基板がこれ

FM-TX-DJK

FMトランスミッターといわれる基板

18pinDIPのICには「SI 3637 ED-9 720175」のマークがありますが、検索してもそれらしきものは見つかりませんでした。 27.147MHzの水晶が載っているのと、コイルがFMラジオの帯域にしては大きく見えるのが気になります。

そこで裏面の写真を撮り、PC上で反転したのと表面画像とを見比べながら・・・

FMトランスミッターといわれる基板裏面

裏面(これを反転画像にして表面と見比べた)

回路図にしてみました。

FMTX Schematic

回路図にしてみた。
(どこか間違っていたら容赦を)

ICにはDIPスイッチで何やら入力しています。またプッシュボタンを押すと2SA1015を経由してICの4pinにHレベルが入ります。  ICの出力は5pinで、ここがHの時、水晶発振回路が動作し2SC2001を経由して電波が発射される様です。

特に逓倍している様にも見えないので出力は27MHz帯だと思われます。ICはDIPスイッチに応じたシリアルコードを出していると予想しました。

とりあえず受信機を27.147MHzに合わせて横に置き、基板に電源(9V電池)をつないでみました。 すると電池をつないだ瞬間にLEDの点灯と共に受信機からビッビッと音が出ます。その後すぐにプッシュボタンを押しても何も起こらず、数秒経過してからボタンを押すと、再びビッビッが出ます。どうやら一度電波を出すと暫くは出ない様です。

受信周波数を27.147MHzの2倍、3倍に変えても同様に受信できます。出力が逓倍されているのか単に高調波を受信しているのかは分かりません。

ICからどういう信号が出ているのかを調べる為、ICの5pinの波形を見てみました。DIPスイッチの設定により信号が変化すると予想しています。

DIP-SW ALL OFF

DIPスイッチが全部OFFの波形

DIP-SW ALL ON

DIPスイッチが全部ONの波形

波形は2ブロックに分かれて出ており、受信機からビッビッと2度音が出る事と一致します。
またDIPスイッチ全てONと全てOFFとで途中のパルス幅が異なっている様に見えます。
やはり何らかのコードを出しているのでしょう。DIPスイッチの設定を細かく変化させながら波形を見ればもっと色々分かるのかもしれませんが、既に当初の目的であったFMトランスミッターとしては使えない事が分かったので深入りは止めておきます。

結局この基板は何だったのでしょう?
なにかのリモコン送信機(たとえば車庫の扉開閉とか)ではないかと想像します。
コードを調べて受信機を作ればラジコンに使えるかもしれません。

Laser加工機製作 ~その13 LinxCNCでレーザーラスター加工 Graster~

ここ何回かRastering With a Laserに沿ってLinuxCNCによるラスター加工について書いてきました。今回のGrastarをインストールする事で任意の画像データを変換しレーザー加工機で出力するまでの流れが完結します。

Grasterの動作

Grasterは画像データをLinuxCNCに喰わせる形に変換するプログラムで、Rubyで書かれています。
例えばKumamon.pngという画像ファイルをGrasterで処理すると、次の3つのファイルが生成されます。

  • Kumamon.png.raster.ngc
    ラスター描画時にレーザーヘッドの移動を制御するNCコードです。
  • Kumamon.png.raster.gmask
    ラスター描画時にレーザーのON/OFFを制御するデータです。上記NCコード実行時に読み込まれます。
  • Kumamon.png.cut.ngc
    外形カット用NCコードです。

まずはRuby関係のツールをインストール

Grasterを動作させる為、まずはRubyとその関連ファイルをインストールします。ほいほい堂のUbuntu上ではapt-getにより以下のツールをインストールしました。

sudo apt-get install ruby
sudo apt-get install imagemagick
sudo apt-get install librmagick-ruby1.8
sudo apt-get install rubygems1.8

前回の投稿でダウンロードしたGrasterファイル

Graster自体は前回の投稿に書いた通り、下記コマンドで入手します。
※前回の投稿は当初リンク切れのアドレスを載せていたので後日修正しています。

https://github.com/jedediah/graster/archive/master.zip

Grasterの動作確認と修正

ダウンロードしたGrasterを解凍するとgraster-masterディレクトリ下にbin/grasterというファイルがあります。これが実行すべきコマンドファイルですが、私の環境では次のエラー出ました。

$ ./bin/graster
/usr/bin/env: ruby -rubygems: そのようなファイルやディレクトリはありません

どうやらbin/grasterファイルの先頭行「#!/usr/bin/env ruby -rubygems」で引っかかっている様です。  /usr/bin/envでrubyへのパスを指定した場合、引数があると環境によってはエラーになるそうです。そこで次の様にrubyへのパスを直接指定してエラー回避しました。

$ diff graster.ORG graster
1c1
< #!/usr/bin/env ruby -rubygems
---
> #!/usr/bin/ruby -rubygems

これでとりあえずはエラー無く変換ができる様になったのですが、実際に加工機で描画してみると正しい場所でレーザーが出力されません。またレーザーヘッドの動作範囲が妙に狭い様です。
原因は次の通りと思われます。

  • Grasterはインチ単位の動作を前提に書かれている。
    私の加工機はLinuxCNCの設定で、ミリ単位を基本にしています。本来インチで書かれたNCコードをミリと解釈しているためレーザーヘッドの動作範囲が狭くなっています。
    また、xxx.raster.gmaskファイルにはX軸が所定の箇所に達したら次の動作(レーザーをON/OFFしたり)に移るという動作が書かれていますが、これもインチで書かれています。
    これに対し加工機がhalに知らせるX軸のポジションがミリなので、ここも上手く行きません。
  • xxx.raster.gmask中の記述が往復描画と片道描画が混乱している。
    ラスタースキャンではレーザーヘッドが往復する際に右向きと左向き両方で描画する方法と、片方向のみ描画する方法があります。速度と精度のトレードオフなのですが、生成されたgmaskはこの両方の方式が混ざって記載されている様で正しく制御できていませんでした。

以上2点の対策として次の方針で変更しました。

  • 単位はミリで出力する。
    あまりややこしく考えず、座標を出力するデータ全てに25.4を掛けるという方法で修正しました。 よって出力はミリ単位になっていますがオプション入力での数値はインチのままです。
  • 片方向描画に統一したgmaskファイルを生成する。
    とにかく片方向描画が正しく出来るファイルを生成する様に変更します。

これらを変更したところ、それっぽく動作する様になったのですが、描画の最後の方だけレーザーが出ないという問題が発生しました。 動作の最後の方になるとなぜかstreamerからデータが出てこなくなります(LinuxCNCのバグではないかと思っています)。結局原因は判っていないのですが、streamerのバッファにデータがたっぷりあればこの現象が発生しない様なので、gmaskファイル生成時にデータを余分に出す事で逃げています(全フィールド0の行を400行ほど余分に出力しています)。 本来LinuxCNCの最新バージョンでどうなるかを試すべきですが・・・いずれやってみます。

Graster修正結果

最終的に変更したのは次の内容です(それと上に掲載したbin/grasterもです)。

$ diff lib/graster.rb.ORG lib/graster.rb
177c177,178
<     @image.size[1].times {|y| @tiled_rows << tiled_row_spans(y, (forward = !forward)) }
---
>     #@image.size[1].times {|y| @tiled_rows << tiled_row_spans(y, (forward = !forward)) }
>     @image.size[1].times {|y| @tiled_rows << tiled_row_spans(y, (forward)) }
219a221
>     gmask.epilogue
$ diff lib/graster/gmask_file.rb.ORG lib/graster/gmask_file.rb
13,15c13,15
<         self << "0 0 0 %0.3f\n" % x1 if @begin_row
<         self << "0 0 1 %0.3f\n" % x1
<         self << "0 1 1 %0.3f\n" % x2
---
>         self << "0 0 0 %0.3f\n" % (x1*25.4) if @begin_row
>         self << "0 0 1 %0.3f\n" % (x1*25.4)
>         self << "0 1 1 %0.3f\n" % (x2*25.4)
17,19c17,19
<         self << "0 0 1 %0.3f\n" % x1 if @begin_row
<         self << "0 0 0 %0.3f\n" % x1
<         self << "0 1 0 %0.3f\n" % x2
---
>         self << "0 0 1 %0.3f\n" % (x1*25.4) if @begin_row
>         self << "0 0 0 %0.3f\n" % (x1*25.4)
>         self << "0 1 0 %0.3f\n" % (x2*25.4)
22a23,29
>
>     def epilogue
>       (0..400).each do |x|
>         self << "0 0 0 0\n"
>       end
>     end
>
$ diff lib/graster/gcode_file.rb.ORG lib/graster/gcode_file.rb
35c35
<           "#{k.to_s.upcase}%0.3f" % v
---
>           "#{k.to_s.upcase}%0.3f" % (v*25.4)

修正版一式

修正版一式をアップしておきます。

使用方法

次の様に使用します。
各種パラメーターはカレントディレクトリのgraster.ymlに書いておくとデフォルトとして使用されます。下の例では画像のドットを300dpiとして描画する様に指定しています。実行後、上に書いた3本のファイルが出来ています。

%graster –dpi 300,300 Kumamon.png

変換後のファイルもアップしておきます。

 

OpenStickファームウェア更新(PIC18F2553対応)

OpenStickのファームウェアを更新した。

少し前まで秋月電子でのPIC18F2550の価格は¥350程度だったが、最近みたら¥500になっている(円安のせい?)。 一方、兄弟品種のPIC18F2553は現在¥420で若干安く、でこちらを使いたい。 何が違うか調べたらA/Dコンバータが18F2550では10bitに対し18F2553は12bitになっておりそれ以外の違いは見当たらない。

試しに18F2553をそのままOpenStickとして動作させてみるとブートローダやファーム、コンフィグファイルは同じ様に書き込める。問題はA/Dが12bitの部分。
OpenSitckでのアナログ値は10bit(0~1023)のA/D変換結果を4で割り、8bit値(0~255)としてPCに送っていた。しかし18F2553の場合A/D変換結果が12bit(0~4095)なので16で割る必要がある。
そこでデバイスIDを基に幾らで割るかを決定する様に変更し、これで同じファームを両方に使える様になった。

ところでデバイスIDを読み取る部分で少しハマった。
C18(未だにMPLAB-IDEのC18を使っている)で次の様に書くと、デバイスIDは正常に読めるのだがこの後の動作がおかしくなりUSB機器としてPCに認識されなくなった。

unsigned char dev;
dev = *((rom char far *)0x3fffff);

どうやら原因はTBLPTRU(SFRの0xfe8番地)の内容が書き換わる事が影響している模様。そこで・・・

unsigned char dev;
unsigned char tblbuf;
tblbuf=TBLPTRU;    // 退避
dev = *((rom char far *)0x3fffff); 
TBLPTRU=tblbuf;    // 復帰

・・・の様に退避/復帰させると正常動作する様になった。
これってC18のバグではないかと思うが、いつまでも古い環境を使うのがイケナイのだろう。

 

HONDAジェット

熊本空港にHONDAジェットが来るというので息子と一緒に見に行った。
10時過ぎに到着したら既にHONDAジェットが止まっており、大勢の人々が周りを囲んでいるのが見える。しかしここからでは何をやっているのかはわからない。

HondaJet1

既に到着して大勢で何かやっている。

暫く見ていたが動く気配がないので一旦現場を離れて昼過ぎに戻ってきたが、やはり同じ場所に止まっていた。しかしその内エンジンが始動しRUNWAY07から離陸した。
離陸直後に右旋回しながら上昇していく。カッコイイ。
エンジン音は旅客機と比べるとかなり静かに思えた。
場周経路を回り、滑走路上ではローパスしてくれる。
熊本空港ではセスナがタッチアンドゴーを繰り返すのはよく見かけるが、さすがジェットだと一周するのが早い。あっという間に4周して着陸した。

ビジネスジェットって事は後々熊本で見る機会は少なそうな気がする・・・。
HondaJet2

HondaJet3

HondaJet4

HondaJet5