Help us understand the problem. What is going on with this article?

obnized M5StickC 回転Servoで2WD Car

はじめに

obnizedされたM5StickCに2台の回転サーボを接続して2WD Carをつくります。M5StickCは端子の構成がネイティブのobniz Boardとは異なるので、参考として記事にしました。LEGOのOrange Servoを使いましたが、SG90-HVやFS90R等の他の回転Servoでも大丈夫です。

image.png

■こんな感じでゆるく走ります

image.png

■接続図

下記の部品を使います
・5cm程度のGROVEケーブル。(片方の端子を切り落として使いました)
・ピンヘッダ3ピン×2。(2段のやつでもよい)

GROVEケーブルで線を引き出し、ピンヘッダを経由してServoを接続します。多少半田付けが必要ですが頑張りましょう。簡易的には半田レスで、ブレボ&ジャンパーワイヤー等で繋いでもよいでしょう。
image.png

■車体(参考)

LEGOパーツなどを活用して、お好みで適当にゆるく車体を組み上げます。
image.png

■サンプルコード

ボタンを押している間、その動作をするようにしてあります。尚、回転Servoは基本90°で停止ですが、個体差があるのでconst部分を微調整して使って下さい。

<html>
<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@3.2.0/obniz.js"  crossorigin="anonymous"></script>
  <script src="https://unpkg.com/m5stickcjs/m5stickc.js"></script>
</head>
<body>
  <font size="7">
    M5StickC 回転Servo 2WD Car<br><br>
  </font>
  <button id="FORWARD_LEFT"  class="btn btn-warning" style="width:30%;height:80px;font-size:60px;"></button>  
  <button id="FORWARD"       class="btn btn-warning" style="width:30%;height:80px;font-size:60px;"></button>
  <button id="FORWARD_RIGHT" class="btn btn-warning" style="width:30%;height:80px;font-size:60px;"></button><br><br>

  <button id="TURN_LEFT"     class="btn btn-warning" style="width:30%;height:80px;font-size:60px;"></button> 
  <button id="STOP"          class="btn btn-warning" style="width:30%;height:80px;font-size:60px;">STOP</button>
  <button id="TURN_RIGHT"    class="btn btn-warning" style="width:30%;height:80px;font-size:60px;"></button><br><br>

  <button id="BACK_LEFT"     class="btn btn-warning" style="width:30%;height:80px;font-size:60px;"></button>
  <button id="BACK"          class="btn btn-warning" style="width:30%;height:80px;font-size:60px;"></button>
  <button id="BACK_RIGHT"    class="btn btn-warning" style="width:30%;height:80px;font-size:60px;"></button><br><br>

<script>
const Lhome =  92; //左停止
const Rhome =  92; //右停止
const LF    = +85; //左前進
const LB    = -85; //左後進
const RF    = -85; //右前進
const RB    = +85; //右後進

var obniz = new M5StickC('XXX-XXXX');
obniz.onconnect = async function () {
  var Servo_L = obniz.wired("ServoMotor" , {signal:33} );
  var Servo_R = obniz.wired("ServoMotor" , {signal:32} ); 
  obniz.led.on();
  $("#FORWARD_LEFT").on('touchstart mousedown'    ,async ()=> { await FORWARD_LEFT();  })
  $("#FORWARD_LEFT").on('touchend mouseup'        ,async ()=> { await STOP();          })
  $("#FORWARD").on('touchstart mousedown'         ,async ()=> { await FORWARD();       })
  $("#FORWARD").on('touchend mouseup'             ,async ()=> { await STOP();          })  
  $("#FORWARD_RIGHT").on('touchstart mousedown'   ,async ()=> { await FORWARD_RIGHT(); })
  $("#FORWARD_RIGHT").on('touchend mouseup'       ,async ()=> { await STOP();          })

  $("#TURN_LEFT").on('touchstart mousedown'       ,async ()=> { await TURN_LEFT();     })
  $("#TURN_LEFT").on('touchend mouseup'           ,async ()=> { await STOP();          })
  $("#STOP").on('touchend mouseup'                ,async ()=> { await STOP();          })  
  $("#TURN_RIGHT").on('touchstart mousedown'      ,async ()=> { await TURN_RIGHT();    })
  $("#TURN_RIGHT").on('touchend mouseup'          ,async ()=> { await STOP();          })  

  $("#BACK_LEFT").on('touchstart mousedown'       ,async ()=> { await BACK_LEFT();     })
  $("#BACK_LEFT").on('touchend mouseup'           ,async ()=> { await STOP();          })
  $("#BACK").on('touchstart mousedown'            ,async ()=> { await BACK();          })
  $("#BACK").on('touchend mouseup'                ,async ()=> { await STOP();          })
  $("#BACK_RIGHT").on('touchstart mousedown'      ,async ()=> { await BACK_RIGHT();    })
  $("#BACK_RIGHT").on('touchend mouseup'          ,async ()=> { await STOP();          }) 

  async function FORWARD(){
     Servo_L.angle(Lhome+LF);
     Servo_R.angle(Rhome+RF);
  }
  async function BACK(){
     Servo_L.angle(Lhome+LB);
     Servo_R.angle(Rhome+RB);
  }  
  async function FORWARD_LEFT(){
     Servo_L.angle(Lhome);
     Servo_R.angle(Rhome+RF);
  }
  async function TURN_LEFT(){
     Servo_L.angle(Lhome+LB);
     Servo_R.angle(Rhome+RF);
  }  
  async function FORWARD_RIGHT(){
     Servo_L.angle(Lhome+LF);
     Servo_R.angle(Rhome);
  }
  async function TURN_RIGHT(){
     Servo_L.angle(Lhome+LF);
     Servo_R.angle(Rhome+RB);
  }  
  async function BACK_LEFT(){
     Servo_L.angle(Lhome);
     Servo_R.angle(Rhome+RB);
  }
  async function BACK_RIGHT(){
     Servo_L.angle(Lhome+LB);
     Servo_R.angle(Rhome);
  }  
  async function STOP(){
     Servo_L.angle(Lhome);
     Servo_R.angle(Rhome);
  }
}
</script>
</body>
</html>

■おまけ情報

M5StickCで1台のServoだけ動作させたい場合は、上部のHAT端子のGND/5V/G26の3ピンにちょうどServoの3ピン(オスオス変換は必要)を直刺ししてつかえます。動作確認などに重宝します。

■最後に

前後左右できる2WD Carを作る場合、M5StickCのOUTPUT端子が少ないのでDC MotorではMotor Driverを繋いだとしても簡単にはできませ。今回紹介した回転Servo 2WD Carがベストと思います。もう少し研究を重ねて、半田レスにもできたらいいなと思っています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした