2016年5月7日土曜日

DRV8835で2輪倒立ロボをつくってみました

全体の写真です。白いプラスチックの半円は、転倒したときのダメージ軽減用。



裏側です。電池は単三型Ni-MHを4本。タミヤのダブルギヤボックスをギヤ比114.7:1で使っています。タイヤ径は約55mm。


Arduino ProMini 3.3Vの互換品がeBayで250円くらい。ただし、シリアルのピン配列が純正品と逆でした。



ジャイロ加速度センサーのMPU6050を載せたGY521というモジュール。eBayで200円くらい。Amazonでも買えます。このモジュールには3.3Vを作るためのレギュレーターが載っていますが、入力電圧範囲が3-5Vらしいので、ProMiniから3.3Vを供給しています。I2C通信です。



モータードライバのDRV8835。小さなチップにフルブリッジが2回路搭載されているので、これ1個でDCモーター2個ドライブできます。モーター用電源とロジック電源が分かれているのも使いやすい。モードピンをHIGHにして、ENABLEピンにPWMを、PHASEピンに回転方向を入れています。



距離センサーはGP2Y0A21YK。電源は電池から直結。出力は0から3.3Vの範囲に収まります。距離(mm)の計算はかなりいい加減ですが、95000をanalogRead()の値で割って30を引いています。



ライントレース用センサーは、ヴィストンで安売りしていた反射型赤外線センサーを少し改造。ProMiniから3.3Vを供給し、analogRead()で読み込んでいます。



ライントレースの動画です。


2017年11月5日
その後追加した赤外線リモコンによる操縦機能も入っています。

2017年11月8日

17 件のコメント:

  1. こんにちわ、
    とても安定していて
    うらやましいです。
    できればソースを見せて頂くことは
    可能でしょうか?

    返信削除
  2. こんにちは、
    是非ともスケッチを参考にさせて
    頂けないでしょうか?

    返信削除
  3. コメントありがとうございます。
    だいぶ前のものなので、スケッチを探し出してみます。
    少々お待ちください。

    返信削除
    返信
    1. ありがとうございます。
      よろしく、お願いします。
      自分も”半日で作る倒立振子”を見て
      いろいろと作ってみてますが、安定させるのは
      本当に難しいですね。
      お待ちしております。

      削除
    2. スケッチが見つかったので動作確認しようとしましたが、肝心のハードウェアがバラバラになっていて、再整備が必要なことが分かりました。ちょっと時間がかかりそうです。

      削除
  4. 探して頂きありがとうございます。
    作られた倒立2輪の部品のいくつかは持っているので
    真似て作成したいと思います。
    (ライントレース用センサーはないですが)

    返信削除
  5. スケッチをアップロードしました。一番下の「ソースコードはこちらです」をクリックしてください。

    返信削除
    返信
    1. ありがとうございます。
      自分も本日、手持ちの部品で一応出来上がった
      ところでした。
      距離センサやライントレースも注文した部品は
      届いたのですが、実装の方法はこれから
      調べたいと思います。
      早速、ドライバのピン番を合わせて、スケッチを
      動かしてみましたが、車輪が回転したまま
      止まらないので、スケッチを参考に調べたいと
      思います。
      ありがとうございました。

      削除
    2. お世話になります。
      スケッチで教えていただけると
      助かります。
      A2ピンは、どこかの電圧を測定しているようですが
      どう言った用途でしょうか?
      自分のハードには無いですが、センサ値と違い
      スケッチの倒立制御には必要な要素と言うのは
      わかったように思います。
      できるなら自分のハードにも追加実装いたしますので
      よろしくお願いいたします。

      削除
  6. A2は電池の電圧を測定するのに使っています。電圧に応じてPWMのデューティーを微調整しています。battFactorを1.0に固定すれば、無くてもよいです。使う場合は電池とグランドの間に10kΩの抵抗2つを直列に入れて、1/2に分圧してA2に接続すればOKです。
    現在の回路では、モーターのノイズに弱いので、改良作業をしています。完了したら、回路図をアップロードするつもりです。

    返信削除
    返信
    1. ありがとうございました。
      了解いたしました。
      手持ちが5vのPro miniでハードなこともあり
      電池は、リチウム電池3.7ⅹ2で、Pro mini給電し
      降圧した電圧(3.5V位)をモータ用としてDRV8835
      に給電してます。立つようになったらセンサを先に
      実装したいと思います。

      削除
  7. MPU6050もDRV8835もVcc(Vcc)以上の電圧を入力ピンにかけるのは良くないと思いますので、できればProMiniの3.3V版を使か、レベルシフトしたほうがよいかもしれません。
    ノイズ対策等のため、DRV8835へ接続するProMiniのピンを変えました。スケッチも変更したので、これから回路図も含めてアップロードします。

    返信削除
    返信
    1. ありがとうございます。
      すみません、説明が不十分でした。
      リチウム電池3.7ⅹ2は、Pro miniのRAW入力ピンに繋いでいます。
      RAW入力ピンは、UNOのVin入力に相当する電源端子との理解です。
      先ほど確認したらVCC端子が4.9V程度になっていたので、
      MPU6050もDRV8835へも4.9VならOKではと思ってます。
      よろしくお願いいたします。

      削除
    2. こんにちわ、Mt_fujiです。
      ProMiniの3.3V版を使った方が良いとのご助言が理解できず
      申し訳ありません。MPU6050のロジック入力は、3.3Vとは知らずに
      使ってました。
      そこで、ProMiniの3.3V版をアマゾンに購入して換装しました。
      USB-TTL3.3v変換アダプタがやっと入手できたので
      公開(改良版)頂いたスケッチを書き込みました。
      また、電源モニタやラインセンサは未実装です。
      ブログも作成して
      動作動画を載せてみました。
      https://dekitaraiina-annakoto-konnakoto.blogspot.jp/
      ですが、
      電源入れると、初期化後、間欠的にしかモータが作動しないので
      まだ、うまく立ってくれません。
      一応、battFactorを1.0に固定しているのですが
      もう少し調査する予定です。
      今後ともよろしくお願いいたします。

      削除
  8. 車輪が逆転しているように見えますので、MPU6050の取り付け方向が私の実験機と同じであるなら、まずはDRV8835からモータへの配線を入れ替えてみてはどうでしょうか? あとギヤ比は100程度にしてますか? ギヤ比を変えても車輪の回転方向が変わりますので、お気を付けください。

    返信削除
    返信
    1. こんにちわ、Mt_fujiです。

      ありがとうございました。
      モータが逆回転になっていることに
      自分は気づいていませんでした。
      入れ替えたら、とても安定しました。
      モータドライバの電圧モニタも追加して
      残るは、ライントレースを実装したいと思います。
      スケッチの理解にも頑張りたいと思います。
      本当にありがとうございました。

      削除
    2. 動いてよかったです。ソースコードはかなりぐちゃぐちゃで、不要なコードも入っているので、ご質問ありましたらご連絡ください。

      削除