2015年5月2日土曜日

磁束密度をFFTで処理しグラフ表示


わー、なんだか久しぶり。

以前、磁石の動きを検出するのにアナログ出力のホール素子を使ってみたのですが、かなり強力な磁石を使っても10cm程度がやっとで、あとはノイズに埋もれてしまいました。まぁアナログ技術のある人ならもうちょっとマシな結果になるかもしれませんが。

ふと思い立って、FRDM-KL46Zについている電子コンパスMAG3110を使ってみました。測定してみると何もしなくても地球磁場が600-1200ぐらいの値を返してくるのですが、すぐ近くにネオジム磁石をおいてみても200程度しか値が変わりません。ただ、地球磁場は当然ながら安定しているので、ネオジム磁石の動きは十分信号として検出できそうな気配。

ということで、ずっと部品沼で眠っていたAQM1248(秋月の超小型グラフィック液晶)、最速の誉れも高き大浦先生のFFTライブラリなどを寄せ集めて、実験してみました。

■まず予備実験■

FRDM-KL46Z内蔵のMAG3110(ライブラリ:MAG3110…ワーニング出まくるので、あとで直してpush requestしたい)を内蔵の液晶(ライブラリ:SLCD)で表示してみました。MAG3110でボード内部のI2C端子名を指定するんですが、参照した資料が間違っていて苦労しました。
MAG3110 mag(PTE25, PTE24);
これで使えます、ご参考まで。

さて、表示してみると前述の通り、値は向きによって600-1200程度の幅で変化します。そこにネオジム磁石を近づけると200ぐらい増減します。当然離すと急激に弱くなりますが、値としてはわりとはっきりしているので、たとえば自転車のホイール回転のように周波数レンジの決まっているものであれば何とか処理できそう。

ということで信号処理はFFTを使い、表示に超小型グラフィック表示液晶を使うことにしました。

■まずAQM1248■

電子工作を再開したばかりのころ、秋月の「超小型液晶」を基板にナナメにハンダ付けしてしまったのは良い思い出…今も元気に活躍しておられます、ナナメのままで。

ということで、まずフラックスを塗って置いてしばらく放置し一カ所だけハンダ付けをして向き角度などを確認してから装着。FRDM-KL46Zとの配線は以下の通り:

AQM1248FRDM-KL46Z
Vcc3.3v
CSD10
RESETD9
RSD8
SCLKD13
SDID11

mbed用のほどよいライブラリaqm1248a_lcdをリンクしサンプルをそのままコピペして動作を確認。なお、同ライブラリはプラットフォーム(mbedの機種)を識別してGPIOなどを切り替える作りになっているのですが、概ね「LPC1768とKL05、それ以外」という感じなのでLPC1768とKL05, KL46以外の方はソースの中身と配線をご確認の上、お使いになった方が良いです。

一昨日aitendoのカラー液晶に悪戦苦闘したのですが、こっちは一発動作。やっぱ私にはaitendoはハードルが高すぎます。相場?の半値ぐらいで買えたんですが、家でビニール袋から出してみたら基板に液晶が接着済(笑)。工程ミスか指示ミスか知らないけど、液晶が端子を半分覆い隠す状態になっていて普通なら納品できない品だから安かったんでしょうね。まさにジャンク。

まぁそれはともかく、これで表示はばっちり。接続ピン番号埋め込まれていてちょっと不安だったものの動作は安定しているのでグラフ描画もかなり簡素化できそうな気配。ライブラリ開発者の方に改めてお礼申し上げます。

■高速FFTライブラリ■

今回はこれを使います。
コンパクトで高速で美しい…。mbedで使うには、

  1. パッケージをダウンロード、解凍
  2. fft4g.cをブラウザ上のmbedプロジェクトにドラッグ&ドロップ
  3. ファイル名をfft4g.cppに変更
  4. あとはサンプルを参考に書くだけ
余談ですが、サンプルではfft->ifftで誤差を確認する、という処理が書かれていて、「FFT+IFFTでフィルタ作りたい」と思っている私には拍子抜けするほど簡単w

数学どころか算数レベルの私には基数って何よ?の世界なのですが、ともかくこれも一発動作。今まで使ったFFTライブラリの中で一番簡単だったかもしれません。

■ということでプログラムの構造■

  • IntervalでMAG3110を読みバッファに値を書き込んでいく
  • メインループでバッファをチェックし、一杯になったらFFTかけて液晶にグラフ表示
これだけです。

で処理の結果ですが…まず、電子機器で一杯の室内で放置した状態でのスペクトル


ごらんのように、ほぼ全域に不規則な成分が出てます。実は圧倒的に直流成分が多いのですがスケールアウトしてしまうのでカットしてます(そりゃそうだ)。そして次が、FRDM上約10cmのところでネオジム磁石をおおよそ2秒で3往復ほどの周期で振ってみたところのスペクトル


明確にでかい山が出来てます。必死に高速フリフリをすると右へ移動するし、ゆっくりにすると左へ移動するので、なんとなくできてるかなーと。さて、次は、「こういうぐあいにでっかい山ができていることを検出する処理」というのを書かないといけないのですが、パターン認識とか苦手なんす。どなたかアイディアください。

以下ソースです。

ほとんどサンプルからのコピペですが、mbedリポジトリに公開しましたのでご笑覧くださいませ。下にも貼っておきますが、何かの参考にされるのであればリポジトリの方をご覧下さい(基本的に以下のソースは更新し忘れることが多いと思うので)。

2015年4月7日火曜日

こわれたのは地味な君

夜桜@ミッドタウン

朝、PIRの安定化に効果があれば、とコンデンサなど付けてみていた。

ら。

BBBが急死。またしても「だから電源を入れたまま作業するなと何度言えば」なのだけど、思い当たる原因がない。とりあえずUSB給電だと立ち上がるので大きなダメージはなさそうだけど、Vdd5vは死んでいる。

会社の昼休みに回路図を見てみたら「起動するけどVd5vが出ていない」という症状から、どうもACアダプタのところについている保護回路NCP349が死んだっぽい。でも、それならBBBとしての機能は損なわれないので、一安心。

で、家に帰ってみると推定通り、Sys5vが出ている。これならBBBとしての回路には影響がない。

やれやれ。

ただ、一応、念のためACアダプタの電圧を当たってみたら…出てないw

ACアダプタから5vが出ていないww

たしかに300mVしか出てないwwwwwwww

…失礼しました。秋月の安物とはいえ、ACアダプタが死ぬという経験は滅多にしたことがなかったので取り乱してしまいますた。購入リストによれば、1年半ほど前に間違ってArduino用として秋月店頭で買ってきたモノ(だって店員が5vで良いって言ったんだもの)。あの頃はまだSIerのサラリーマンだったなー(遠い目

一緒に買ったArduinoは元気に時を刻み続けているのですが、こっちは一足先にご臨終です。短い間だったけど、お疲れ様。

表面実装部品は安いっ'

フィラデルフィアチーズの空き箱を愛用してます

以前、表面実装CRDを安ジャンパリードに直接ハンダ付けをしたら何かと便利だったので、


こんどは「10mAのCRD」と日亜の「白色大出力チップLED NSSW157T」をヘッダに取り付けました。材料は3ピンのヘッダ、CRD、LEDです。


このぐらいのサイズになると迂闊にハンダメッキしようとするとコテに吸い付いてしまって離れてくれません。コテから振り払おうとするとどこかへ行ってしまうし。

使用工具は工作用クリップ台、逆作用ピンセットと普通の精密ピンセット、ハンダごて。各部品を薄くハンダメッキします。厚くなってしまうと水平垂直を出しにくくなってしまうのでご用心。

あとはピンヘッダを逆作用ピンセットで固定してからクリップ台に取り付け、ピンが机ぎりぎりになるよう設置するようにセットし、別のピンセットでCRDを取り付けます。極性をどうしようか悩んだのですが、LEDが白でCRDが黒なので、LED側にプラス、CRD側をマイナスに設定しました。白がプラスで黒がマイナス。この時私は何も考えずに先端近くにCRDを取り付けてしまったのですが、そうするとLEDを水平に取り付けにくくなり苦労します。ぜひピンの中間点に取り付けてくださいorz

続いてLEDです。LEDはピンを垂直に立てて、LEDを上から押すように固定すると楽にハンダ付けできます。

うまくいったらブレッドボード側の中央のピンを切断します。タップとして残したい人はそのままでも良いと思います。

幅約6mm

まぁ、電流制限付きLEDなんてのも世の中には売られているわけですが、好きな電流×好きなLED(日亜の高演色LED)を組み合わせできるのは自作だけ!ということで許してください。

2015年4月6日月曜日

表面実装部品は安いっ



電解コンデンサはあまり在庫を持ってません。しかし、いつ必要になるかわからないので一応表面実装タイプで揃えてます…秋月で5個100円のやつ。しかし、今夜、ついに47-100μFが必要になったので、ブレッドボード用の足を付けました。

勢いが止まらなくなって、ついでに0.1μFの1608積層セラミックも制作。10個ぐらい作っておこうと思ったけど、ふと時計をみたら30分もたっていたので2個でおしまいにしましたorz


これは三端子レギュレータ用なのですが、どうせなら中央GNDにして3pinに2個付ければ便利じゃね?と思ったのですが、工作技術と視力が追いつきませんでした…。

反作用ピンセットもう一個買っておこうっと。

2015年4月5日日曜日

秋月などで売ってるB+用ケースがすでに2用に加工済?


RS-ComponentsからやっとRPi2が届きました。注文したのは2月下旬。まぁたぶん最安値だと思うので待つのもしょうがないんですが…とりあえず発注時の出荷予定から何の連絡もなしに2週間遅れるのはいかんと思う。そういうことをするのは私の勤務先のくそったれな外注だけにしといてくれ。

ま、それはともかく。

とりいそぎケースが必要だったので、秋月のワゴン売りケースを入手。事前に調べてあった加工法によればニッパーで切るだけだったので、私でもたぶん大丈夫(書いてて悲しい)。

でさっき、ケースを加工しようと開封してみたら。

加工済みでした。
むりやり突っ込もうとして壊す人が多かったりしたのでしょうか。いずれにしても、ありがたいことです。

なお、これは公式に発表されていることではないので、もしかしたら未加工の個体もまだ流通しているかもしれません。組み立てる前に確認を。

SE-10というPIRセンサー


PIRセンサーは侵入警告灯として使われることが多いせいか、センス信号が数秒〜数分ラッチされて出力されるものが多いのですが、これ(焦電型赤外線センサモジュール(SE-10))は差分を検知したらそのまま出力してくれるタイプなので、睡眠センサーとして重宝しています。

ただ、どうも、数日間電源を入れたままにしていると動作がおかしくなるようです。

電源入れっぱなしの睡眠センサーとして使うのはこれが2個目ですが、前のもしばらく使っていたら実際の動きとは関係のないデューティー比50%ぐらいの信号が出てしまい、24時間に一度電源を入れ直す…という運用でカバーしておりました。さすがにそれはアホなので交換したのですが…交換して数週間でまた同じ状態になりました。

うーん、これ、製品が悪いのかロットが悪いのか知らないですが…不良なんじゃね?

「電源を制御して24時間に一度5秒間だけOFFにする」なんて改良は造作も無いことですが、どうもすっきりしません。

電源電圧5-12vのところ下限の5vで動かしているから、9vにしてみようかなぁ。でもBeaglebone用なので、そのためだけにDCDC付けるのもアホらしいし。

うーん。

2015年3月26日木曜日

いわゆるスーパー三端子レギュレータ

交換前。


3端子のDC/DCコンバータ、使ってみました。

この回路、電源24vだけどmbedなのでロジック回路は3.3v。約50mA流れるので約1wが三端子レギュレータに消える計算になり、さすがにチンチンに熱くなります。

さすがにこれはいけないので、スーパー三端子レギュレータに交換してみました。

YES! 秋月!

表面積がでかいので単純には比較できないけど、触っても全然温度を感じません。電流が小さいこともあって、オシロで拡大してみてもシリーズレギュレータとの差は特に感じられないレベル。まぁオーディオなどだとわかんないけど、私の粗雑な電子工作レベルでは何の問題もない。

昔、100mAの7805が150円ぐらいしたことを考えれば500mAで250円はただみたいなもの。今後もこういう用途には使っていきたいと思います。

それにしても…便利な時代になったものよのぉ…。

全然関係ないけど、オリーブオイルで焼いてコンソメバジルかけたら旨かった。下手な本物より好きかもしれないw


2015年3月22日日曜日

Arduinoで指紋認識

たれにLEDが映える…と思ったら私の顔もかすかにw

友達のOさん経由でFingerprint sensorを入手できたので、さっそく試してみました。

Adafruitで公開されているDatasheet PDFが中国語でびっくりしますが、Adartuitがチュートリアルを用意しているので、ご安心くださいw しかし、mbedで使うつもりだったのですが、ドライバの情報が中国語だけなのは辛い。

なお、先に書いておきます。原因はわかりませんが私の入手したセンサーには指紋を一つしか登録することができませんでした。Adafruitで売っているものと違うタイプなのかもしれません。いずれにしてもこれでは指紋認証デバイスの意味がないので、Adafruitに改めて注文して後日また報告します。

それはさておき、Arduinoにつないでみます。

付属のコネクタ&配線は導線部分が短すぎてそのままではブレッドボードなどに刺せないので廃リード線をつぎたしてやります。最近、リード線の接触事故などでBBB、LPC1114FN28などを相次いで殺してきた私なので、熱収縮チューブできれいにカバーしました。


なお、コネクタは下の写真の向きで差し込みます。


Arduinoとの接続は、

  • 黒:GND
  • 赤:5V
  • 緑:p2
  • 白:p3

です。GitHubからライブラリ+サンプル+ドキュメントをダウンロードします。チュートリアルではいきなりfingerprintサンプルを試していますが、当然まだ指紋を登録していないので動きません。まずenrollで登録しましょう。

encollの使い方はソースを見ればわかりますが、起動しシリアルモニタを9600で表示するとidを何にするか聞いてきます。12にする場合、 12とスペースを入力し、送信ボタンを押します。そうするとセンサーが赤く点灯、待機状態になります。あとはシリアルモニタの指示に従い:
  1. 登録したい指をセンサーに乗せる。
  2. 指を離す
  3. もう一度乗せる。
  4. 失敗した!と言われたらもう一度
で、これを繰り返して別のIDで別の指を登録します。


これでめでたくfingerprintを試せます。実行すると赤く早い周期でLEDが点滅しますので、さきほど登録した指を乗せます。

が。

前述の通り何故か最後に登録した指一本しか認識してもらえません。新しいのが届いたらまたテストします。

お疲れ様でしたorz

認識に失敗してもエラーメッセージなどは出ないので、認識失敗してリトライしているのか認識処理をしているのかがわからないのですが、1秒以下で認識されることもあるので、一応カタログ性能は出ているのかもしれません。登録した時とほぼ同じような位置に指を置かないと認識されないので、指ガイドなどを設置する必要があると思います。

ライブラリの中身を検証する気力がないので、とりあえず部品沼に沈めておきます。なむ。

PanaVise導入しました。

想定よりも土台がでかい。こっちは小さなバイス

何というか、私のチマチマした電子工作にはデカいw

こっちは大型基板用バイス

でもユニバーサルジョイントが2カ所ついててネジ二つ緩めるだけでどんなポジションでも取れるのはすごく便利。ユニバーサルジョイントにも何か絶妙なクリック感があって、軽くネジを締めれば自然に止まる。




バイスは小型基板用と大型基板用を合計2種類。でかい基板用はワンタッチで基板を脱着できて便利。


  • 591-312 TRAY BASE MOUNT(部品トレイを兼ねたプレート)
  • 591-305 LOW PROFILE BASE(球関節のついた土台)
  • 591-315 CIRCUIT BOARD HOLDER(大きい方のアーム)
  • 591-203 HEAD FOR 300 BASES(小さい方のアーム)


made inどことは書いてないんだけど、雑なところときれいなところが混在していて笑える。バリあるけど怪我するようなとがったところはない。メッキはむちゃくちゃ分厚くて長持ちしそうな感じ。何というかまぁ昔のアメ車的。



今使っている2,000円弱で買ったやつは作業性がものすごく悪い。ツマミの仕上げが悪くて強くつかむと痛いし、ジョイントのボール把握がいまいちなので思いっきり閉めてもとまらないしで、少しワークの角度を変えようとしても大騒ぎなのだった。クリップのビニールカバーはすぐ外れるし、錆の上にメッキしたんじゃないかってぐらいシャフトがざらざらだし。ああ悪口いえばキリがない。



今回Mouserに注文して合計15,000円ぐらい。送料無料なのでUPS Worldwide Express Saverが選択されたのですが、水曜日の朝注文して木曜に成田到着、金曜のお昼に配達されました。UPSすげえ。いつもは国内でものすごくモタモタするんですが、これがExpress Saverのご威光というやつなのでしょうか。

アメリカーンといえば、梱包。プチプチ充填された上、それぞれがビニール袋に入って熊でも止められそうなホチキスでがっつり止まってます。で、このプチプチがまた多い。30リットルぐらいあるので処分が大変っす。


一方中国は封筒にそのまま部品が入ってたりする。

中間点はないのか。

2015年3月7日土曜日

仕事に役立つ電子工作w



私は耳が遠いのですが、一日中補聴器をつけていると汗疹ができたりして具合が悪いので基本的に仕事場では外しています。

しかし、それではミーティングの招集に気づかなかったりで何かと不便。いちいちチャットで教えてもらうのも何だかなぁだし。

というわけで、呼び出しデバイスを作りました。

LEDと電池とスイッチでいいじゃん、とも思ったのですが、無駄な努力こそ電子工作。

第一号機は以前、「無駄に豪華な自転車用ストップランプ」の流用で、「叩く→点灯」というシンプルな装置。加速度センサADXL345で装置を叩いた時の振動を検出し、MSP430G2553でFFTかけてノイズなどの影響を排除して「叩かれたかどうか」を判断してLEDを点灯するのですが…今ひとつ反応が鈍いしLEDまで電線ひっぱるのが面倒くさい。

だったらリモコンにすりゃあいいんじゃね?とできたのが2号機。上の写真です。赤外線リモコン受光器とLPC1114FN28を使って、そこらに転がっているリモコンからの信号が来たらLEDを激しく点滅させる方式としましたw

こんなん1時間もあれば終わるわ、と始めたのですが…IR Remoteが何故かFRDM-KL46で正常に動作せず2時間ほど捕まってしまいました。安直に動かそうとFRDMを使ったことが裏目にorz

あきらめてLPC1114FN28を使うことにしたら、dp27がオープンコレクタだと忘れていて「LEDが点灯しない…いや電圧が出ていないじゃん?」と頭を抱えたこと以外は特に問題ありませんでした。

ああ無駄な工作は楽しいw