2011年8月10日水曜日

設計基板にアクリルを付けてお洒落度アップ!「アクリ屋ドットコム」さんにアクリルを発注してみる。

外装にも少しは気を配りたい


おもてなしの心は日本人の得意分野かと思っていましたが、コスト削減要求の嵐の中そんなことは忘れ去られてしまったかのように見える今日。
ちょっとした評価基板の天面にアクリル板なんかが載っていると思わず「おぉー。」なんて思ってしまうのも情けない話です。

例えば、Terasic Technologiesのボードなんかの仕上がりは、かなり私好みです。


それはともかく、今回設計したLPCXpresso Clockでは、予め簡単な外装を付ける事を前提に設計を進めていました。

アクリルなどで簡単な養生があるだけでも何かのメリットがあるわけです。
  • 基板の隅々に埃が被るような事がない。
  • 埃が被りにくいので「何か古臭くなったなぁ」なんて感じる事がない。
  • 水滴が飛んでもある程度大丈夫。
  • 少しおしゃれ。
  • その他。
少し無理矢理ですが色々なメリットが考えられますね。

アクリ屋ドットコムさん


基板製造が海外で数十ドルから出来るようになった今、相対的に外装にかかる費用は大きくなっていると言わざるを得ないのが現状です。

そんな中、国内で面白いサービスを展開されている企業があります。
私は今回「アクリ屋ドットコム」さんにアクリルの加工依頼をしてみました。

アクリル板加工でセミオーダー形式でウェブから注文ができるサービスを展開しています。
ちょっとした加工までをウェブから行う事ができ、その場で値段がわかるのが特徴です。

LPCXpresso Clockの場合


「アクリ屋ドットコム」さんのセミオーダーの場合、穴位置などの指定単位が0.5mm単位です。
また、アクリル端からの穴位置に若干の制約があります。

LPCXpresso Clockの場合、以下のようにして対応しました。
  • 穴位置はアクリル板の端面からの距離で指定することになっている。
  • 0.5mm単位のグリッドに載せると若干ずれる。
  • 穴位置が許容される誤差に収まるようにアクリル板のサイズを調整する。
要するに穴位置がアクリル板の端からの位置で決まるので、アクリル板のサイズを調整して許容される範囲に穴位置を調整しようという対応です。(こんなのは機械屋さんから見ると最低だろうと思うのですが、私は機械に関して詳しいとは言えないのでよくわかりません。)

出来上がってきたアクリルを付けると以下のようになります。


基板だけの時と比べると、与える印象がまるで違いますね。


今回のアクリルパネルは一枚で約700円程度です。
基板の原価と同じくらいの費用が外装にかかるわけですが、実際に完成してみると良い効果を生み出していると言えるのではないでしょうか。

2011年8月9日火曜日

LPCXpresso Clockに部品を搭載して動作させてみる

動作させてみる

先日到着したLPCXpresso Clock基板に部品を搭載してLED周辺回路の動作確認を行いました。
点灯させた状態で以下のようになります。

まだ基板だけの状態なのです。
これにアクリルパネルを取り付けて外装の完成となる予定です。


もちろんLPCXpresso IDEを使ったデバッグを行うこともできます。


LPCXpresso IDEでデバッグもできる他、外部電源で独立運転もできるように設計しました。
デバッグを楽しんだ後は普通に時計として使用する事ができるようになっています。

Eagle3D + POV-RayによるCGとの比較

折角なので先日Eagle3D + POV-Rayで作ったCGとも見比べてみましょう。



そっくりですね。
Eagle3D + POV-Rayでの確認は、なかなか有用そうです。

2011年8月5日金曜日

Eagle3D + POV-Rayをもっと活用してリアルな完成イメージ図を得る

Eagle3Dって何だっけ?

Eagle3Dは、EAGLEで設計した基板データから写真で撮影したようなリアルな3次元CG画像を作る事のできるツールです。
実際に基板製造をする前に完成イメージ図が得られますので、好んで使用しています。

リアルな3次元CG画像を得るためには3次元モデルが欠かせませんが、EAGLEに標準で添付されているライブラリの多くに対応しているのもEagle3Dが人気の理由の一つになっています。

裏を返すと、標準で添付されていないような自作ライブラリなどの部品は、生成された3次元CG画像に含まれないことになります。
何を隠そう私も先日まで「面倒だなぁ。」とか「良いんですよ、基板の感じが掴めれば。」とか思う事にして、自作ライブラリに対するケアは全くしていない状態でした。
そして、自作ライブラリだけ歯抜けになっているとかっこ悪いので、「部品を載せない」設定にして出力です。

ですから、以下のように何か足りない寂しい出力になっていたわけです。


しかし、所詮は四角や丸の多い電子部品の3次元モデル。
POV-Rayのスクリプトを実装するのもそんなに難しいはずがありません。

基板だけの出力に甘んじている現状にも我慢できなくなってきたので「もっと活用してリアルな完成イメージ図を得る」という目標を立てて実践する事にしました。

Eagle3Dの処理構成

Eagle3Dの処理構成についておさらいしてみましょう。


大まかにみると2段階の構成になっていて、EAGLE上でPOV-Rayで実行するレンダリング用スクリプトファイルを生成し、POV-Rayで実際にレンダリングを実行するという形になっています。

整理すると
  • EAGLE側:部品のパッケージ名とレンダリング処理の関連付け。
  • POV-Ray側:レンダリング処理の実行。
ということになります。

コンポーネントの追加

EAGLE

Eagle3Dを展開するとulpディレクトリがあります。
この中にある3dusrpac.datというファイルがユーザパッケージ情報を定義することのできるファイルとして用意されています。
ここにパッケージ名とレンダリング処理を関連付けるための記述を1行追加します。

A-551UB:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:DIODE_LED_7SEG_A551UB(::

上記の場合、「A-551UB」というパッケージと「DIODE_LED_7SEG_A551UB」というレンダリング処理が関連付けられた事になります。


これでEAGLE側の準備は完了です。
早速Eagle3DのULPを実行してPOVファイルを生成します。

POV-Ray

POV-Ray側は指定されたレンダリング処理に対する実装が必要です。
Eagle3Dを展開したディレクトリにあるe3d_user.incがユーザ拡張用に設けられたファイルです。

先ほどDIODE_LED_7SEG_A551UBというレンダリング処理と結びつけたので、ここにマクロとして実装します。

#declare e3d_environment = off;

#macro DIODE_LED_7SEG_A551UB(value)

    // ピンオブジェクトを定義する。
    #local leg = object{
 cylinder {<0,-3,0>,<0,1,0>,0.25 texture{col_silver}}
    }

    // コーナーを作る。
    #local corner = object{
 box {<0,0,0><2.5,1,2.5> pigment{White}}
    }

    union{
 // ピンを配置する。
 object{ leg translate< -5.08,0,7.935>}
 object{ leg translate< -2.54,0,7.935>}
 object{ leg translate<     0,0,7.935>}
 object{ leg translate<  2.54,0,7.935>}
 object{ leg translate<  5.08,0,7.935>}
 object{ leg translate< -5.08,0,-7.935>}
 object{ leg translate< -2.54,0,-7.935>}
 object{ leg translate<     0,0,-7.935>}
 object{ leg translate<  2.54,0,-7.935>}
 object{ leg translate<  5.08,0,-7.935>}

 // 本体を作る。
 box {
     <-6.35,1,-9.5>,<6.35,8,9.5> pigment{White}
 }

 // 4つのコーナーを配置する。
 object{ corner translate<-6.35,0,-9.5>}
 object{ corner rotate<0,90,0> translate<-6.35,0,9.5>}
 object{ corner rotate<0,180,0> translate<6.35,0,9.5>}
 object{ corner rotate<0,270,0> translate<6.35,0,-9.5>}

 // 本体の上面に7セグメントLEDの画像ファイルを貼る。
 box {
     <-6.35,8,-9.5>,<6.35,8.1,9.5>
     pigment{
  image_map{png "a551ub.png" once}  rotate<90,0,0> scale<12.7,0,19> 
  // 左下に画像を貼ってから全てのオブジェクトを移動させて中心にもっていく。
  translate<-6.35,0,-9.5>
     }
 }
    }
#end

こんな風に2つのファイルを編集するだけで、手軽に自作コンポーネントに対する3次元モデルを生成できるようになります。
部品面の描画を記述するのが面倒なら、部品をデジタルカメラなどで撮影し、その映像を貼りつけるだけで構いません。

先ほどの例では以下のような画像を部品本体に貼りつけています。


上記の手順を経て得られた出力画像を見てみましょう。


これで先日までの基板だけの完成イメージよりもリアリティを感じられるようになりました。

動画

POV-Rayではレンダリング用のiniファイルを作ってアニメーションを生成するための複数画像ファイル生成ができるようになっています。

例えば、以下のようなiniファイルを作ってPOV-Rayで使用してみます。

Initial_Frame = 1
Final_Frame = 360
Initial_Clock = 0
Final_Clock = 360
Cyclic_Animation=off

ここでポイントとなるのは、POVファイルの変更です。
clockという変数は描画毎にカウントアップされる値で、これを基板の回転変数に入れる事で基板を回転させて見る事ができるようになります。
先ほどのiniファイルでは「初期クロック=0」、「最終クロック=360」としました。


今回はPCBをX軸を中心に回転させてみました。


画像は複数枚のBMPファイルになって出てきます。
これを動画に変換してみたものが以下です。


動画にすることで更に実在する物体として認識しやすくなりました。
基板を製造に出す前に「どんな感じになるのかなぁ。」と体感したい時に便利ですね。

更なる応用も可能

今回は手始めに自作部品に対するレンダリングについてのみ触れました。
実はPOV-Rayのレンダリングスクリプトをもっと有効に活用すれば、任意の表示パターンを作るようにできたりします。
これを使えば取り扱い説明書の画像を作ったり、オペレーションガイドのような動画を生成したりすることもできるでしょう。
使いこなせば従来ではできなかった品質をドキュメントの領域でも発揮できるかもしれません。

2011年8月2日火曜日

僕たちのファームウェア戦略 (LPCXpresso Clockを使って、組み込み機器開発特有の問題解決を楽しもう!)

戦略なしではいられない

LPCXpresso Clockは、現状でほぼ全てのLPCXpressoにドッキングする事を考えています。
この時、LPCXpressoの各モデルに対するライブラリを個別に提供しても構わないのですが、管理や設計から見ると美しいとは言えません。


例えば・・・
  • 「このウルトラミラクル輝度制御機能は全モデルに搭載されている機能なんだけど、あのモデルでは"ABC"になっていて、このモデルでは"DEF"になっている。」
  • 「あぁ、そのモデルは全然保守されていなくて、別のインターフェースになっているんだ。」
  • 「え?このモデルでしか動かせないハッピータイマー機能を加えたけどだめだった?」

など、実際の製品開発においては、シリーズとして相応しいインターフェースを提供しているのかなどの検討も欠かせないのです。
「あのモデルのためにABCインターフェースを追加したら、別のモデルで致命的な矛盾が生じた。」なんて笑うに笑えないわけです。

今回の設計に関して言うと、殆どの機能は共通なのですから、アプリケーションロジックは共通にしておきたいところです。そのためには、下層ライブラリを適切なインターフェースで切って、実体を抽象的に扱う事が欠かせません。これは今後触れていくであろう「僕たちのクロスプラットフォーム戦略」にも関連があります。


考えられる様々な要求を簡単に箇条書きにしてみましょう。
  • 使いやすいライブラリを提供して欲しい。(ユーザ要求)
  • インターフェースの学習コストを最小限にしたい。(ユーザ要求)
  • アプリケーションロジックは共通化して、開発コスト対効果を最大限に高めたい。(ユーザ要求)
  • 優先度の高いモデルや機能から実装して、要求に応じて他のモデルも開発したい。(開発者要求)
  • 「私はCで書きたいんだ。」、「私はC++で書きたいんだ。」(ユーザ要求)
  • その他
他にも様々な要求が考えられるわけです。
要求は、顧客から来るもの、設計から来るもの、実装から来るもの、様々です。

いずれにせよ言えるのは重複するような内容が物事に含まれている場合、何かと問題が生じるという事実です。

ここを美しく解決する事が「僕たちのファームウェア戦略」であり、1つの製品設計で複数のラインナップを揃える事のできる土台となるわけです。

設計の土台を作る(分割し、整理し、統治する)

では、具体的にどうすれば良いのかという話になります。
基本的には「分割し、整理し、統治する」という流れです。

分割(あるいは統合)

同じものと違うものを分割します。あるいは同じものを統合します。
分類に迷ったら、基準となる視点を定めて分割するか統合するかを判定します。

例えば、LPCXpresso Clockの場合、分割可能な要素の例には以下の2つがあります。
  • LPCXpresso Clock基板固有の機能。 (時計のインターフェースを実現するハードウェア。)
  • ドッキングさせるLPCXpresso基板固有の機能。 (時計の制御を実現するハードウェア。)
簡単ですね?
ドッキングして使用するのですが、2つの基板の役割は明確にわかれています。


LPCXpresso Clock基板+LPCXpresso基板=LPCXpresso Clockですから、上記の視点は非常にシンプルなものです。
(一見下らない要素を大げさに取り上げているように見えるかもしれませんが、これが後々の設計と綿密な関わりを持ってきます。)

整理(あるいは破棄)

分割した要素の詳細を整理します。
詳細といっても実装レベルの詳細ではなく、「だいたいこんな感じかなぁ?」程度の整理で構いません。


例えば、LPCXpresso Clockの場合、以下のような感じです。
  • LPCXpresso Clock基板
    • 7セグメントLED (出力)
    • 赤外線受信回路 (入力)
    • 照度センサ (入力)
    • スイッチ (入力)
  • LPCXpresso基板
    • GPIO (入出力)
    • RTC (入力) - 無いモデルもある。

    統治(あるいは留保)

    統治の段階でインターフェースを定義してみます。

    Cならヘッダファイルにインターフェースを定義します。
    C++ならヘッダファイルにクラスを定義します。


    この時点で統治できないような内容があっても構いません。
    意味不明な物体は、この時点で無理して統治する必要はありません。
    少し変な名前を付けて残したりすれば良いです。

    これは検討の方向性を確認するためのプロトタイプ実装です。
    実際に動作させるところまで持っていく必要はありません。

    これが「僕たちのファームウェア戦略」における実用的な出発点です。

    そ・れ・で・?

    子供騙しのような整理をしてどうなるのか?と感じる方もいるでしょう。
    でも、上記の3ステップの整理をするだけで

    • システムが何を提供しようとしているのかが明確になる。
    • シリーズ並行展開の視野を身につける事ができる。
    • 自身の設計が何のプラットフォームに依存しているのかを明確に認識できる。
    • その他
    様々な効果が得られます。

    今回は「僕たちのファームウェア戦略」の出発点を示し、その効果について概略を解説しました。

    2011年7月23日土曜日

    EAGLEで設計した基板の製造をFusion PCB Serviceに頼む。(EAGLE用の一発生成CAMファイルや、ガーバデータの検証方法もあります。)

    概要

    LPCXpresso Clockを設計して早くも1週間が経ちました。
    その間に色々な試行錯誤を経て若干の機能追加をしたりしました。


    今回の基板(LPCXpresso Clock)の製造は、激安基板製造でお馴染みのFusion PCB Serviceに頼むことにしました。

    EAGLE用の一発生成CAMファイル

    EAGLEでガーバを出力する場合にはCAMプロセッサというものを使います。

    まずは基板設計側の画面を表示します。


    CAMプロセッサのアイコンをクリックします。


    CAMプロセッサのダイアログが表示されます。
    ここでCAMプロセッサに対する作業を定義したファイルを読み込みます。

    ここでは、Funsion PCB Service向けのCAMプロセッサ用ファイルを自作してガーバ出力作業に使用することにしました。

    名付けてFusionPCB-gerb274x-excellon.camです。


    それでは読み込んでみます。


    Fusion PCB Serviceでは生成したガーバデータの拡張子名が指定されています。


    自作したCAMプロセッサ用ファイルには以下の特徴があります。
    • Fusion PCB Serviceで指定された拡張子名で自動生成してくれるようにしました。
    • CAMプロセッサジョブ名は、Fusion PCB Serviceで指定された名称にしてあります。
    • ドリルデータも一緒に生成するようにしました。


    「Process」ボタンを押したら出力されたファイルをFusion PCB Serviceに書かれた内容で照合します。


    ドリルラックファイルなどは不要なのかもしれませんが、添付しても問題ないでしょう。

    出力されたデータを確かめる

    この手の作業は、複数のツールを組み合わせたダブルチェックが欠かせません。
    出力したデータファイルのみで(←ここ重要)期待した結果が得られるのか?が確認するポイントとなります。

    私は工場に提出するガーバデータの確認をGraphiCode社GC-Prevueで行っています。
    早速先ほど出力したデータファイルを開いてみましょう。

    「ファイル」メニューから「インポート」を選択します。


    GC-Prevueのインポート機能は非常に手軽で、Ctrlキーを押しながら所望のファイルを選択することで複数のファイルを一括読み込みすることができるようになっています。


    インポートを実行するとファイル情報の検証が行われます。


    その後、ツールの管理テーブルへのマッピングが表示されるようになっています。


    最後にファイル毎のインポート結果の詳細が示されるダイアログが出現します。
    ここで表示色や形式などを選択する事ができるようになっています。
    この時点でお気に入りのツールと表示色をあわせると見やすいですね。


    ガーバデータは複数のファイルで1つの基板の情報を管理しますので、「間違って同じデータを違う拡張子で送っちゃった!」とか、「全然関係ないデータを送っちゃったよ!」なんてあるかもしれません。

    読み込み時に画面で確認しながら読み込めるGC-Prevueはそういう意味で非常に便利です。
    例えば、シルクレイヤを見てみると以下のようになります。


    こちらは部品面のガーバ。
    ベタ面の描画が粗いように見えますが、拡大すればきちんと表示されます。


    レイヤー毎の表示・非表示は画面左側のツリー表示の部分で切り換えることができます。


    リソース

    EAGLE用のFusion PCB Service向けCAMプロセッサファイルはこちらからダウンロードできます。
    自己責任でお使い下さい。

    まとめ

    今回はEAGLEで設計した基板の製造をFusion PCB Serviceに頼む過程を示してみました。

    2011年7月18日月曜日

    LPCXpresso Clockの設計

    概要

    LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)は、参加者の方々が各自で取り組んでいることを持ち込んでモクモクと何かをしようという会合ですが、具体的なTODOがない方にとっては参加しづらいものです。

    そこで、今回はLPCXpressoを手にしてみたけど具体的なTODOが思いつかないなぁという方でも参加しやすいような小道具を考えてみました。

    名付けて「LPCXpresso Clock」です。
    先の部会に参加される方の中で、希望される方に基板を無償で配布します。(先着5名様)

    LPCXpresso Clockの特徴

    LPCXpresso Clockの特徴を以下に示します。
    • リアルLPCXpressoサイズ。
    • 製作後は完全なスタンドアロン動作が可能。
    • 見やすい7セグメントLEDによるディジタル表示時計。
    • 4つの入力スイッチ付き。
    • LEDのダイナミック表示を学びたい方に最適。
    LPCXpressoに合体させるだけでオリジナルクロックの出来上がりという算段です。
    LPCXpressoを使って小規模組み込みシステム開発を楽しんだ後はリビングのおしゃれ時計に変身するという1粒で2度美味しい作戦です。

    以下は完成した時のイメージ図です。


    現在のところ基板設計の初版を終わらせた状態。


    LPCXpressoはCPU周辺回路が完成しているので、こういった試作基板は簡単に設計が済んでしまいます。
    この回路も約1時間ほどで電気設計と基板設計が完了しました。
    忙しい毎日でも時間を作って試してみることができるのが嬉しいところ。

    単なるディジタル時計ですが、自分でプログラムを組めるし、基板外形はLPCXpressoとピッタンコ同じで、少しカッコイイ!・・・というのが目論見です。

    今回は「リアルLPCXpressoサイズ」に(だけ)こだわって設計しています。
    完成したらどんな風になるのか楽しみです。

    備考

    この基板はLPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)にも持っていこうと考えています。
    興味のある方は@shintamainjpまで御連絡下さい。

    2011年7月3日日曜日

    LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)

    LPCXpresso横浜お楽しみ部会(LPCXpressoでモクモクしよう!)は横浜近郊に在住していて、「都内に出てモクモクする気力はないけれど横浜なら行ってもいいかな?」という方のためのLPCXpressoモクモク会です。もちろん都内からの参加も歓迎です。



    詳しくはATNDで!
    http://atnd.org/events/17595