[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
【ルンバ:ROI】Buttonsコマンドの使用
2016.03.26 Saturday 00:35 | ロボット/電子工作
ルンバ770のボタン仕様について。
Buttonsで返ってくる値に癖があったのでメモ。
結果的には、状態によって立つビットが違うってこと。
普通に使う場合の表示に合わせて対応したビットが立つ。
ROIの仕様書にはこうあります。
んで、ルンバ上の表記はこう。
①初期状態
この状態でClockボタンを押すと、②の状態へ移行します。
② Clockを押す
ここでOKを押すと①の状態に戻ります。
Scheduleを押した時も同様。
で、Buttonsで返ってくる値は、
①の状態では対応したビットのみが立つ。
②の状態では、何も押していない場合はClockのビットがたった状態。
何かしらボタンを押すと、対応したビットに加えて、Clockのビットも立った値が返ってくる。
また、OKを押した時はClockのみが立った状態。すなわち、押したことを判別できない。状態は①に戻る。
そして、Cleanボタンを押すと0が返ってきて、状態は①に戻る。
ClockとScheduleボタンがこんな挙動。
ルンバ770だとボタンが4つ(Clean除いて)あるのですが、Buttonsで返される値のビットとの対応は状態によって変わるわけですね。
めんどいなぁ。状態によっては読めない一番右のボタンと、Cleanボタンの扱いをどうするか。。。
2016/06/11追記
ROIの資料だと下4bitしか載ってないので調査。
CleanボタンとバッテリLEDの表示は分かれていて、
LEDs(Opcode 139)のコマンドで送る
1バイト目の4bit目でCleanボタンのon/offを設定。
続く2バイトはクリーンボタンでなく、バッテリ表示の色と明るさの設定となる。
・・・けど、明るさは変えられないっぽい。
Scheduling LED Bitsも補完。
Buttonsで返ってくる値に癖があったのでメモ。
結果的には、状態によって立つビットが違うってこと。
普通に使う場合の表示に合わせて対応したビットが立つ。
ROIの仕様書にはこうあります。
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Value | Clock | Schedule | Day | Hour | Minute | Dock | Spot | Clean |
①初期状態
Dock | Clock | Schedule | Spot |
② Clockを押す
Day | Hour | Minute | OK |
Scheduleを押した時も同様。
で、Buttonsで返ってくる値は、
①の状態では対応したビットのみが立つ。
②の状態では、何も押していない場合はClockのビットがたった状態。
何かしらボタンを押すと、対応したビットに加えて、Clockのビットも立った値が返ってくる。
また、OKを押した時はClockのみが立った状態。すなわち、押したことを判別できない。状態は①に戻る。
そして、Cleanボタンを押すと0が返ってきて、状態は①に戻る。
ClockとScheduleボタンがこんな挙動。
ルンバ770だとボタンが4つ(Clean除いて)あるのですが、Buttonsで返される値のビットとの対応は状態によって変わるわけですね。
めんどいなぁ。状態によっては読めない一番右のボタンと、Cleanボタンの扱いをどうするか。。。
2016/06/11追記
ROIの資料だと下4bitしか載ってないので調査。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OK | ゴミフルサイン | ダスト検知 | クリーン | Check Robot | Dock | Spot | Debris |
LEDs(Opcode 139)のコマンドで送る
1バイト目の4bit目でCleanボタンのon/offを設定。
続く2バイトはクリーンボタンでなく、バッテリ表示の色と明るさの設定となる。
・・・けど、明るさは変えられないっぽい。
Scheduling LED Bitsも補完。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DAY | HOUR | MINUTE | Schedule | Clock | AM | PM | Colon |
PR
Roomba Open Interface (ROI)
2016.03.25 Friday 21:35 | ロボット/電子工作
例によってルンバと戯れています。
ちょっといまハマってる・気になってること
①速度司令コマンドで下2桁くらい四捨五入される?
速度司令出した後に、速度読むと、ちょっと違う値が返ってくる
-80で-78
-90で-92
-200で-199
②Cleanボタンの明るさ0にしても うっすら光る
③コマンド送信間隔どこまで早く出来る?
受信は15msごと
モード切り替えてすぐは指令効かないみたい。(→20ms間は効かないっぽい?(2016/03/26))
④タイヤの回転方向変えた時にエンコーダずれないかな?
エンコーダのカウント方向はタイヤへの回転方向指令によるため
⑤音コマンド受け付けない…
ただただプログラムミスってた
⑥miniDinコネクタのL字のやつってないかな。もしくは短いの。
⑦iRobot_Roomba_500_Open_Interface_Spec.pdfたまに間違ってる
エンコーダのLとRが逆
ちょっといまハマってる・気になってること
①速度司令コマンドで下2桁くらい四捨五入される?
速度司令出した後に、速度読むと、ちょっと違う値が返ってくる
-80で-78
-90で-92
-200で-199
②Cleanボタンの明るさ0にしても うっすら光る
③コマンド送信間隔どこまで早く出来る?
受信は15msごと
モード切り替えてすぐは指令効かないみたい。(→20ms間は効かないっぽい?(2016/03/26))
④タイヤの回転方向変えた時にエンコーダずれないかな?
エンコーダのカウント方向はタイヤへの回転方向指令によるため
⑤音コマンド受け付けない…
ただただプログラムミスってた
⑥miniDinコネクタのL字のやつってないかな。もしくは短いの。
⑦iRobot_Roomba_500_Open_Interface_Spec.pdfたまに間違ってる
エンコーダのLとRが逆
PS3のコントローラをマイコンで
2016.03.16 Wednesday 00:12 | ロボット/電子工作
マイコンでお手軽にPS3コントローラを使えるようにするSBDBT。
http://www.runele.com/ca1/2/
基板にはPICが載ってるだけで、ソフトも公開されていることから、自作してみました。
Elecrowに発注。
届く。基板17枚。(黒い方はまた別の基板です。I2Cのカラーセンサ。)
ソフトを少しいじって書き込み&動作確認。
こんなことができます。PS3コントローラでルンバを動かしつつ、パソコンでルンバの物理バンパーの接触状態を取得してます。
SBDBT基板一つでPCとPS3コントローラと通信できるので便利。
--- 接続概要 ---
パソコン ─ (Bluetooth) ─ SBDBTもどき基板 ─ ルンバ
PS3コントローラ ─ (Bluetooth) ┘
-------------------
http://www.runele.com/ca1/2/
基板にはPICが載ってるだけで、ソフトも公開されていることから、自作してみました。
Elecrowに発注。
届く。基板17枚。(黒い方はまた別の基板です。I2Cのカラーセンサ。)
マイコンはPIC24FJ64GB002ってやつ。elecrowさん仕事しすぎぃヽ(´ー`)ノ 17枚と22枚。 pic.twitter.com/e3Rdc5igXy
— こんぺ~ (@conpe_) 2016年3月11日
ソフトを少しいじって書き込み&動作確認。
SBDBT互換基板動いたヽ(´ー`)ノPS3コンとの通信と、SPPのシリアル通信できるのを確認。
基板あと16枚あるんで誰かもらって… pic.twitter.com/QxSt4pN87M
— こんぺ~ (@conpe_) 2016年3月11日
こんなことができます。PS3コントローラでルンバを動かしつつ、パソコンでルンバの物理バンパーの接触状態を取得してます。
SBDBT基板一つでPCとPS3コントローラと通信できるので便利。
--- 接続概要 ---
パソコン ─ (Bluetooth) ─ SBDBTもどき基板 ─ ルンバ
PS3コントローラ ─ (Bluetooth) ┘
-------------------
SBDBT(もどき)載っけたから、PS3コンで操作しつつルンバからのデータをロギング出来るンバ pic.twitter.com/7BB0gUwYt6
— こんぺ~ (@conpe_) 2016年3月15日
VL6180X試食
2016.03.05 Saturday 02:09 | ロボット/電子工作
ストロベリーリナックスで買えるVL6180X。
https://strawberry-linux.com/catalog/items?code=16180
測距センサですね。
よくあるSharpの奴とは違って、光が跳ね返ってくるまでの時間を計るタイプです。
なので物体の反射率とか形状に影響を受けにくいとかなんとか
I2C面倒だなーと思いながら簡単に実装してみました。
でも何故か110mm程引いたされた値で取得されちゃいます(´・ω・`)
→アプリケーションノートのオススメ設定を試したらちゃんと計測できました(2016/03/15追記)
ひとまずやり方↓
【使い方(暫定版)】
I2C通信フォーマット
[I2Cアドレス(0x29)][レジスタ上位アドレス][レジスタ下位アドレス][データ][データ][…
送受信ともにこんな感じ。
詳細
1, 計測間隔を設定する
I2Cで0x00, 0x1B, 0x04を送る。
3バイト目で間隔を設定している。10msなら0x00, 20msなら0x01, …, 50msなら0x04
2, 連続計測モードにする
I2Cで0x00, 0x18, 0x03を送る
3, 計測結果を読む
I2Cで0x00, 0x62を送って1バイト受信
これでmm単位の値が取れます。
あと気になるのはI2Cアドレス書き換えられるかだけど、0x0212に7bitの新アドレスを書けば良いみたい。でも電源切ったら忘れちゃうみたい?意味ない!!!!???
GPIO-0が起動時にCEな機能を持つこととGPIO-1を組み合わせて使えないかかんがえちゅー
アプリケーションノートの初期化コードで、データシートに載ってないレジスタいじってるから何か隠されてるようだ。。。
-----------------------
2016/04/10 追記
Using multiple VL6180Xs in a single design
複数デバイスを使いたい時用アプリケーションノート見っけた。
使いたい数分のGPIOをマイコンとつなぐか、I2CでIO拡張するIC使う的な感じで対応するしかないみたい。
https://strawberry-linux.com/catalog/items?code=16180
測距センサですね。
よくあるSharpの奴とは違って、光が跳ね返ってくるまでの時間を計るタイプです。
なので物体の反射率とか形状に影響を受けにくいとかなんとか
I2C面倒だなーと思いながら簡単に実装してみました。
でも何故か110mm程引いたされた値で取得されちゃいます(´・ω・`)
→アプリケーションノートのオススメ設定を試したらちゃんと計測できました(2016/03/15追記)
ひとまずやり方↓
【使い方(暫定版)】
I2C通信フォーマット
[I2Cアドレス(0x29)][レジスタ上位アドレス][レジスタ下位アドレス][データ][データ][…
送受信ともにこんな感じ。
詳細
1, 計測間隔を設定する
I2Cで0x00, 0x1B, 0x04を送る。
3バイト目で間隔を設定している。10msなら0x00, 20msなら0x01, …, 50msなら0x04
2, 連続計測モードにする
I2Cで0x00, 0x18, 0x03を送る
3, 計測結果を読む
I2Cで0x00, 0x62を送って1バイト受信
これでmm単位の値が取れます。
あと気になるのはI2Cアドレス書き換えられるかだけど、0x0212に7bitの新アドレスを書けば良いみたい。でも電源切ったら忘れちゃうみたい?意味ない!!!!???
GPIO-0が起動時にCEな機能を持つこととGPIO-1を組み合わせて使えないかかんがえちゅー
アプリケーションノートの初期化コードで、データシートに載ってないレジスタいじってるから何か隠されてるようだ。。。
-----------------------
2016/04/10 追記
Using multiple VL6180Xs in a single design
複数デバイスを使いたい時用アプリケーションノート見っけた。
使いたい数分のGPIOをマイコンとつなぐか、I2CでIO拡張するIC使う的な感じで対応するしかないみたい。
SHARP測距モジュールGP2Y0E03
2016.02.26 Friday 22:32 | ロボット/電子工作
これ
http://akizukidenshi.com/catalog/g/gI-07547/
過去の測距モジュールと比較して、とっても小さくなりましたねっ。
いつものアナログ出力に加え、I2Cで接続できるのでポートをたくさん消費することなく複数台使えるようになったのが特徴。(16台までね)
さらに、コマンドを送ってフィルタの設定とかしたりスリープ入れられたりします。
昨年の知能ロボコンマシンでお世話になりました。
複数台使うためにはそれぞれに異なったI2Cアドレスを設定する必要があります。
ちょっと面倒だったのでやり方メモ。
【参考】
http://www.sharp.co.jp/products/device/doc/opto/gp2y0e02_03_appl_e.pdf
まずは写真のピンにハンダ付け。(アドレス書き換え時に使うだけなのでてきとーでおっけーヽ(´ー`)ノ
これ電源なんで、マイコンからFETとかでon/offできるように回路構成してください(50mA流せればok。以下"電源"と言ったらこのピンのこと)。
あとはデータシートのFig.40、Table.20あたりを参考に、ハンダ付けした電源ピンをon/offしつつI2Cでコマンド送るだけです。
ただし、一回きりしか変更できないっぽいので要注意。
----------
・電源offにする
【Stage1】
・I2Cで0xEC, 0xFFを送る。 (Fig.40だと0xEFを書くようになってるけど誤植?)
・送信終わったら電源をon
【Stage2】
・I2Cで0xC8, 0x00を送る。
【Stage3】
・I2Cで0xC9, 0x45を送る。
【Stage4】
・I2Cで0xCD, 新アドレスを送る (使えるアドレスはデータシートのTable.21参照)
【Stage5】
・I2Cで0xCA, 0x01を送る
・500us待つ (E-fuse書き込み待ち)
・電源offにする
----------
ひとまずここまでやればアドレスが変更されます。
データシートだとこの後ちゃんと書けたかどうか確認してるみたい(?
Stage6以降は新しいI2Cアドレスでアクセスするみたい(未確認
というわけで、
http://akizukidenshi.com/catalog/g/gI-07547/
過去の測距モジュールと比較して、とっても小さくなりましたねっ。
いつものアナログ出力に加え、I2Cで接続できるのでポートをたくさん消費することなく複数台使えるようになったのが特徴。(16台までね)
さらに、コマンドを送ってフィルタの設定とかしたりスリープ入れられたりします。
昨年の知能ロボコンマシンでお世話になりました。
複数台使うためにはそれぞれに異なったI2Cアドレスを設定する必要があります。
ちょっと面倒だったのでやり方メモ。
【参考】
http://www.sharp.co.jp/products/device/doc/opto/gp2y0e02_03_appl_e.pdf
まずは写真のピンにハンダ付け。(アドレス書き換え時に使うだけなのでてきとーでおっけーヽ(´ー`)ノ
これ電源なんで、マイコンからFETとかでon/offできるように回路構成してください(50mA流せればok。以下"電源"と言ったらこのピンのこと)。
あとはデータシートのFig.40、Table.20あたりを参考に、ハンダ付けした電源ピンをon/offしつつI2Cでコマンド送るだけです。
ただし、一回きりしか変更できないっぽいので要注意。
----------
・電源offにする
【Stage1】
・I2Cで0xEC, 0xFFを送る。 (Fig.40だと0xEFを書くようになってるけど誤植?)
・送信終わったら電源をon
【Stage2】
・I2Cで0xC8, 0x00を送る。
【Stage3】
・I2Cで0xC9, 0x45を送る。
【Stage4】
・I2Cで0xCD, 新アドレスを送る (使えるアドレスはデータシートのTable.21参照)
【Stage5】
・I2Cで0xCA, 0x01を送る
・500us待つ (E-fuse書き込み待ち)
・電源offにする
----------
ひとまずここまでやればアドレスが変更されます。
データシートだとこの後ちゃんと書けたかどうか確認してるみたい(?
Stage6以降は新しいI2Cアドレスでアクセスするみたい(未確認
というわけで、
無事量産出来ましたとさ。測距モジュール量産した (I2Cアドレス書き込んだ pic.twitter.com/CMgsFAtlp4
— こんぺ~ (@conpe_) 2015年4月12日