#はじめに
#obnizedされたM5StickCに2台の回転サーボを接続して2WD Carをつくります。M5StickCは端子の構成がネイティブのobniz Boardとは異なるので、参考として記事にしました。LEGOのOrange Servoを使いましたが、SG90-HVやFS90R等の他の回転Servoでも大丈夫です。
##■接続図 下記の部品を使います ・5cm程度のGROVEケーブル。(片方の端子を切り落として使いました) ・ピンヘッダ3ピン×2。(2段のやつでもよい)#obnizOS #obniz #ゆるメカトロ
— Google Homer (@google_homer_) February 11, 2020
obnizedされた #M5StickC で回転Servoの2WD Car。
Qiita投稿準備中。 pic.twitter.com/liuZqYOjyq
GROVEケーブルで線を引き出し、ピンヘッダを経由してServoを接続します。多少半田付けが必要ですが頑張りましょう。簡易的には半田レスで、ブレボ&ジャンパーワイヤー等で繋いでもよいでしょう。
#■車体(参考)
LEGOパーツなどを活用して、お好みで適当にゆるく車体を組み上げます。
##■サンプルコード
ボタンを押している間、その動作をするようにしてあります。尚、回転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がベストと思います。もう少し研究を重ねて、半田レスにもできたらいいなと思っています。