‘BeatRing’ comming soon …

ぐちゃぐちゃ iPad Air (3.3mm, f/2.4, 1/24 sec, ISO160)

SparkFunの「Sound Detector(以下SDと略)」と出会ったこの日から、密かに作ってきたのがこれ。いったい何かというと「入力がマイクで出力がリングLED」なVUメータ+スペアナもどきで「LEDの点灯数がレベル、表示色がスペクトラム」という、ただそれだけのもの。AdafruitのPro Trinket(5V)とNeoPixelリング12連(以下NPと略)、そしてスペクトルの取得にはサンハヤトのMM-3830をMCP3208経由で使っている。

予定ではとっくの昔に完成し、ケースに収まって持ち歩きできるようになっている筈だった。それが未だバラック状態なのは、試作を終えてUNOをTrinketに、電源をLiPoに、そして更には充電できるようにとしたところから次々とハマったため。中でもいちばん手を焼いたのがSDで、実はSparkFunのサイトにこんな記述がある。Google翻訳によると

「サウンド検出器は、アナログ回路であり、そのように、それはほとんどのデジタル回路よりも、電源のノイズに敏感です。カプセルは、有効電力レールを横切って座っている分圧器であるので、カプセルの出力上に供給ライン上のノイズを転写します。チェーン内の次の回路は高利得アンプであるため、供給上の任意のノイズは、その後増幅されることになります。そのため、音検出器は、多くの回路よりも慎重な電源構成が必要な場合があります。」

とまあ、こんな調子でアナログ的な弱みがつらつら。そこでDC-DCをいいのに替えたり、あちこちにコンデンサやら抵抗やらを挟んでみたりしたが全然ダメ。その後原因がNP点灯時の電圧降下によるものと判明したところからは、またもや試行錯誤の連続。そしてどうにか安定動作するところまで辿り着いたのが、つい最近のこと。

まだこの先にはハコ入れという難関が控えてはいるが、今度こそ本当にゴールが見えてきたという感じでホッとしているところ。早くこれ持って外へ出たいもんだ。

7セグは絶滅危惧種か!?

これまで回路の電流を測るのにこれを使ってきたが、配線が面倒で毎回思い出すのに苦労していた。どうせハイサイドでしか使わないんだし、もちっと楽なのはないかと思って探していたら、なんとこれまたAdafruitにあった。INA219だそうで、早速購入した。むろん問題なく動いたし、Adafruitの製品らしく小奇麗にまとまっていて◎。

そこで次はバッテリー駆動の際のそれを測るべく、値を手持ちのLCDに出してみた。かー、もっさりしていて見づらい! これではアカンと、隠遁状態だった同じくAdafruitのI2C7セグに交換。1秒おきにVとAを交互に出すようにしてみた。うーん、視認性の良さは比較にならないし、何よりこのキビキビ感が気持ちいい!  やはりこういうのは7セグに限るな、と再認識。

2015-10-16 16.03.47 iPad Air (3.3mm, f/2.4, 1/24 sec, ISO64)

だがAdafruitのこれ、I2Cで楽なのはいいがデカくて少々お高い。もっとコンパクトで安いのはないかと探したが、ない。んじゃー自作といきますか! と思い立ち、現物見ながら考えようとアキバへ。

ところがビックリ、小型の4桁7セグなんてどこにもない。昔はどこにでもあったもんだが、今や「売れないから置かない」んだそうで。言われてみりゃあ確かに最近、7セグって滅多に見ない。仕方ないので、帰ってからネットでポチることにした。少々テンション↓だが、続きはそれから。

2015-10-16 21.39.26 iPad Air (3.3mm, f/2.4, 1/15 sec, ISO400)

追記: ひと足先にMAX7219が届いたので、手持ちのこれとの組み合わせで動かしてみた。ライブラリはこれ。今回のTrinketは5V。ISETとVccとの間に抵抗(ここでは10KΩ)を入れないとウンともスンとも言わないので注意(これで1時間近くを無駄にした)。次はこれをどうやって3.3Vで動かしてやろうか、いま思案中。

FirmataをBluetooth経由で

そのうちやってみようと思っていたそれを、Windows版「Firmata Test」から試してみた。以下はその備忘録。

2015-10-14 13.15.12 iPad Air (3.3mm, f/2.4, 1/40 sec, ISO40)

1. FTDIを使って、ArduinoIDEのシリアルコンソールからHC-06(注)の名前をhogeに変更。

2. スケッチ「StandardFirmata」をTrinketに書き込む。

3. TrinketのRX:TXとHC-06のRX:TXとをクロスで接続する。

4. Windows側でhogeとペアリング、続いてこれに対しBluetoothシリアルポートを設定・開始する。

5. Firmata Testにて、4で作成されたポートを使う。

これでTrinketの13番ピンをHighにすると赤LEDが点灯した。ついでにPWMもLEDで試験してみたのが上の写真(HC-06は3.3Vでは動作しないので、今回はVccにLiPoのそれを入れている)。これは使えるかも!

注: 実際に使用する時はちゃんと技適の取れたやつを用いること。

時代は3.3V

このところi2Cでセンサを試す機会が増えた結果、UNOが出番を失ってTrinket3.3Vがメインになっていた。だがこれ、USBでスケッチの書き込みができるのはいいがシリアルモニタが使えない。なのでFTDIで使ってるんだが、変換器がブラブラしていて実に危なっかしい。落ち着いて作業ができなくて、困ったもんだと思っていた。

そこで目をつけたのがSparkFunのPro Micro3V。USB接続でシリアルモニタが使えるというし、更にはキーボードとかにもなるというのでこれを購入してみようかなと思った。が、そのおネダンたるやTrinketの倍! これでハズレだったらイタイなあとも思い、まずは試しにと買ってみたのが5Vの方のパチモン(敢えてどこのとは書かない)。

そしたらこれが、何の問題もなく動いてくれた。Trinket並にコンパクトだし、シリアルモニタも使えるし、リセット後すぐにスケッチが動き出すし、INTがたくさん使えるしで感動。直ちに3Vのそれ(むろんホンモノ)を注文した。

が、どういう訳かこっちがあまりよろしくない。ホストからボードが見えなくなる現象が頻発して、まともに使えていない(涙)。なので暫く5Vの方を使う事にした。そこでご登場願ったのが、引き出しの奥で眠っていたStrawaberryLinuxのTPS63060と、サンハヤトのMM-TXS01。前者で5Vから3.3Vを作り、後者でi2Cその他のレベル変換を行う。

2015-10-11 11.10.30 301F (3.69mm, f/2.2, 1/60 sec, ISO88)

ゴージャスですねぇ。ちゃんと動いてくれたし。これで仕事がススムくん♪

ただ3.3Vの方、高かったのになんなんだこれは! ヨソじゃちゃんと動いてるのか?

追記:喜んだのもつかの間、SLEEP_MODE_PWR_DOWNでハングるではないか! 328u4はこれができないのか???

今度はi2Cでハマる

Arduinoから使えるセンサーは、最近どれもみなi2CもしくはSPI。おかげでピンの数が節約できるし、複数のそれを同時に扱う事も楽にできるようになった。まことにありがたい事である。

が、実はそこに大きな落とし穴があった。結論から言うと「MsTimer2とWireが併用できない」。がが~ん!

具体的に言うと、MsTimer2で登録したハンドラ内でi2CのTransmissionをすると、そこから二度と帰って来ない。つまり「バックグラウンドでは一定のタイミングでセンサーから値を取得しておき、フォアグラウンドではそれを必要な時だけLCDとかに出力する」みたいな、カッコいい書き方ができないのだ。

恐らく両者で同じタイマーを使うからだと思うが、PWMとかもこれを使う筈なのでアプリケーションから排他的に利用するなんて、まず無理。そこで調べてみると、Arduino PlaygroundにTimerOne/TimerThreeというのがあった。「おおっ! これならイケるんでは?」と思って前者を試してみたが、やっぱりダメ(涙)。

バッテリーの問題に目処がたったと思ったら、今度はこれだ。さて、どうする?

いちばん簡単なのは「MsTimer2を使わない」こと。loopの中にありったけ条件分岐とその先の処理を書き並べるだけだが、こんなの解決でもなんでもないので×。そこであれこれ考えた末「ArduinoにRTCを外付けしてタイマー割り込みをINTピンで拾う」しかない、という結論に達した。これなら精度も期待できそうだし。

ただ、問題はそのINTピンに余裕がないこと(Pro Trinketにはそもそも1本しかないし)。そしてこの俺がRTCを知らないこと(ああっ)。ま、気長にやりましょ。

追記:RTC-8564NBであっさり動いたのでニンマリ。SLEEP_MODE_PWR_DOWNからすかっと起きてくるのが実に気持ちイイ。

Tirez sur le pianiste de faux!