FC2ブログ

2020-01

GW突入ですね

腰痛いのがなかなか引きません・・・車の運転、大丈夫かな・・・
こんばんわ

ココ最近は時間的に重めの作業を回避してたので、平日夜やGW中でもできることを~って、Arduino Mega ADKを始めたわけですが・・・さわってるうちに面白くなってしまったので、とりあえずなにかアプリつくってみよ~的なノリです。

外側に回路なんかを伴うものは手間がかかるので、Arduino単体でもなんとかなりそげなモノをいろいろ思案したところ、思いついたのが・・・

Arduino + Android(Processing) でオシロスコープつくろう
2012042901.jpg
※今回作成したシステムの全景です^^;


ArduinoのAD変換で計測→Android上で波形を表示しよう 的なノリです。PCとArduinoを繋いでの事例なんかは結構あるようですし、勉強がてらにはいい題材かなーと。

処理のフロー的にはこんな感じです。
2012042904.jpg

Android側の画面はこんな感じ
2012042903.jpg

上段の枠に入力信号の波形を表示します。波形は等倍、2倍、4倍、8倍の表示倍率を切り替えできます。2倍以上の表示倍率の際は波形をドラッグしてスクロールできます。

中段の枠は入力信号に高速フーリエ変換を施した結果を表示してます。要はスペクトルアナライザ的な表示です。

下段は入力の2チャンネル目・・・ではなくて、枠内をタップした時点のFFT変換結果を逆フーリエ変換した再現波形を表示します。FFT変換表示枠内の青い線はドラッグして高さが変えれるようになっていて、特定周波数の信号成分をカットしたり増幅したりできるようになっています。
2012042902.jpg
※ノイズを除去?してみたところ。何の役に立つかは不明^^;

Arduino側の処理はサンプリングレートを稼ぐために、全力でAD変換→その後に一括送信といった形を取っています。そうはいってもArduinoのAD変換には100マイクロ秒程度の時間がかかるので、1秒当たりのサンプル数は10,000程度になります。これだとせいぜい1KHzくらいが実用限度でしょうか?

Arduinoに繋がれているブレッドボード上のパーツはテスト用のものになります。

赤色LEDはAndroid側へのデータ送信中に光ります。

半固定抵抗は観察用のPWM波形を手軽に外から変えられるようにするためのものです。Arduinoの5V電源を半固定抵抗で分圧し、3番のアナログ入力ピンに入れています。これを読み取ってその値で3番のPWMピンにアナログ出力をかけています。この3番ピンからでているPWM波形をテスト用の観測波形としています。

ArduinoのPWM出力は約490Hzということらしいので、観測用にはちょうどいい具合です。自分で出力した波形を自分で観測するとか、ずいぶんとピタゴラスイッチ的周り道ですが^^;

実際こんな感じでうごくんだ~ 的な動画を載せておきます。あんまりヌルヌルとは動きません^^;トリガの処理も甘い、サンプリング周期も荒いといった状態なので波形がチラチラと動きます。

Arduino + Android(Processing) でオシロスコープつくろう


こうなると、高速なAD変換チップとかを使ってもうちょっとマトモに波形見れるのとか、面白いかも^^
スポンサーサイト



自分向け備忘メモ

すごしやすい季節なのですが、いきなり腰の調子がよろしくないです。
こんばんわ
車での帰省はハードな旅になりそうな予感・・・


週次の更新ではありませんが、自分向けのメモもかねてArduino ADK の環境構築やら、はまった点やらを記載しておきます。とりあえず2012/04末現在で、なおかつ私の使ってるAcer ICONIA A100(Android 3.2.1)の場合での話しです。環境によって随分異なる場合があるようなのでご注意ください。

環境構築の手順などはこちらから
 Running Examples in Accessory Mode

まるで手順などかいてないようにみえるけど、一通りの必要アプリやらライブラリやらが記載されています。ただ、必要ライブラリへのリンク等がすごくわかりづらい^^; ほかに判りやすく記述されたページなんかもあるんですが、ライブラリやツールのバージョンが古かったりすることもあったので、一番確実そうな公式サイトを参考に。

上記サイトで一通り必要なものはそろうのですが、サンプルがちと弱いので、そういったのはこちらから
 Controlling Arduino with Android using Processing

充実のサンプルがとてもありがたい^^

環境構築してとりあえず動くまでにやったこと。

●アプリはそれぞれ最新のバージョンをいれた
ページによっては1つ前のバージョンをいれたほうがいいと書いてある場合もあるが、Processinguは2.0a4だとエラーになるので2.0a5を使用。Arduino IDEも1.0を使用。1.0にはArduino Mega ADK用の最新のUSBドライバ用infファイルが含まれている。

●Android SDKのセットアップフォルダはデフォルトから変える
そのままだと「C:\Program Files」下に入ってしまいSDKへのパスに半角スペースが入ってしまう。これはどうもよろしくはないらしい。実際のとこは不明。

●Android端末のUSBドライバをセットアップ
Android端末をUSBで接続すると普通のデジカメのようにストレージにはアクセスできたが、ドライバは見つからない状態になっていた。メーカーサイトからダウンロードしてセットアップ。

●Android SDKにおいてSDK以外に必要なもの
「Google USB Driver」と「Google APIs」を導入、APIはSDKとあわせてLevel 7以降全部入れておいた。サイトが重いのか、すごく時間がかかる場合がある。

●USBドライバの定義ファイルに自分のAndroid端末の情報を追記
Android SDKフォルダ内の「extras\google\usb_driver\android_winusb.inf」ファイルにデバイスIDのような情報を追記。

これはウチのタブレットの情報 デバイスマネージャにてドライバのプロパティから実際の値を確認できる。
; Acer ICONIA TAB A100
%SingleAdbInterface% = USB_Install, USB\VID_0502&PID_3341
%CompositeAdbInterface% = USB_Install, USB\VID_0502&PID_3341&REV_9999&MI_01

ただ、これがホントにいるかどうかは不明。

●Android SDKのいくつかのフォルダについてパスを通す
SDKフォルダ下の「platform-tools」、「tools」についてパスを通す。どうも必要らしい、実際のとこは不明。

●プログラム転送の仕方
Processingにて、シフトキーを押しながら実行ボタンを押すと端末上でプログラム実行できるのですが、ADKを使うプログラムの場合は「Tools」の「Arduino ADK」から実行しないと端末上では動かない模様。シフトキー押しながら実行した場合にでるコンパイルエラーを一生懸命直そうとしていた^^;

ここまでやって、ようやく通信に成功。

通信成功後にはまった点について

●Byte型の通信でハマル
1Byteの数値(unsigned:0~255)をArduino側から送信し、Android側でreadByteして受け、int型にしてみたらなぜか-128~128の「int8」になってしまった。このへんは自分の不勉強が原因っぽいと思われるが、最初随分悩んだ。
この件に関しては現在もいろいろ試行中。

●Byte配列の通信でハマル
1度に512ByteのByte型配列を送信したところ、Android側でなぜか128Byteしか読み取れなくて悩む。どうもAndroid側ライブラリの内部バッファが128Byteしか確保されていないらしい。あふれた分は捨てられているっぽい。また、読み取り側が処理する前に送信してしまうと上書きされてしまうので非常に困る。そのまま使う場合は自分でハンドシェイクするか、確実に読み取りされるまで待つ必要がある。ハンドシェイクはめんどくさいし、読み取りを待っていると128Byteごとに待ち時間が発生するためデータ送信にかなり時間がかかる。

●ライブラリのリコンパイルでハマル
ライブラリにはたいていソースファイルが添付されているのでこれを元にバッファサイズを増量して高速化を図ることした。その際のクラスパスの指定で大いに悩む。結局Level 10のSDKおよびAPIのjarファイルをそれぞれ指定してコンパイルに成功。自分の不勉強っぷりが露呈しまくり^^;

●コンパイルしたライブラリの適用でハマル
Processingのライブラリフォルダ内のファイルと入れ替えてもなぜか変更が適用されない。どうやらプロジェクトファイルの格納されているフォルダ内の「code」フォルダに配置されているライブラリファイルを優先する模様。
こちらをリコンパイルしたものと入れ替えてようやく変更に成功。通信は見違えるほど早くなった。

そんなこんなで勉強しつつ、まずは1つアプリを形にしている最中です。

ほとんどでずっぱり

今週はずっと出張、用事と、週末含めてぜんぜん家にいなかったです。
こんばんわ。

そんなわけで、まったくなにもできない1週間でした・・・
まぁ、ゆっくりいきます。

でも来週末からはゴールデンウィークです。実家にもどってしまうので、ますますなにもできないわけで・・・そんななかでも何かできることを(=実家での暇つぶしを)求めて新しいネタを導入です。
2012042201.jpg

はい、「Arduino Mega ADK」です。
ADKとは「Accessory Development Kit」の略です。正式な名称としては「Android Open Accessory Development Kit」となるのでしょうか?

Android端末と接続して通信できるAVRマイコンボードってことですね。Arduino Unoを使っていますが、このボードはArduino Megaが元になっているのでインターフェース部分と搭載メモリが大幅に強化されているタイプになります。

このボードとArduinoの開発環境、それと「Processing」をつかってなにかできないかな~と、いろいろ妄想中です。

«  | ホーム |  »

日付から日誌を見る

12 | 2020/01 | 02
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

最新の日誌

最新のコメント

最新のトラックバック

カテゴリ

3Dプリンタ開発記 (101)
新モータ駆動装置 (20)
集塵機 外郭編 + モータ制御実験 (17)
集塵機 (42)
Android ADK (3)
CNC改善 (2)
iPhoneスタンド習作 (6)
Webカメラ表示用ソフト (11)
備忘録 (0)
作業日誌 (19)
そのほか (79)
キーボードの製作 (9)
スピンドルモータ交換 (7)
鉄道模型 (9)

リンク

このブログをリンクに追加する

当日誌の閲覧総数