GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
9月12日に発表しました二輪倒立振子は、ESP8266(ESP-WROOM02)をCPUとして使ているのですが、GR-TSUMBAMEとの通信がうまくいってないようです。GR-KURUMIを使えば、問題ないです。
setTargetSpeed()やsetTargetAngle()などのset命令は正常に動作するのですが、getPresentSpeed()やgetPresentAngel()を実行するとNAN(Not a Number)というエラーになります。2回連続で実行すると2回目は正常に動作することが多いですが、0.0が読み込まれることもあります。
U9が故障しているので、5Vは外部から供給し、SW3は外してあります。
ic2のプルアップ抵抗は、ジャイロセンサー内で、2.2kΩで3.3Vに接続されています。
TSUBAME内のVCC_Kに何も接続せずVCC_LVが浮いている状態と、VCC_Kに3.3Vを供給した場合のどちらも同じ状況です。
ソフトは、root.contorolInit()を使用せず、かわりに
Wire.begin(14, 12);
Wire.setClock(100000);
を実行しています。
どなたかESP8266をご使用の方がいらっしゃいましたら、アドバイスいただけると助かります。
いろいろ試してみた結果、getPresentAngle問題の回避策が見つかりました!
GR-TSUBAMEのライブラリのControl.cppにある、関数i2cReadCommandDataChecksumで、コマンドを送り込むための
ret = Wire.endTransmission(false)の、falseを取り去って
ret = Wire.endTransmission()とすると問題なく動きました。
ret = Wire.endTransmission(true)でもOK。
ESP8266のwireライブラリに問題があるのかもしれませんが、とにかく動いたので、しばらくはこれで使ってみようと思います。
ちなみに現在使っているESP8266のライブラリは、1.6.5-1106-g8253b82です。
以下、実験でわかったことを少し。
Control.cppライブリを使わず、
Wire.beginTransmission(40);
Wire.write(0x16);
Wire.endTransmission(false);
を実行したあと、Wire.requestFrom(40, 8)を実行すると、バッファには0xFFが8バイト入っています。
もう一度Wire.requestFrom(40, 8)を実行すると、正しい値が入っているようです。(例えば06 28 16 ED 26 10 48 B0)
さらにもう一度Wire.requestFrom(40, 8)を実行すると、また0xFFが8バイト。
Wire.read()でバッファの中身を読み出しているだけで、i2cバス上の信号は見てません。
その後、倒立振子の改良をして、かなり揺れが収まりましたので、ご興味のある方は、twitterの動画をご覧ください。
twitter.com/kirakulabo
前回との大きな違いは、
- getPresentAngle()でモータの回転角を取り込むようにしたこと。(残念ながらgetPresentSpeed()は低速での分解能が粗いようで、使っていません。)
- 制御アルゴリズムに積分を追加したこと。
済みません、動画のリンク間違えていました。下記が正しいです。ご興味あるかたはどうぞ。
twitter.com/.../656362613291401217