忍者ブログ

≪ 前の記事次の記事 ≫

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

▲TOP

PS3のコントローラをマイコンで

マイコンでお手軽にPS3コントローラを使えるようにするSBDBT。
http://www.runele.com/ca1/2/
基板にはPICが載ってるだけで、ソフトも公開されていることから、自作してみました。

Elecrowに発注。
届く。基板17枚。(黒い方はまた別の基板です。I2Cのカラーセンサ。)マイコンはPIC24FJ64GB002ってやつ。
ソフトを少しいじって書き込み&動作確認。
こんなことができます。PS3コントローラでルンバを動かしつつ、パソコンでルンバの物理バンパーの接触状態を取得してます。
SBDBT基板一つでPCとPS3コントローラと通信できるので便利。
--- 接続概要 ---
パソコン ─ (Bluetooth) ─ SBDBTもどき基板 ─ ルンバ
PS3コントローラ ─ (Bluetooth) ┘
-------------------

拍手

PR

Comment (0) | ▲TOP

VL6180X試食

ストロベリーリナックスで買える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使う的な感じで対応するしかないみたい。

拍手

Comment (0) | ▲TOP

SHARP測距モジュールGP2Y0E03

これ
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アドレスでアクセスするみたい(未確認

というわけで、無事量産出来ましたとさ。

拍手

Comment (2) | ▲TOP

最近やってること

・ルンバ
 ヤフオクで流れてたのを保護。
 シリアル通信で簡単にアクチュエータ動かせるので、PS3のコントローラで操縦できるようにしてみました。・GR-SAKURA
昨年の知能ロボコンあたりから引きずってた、I2C固まる問題とシリアルサーボコケる問題がほぼほぼ解決か。
通信ごとにオブジェクト作ってるんだけど、すぐnew失敗してたんだよね。。Arduino環境だとダメなのは変わらずだけど。
エラーハンドリングちゃんとやるようにして、断線とかして通信途切れても再開できるようになったり、I2Cハングアップしても復帰頑張るようになったり。
E1エミュレータを導入したところこれらの開発がすいすいっと。秋月で買うのが安いです。

・知ロボ
そんなわけで上の2つを使って次の知能ロボコン出ようかと。
昨年はボール3つくらい回収して17位/約90台。(I2C固まる問題が本番で出ちゃってね…)
今年こそは全部回収しよう。

拍手

Comment (0) | ▲TOP

【知ロボ】参加してきた

知能ロボコン参加してきました。
チャレンジャーズコース一次予選にて86台中17位とイマイチな感じ。
敗者復活戦には食欲に負けて(?)参加できず。


本番では、ボール捕獲失敗したのに取れていると判断してしまうトラブル。
カラーセンサの値によってボールの有無を判断しているのですが、
会場の照明の影響か、直前にちょっとプログラムいじった影響かによって、常にボールを取得成功したと判断してしまっていた。
ボールを持っているか否かは、白色LEDをonした時とoffした時のカラーセンサ値の差分をとって判断している。
ボールを持っていればLEDの光が反射してセンサに戻ってくるので、on時off時のセンサ値が大きく変わる。それによって保持していることを判断できる。
誤判定の原因としては、会場照明のチラツキによってボールを保持していなくてもセンサ値が変化してしまっていたことが考えられる。出走時の動画を見るとやはりフリッカーがひどい。

そしてもう一つ、測距センサシャープ測距モジュール GP2Y0E03の通信が止まってしまう問題が発生した。
5つの測距センサを、I2Cでマイコンと接続している。
通信がコケると、5つとも使用不可となりボールを発見できなくなるため、
途中で一度リトライをすることとなった。
以前からちょくちょく同現象が発生していたが、本番までに対処することができなかった。
なんとかせねば。

-流れ-
自由ボール → 得点OK
ボール取得失敗 → ボール誤判定(持ってないのに黄判定。無駄にゴールへ置きに行ってしまう)
ボール取得(赤) → 得点OK
I2C死亡 → リトライ
再開
自由ボール → 得点OK
ボール取得失敗 → 誤判定(持ってないのに黄判定。無駄にゴールへ置きに行ってしまう)
ボール取得失敗(これは正しく判定。すぐに探索再開)
青取得成功 → 得点NG (まっすぐ転がらなかった。フィールドは平らとは限らない!)
赤取得成功 → 得点OK
黄取得成功 → 得点OK
ボール取得失敗 → 誤判定(持ってないのに?判定。無駄にゴールへ置きに行ってしまう)
時間切れ

拍手

Comment (0) | ▲TOP