スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


にほんブログ村 その他趣味ブログ LEGO・ブロックへ

Google App Inventor for Androidを試してみる 7 NXTモーター制御編2

こんばんは、kobaです。
最近はGoogle App Inventor のアプリばかり考えていて更新が遅れました。
本題?に入る前に購入したレゴの話を。
今年は「レゴ パイレーツオブカリビアン アン王女の復讐号 4195」や「レゴ スター・ウォーズ ミレニアム・ファルコン 7965」といった大型のパッケージ物が良くできているなぁと思って購入しました。円高の影響なのか値段も今までと比べると安かった気がします。とはいっても大型パッケージで値段もそれなりにするため、来年まではレゴ買わないといっていたんですが、先週楽天で「レゴ クリエイター ファイヤーブリゲード 10197」がかなり安くで売られていたため、買っちゃいました。(現在は既に在庫なしで20%OFFに変更されていました。)モジュラーシステムは「レゴ クリエイター グリーン・グローサー 10185」だけはどうしても欲しくて数年前に購入していましたが、今回が2つ目のモジュールシステムです。1人で寂しいグリーン・グローサーの隣にくっつけてあげたいと思います。ファイヤーブリゲードはモジュールシステムの中では唯一?2階建てなのですが、2階の小物や内装がなかなかかわいくてよくできていました。

本題ですが、まずApp Inventorはこの前のNXTモーター制御編1から3回もアップデートがありました。今まで作ったプログラムが動かなくなるようなアップデートではなく機能の追加とバッグフィックスが主です。NXTに関する機能の追加は私が確認した限りありませんでした。
NXTモーター制御編1で書いたようにApp Inventorでのモーターの制御でずれが発生しています。
そこで色々と実験しデータをとってみました。データから規則性を発見できれば、App Inventor側で補正や補間して制御が可能と考えたからです。

考えた方法は以下の3つです。
1.モーターを回していてある角度まできたらモーターを停止する方法
2.モーターを回していてある時間経過したらモーターを停止する方法
3.移動距離を指定してモーターを動かし、ずれを補正する方法

データを取得するにあたっては、App InventorのNXTDirectCommands、GetOutputStateを利用しました。
GetOutputStateではモーターの以下の情報が取得することができます。
Power Mode RegulationMode TrunRatio RunState TachoLimit TachoCount BlockTachoCount RotationCount
詳しくはこちらを参照ください。

結論からいいますと1番と2番の方法は×でした。理由はAndroidとNXTとBluetooth通信タイミングが毎回異なるため安定しませんでした。例えば1の方法の場合にxx度を超えたらモーターを停止とさせた場合に最終的にモーターが停止した時の値は数十度でずれが発生しました。AndroidとNXTが通信するタイミングがこちらからはわからないので補正もこれでは無理でした。2番もほぼ同様な状態でしたが、まだ2番の方がぶれが少なかったです。

3番の方法ですが、ボタンイベントでパワー50, 角度45度指定でモーター回転時のデータを取得した結果がこちらです。10回 x 3セットデータを取得しています。

1セット目
0 0 0 0 0 0 0 0 0
50 1 1 0 32 45 0 0 0
50 1 1 0 32 45 127 0 127
50 1 1 0 32 45 208 0 208
50 1 1 0 32 45 300 0 300
50 1 1 0 32 45 390 0 390
50 1 1 0 32 45 480 0 480
50 1 1 0 32 45 570 0 570
50 1 1 0 32 45 659 0 659
50 1 1 0 32 45 750 0 750
50 1 1 0 32 45 840 0 840

2セット目
0 0 0 0 0 0 0 0 0
50 1 1 0 32 45 0 0 0
50 1 1 0 32 45 124 0 124
50 1 1 0 32 45 207 0 207
50 1 1 0 32 45 299 0 299
50 1 1 0 32 45 389 0 389
50 1 1 0 32 45 479 0 479
50 1 1 0 32 45 569 0 569
50 1 1 0 32 45 659 0 659
50 1 1 0 32 45 750 0 750
50 1 1 0 32 45 839 0 839

3セット目
0 0 0 0 0 0 0 0 0
50 1 1 0 32 45 0 0 0
50 1 1 0 32 45 126 0 126
50 1 1 0 32 45 208 0 208
50 1 1 0 32 45 299 0 299
50 1 1 0 32 45 389 0 389
50 1 1 0 32 45 480 0 480
50 1 1 0 32 45 570 0 570
50 1 1 0 32 45 658 0 658
50 1 1 0 32 45 749 0 749
50 1 1 0 32 45 839 0 839

規則性がでました。どれも5回目以降(少しのずれはありますが)望んでいた90度分モータが動いています。
最初の4回のずれの原因はわかりませんが、App InventorでBluetoothとNXTの通信確立時にモーターを4回、回転しておくことでいけそうなことがわかりました。App Inventorで試してみると途中に1秒スリープを入れて4回、回転させることで望んでいた動きになりました。連続で4回、回転させるは×でした、途中にスリープが必要です。

これならColor Sorterの制御もApp Inventorでいけるかもしれません。この結果をもとに続きは今度のレゴ会でプログラムを完成させたと思います。




スポンサーサイト


にほんブログ村 その他趣味ブログ LEGO・ブロックへ

コメントの投稿

非公開コメント

リンク
フリーエリア
プロフィール

tsukuba.lego

Author:tsukuba.lego
●主な登場人物
koba : 会長. RCX, WeDo, NXT1.0, NXT2.0を持つ.
matk : 副会長. 2010年夏にNXT2.0を購入, 20年来のレゴ熱復活.
●会員募集中です!小学生から歓迎. 近日月1ぐらいで集まる予定.
mail:tsukuba.lego@gmail.com
YouTube (tsukubalego)
Twitter(tsukubalego)

カテゴリ
最新記事
最新コメント
月別アーカイブ
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。