2016年12月11日

SECCON 2016 online "PNG over Telegraph"

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

SECCON 2016 online CTFに参加された皆様、お疲れさまでした。
今回は初めて問題を作る側に参加させてもらい、たくさんの高評価を頂いてとても嬉しいです!

https://www.youtube.com/watch?v=Y6voaURtKlM


さて、このSECCON TOWERこと腕木通信の塔について、少しだけ解説をしようと思います。
(解き方については、解けたチームがWrite Upなどを公開してくれる...と思いますので)

腕木通信(Semaphore Line)は、18世紀末から19世紀にかけてフランスで考案されて使われた、世界で最初の大規模通信網です。 考案したのはクロード・シャップというフランス人で、フランスに存在する腕木通信の塔のことを「シャップの塔」と呼ぶこともあるようです。
そもそも「セマフォ(Semaphore)」や「テレグラフ(Telegraph)」という用語は、このシャップさんが考案しました。
この辺りの詳しい話は、各言語版Wikipedia(日本語, 英語, フランス語)あたりを参照してください。

https://ja.wikipedia.org/wiki/%E8%85%95%E6%9C%A8%E9%80%9A%E4%BF%A1
https://en.wikipedia.org/wiki/Semaphore_line
https://fr.wikipedia.org/wiki/S%C3%A9maphore_(communication)

この腕木通信を再現したのが、今回のSECCON TOWERです。


素材は割り箸と秋月電子で800円で売っているサーボモーター3個、制御はArduinoで行なっています。

背景には、私が撮影した桜島の写真をネットプリントでA3サイズに印刷して使っています。
DSC_4693 | 鹿児島大学教育学部より桜島を望む | Kei Yoshimura | Flickr

ちなみに土台の部分にはセ○ンカフェの紙コップを使用し、塔の質感を演出しています。


Arduinoのコードはこちら
9SQ/SECCON_TOWER: Semaphore tower (Chappe tower) made by Arduino

Serialで待ち受けるArduinoに対して、1文字ずつ文字を送ることで動作します。
送られた文字に対応する腕木の形は、基本的に フランス語版 Wikipediaに記載されているChappe Code表を基準にしています。


https://fr.wikipedia.org/wiki/S%C3%A9maphore_(communication)#/media/File:Chappe.svg

しかし、このコード表には J が存在しません。使われている腕木のパターンは 36通りしかないため、使用頻度の低い J は文献によっては I で代替されていたりしました。
とはいえ J と I が混同されると何かと不便なので、今回の SECCON TOWER では & を J として扱っています。
このことは、問題動画の冒頭で紙に書き写している文章の一部から、補完可能です。


WELCOME TO SECCON CTF.
WE HOPE YOU WILL ENJOY THE GAME.
GOOD LUCK.

これに、flagの入っている PNG 画像をBASE32エンコードして流しました。

なぜ、BASE32なのか... 前述の通り Chappe Code では、36通りの組み合わせが使われています。素直に考えると BASE36 という選択肢もあります。
しかし今回は様々な理由で BASE32 を使った方が都合が良いことが多かったので、そうしています。
(特に、冒頭の8文字をデコードするだけで PNG のシグネチャを得られるのが最重要でした)
参考: RFC 4648 - The Base16, Base32, and Base64 Data Encodings


というわけで、作問者側が想定していた正攻法な解き方としては...

1. 腕木通信であることを認識し、Semaphore、Chappe towerなどのワードからChappe Code表にたどり着く
2. 50分の動画から、対応表を元に文字に戻す。(この手段は問わない)
3. BASE32デコードする
4. PNGファイルが出てくるので、開く
5. flagをget

そう。この腕木から文字を復元する作業について、手段は全く問わないのです。
画像処理が得意な人は画像処理で解くもよし、機械学習で解くもよし、人力で解くもよし。

この点について、発案者のきくちゃん先生からの熱いメッセージがあります。
時間内に効率よく文字に戻すにはどうしたらよいか、という命題に対し、各々が持てるリソースをどのように配分して投入するか。手段は問わない。
それこそが CTF における問題解決能力の腕の見せ所だと思います。
もし何らかのプログラム的な手法で解くことだけを狙うなら、動画の長さは50分程度ではなく5時間くらいにしちゃいます。
むしろ画像処理や機械学習を使わないと解けない、と思いこませることこそがミスリードでした。
人力で読むにしても、ある程度コンピュータに手助けしてもらったり、様々な工夫や手法があると思います。

私が解くとしたら... 動画から各形のフレームを取り出して、同じ形状をしているものは同じ文字として... やはり人力でやると思います。
プログラムで解くと思わせて、実は人力が最短?(かもしれない)問題なのです。

ちなみに... こんな裏話もあったり。

それから、今年はQRコードがなかった!!というあなた...

flag の PNG画像 は QRコードなので、半分ぐらい入力すれば、それっぽい画像が得られます。
読み取りに失敗してQRコードが壊れてた? QRコードの復元は、みなさんお手の物、ですよね!

解けた方は、ぜひWrite upを書いてくださいね!


追記:この問題について記述されているWrite upを貼っていきます。

SECCON 2016 Online CTF に参加しました (Write-up) | monolog
http://blog.monora.me/2016/12/seccon-2016-online-ctf-write-up/

SECCON 2016 予選 - /home/cympfh/
http://cympfh.hatenablog.jp/entry/2016/12/11/215023

PNG over Teregraph - TomoriNao SECCON 2016 Online
https://hackmd.io/s/SJVWBNtXx

SECCON TOWER 参加記のようなもの - Unpronounceable Name
http://tatarhy.hatenablog.jp/entry/2016/12/16/014821

SECCON 2016 Online CTF Write up PNG over Telegraph - Qiita
http://qiita.com/Liesegang/items/f6ac10b18064906a3808

2016年11月13日

AkiCartをちょっとだけアップデートしました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

初めての東京の冬。いきなり寒くなって風邪気味です...

さて、6月に公開した、秋月電子通商のパーツで電子部品リストを作って一発で買い物かごに放り込めるサービス AkiCart について、少しだけ機能追加したのでご報告です。

1. パーツリストにコメント投稿できるようにしました
自分や他人が作ったリストに対してコメントを付けられるようにしました。
DISQUSを利用しています。(画像とかも投稿できます)
Qiitaのコメント欄やクックパッドのつくれぽ...みたいに使われれば理想的ですが、まぁ、とりあえず感想やら質問やらを書き込む場所としてお使いください。

AkiCartはリストの説明欄に特定のHTMLタグが使用可能で、説明や作り方などの記載もできるようになっています。
参考: ESP-WROOM-02でミニマルなIRKitクローンを作る | AkiCart

リストを公開する方も、完成後の画像や簡単なコード、GitHubリポジトリへのリンクなどを記入していただければ、もっと便利になると思います。(説明欄をリッチに使ってる人が自分しかいなくて悲しい...)
AkiCartだけで、パーツの一覧と個数、作り方、そしてコミュニティが完成すれば素敵だなぁと願っています。

2. 匿名公開を実装しました
今までは、リストの表示権限について3つ用意していました。

公開 : 誰でもリストを閲覧できる。トップページに表示される
限定公開 : URLを知っている人だけが閲覧できる。トップページには表示されない
非公開 : 自分以外は誰も閲覧できない。トップページにはもちろん表示されない

ここに新たに「匿名公開」という権限を追加しました。
匿名公開は、公開と基本的に同じですが、リスト作成者の名前が伏せられます。
アノニマス パーツ リストです。
リスト作って公開したいけど、自分の名前(Twitterアカウント)が晒されるのは嫌だ...という方は是非使ってみてください。

3. 検索機能を実装しました
簡易的ですが、検索することが出来るようにしました。
スペース区切りでAND検索できます。
現時点では、リスト名とリストの説明に含まれるキーワードで検索を掛けるため、リストに含まれている部品名では検索できません。(近いうちに対応させたい)
利用者のみなさん、リストに簡単で良いので説明を書きましょう!

4. HTTPSに対応しました。
Let's Encryptが正式サービスとなったので、これを使ってhttps化しました。
今のところ、まだhttpでもアクセス可能です。
近いうちにリダイレクトを掛けようと思っています。

とりあえず、こんなところです。

そのうちやりたいこと、としては
・パーツ1つに対して補足情報を付けられるようにする
・秋月電子以外にも対応(共立とか?)
などなど...

こんな機能が欲しいなどありましたら、このブログへのコメントやTwitter @9SQ で緩く受け付けています。


AkiCart

https://aki.prioris.jp/

2016年10月15日

e-statのshpを全国分取り込んで国交省の行政区域shpと比べてみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

久々にGISネタです。

国交省の国土数値情報ダウンロードサービスでダウンロードできる行政区域のShapefileは以前の記事でも取り扱いました。
国土数値情報 行政区域データは全国の行政界を記録したものですが、これは市区町村界レベルであって、大字(〜丁目)レベルの境界ではありません。(行政界なので当然なのですが)
そこで、現状無料で手に入る大字レベルのshpとして、総務省統計局のデータを利用してみることに。

e-Stat 政府統計の総合窓口

地図で見る統計(統計GIS) → データダウンロード → 国勢調査 → 平成22年国勢調査(小地域) 2010/10/01 → 男女別人口総数及び世帯総数 → 市区町村を選択 → 世界測地系平面直角座標系・Shape形式

これをダウンロードします。
ダウンロードするのですが... これを全国分となると、市区町村を選択してShapeを選んで...という作業をおよそ1900回繰り返さなければなりません。
一括でダウンロード出来ない理由は負荷軽減のためで、全国分欲しい人は地図屋からデータ買ってねという記載があるので、ちゃんと正攻法で買いましょう。
そもそも、このShapefileは数値情報を上に重ねたりグラフ化したりするためのもので、境界域を得る為に使用するものではありません。

...ただ、今回はスクリプト書いて全部ダウンロードさせてもらいました。(ごめんなさい)
一括ダウンロードのためのスクリプトは載せません。

結論としては、やはり地図屋から買った方がいいです。
しかし、同じことを企む人たちのために、何故そういう結論に至ったのか書き残そうと思います。

まずは、視覚的に比較するためにShapefileを取り込みます。
e-Statから手に入れたデータはzip化されてますので、まずは解凍。

unzip \*.zip

出てきたShapefileをQGISで結合します

1. ベクタ → データマネジメントツール → 複数のシェープファイルを1つに結合する
2. フォルダのレイヤによって選択する にチェック
3. 入力ファイルで .shpファイルを全て選択して、エンコードにSift_JISを選択 → Open
4. 出力シェープファイルで保存先を選んでエンコードにUTF-8を選択 → Save
5. OK で処理開始

この段階で結合されたshpができあがるのですが、CRS(測地系)がEPSG2454(JGD2000)になっていると思うので、今後扱いやすいようにEPSG4326(WGS84)で保存し直します。

1. 結合処理が終了して、レイヤに追加されたデータを右クリックして名前を付けて保存
2. パスに保存先を選び、CRSにEPSG4326(WGS84)を選択してOK

これで準備完了。


千代田区の大手町1丁目を選択してみました。
なんだか良さそうな雰囲気。

では、すこしズームアウトして湾岸部を見ましょう。


なんだか海岸線とは思えない鋭利なラインが目立ちます。
この上に国交省 行政区域データを重ねてみます。


どうやら、海域の一部も含まれているので、陸地の境界域として利用するにはイマイチでしょう。
(こういう海域が取り込まれている部分が全国の海岸部分に沢山あるので、1つ1つ手で除去とかアホみたいに時間掛かることはしません)

それと、もう1点。
これは統計局のデータではなく国交省のデータの問題なのですが...


中央の濃い赤は統計局shpの皇居、周囲の赤は国交省shpの千代田区です。
周囲の境界をよーく見てみると...


濃い赤の選択部分は統計局shpの八重洲1丁目、周囲の赤は国交省shpの千代田区です。
八重洲1丁目が千代田区と中央区に跨がっています。
こういうポイントが全国各地に山ほどあります。

どちらのデータに問題があるのか、原典として使われている地図を調べてみないと分からないですが、おそらく国交省行政区域データの方が粗いのではないかと思われます。
ベクタなので、点の数が増えれば複雑な形状にもフィットする境界を描けて、逆に点の数が少ないと簡素な境界しか描けません。
もちろん、点を増やせばデータサイズも増えます。

ということで、結論ですが...

1. 大字レベルのShapefileが必要なら地図屋さんから買いましょう。
2. 厳密な市区町村界が欲しいなら、購入した大字レベルのShapefileから市区町村レベルで地物の結合をして生成しましょう。

以上です。

普通、業務でこういったGISデータを利用されている方にとっては当然なのでしょうが、個人であれこれやるとぶつかりそうな問題だなぁと思ったので書いておきます。

2016年9月20日

ミニマルなIRKitクローンを作ってiOSから家電を制御する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
どうも、お久しぶりです。生きてます。

さて、iOS 10が配信開始されて新たに登場した「ホーム」アプリのおかげで、日本ではあんまり注目されてなかったHomeKitが熱くなってるみたいです。(個人的感想)

HomeKitではPhilips Hueを操作できたりするのですが、そもそも対応していない家電を対応させるためのDIY的手法も色々存在しています。
例えば、HomebridgeとIRKitを組み合わせた方法。
Raspberry PiにHomebridgeを入れて、homebridge-irkitでIRKitを叩くみたいなお手軽スマートハウスのやり方は検索すれば山ほど出てきます。
そしてここで使われるIRKit、赤外線リモコンの信号を送受信できるオープンソースハードウェアなのですが、大人気なんですね。
在庫切れ入荷予定無しで手に入らないんだけど(キレ)という声も周囲にチラホラあったり。

というわけで、欲しいけど無いなら作りましょう。
自分で作ると安いし、面白いですし...

回路はこんな感じ。

必要な部品は以下の通り。
ESP-WROOM-02でミニマルなIRKitクローンを作る



もしESP-WROOM-02とかブレッドボードとか抵抗とか...持ってるなら、赤外線LEDと赤外線リモコン受信モジュールだけ買っちゃってください。

私はオリジナルのESP-WROOM-02搭載ボードとプロトタイプ・シールド基板を作っているので、これを使ってサクッと作りました。


中身のソフトウェアはIRremoteESP8266とaJSONを使って100行程度で実現しています。
コードはこちら。
9SQ/minIRum: A minimal implementation of infrared sender/receiver like IRKit by ESP8266

Arduino core for ESP8266をArduinoに入れて、コードをビルドしてESP-WROOM-02に書き込んであげてください。

あとは、IRKitみたいに GET /messages で最後に受信したリモコンのコードが取得できるので、これをメモしておいて...
POST /messages にこれを投げてあげれば、リモコンと同じように発光してくれます。
もし、エアコンなどの長めのコードを飛ばすリモコンの場合は、IRremoteESP8266/IRremoteESP8266.hの#define RAWBUF 100を200とかにしてあげれば取れるかも。

あとはHomebridgeと組み合わせれば、このようなことが出来ます。

Raspberry PiにHomebridge諸々を入れるのは、検索すればいっぱい記事が出てくると思います。
ただ、Raspbianはapt-getで取れるnodeが古かったりするので、楽をしたいならArch Linux(RasPi2/RasPi3)をお勧めします...
pacman -S git python2 nodejs npm nss-mdns avahi
systemctl enable avahi-daemon
systemctl start avahi-daemon
npm install -g homebridge
npm install -g homebridge-irkit
mkdir .homebridge
cd .homebridge
nano config.json
config.jsonは以下のような感じで。
irkit_hostは適宜変更してください。
{
    "bridge":
    {
       "name": "Homebridge",
       "username": "B8:27:EB:4D:31:D7",
       "port": 51826,
       "pin": "031-45-154"
    },

    "accessories": [
        {
            "accessory": "IRKit",
            "name": "ライト",
            "irkit_host": "minirum-a492cd.local",
            "on_form": {"format":"raw","freq":38,"data":[3550,1700,500,400,500,400,450,1300,500,1300,500,400,450,1300,500,400,500,400,450,450,450,1300,500,400,500,400,450,1300,450,450,450,1300,500,400,450,1300,500,450,500,400,500,1300,500,400,500,400,450,450,450,450,450,1300,500,400,500,1300,500,1300,450,450,500,1300,500,400,500,400,500,400,450,450,500,1300,500,400,500,450,450,1300,500,400,500,400,450]},
            "off_form": {"format":"raw","freq":38,"data":[3550,1700,500,400,500,400,450,1300,500,1300,450,450,500,1300,500,400,500,400,500,400,500,1300,500,400,500,400,500,1300,500,400,450,1300,500,400,500,1300,450,450,500,400,450,1300,500,400,500,400,450,450,450,450,500,1300,450,1300,450,1300,450,1300,450,450,500,1300,450,450,450,450,450,450,450,1300,500,1300,500,400,500,400,450,1300,500,400,500,400,500]}
        }
    ]
}
ちなみに、この赤外線コードはPanasonic製のシーリングライトのON/OFFです。

homebridgeを立ち上げて、iPhoneとペアリングします。
homebridge
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loaded plugin: homebridge-irkit
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Registering accessory 'homebridge-irkit.IRKit'
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] ---
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loaded config.json with 1 accessories and 0 platforms.
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] ---
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loading 1 accessories...
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] [ライト] Initializing IRKit accessory...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
                       
    ┌────────────┐     
    │ 031-45-154 │     
    └────────────┘     
                       
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Homebridge is running on port 51826.

iOS 10のデバイスで「ホーム」アプリを起動して「アクセサリを追加」、Homebridgeが表示されるのでコードを入力してペアリングを完了させます。
Homebridgeを追加したら、configに書いたアクセサリ(上記例では「ライト」)が表示されると思うので、これを追加すれば制御できるようになります。

Raspberry PiでのHomebridgeの自動起動は以下を読むと早いです。
Arch Linuxなら、Running Homebridge on Bootup (systemd)のセクションです。
https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi

homebridge-irkitではON/OFFの単純操作しかできないので、そのうち色々なコードを叩けるhomebridgeのプラグインでも書こうかな...
ちなみに、Raspberry Piにhomebridge-cmdを入れて、GPIOにSSRを繋いであげれば、リモコンの無いAC100Vの機器もON/OFFできます。

2016年6月4日

秋月で買える電子部品でリスト作成して色々できるサービスを作った

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

大きな地震があったりでバタバタしてたら4月5月と過ぎて6月になっていました...
というわけで2か月ぶりのブログ更新。

タイトル通り、秋月電子通商で扱っている電子パーツでパーツリストを作成、公開、共有、そして秋月の買い物かごに一括して放り込めるWebサービスを作りました。

その名も AkiCart
http://aki.prioris.jp/
(ちょっとダサいネーミングだったかも)

そう、秋月通販をよく使っている人は知っている... 秋月の買い物かごはセッション切れで放置してるとすぐに消えることを...

そこで、このサービスでは秋月で扱っている商品をリストに登録して保存し、リストのページにある「まとめてカートに入れる」ボタンを押すことで、いつでも秋月の買い物かごに商品をまとめて登録できるようにしました。


Twitterでログインすると、ダッシュボードが登場、ここから新しいパーツリストを作成できます。
作成するパーツリストは、アクセスレベルが公開(Public)、限定公開(Unlisted)、非公開(Private)の3種類から選択可能。
公開を選ぶとAkiCartのトップページにリストされる(こともある)ようになり、限定公開を選ぶとリンクを知っている人だけが閲覧可能なリストになり、非公開は文字通り自分しか見れないリストができます。


商品の追加はリストの画面からもできるのですが...
AkiCartの一番の特徴は、超超超便利なブックマークレット。
秋月の商品画面でブックマークレットをクリックすると、一発で作成したリストに追加できます。


ブックマークレットをブラウザに追加しておくと、秋月のページでクリック→個数の変更がない場合はそのままEnterを押すだけでドンドン追加できます。
AkiCartのブックマークを押して登録完了するまで最短2秒くらい。


作ったリストは一括して買い物かごに入れるだけでなく、CSV形式でダウンロードしたり、印刷専用のレイアウトで印刷することもできます。
高専とか大学とかで、事務の人に「これ買ってください」って渡すのも楽チンですね。

〜ここからはちょっとだけ技術的な話〜

今までは、買いたい商品のページをブラウザでブックマークしておいて、買うときに一挙に開いてカートに追加するという作業で購入していました。
流石にこれどうにかならんのか?というのと、何やら秋月の一括通販コード入力画面はリファラをチェックしてないから別サイトからPOSTできるという話を聞きまして...


一括通販コード入力画面からの遷移を見てみると、いつものカート画面(cart.aspx)に対して quick: True を指定して、あとはclass1_xに通販コードのハイフンの左側の英字1文字、goodsにハイフン右側の数字5文字、そしてqtyに数量を入れて、これを繰り返したものをPOSTしてあげればカートに入ることが分かりました。
そしてやはりリファラをチェックしてないので、このページ以外からPOSTしても普通にカートに入ることも確認。
これらを元にして、AkiCartができた...という訳です。
ちなみに、AkiCartの任意のリストページのソースを見ると、まとめてカートに入れるボタンの近くにtype="hidden"でいっぱいinputが転がってますw

バックエンドはEVI(地震火山詳報)でも使っているDjango(Python)です。
ここ数ヶ月触ってなかったので結構忘れてて、調べながらコード書いてたので時間が掛かりました...
6/3のAM2時頃に作り始めて、途中寝たり飯食ったりした時間を抜くと15時間くらいかな...?
バグとかセキュリティ的なアレを発見したら、Twitterでリプライ頂けると非常にありがたいです。

早速要望として、リスト間で商品を移動できるようにしたいとか、リストをブログなどに埋め込めるようにしたい、という意見が出ているので、ぼちぼちアップデートしていきたいと思います。

これとは別件で、そこそこ実用的かつ面白いものづくりのプロジェクトも進んでいるので、また報告できるタイミングになったらブログなどなどに書きたいと思います。

追記 : ブログパーツ(埋め込み用コード)できました。


公開もしくは限定公開のリストであれば、リストページの右サイドバー下に「埋め込みコード」の欄があるので、これをコピーして貼り付ければOK!

2016年3月18日

DMM 3Dプリントを試してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

3Dプリンタ、便利ですよね。
サクッと3Dモデルを現実に出来るのは素敵... なんだけど、数万円程度の3Dプリンタでは精度が出ない... ということで前々から試してみたかったDMM 3Dプリントを使ってみました。

今回注文したのは以下のようなモデル。


うちの3Dプリンタでは出せなかったポイントは...


直径1.5mmのピンが2.54mm間隔で並んでいるところ。
0.02mm余裕を持って直径1.52mmで開けてます。

ちなみに、発注時は同じものを8個並べて注文。
お値段は...

ナイロン 4,251円
ナイロン カラー 4,338円
アクリル(Ultra Mode) 12,381円
アクリル(Ultra Mode) カラー 12,489円
アクリル(Xtreme Mode) 19,340円

ちなみに、8個のデータを投げる前に6個のデータを投げたのですが

ナイロン 3,555円
ナイロン カラー 3,641円
アクリル(Ultra Mode) 9,771円
アクリル(Ultra Mode) カラー 9,879円
アクリル(Xtreme Mode) 14,991円

みたいな価格でした。

ナイロンだと、8個の場合 531.375円/個、6個の場合 592.5円/個
アクリル(Ultra Mode)だと、8個の場合 1547.625円/個、6個の場合 1628.5/個

というわけで、今回はナイロンを選択。

stlで書き出したものをDMM 3Dプリントに注文したのが3/8の16時くらい、造形開始が3/9、発送が3/15、到着が3/17でした。


運送会社は佐川急便、梱包は以下のような感じ。


全体の写真は記事の一番上に貼りましたが、アップで見ると以下。


うちの3Dプリンタ(ダヴィンチ1.0 Jr)で出力したものと比較 (寸法が違うけど穴のサイズは同じ)


ダヴィンチJrだと1.52mmの穴が潰れたり大きさが揃ってなかったりするのが、DMM 3Dプリントで作ったものは綺麗に空いています。

で、これで何をするのかというと... この2つを組み合わせます。


ポゴピン(オス/メス)とネオジム磁石。


ポゴピンは、先端がバネになっているもの&先端が受け皿になっているもので1組。

ネオジム磁石も取り付けると...


こうなります。


そして、最終的にはこんな感じで、littleBits的な何かになる訳です。



写真右端のブロック以外はダミーなのでハンダ付けしてません。 (もう少し暇になったら作り込みたい...)
これについては、また改めて記事を書こうと思います。

P.S. スマートミラーのソフトもぼちぼち進めてます... (ソフト編の記事はまだかと言われたので...)

2016年3月1日

オーブントースターでおうちリフローする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

格安でプリント基板を製造してくれる中国・深セン発のサービス、超便利ですよね。
最近はElecrowを良く使うのですが、レジスト色が緑以外も無料で選べて、シルク印刷はめっちゃ綺麗で、しかも割と早く作ってくれるので最高です。

ところで、プリント基板といえばやはりSMD(表面実装部品)を使いたくなる、というかSMDを使いたいがためにプリント基板を作るという感じですが、ここで問題となるのが「どうやって付けるか」な訳です。
1, 2枚程度なら1個ずつ手ハンダで付けていっても「時間かかるなぁ」くらいのもんですが、大体のプリント基板製造サービスは10枚単位とかなので全部手ハンダで付けようとなると結構大変。
という訳で、市販のオーブントースターで一気にSMDをハンダ付けしちゃおうという話です。

既に色々なブログでやり方は取り上げられていると思うので、ここでは実際にやった準備や工夫、できあがった物、ネットに転がってない情報などをまとめておきます。

やったことの大雑把な手順は
1. スイッチサイエンスのリフローキットを組み立てる
2. オーブントースターにリフローキットを取り付ける
3. スイッチサイエンス謹製のULPでEagleからDXFを生成
4. Silhouette Studio 3でDXFを読み込む
5. silhouette CAMEO 2でポリプロピレン合成紙をカット
6. 基板にステンシルを乗せるための固定具を作る
7. 基板にペーストはんだを塗布
8. 部品を載せる(チップマウント)
9. 焼く(リフロー)
10. 完成
という感じなので、今回はこの手順をそのまま章とします。


1. スイッチサイエンスのリフローキットを組み立てる


オーブントースターでリフローするにも、パンを焼くように適当な時間入れておく訳にはいかないので庫内の温度を適度に調節するコントローラーが必要。
この辺も自作するのは然程難しくないのですが、既に誰かが作ってて売ってるなら買った方が早いということで今回はスイッチサイエンスさんが売っているものを買って組み立てます。

リフロートースターコントローラーキット - スイッチサイエンス

これにはSSRが付いてないので、別途秋月でSSRを2個(上,下ヒーター用)買います。

大容量ソリッドステートリレー(SSR)24V~380VAC 40A (SSR-40DA) - 秋月電子通商

組立手順はスイッチサイエンスさんのTracに載っているので、このまんまです。

「Dual_SSR_Solder_Toaster_Controller_Platform」の作り方

ここで完成したコントローラーにSSRをつけて問題となるのが、SSR-40DAが3.3Vでは動作不安定ということ。
安定化させるために、2SC1815を使って3.3Vから5Vにレベル変換するものを作りました。


箱は秋月で売ってるLCD用穴開きプラケースが丁度いい感じだったので、コネクタや電源の穴、ボタン用の穴などをフライスで開けて収めてみました。

プラスチックケース SW-125S(LCD) - 秋月電子通商

2個のSSRに繋がっている小さい箱がレベル変換機。(ケースはタカチのSW-50S)

2. オーブントースターにリフローキットを取り付ける



これもスイッチサイエンスさんのブログに載っている通りに取り付けました。

オーブントースターをリフローオーブン化してみた | スイッチサイエンス マガジン

使用したオーブントースターは、パナソニック製のNT-T500というもの。
スイッチサイエンスさんで使っているNT-W50の後継機種なので、改造位置は全く同じ。

パナソニック オーブントースター ダークメタリック NT-T500-K - Amazon.co.jp

配線は古いオーブントースター(以前破棄したもの)から取り出した耐熱ケーブルを使用。
田舎のその辺に売ってるようなものではないので、普通に買うならちょっと面倒そう。

3. スイッチサイエンス謹製のULPでEagleからDXFを生成


これもスイッチサイエンスさんのTracにある情報&スクリプト(ULP)を使います。

EAGLEで作った基板のハンダマスクをCraft ROBOで作る

スクリプトをulpフォルダに投げ込んでEagle上で実行すれば、プロジェクトのあるフォルダにdxfファイルが吐き出されます。

今回はESP-WROOM-02の載った基板を作るので、以下のEagle部品ライブラリを使わせてもらったのですが...

ESP-WROOM-02のEagle用ライブラリ

これのパッドの属性がCreamになってないので、普通にDXFを吐き出したらカットしたい部分が出力されない...というわけでライブラリを書き換えて使いました。


部品のPackage上で右クリックしてOpen in Library


ペーストはんだで付けたい足を選択して、CreamのチェックボックスをONにすればOK.
あとはプロジェトを開いてLibraryからUpdateをすれば既存のプロジェクトでも反映されます。

4. Silhouette Studio 3でDXFを読み込む


今回は、シルエットカメオ2というカッティングマシーンでステンシルを作ります。

グラフテック 小型カッティングマシン silhouette CAMEO 2 - Amazon.co.jp

これにSilhouette Studio 3というソフトが付属しているので、これでDXFを読み込んでカットする訳ですが、ちょっと調整が必要。

まず、環境設定を開き、DXFの読み込み設定で「中央」を選択。
これで実寸サイズでDXFを読み込んでくれるので、テスト出力してサイズ調整などは全く必要なくなります。


次に、ポリプロピレン合成紙用のプロファイルを作って設定します。
右上のバーからカット設定(右から2番目)を選び、以下の赤枠のようにしました。


これでスイッチサイエンスさんで扱っているポリプロピレン合成紙をうまくカット可能。

ポリプロピレン合成紙A4版150μm厚5枚セット(クリームハンダステンシル用) - スイッチサイエンス

5. silhouette CAMEO 2でポリプロピレン合成紙をカット


ポリプロピレン合成紙をカッティング台紙の粘着面に貼ってカットするのですが、この台紙の粘着面は新品だと粘着力が強すぎて、剥がせない...ので何度か布などを貼り付けて十二分に粘着力を落としてから貼り付けます。
ポリプロピレン合成紙は意外とピッタリ貼りつくので、剥がす時に曲げてしまうと特性上カールしたりストライプ状の跡が残ってしまう...
そこで、手で触った感じで「これくらいの粘着力なら剥がれるだろう」と思ったところから更に粘着力を落とし、試しに角の方を貼って簡単に剥げることを確認してから貼るとOK.


貼って、台紙をセットしたら、Silhouette Studio 3からカット開始。


カットできたら、いらない部分にセロハンテープなどを貼って除去する。

6. 基板にステンシルを乗せるための固定具を作る


ステンシルを基板の上に置いてペーストはんだを塗るわけですが、ただ置いただけだとポリプロピレン合成紙がたわんだりして基板との隙間にペーストはんだが入り込んでしまう。
そこで、木の板とビニールマットで固定具を作り、それにステンシルの位置を合わせて一辺をテープで固定しました。
この辺りはもっと簡単にできる方法はあるはず... (基板の厚みと同じ板を基板の形にくり抜くだけでも随分違うはず)


7. 基板にペーストはんだを塗布


使ったペーストはんだはaitendoで扱っているもの。(今は在庫切れ)

ソルダペーストはんだ[XG-50] - aitendo

これ、かなり粘り気があるので塗るのが難しい。
ホームセンターで買ったプラスチックのヘラで均一に伸ばそうとしても、塗れてないところが出てくる→もう一度塗る→厚くなる→狭ピッチ部分がブリッジする...となる訳です。


この辺は何度かやりながらコツを掴むしかなさそう。

8. 部品を載せる(チップマウント)


ここがおそらく最難関。
部品を順番に載せていると徐々にハンダの粘りがなくなってくる(乾燥する?)ので、ピッチの細かい部品、今回だとヒロセのMicro USBコネクタ、SSOPのFT231XSから先に配置。


ちょっとパッドの部分からハンダが出ていても、温めると部品の足に付くので大丈夫。
ただ、あまりに多いと狭ピッチ部分でブリッジする原因なので、この辺りは何度かやってみて量のコツを掴む必要あり。

9. 焼く(リフロー)


焼くときは匂いがすごいので、家の外でやりました。
家の中でやるなら換気の仕組みをキッチリ作るべきでしょう。


上の写真では4枚を一気に焼いてますが、これ以前に何枚か焼いて調節などをしています。
あんまり熱すぎると基板の材料まで焼けちゃうこともあるので、この辺も試しながらベストな焼き加減になる温度、時間を探る必要あり。

10. 完成


焼きあがったら、部品がズレたり、ブリッジしてるところがないかチェック。
今回は4枚のうち2枚でSSOPの足がブリッジ、Micro USBの足がブリッジしてたので、無洗浄フラックスを塗ってコテを当てて修正しました。


焼きあがった基板のうち1枚をアップしたものが以下の写真。


キレイに付きました。

プッシュスイッチの頭と白シルク印刷が若干きつね色になってしまったので、次回はアルミ箔などでヒーターの光が直接当たらないようにしてみようかと考え中。

感想


リフローできるようになったおかげで、1枚作るのに手ハンダで45分くらい掛かってたのが、15〜30分くらいで部品を載せる&5分焼くような感じになりました。

確かに時間短縮されたんだけど、ハッキリ言って...

チップマウンタが欲しい!!!

以上です。