Arduino - サウンドセンサーでWindowsをコントロール
SparkFun製のオペアンプ・モジュールをスイッチサイエンスさんで購入しました。
表面実装でまとまっているのでとてもコンパクトですね~
(本家SparkFunのOpAmp Breakoutはこちら)
結局これと一緒にFunnel I/Oも安いうちに買ってしまいました![]()
いつか無線小型化したいときにでも使ってみることにします。
早速、先日作ったArduino Sound Sensor Shieldのアンプ部分を、これに置き換えてみました。
都合が良いことに同じLM358を搭載しているのだけど、これは低電圧でも動作するLMV358です。
Funnelでもそのまま使えます。
で、せっかくインタラクティブなセンサーなんだから、これだけでは面白くないよね~
なので、アプリと連携してWindowsをコントロールするようなものを作った。
Processingではそこまで出来ないからね。
内容はいたって単純。
シリアル経由で受け取ったデータに閾値を設けて、その値を越えたら何かアクションをする仕組み。
その「何か」は、Windows上で起こせるイベントであれば何でも良いわけなんだけど、いろんなことしようと思ったらそれなりの技術も必要になるので、ここはあくまでサンプルということで。
--
その前にアンプ部の置き換えです。
こんな感じで、かなり部品が減りました。
というか、マイク周辺回路しか残ってませんよ。
そのマイク部分もブレークアウト化して煮詰めればもっとスペースを減らせる。
実はSparkFunにはマイク・モジュールもあるので、これを使えば一発です。
今頃気づきました![]()
でもちょっとお高い感じなんだけど、これだけでアンプまで装備しているから小型化する上で使いたいな。なのでスイッチサイエンスさんお願いします。。。
このモジュールには入力部に1uFのコンデンサを入れてあり、それで直流をカットしています。
更にLMV358は2回路とも使用していて、両方とも100pFのローパスが組み込まれています。
各段10倍、2段合計で100倍。
と書かれてます。
これまでの構成よりは安定感はあるでしょう。
で、マイク周辺のコンデンサは不要かなと思ったけど、ノイズ対策用に4.7uFに変更しました。もっと下げても良いかな。
動作確認は何の問題も無く、このモジュールのみで感度調整まで完結来るのは楽。
このまま外部のアンプに接続してスピーカーを接続すれば、そのままマイクの音が出力されます。
アンプ・モジュールの出力を外部アンプの入力に入れてやるだけ。
但し、入力された音と共にずっとプーッという音が出続けるのだけど、これはローパスの設定ミスだろうか・・・
ラジオのチューニングが中途半端な状態のような感じ。
簡単にアンプが搭載できて、10倍から100倍まで可変出来るのは、ビギナー工作にとってはいろいろと使いまわしが出来そうですね~
600円というのが高いか安いかは別として、とても便利なんでありですよお父さん!
他にもFMラジオモジュールや静電容量センサーモジュールなんかも欲しいのだけど、どちらも売り切れ。
特に静電センサーには興味があって、PSoC FirstTouch でもそのセンサーを試すことが出来る。
これを他のマイコンで実現する場合、調べてみたけどいったどうやったらいいのかさっぱり分らず困ってます。
単純に触って反応するタッチセンサーならすぐに出来るのだけど・・・
出来ることならモジュールやPSoCを使わずにディスクリートで仕上げてみたいと思い、どなたか分る人がいましたら教えて下さいm(_ _)m
もしかしてタッチセンサーの延長みたいなもんなのでしょうか。
分りました。まさに延長でした![]()
ArduinoサイトのPlayGroundに、Capacitive Sensing Libraryが置いてあります。
灯台もと暗し・・・
--
さて本題ですが、ようやくソフト屋さんの本領発揮です。ソフトクリーム屋さんではないですよ。
ここでは簡単なサンプルということで、ある値を越えたらアクティブになっているウインドウを最小化し、もう一度越えたら元の状態へ復帰、というアクションをしてみようかと思います。
更に邪魔にならない配慮として、システムトレイへの常駐もします。
不意にアクティブとなった邪魔なウインドウは、軽く鼻息であしらってやればいいだけなのですよ。
いきなり周囲で大きな音が鳴らないよう注意しないと、返って作業の邪魔をします。
--
などと記事を書き続けようとしていたら、これだけではつまらんな~、と思いサンプルの機能をちょいとアップグレードした。
上記に機能追加ということで、こっちを作ってしまおう。
まず最初に追加したかったのがコピー&ペースト。
誰もがGUI環境で最も使用する機能。
1回目でコピー、2回目でペースト、の繰り返し。
欠点はペーストする前に別のをコピーしたくなった場合、大変困るということ。
CTRLやALTキーとの組み合わせで出来れば良いのだけど、自アプリ以外に対してキーをキャプチャするとなると、ウインドウメッセージのフックをしなくてはならないと思うので、これはいつか対応しようと思う。
次にマウス操作のイベント発行。
クリックしたりダブルクリックしたり、ホイールにも対応したので、あなたの吐息でスクロールします。
これもモデファイア・キーとの組み合わせによって、上と下方向や右と左ボタンとかで扱えるといいだろね。
ほんとはアナログ値によってスクロール量を変化させてみたかったんだけど、これはちょっと手間かかりそうなんで今はやめ。
レジストリをリアルタイムに変更していく方法もあるけど、あまり良いやり方ではない。
結局メッセージを拾って加工しないとならないわけだけど、言語がC#なんでWin32APIやらアンマネージドやら使うといろいろ面倒でならない。
と言いつつ、既にそれらを使わざるを得なかったけど、普通にC++使えば良かったな。
画面はこうなっていて、出来るだけシンプルにしています。
上から順に説明すると、
- COMポート設定 : 通信ポート
- 開く : ポートを開いたり閉じたりします
- 終了 : アプリ終了(タイトルバーの「閉じる」は常駐となります)
- DTR : データ端末レディ
- RTS : 送信リクエスト
- 通信速度 : デフォルトで 9600 に設定されてます
- Timeout : 通信時の受信タイムアウト時間(1ms単位)
- Interval : 次のアクションをするまでの間隔(100ms)
- Threshold : Arduinoから送信されたデータの閾値(0~1023)
- アクション一覧 : 実行する動作を選択します
- 下矢印 : 通信ログを開いたり閉じたりします
- 開始 : 通信を開始・停止します
DTRとRTSはあまり意味がありませんが、エラーが出るようならチェックしてみて下さい。
ポート設定のストップビット、データビット、パリティについてはN81固定です。
起動後にArduinoを接続してもポートが見えないので、予めArduinoは接続してポートが見える状態にしておいて下さい。
タイトルバーの閉じるを押せばシステムトレイに常駐し、右クリックのメニューから「開始」と「終了」が出来ます。
ダブルクリックで元のウインドウを開きます。
XP SP3とVISTA SP1で動作確認済み。
実行するのに .Net Framework 2.0 以降が必要なので、XPな人は予めインストールしておいて下さい。
VISTAな人はそのままで大丈夫です。
以下ダウンロードのリンクです。
ソースは整理してないので要望次第。
ダウンロード ArduinoCommSample.zip (33.3K)
VISTAでの動作イメージ。
「Key - Hello!」をアクションしてます。
2133はグレア液晶だから映り込み激しくて撮影角度に苦労する・・・
基本的にArduinoのアナログポートの5番に入ってくる値をそのまま処理しているだけなので、アナログ変化のあるセンサーならなんでも良いと思います。
Arduinoのプログラムを弄ればデジタルでもいけます。
うまく ARToolKit とかと連携出来ると面白いかも。
黒でなく赤色LEDに反応できれば、ドットマトリクスとか使ってパターン表示して遊べるんだけどな。
例えば、センサーからの入力をドットマリクスLEDにパターン表示し、ARToolKitを利用したアプリでそのマトリクスをカメラ経由で認識して3Dオブジェクトを動かすとか。
センサーとして最もよく使われていそうなのが加速度センサーだと思うけど、これならアナログ3つ使った動作も出来ますね~
マイクの付いたヘッドセットを改造して、頭のてっぺんに加速度センサーを取り付けてマイクを使えば、OSのオペレーションが頭部だけで出来てしまうかも。
更にArduinoをLilyPadにしてXBee化すれば、ウェアラブル化もOK。
フットスイッチを改造すれば足で操作も可能。
音楽の演奏に合わせてオペレーションも可能?です。
んでもって、加速度センサーをジャイロやコンパスにすれば、1人称や3人称視点のゲームまで出来るかも。
あ、これはドライバ作らないとダメか。
・・・まあSatE-OはFPS好きですがこれはやりません![]()
今回はこんなセンサーでも使ってみると面白く、手を使わず息(または音)による反応ということで、両手でタイピングしていたりして使えない状態での入力補助として、意外と実用向けではないかと思います。
フィジカル・コンピューティングの初歩という感じで、Arduinoらしさを表現する一歩になったかなあ、と・・・![]()
あ、でも、ArduinoならPCと切り離してこそ、かな。
| 固定リンク
「電子工作」カテゴリの記事
- AVR - ATmega48,88,168リセッター(2008.09.14)
- Arduino - ArduinoによるAVRライターとATmega328P再換装(2009.03.07)
- Arduino - SparkFun マイク・モジュール(2009.02.15)
- Arduino - Arduino用容量倍化ATmega328P到着(2009.01.07)
- Arduino - ブレッドボードでArduino(2008.04.05)





コメント