2015年1月31日土曜日

電池昇圧回路+赤外線リモコン受光センサー

今回は素回路だけで終わってしまった

長い間何故か手を付けなかった赤外線リモコンを扱ってみます。

手元にある赤外線リモコン受信センサーは5v駆動、しかし最近私の周りは3.3vプラットフォームがメイン。ということで、昇圧ICを使って3.3vから5vを作るところから。昇圧にはこのICを使いました。
DC/DCのモジュールなら500円ぐらいで売ってるけど、このICは外付けにコンデンサ2個、インダクタ1個、ショットキーバリアダイオード1個で簡単 / コンパクト / 廉価 / 電源0.9vから利用可能なので部品箱に転がしとくと便利です(「転がしとくと便利」は部品沼への直線コース)。

なお、同じタイプのICで3.3v出力のものもあり、両方買っても400円です(その発想が部品沼だと何度言えば)。


まず部品拾い。100uのマイクロインダクタがないので47uでいいか、とか、47uと22uのチタコンないから同容量の電解とセラミック積層でいいや、逆電圧防止のSBDは1S4で…みたいに多少の違いは気にしない。インダクタは気にした方が良いのですが、今回消費電力微弱で入力も3.3vなので、まぁ試してみてダメなら考えます。やっぱりマイクロインダクタと積層セラミックコンデンサの詰め合わせも買っておこう。

Amazon : ありゃ在庫切れだ


ブレッドボード上に昇圧IC回路と受信センサ回路を組み立てて、受信センサを抜いてから電源チェック、問題なければ受信センサを戻して手近のリモコンに出力に反応が出ているか、異常な電圧が出ていないかを確認。問題なし。

5v出力を3.3v回路の入力端子につなぐと壊れるので、分圧回路作らなきゃな…と思いつつ受信センサの出力端子を5v・10kでプルアップして電圧みたら約3vしか出ていなかった。のでそのまま接続w


Energia付属のリモコンライブラリで動作チェック、動きました。なお、そこらに転がっていたMP3プレイヤ用のカード型リモコンは問題なく受信できるのですが、やっぱりエアコン用はライブラリが対応していませんでした。

で。

これを使って、先日のデジタル時計に時間合わせ機能を付けようと思っていたのですが…デジタル時計で使っているRTCライブラリとレジスタがかち合ってしまい、ビルド通りませんでした。ソース追ってみたけど、あちこち影響が出そうでどちらのライブラリも手を入れるのはめんどくさそうな感じ。諦めました。

今朝はウォーキングに出たら路面凍結してるし、どうもツイてません。

2015年1月27日火曜日

MSP430/Energia+RTC+秋月巨大LED=デジタル時計

暗いとアラが目立たない

■またデジタル時計だ■

お前は他にやることがないのか、と言われるのは承知で作ります。

前回はダイナミック点灯させたところで力尽きたので、今回はちゃんと時計として動くようにします。TIの低消費電力MCU MSP430G2シリーズの2553、開発環境は同LauchPad + Energiaを使います。2553/LauchPadは日本だとちょっと手に入れにくいですが、RS onlineなどでLaunch Padとして$9.99で売ってます。せっかくなので、チップ単体のMSP430G2553も何個かまとめて買っておくと良いと思います(1個300円ぐらい)。LPC1114FN28と比べるとメモリなどごく限られるのですが、うそみたいに電池が長持ちしますし、かなりフットプリントが小さいので。

表示器は秋月の「超大型4桁7セグLED表示キット」です。低消費電力チップと組み合わせるのもどうかと思いますが。本来、秋月の時計キット用なのですが、巨大なLEDが今どきこの値段(1500円)で手に入るのは珍しいと思います。まぁaitendoで1280円で売ってたけどね…。注意しなければいけないのは、使っているLEDは16セグメントなのですが、秋月のキットでは7セグメントとして使ってます。aitendoのは16セグメント全部使っているけどね…でも16セグメント使いたくてもピンが足りないのよだからこれでいいのよ文句ないのよ(何その未練)

あとはRTCですが、今回は2553内蔵の発振回路 / カウンターを使います。キットには32768hzの水晶発振子が同梱されてます。小さくてLaunchPad基板へのハンダ付け大変ですけども。

温度計も2553内蔵の温度センサを使います。analogReadで華氏☓10の数値が直接返ってくるので便利です。まぁチップが多少なりともあたたまるので正確ではないけども(電源を入れた直後は他の室温計と一致していた)。

■先に落とし穴を書いておく■

内蔵温度センサも同じA/Dコンバータ使ってます。なので、Reference電圧を正しく設定しないと値がズレます。これで30分つぶしましたよ…。

■ハード編:巨大LED■

追記:
キットに付いてくるコロン用のLEDはクリアタイプで、方向によって明るさがかなり異なります(というか正面が眩しい)。「LED光拡散キャップ(5mm) 赤 (50個入)」を被せるか、広角タイプのLEDを用いると良くなると思います。

ほぼキットの説明書通り組み立てるだけなのですが、キットに付属しているコネクタはL型で表示器と平行に下側に伸びるように取り付けます。私は下面をフラットにしたかったので、手持ちの20ピンヘッダを取り付けました。あと、ハンダ付けの注意ですが…

  1. 金メッキ基板にはフラックスを(昔やった
  2. くれぐれもLEDの向きを間違えない(昔やった
  3. くれぐれも水平垂直平行を(昔やった
  4. ハンダ付けは必要十分に(昔(ry
基板と部品はまず最初に必ず仮組みをします。はんだ付けをしないで並べてみて、ぶつからないかちゃんとピンが全部ホールに入るかどうか、などを確認します。

1)のフラックスというのはピンや基板などをハンダで濡れ(?)やすくする処理剤です。小瓶で数百円、まぁ10年ぐらい使えます。キャップをあけると小さな刷毛がついてますので、それでハンダ付けする部分(ランドと言います)に少量塗ってやります。

2)はピンが多い部品を外すのはかなり困難です。確認確認また確認しましょう。

3)はピンを通す穴は案外大きいです。なので、雑に取り付けると微妙に部品が傾いてしまいます。傾く方向は左右だけでなく、基板と部品が平行になっているかも注意しなくてはいけません。なので、最初に1本をハンダ付けしたら、平行になっているかどうかをしっかり確認し、ずれていたらもう一度コテをあてて修正します。これで平行になっていることを確認したら、対角線上にあるピンをハンダ付けして再度確認します。これでOKならば、一応、隣のLEDも支障なくピンに入ることを確認してから、最初のLEDの残りのピンをハンダ付けします。

4)はリズムを身体で覚えるしかないっす。ただ、温度調整機能のついたハンダゴテを使っている分には最近の部品は滅多に壊れないです。それよりも、溶かしこむ時間が短すぎて接触不良になるケースの方が遥かに多いと思います。コテをあててピンを温める、コテというよりピンにハンダを当てて溶かす、ピンに自然にハンダが流れ込んだところでハンダとコテを同時に離す…ここまでまぁ3〜5秒くらい、10秒くらいかかってしまってもOKです。

今回の配線はソースに書いてありますが、こんな感じで。

信号名LEDボードのピン2553のピン番号同ピン名
Anode1桁目43P1_1
Anode2桁目22P1_0
Anode3桁目15P1_3
Anode4桁目56P1_4
Seg A177P1_5
Seg B188P2_0
Seg C129P2_1
Seg D1410P2_2
Seg E1311P2_3
Seg F1612P2_4
Seg G1513P2_5
dp<未使用>
コロン(+)204P1_2
コロン(-)18(GND)
水晶-19XIN
水晶-18XOUT

水晶は、Launch Padにこんなのが付属しています。


袋およびパッケージから取り出すとこんなに小さい。


2553のXIN-XOUTは右側のピンヘッダにもつながっているのですが、水晶発振子はピンから離れると動作が不安定になるので、なるべく近くに取り付ける必要があります。下の写真では中央の2553の右ちょっと上の方にある縦に2つ穴の空いたところがソレです。



貧乏症のワタシはこういう開発キットのようなものに手をいれるのはイヤなのですが、ハンダ付けします。ただ、こんなに小さいものなので、まずテープで止めて位置をルーペで見ながら位置を微調整してからハンダ付け。

これはハンダ付け前

ああしんど。

その他LaunchPadとLEDボード間は、メス−オスのジャンプワイヤで一本ずつ配線していきます。

■ソフト編■

MSP430/Energia用のRTCライブラリを使います。ライブラリ、ありがとうございます。なお、同ライブラリのライセンスはGPLです。
リンク先フランス語ですが、英語に切り替えられます。リンクからダウンロードすると、他にも面白そうなライブラリが並ぶのですが、今回はsRTCだけを使います。sRTCフォルダをEnergiaのディレクトリ下にあるLibraryに入れます。

使い方は簡単で、ヘッダをインクルードし、setup()で.begin()を呼び出し、秒単位の割り込みルーチンで秒をインクリメントします。あとは時分秒を取ってくるだけ。2秒間時計〜1秒間温度表示、を繰り返します。



あとはもういつものダイナミック点灯方式のよくあるデジタル時計ルーチンです。

以下ソースを公開しますが、ライセンスは一応GPLで。難しいことはしていませんが、ご質問いただければ喜んでお答えします。この後は、これに赤外線リモコン受光器か時刻合わせスイッチを取り付けてから、久々にプリント基板にしてみようと思います。


■使ってみて■

いやー、デカい。存在感ありすぎます。3.3vでのダイナミック駆動なのをいいことに電流制限抵抗もドライバも入れてないので少し表示が暗いのですが、ちょっと昭和の薫りがしていい感じw 昼間でも見えますし夜電灯を消すと睡眠の邪魔にならない程度の明るさで動いてくれています。何より、乱視+近視でも目を凝らさず見えるのが良いです。

ピンがあと2本空いているので照度センサと時刻合わせスイッチ(または赤外線受光器)は取り付けられるか…。プリント基板が遠のくなぁ。

■更新■

  • 2015-01-31
    コロンの出力をPWMに変更。ほどよい明るさになったけど点滅が見えてウザい

2015年1月24日土曜日

スマートフォン クイックジャック ソリューション



スマートフォン クイックジャック ソリューション (Quick-Jack Solution) OM13069は秋月などで売っているスマートフォンのマイク/ヘッドフォン端子に接続するI/Oモジュールです。モジュール上にはLPC812が乗っていて、音声端子を通じてマンチェスター符号(TJさん、ご教示ありがとうございました)で通信するだけではなく、音声出力から電力ももらおうという素晴らしいデバイス。

最初、つないでも反応しない!?と焦ったのですが「ボリュームを上げないとダメよ」とのこと。ボリューム上げたらLEDが点滅始めました。なるほど、信号だけじゃなくて電力としても使っているんですね。

動作を確認したところで、さてiOS用のSDKを落としてこようと思ったら…iOS用は公開されていませんでしたorz Android用は提供されているのですが、iOS用はサポートに連絡してくれ、とのこと。

週末遊ぼうと思ったのに…まぁ買う前に調べておけって話なんですけどもw

2015年1月23日金曜日

完璧なゆで玉子

お前は何もわかっていない(海原雄山風に。


上記はココロ社「宗派が乱立する半熟ゆで卵の製法を統一。簡単&短時間&失敗なく半熟卵を作る方法と、ゆで時間と仕上がりの比較写真」より。

試行錯誤の結果、倉橋家で確定したメソッドは以下の通り。「ためしてガッテン!」がベースだけど、より成功率が高い。室温や卵のサイズが変わっても失敗しないよう調整してきました。

  1. コレールなどガラスの鍋に50cc+卵1個あたり10ccの水を入れ火にかける。
  2. 冷蔵庫から出した卵の丸い側に針で穴を開け、スプーンで軽く叩いてヒビを入れる
  3. 沸騰したら卵を入れて蓋を閉め、タイマー起動。
  4. およそ1分経過したところで十分に沸騰したら少し火を弱める。弱めすぎないこと。
  5. 蓋を閉めてから3分30秒(夏は3分)経過したところで火を止め、静かに放置
  6. 火を止めてから6分30秒経過したら鍋に水を500cc入れて、30分ほど放置
  7. 水から取り出して濡れているうちに殻をむく
卵は買ってから1週間以上経ったやつを使うとベター。冷蔵庫から出した卵を使うのは開始温度を一定にするため。穴を開けヒビを入れるのは気室にある空気と卵白などに含まれる二酸化炭素の逃げ道を作るため。卵膜内側の圧力が高いと卵膜に白身が貫入(?)して剥きにくくなるから。

コレールを使うのは火を止めてから熱が下がりにくいからです。普通のいわゆる金属製ラーメンサイズの鍋の場合は加熱時間を1分程度長くしたほうがうまくいきますが、室温の影響を受け易いので安定した品質を維持するのは難しいです。

6で火を止めてからすぐ冷水にいれると黄身は生っぽい仕上がりになり、追加する水を250ccにすると昔ながらの半熟卵になります。

鍋の熱容量や気温によって、秒数は変わってきます。上記の数字を参考に調整してみてください。

2015年1月22日木曜日

EmberをXMLで

はい、まだ続きます>Ember

このところ平均睡眠時間が4時間を切っているので今日は手短に。勤務先で別のシステムについてもEmberを使えないか?という話が出てきまして。ただ、問題はそのシステムはAPIがすべてRESTというかXML。

しかしEmber DataさんはもうXMLの欠片もない世界。公式APIを隅から隅まで見ても、やっぱりできません。

が。

需要あれば供給あり。見つけました。


さっそく試してみたのですが…エンベロープなどXMLの書式が違うのか、エンドポイント間で通信はできるものの取得したXMLをmodelに入れても表示できない…というか変換できねーよエラーになってしまいます。

で。

こうなったらjQueryでXMLを取得して、それをJsonに変換すりゃあいいんじゃね?と思ってググってみたら…ありました。


やっぱりみんな困っているのね。もちろん、今更XMLなんて使いたくないんだけどレガシー対応とかいろいろあるからしょうがない。

ということで、上記ページで教えてもらったコード、ばっちり動きます。良かった良かった。

念のためですが、xml2jsonにはjQueryのプラグインを使ってください。同じ名前の他のライブラリ等だと動きません(ハマりました)。

そして、部品沼は淀む

Google Spreadsheetを使って「次に通販で頼む品物」などをメモしてます。これは秋月用のページ…


で、ある程度の金額になるか、急に欲しい必要なものが出てきた時には型番をコピーして…


ペーストすれば…


発注できてしまう…

便利すぎて困っちゃう…

2015年1月21日水曜日

Ember+Bootstrap3でナイスなモーダルダイアログを

なんだろう、この「居るよね、こういう奴」感w

…出そうとしてハマった記録です。

■公式ページ■

USING MODAL DIALOGSというページがあるのですが…この通りやっても動きません。何で動かなかったのかはこれから調べるんですが…とにかく、下の方にあるサンプルコード表示窓から正しくコピペしても動きません。ああもう、何時間ツブしたんだよorz

■ここがバッチリ■

で、どうにかならないかと探して出てきたのがここ。
  MASTER YOUR MODALS IN EMBER.JS
ember modal dialogで探すと2番目に出てくるんですけどね。ともかく、テキスト読みながら、必要なhandlebarsを補っていけば、ちゃんと動きます。bootstrapのfade dialogも効いて、ズルっとダイアログが出てきた瞬間「やったー!」と大声を上げてフロアの人の注目を浴びてしまいました。

なお、コピペで動かない場合には、一番下にサンプルコードのページがありますので、そちらを使ってください。自分でコピペしたものと比べると間違いがよくわかります…私のように。

ステップバイステップでコードの意味が解説されているので改造も簡単だし…今後はここで勉強しようっと>ember guru

■{{outlet}}について■

Emberを扱い慣れている方には当たり前のことなのだと思いますが、ググってもすぐには出てこなかったことなので説明しておきます。

ご存知の通りEmberはone page htmlをWebアプリを作ることができます。その際、一度に表示されるのは
<script type="text/x-handlebars">
で示されるテンプレートで区切られた範囲です。ただ、通常のWebアプリではツールバー、フッター、サイドバーなど共通の要素が多いです。そういうのをいちいち、各テンプレート内に置くのはあまりにもダサいです。こういう場合には、
<script type="text/x-handlebars">
  {{toolbar}}
  {{outlet}}
  {{footer}}
</script>
のようにして外側を定義します。ここでは data-template-name が指定されていませんが、なしだとアプリケーション全体で共通して【外側】として扱われ、遷移したページは勝手に {[outlet}} のところに挿入されます。

…知りませんでした。

知らなかったので【内側】の部分を全部コンポーネントで作って {{yield}} で挿入していました。ははははははははははははh orz

また、
{{outlet}}
{{outlet "modal"}}
と並べて書いておけば、常時outletに【内側】のページが表示され、指示をすればその上にモーダルダイアログが表示されます。overlayに関するスタイルなどは勝手にemberが面倒を見てくれます(サンプルではbootstrapが装飾してくれています)。以下のコードは、ダイアログを開くためのボタンで、
<button {{action 'showModal' 'settings-modal' model}}>settings</button>
そこから呼び出されるのが以下の関数です。
showModal: function(name, model) {
  this.render(name, {
    into: 'application',
    outlet: 'modal',
    model: model
  });
}
結果として {{outlet "modal"}} に、'settings-modal'というコンポーネントが表示されます。くどいですが、outletは予約語、'modal'は名称です。

■data-template-nameなしと"index"指定■

ついでに <script type="text/x-handlebars" data-template-name="index"> に関しては「何も指定しなければ初期状態で表示される」ぐらいしか書いていないのですが、これと data-template-name なしのhandlebarsとの違いは、なしは外側ページ、data-template-name="index"アリは外側ページのoutletに初期表示されるテンプレート、っていうことになるようです。

蛇足ですが、なしだとApplicationController、アリだとIndexControllerがcontrollerになります。暗黙の了解が多くて悩むことも多いのですが、わかってしまえばスッキリですね。

なおjsbin.comを使うと、アトリビュートを削ったり {{outlet}} を足したりした結果が即座に反映されるので、とても勉強になります。ぜひご自身の目でお確かめください。

さーて、明日はAuthenticationを調べて、その後は無限スクロールをpromiseとbootstrapを使って実装してみます。このペースなら、予定通り今週中に開発中のアプリに必要な技術要素をだいたい網羅できそうだなぁ。

いやはや…@53歳。

2015年1月20日火曜日

Ember.jsで初心者が落ちた穴

Building Web Apps with Ember.js [Kindle版]

大変、頼りになります。

Emberを使ってハマったネタを集約しておきます。まぁ、わかってしまえば「ドキュメント読めよw」って感じなんだけど…チュートリアルの更新が追いつかなかったり、暗黙の設定が若干進みすぎ気味のframeworkなので、自分が落とし穴に落ちていることすら気づかないこともあるので。
  1. Routingを呼ぶ #linkTo は #link-to に変わりました。
  2. handlebarsの id は id から data-template-name に変わりました。
  3. コンポーネントの名前は、必ずダッシュを含む必要があります。
    data-template-name="side-bar"
    みたいな感じで。ダッシュ取るとエラー出ませんが、動きません(記事)。

Ember.jsのコンポーネントを使う

こんなにでっかく書いてあるのにorz

昨日はEmberのコンポーネントを使おうとして見事にハマりました。

結論から申しますと、コンポーネントの名前は、ダッシュで切らないといけません。公式のGUIDEにも書いてあります。しかし、そこに気付かなかったために3時間ツブしました。フレームワークを再ダウンロードしたり、ページ上で読み込む順番を変えたり、もう思いつく限りの試行錯誤をしたけど動かない。あげく、チュートリアルの関連コードを貼ってみたら動いてしまう。で、何度目かにようやく「コンポーネント名は、ダッシュを含まないとあかんよ(Components must have a dash in their name.)」の記述に気づいた次第。動いたさ。ああ動いたさ。

なお、ハマったネタとして、こっちにまとめておきます。今後、ネタが増えないことを祈ります。いやマジで。とりあえず、ChromeのEmber Inspectorを試してみます。

以下余談。

MVCとしてのEmberは大変良く出来ています。サイズはやたらデカいのですが、実際に走らせてみると表示はむしろ他のMVCフレームワークよりも速く、特にどこかEOF(NeXTSTEPのEnterprise Object Frameworkなんて知ってる人いるかなー)を思い出させるようなオブジェクトの連携に関しては重いという感じがありません。設計思想もCoCが徹底されていて余計な設定やらBoilerplateな記述はほとんど必要ありません(まぁ「暗黙の設定」が多すぎて、それでハマることも多いんですがw)。

が。

どっかでも批判されていましたが、ドキュメントの更新が追いついておらず、公式サイトでもチュートリアル本文とサンプルコードが一致していなかったり、CoCなのに重要なアトリビュート名が変わったりで「もう誰も信じない!」な状態に陥ることもあります。

#linkToが#link-toに変わったこととか、idがdata-template-nameになったり。上記のリンクを含めて本家のサイトでもバラバラだし、日本語の解説ページで一番充実しているDevelopers.ioのこの入門シリーズにも反映していただけるとありがたいのですが…。

…まぁDevelopers.ioで一番改めてもらいたいのは、あの歯茎だけどね。とにかくバナーの写真のお前らはこっち見るなw

…それはともかく…ドキュメントはしっかり読みましょう。少なくとも「Note」ってところぐらいはね。

2015年1月17日土曜日

SOP-28ピン(過去最多)のリフロー

これは成功した方。フラックスが汚い。

久しぶりにはんだリフロー。antendoのハンダメッキ基板にSOPの28ピンという過去最多のピン数でしたが、2枚に行って1勝1敗でした。

なるべくペーストの塗布を少なくした方が2箇所もブリッジして失敗し、多めに盛った方が成功という不思議な結果でした。足のまわりをルーペで見ても問題ないので、プラスチックパッケージの下でブリッジしているんですかね。フットプリントにはみ出した分の拭き取りが甘かったかもしれませんが、品質管理(w)の基本である証跡(塗布してパッケージを乗っける前の写真)を撮り忘れたのが致命的でした。

なお、塗布には例によってマイナスドライバーを使いました。写真のように、盛大にはみ出してはいるのですが、塗った後、パッケージと基板に挟まる部分については拭き取りました(つもりだった)。

使用機材は1200wのホットプレートと、放射温度計です。どっちもアマゾン。ハンダは共晶ハンダを使っています。換気のため、台所の換気扇の真下で作業を行い、窓を一箇所、細く開いて循環性を高めます。

温度制御は例によってまったくの手動ですが、こんな感じ:

  1. 予熱して150度前後になったら電源を切り蓋をし、2-3分放置。
  2. 温度を測定して140-160度ぐらいの場所を探して基板を置く
  3. 蓋をして1分間放置(この間電源はOFF)
  4. 蓋を開けてヒーターON
  5. 基板周辺の温度が230度を超えないようチェック
  6. 超えたところでヒーターをOFF。その後も温度は上昇を続けるので、それを見越して早く切るわけです。何度で切るかは使っているホットプレートや置き場所、室温によっても違うのですが…基板を乗せない状態で何度も試して「この温度で切れば250度を越えない温度」を求めておきます。うちの場合、それが230度でした。
  7. ハンダが溶けてきます。基板の上の温度などもチェックして230度を超えているようなら問題なし、なるべく早く冷ましましょう。と言っても、取れる手段はうちわで扇ぐぐらいしかないんですが。
  8. ハンダが固まる温度を下回ったら、素早くピンセットなどで基板を取り出します。

以下、役に立たない写真です。


aitendoのLEDドライバ基板

1枚目。塗布後。

冷ましているところ。検査の結果は2箇所ブリッジ

2枚目。手が滑って落ちた。汚え。

位置を直した。やっぱり汚え。でも結果は正常だったからイヤになる。
まぁ、そんな感じで。

3Dプリンタならぬ、プリント基板プリンタがKickstarterとかに出ているみたいですが、いくらぐらいなんでしょうねぇ。最終的に焼結する必要があるみたいですが、表面実装部品もそのときついでに焼付けできる=スキージングが要らなくなるのであれば少し高くても欲しいのですが。