obnized M5StickC 回転Servoで2WD Car


#はじめに
#obnizedされたM5StickCに2台の回転サーボを接続して2WD Carをつくります。M5StickCは端子の構成がネイティブのobniz Boardとは異なるので、参考として記事にしました。LEGOのOrange Servoを使いましたが、SG90-HVやFS90R等の他の回転Servoでも大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/9502ef5f-4351-fbff-80f7-55d8cb85d575.png)

#■こんな感じでゆるく走ります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/8151bf22-e956-000f-cf3e-4051058d7bac.png)
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/obnizOS?src=hash&amp;ref_src=twsrc%5Etfw">#obnizOS</a> <a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/%E3%82%86%E3%82%8B%E3%83%A1%E3%82%AB%E3%83%88%E3%83%AD?src=hash&amp;ref_src=twsrc%5Etfw">#ゆるメカトロ</a><br>obnizedされた <a href="https://twitter.com/hashtag/M5StickC?src=hash&amp;ref_src=twsrc%5Etfw">#M5StickC</a> で回転Servoの2WD Car。<br>Qiita投稿準備中。 <a href="https://t.co/liuZqYOjyq">pic.twitter.com/liuZqYOjyq</a></p>&mdash; Google Homer (@google_homer_) <a href="https://twitter.com/google_homer_/status/1227034836633714694?ref_src=twsrc%5Etfw">February 11, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
##■接続図
下記の部品を使います
・5cm程度のGROVEケーブル。(片方の端子を切り落として使いました)
・ピンヘッダ3ピン×2。(2段のやつでもよい)

GROVEケーブルで線を引き出し、ピンヘッダを経由してServoを接続します。多少半田付けが必要ですが頑張りましょう。簡易的には半田レスで、ブレボ&ジャンパーワイヤー等で繋いでもよいでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/9add0a1d-84a4-78b8-0894-39cfedb74e51.png)

#■車体(参考)
LEGOパーツなどを活用して、お好みで適当にゆるく車体を組み上げます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234533/abf77cdf-a8bd-d5a8-f54e-1c72eff36a44.png)
 


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

```html
<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がベストと思います。もう少し研究を重ねて、半田レスにもできたらいいなと思っています。