マイコン
最近マイコンを使っていたので,調査したことなどをまとめときます.
やりたかったことは超音波(18~22kHZくらい)を取得して,そこからフーリエ変換をかけて目的の周波数の音を取ってきて,それを用いていろいろやりたい.ということです.
まず,手元にあった(先輩が余ってるからくれた)Arch Proというマイコンで試してみました.これはmbedという開発環境で開発するもので,ブラウザ上にコンパイラがあります.コンパイルすると.bin拡張子のファイルが生成されます.Arch ProをPCに接続するとUSBメモリのようにストレージ的に表示されるので,ここに生成した.binファイルを入れると,マイコンへの書き込み完了です.簡単!
Development Platform for Devices | mbed
またArduinoと比較すると全般的に性能が高く,今回の目的周波数も軽く取得できそうでした.さらにライブラリも充実しており,かなり快適な開発環境だと思います.
が,ファイル入出力のサンプルコードを書き込んだところ,次からのファイルが書き込めなくなりました..
ウェブ上で検索したいくつかの解決策も試してみたのですが,解決せず.
mbedのTips - ガイガーカウンター Mark2 マニュアル
分からん.
ということで,いつものArduinoに戻ってきました.
手元にあるArduino Unoを使います.Arduinoでもアナログ取得を高速化する手法があるようで,ライブラリ化してくださっている方がいるのでありがたく使わせていただきました.
Arduino Utilityライブラリ | なんでも独り言
取得したい周波数は22kHz,ということはサンプリング周波数は44kHzほど必要.ということは一回のサンプルを約22usで取得しなければいけないのですが,このライブラリとTimerOneのタイマ割り込みを併用することで,実現できました.
次は取得した波形データをフーリエ変換したいのですが,こちらもFFTのライブラリを使用します.初めはこちらのライブラリ(Modified 8bit FFT in c - Arduino Forum)を使用したのですが,なんか出力が小さいなーということで他のも試してみました.FFTよりもさらに処理が速いFHTというのがあるということで,今度はこちら(http://wiki.openmusiclabs.com/wiki/ArduinoFHT)を試してみました.出力もさっきよりはいい感じ.な気がします.実際に試してみた動画がこちら
動画では,スマートフォンから19kHZの超音波を出してて,それをマイコン側で認識するとLEDが光るようにしてます.
オペアンプで増幅してもマイクが取得できる音量がまだ小さいのですが,これはハードウェア側で何とかできるのかもしれませんし,マイクの限界かもしれません.もうちょっと調査していく予定です.
これを使って何かできないかなーといろいろ企んでいます.
以上,最近のまとめでした.