obniz : ラジコンカー
obnizでラジコンカーを作ります。構成はすごく簡単。ラジコンカーのモーターとobnizを接続するだけ。obnizはドライバを介すことなくモーターを直接駆動できるので非常に楽です。
今回は、タミヤの2チャンネルリモコン ブルドーザー工作基本セット を使いました。左右のモーターを直接obnizのPin0,1とPin2,3に接続するだけ!
以下のコードをobniz開発コンソールに入力して、実行するだけです。画面に左右のレバーが表示され、左のレバーで回転、右のレバーで前後移動ができます。
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.4.0/obniz.js" crossorigin="anonymous"></script>
<style type="text/css">
html{
overflow-y: hidden;
}
input[type=range] {
-webkit-appearance:none;
background:rgb(128,128,128);
height:24px;
width:200px;
border-radius:8px;
transform:rotate(-90deg);
}
input[type=range]::-webkit-slider-thumb{
-webkit-appearance:none;
background:#f00;
height:40px;
width:40px;
border-radius:50%;
}
input[type=range]::-ms-tooltip{
display:none;
}
input[type=range]::-moz-range-track{
height:0;
}
input[type=range]::-moz-range-thumb{
background:#f00;
height:50px;
width:50px;
border:none;
border-radius:50%;
}
#controller{
position: relative;
width: 100%;
}
#left{
position: absolute;
left: -60px;
top: 100px;
}
#right{
position: absolute;
right: -60px;
top: 100px;
} </style>
</head>
<body>
<div id="controller">
<input id="right" type="range" min="-50" max="50" value="0" step="1" />
<input id="left" type="range" min="-50" max="50" value="0" step="1" />
</div>
<div id="obniz-debug"></div>
<script>
var obniz = new Obniz("<<You obniz ID>>");
obniz.onconnect = async () => {
//左右のモーター
var lmotor = obniz.wired("DCMotor", {forward:0, back:1});
var rmotor = obniz.wired("DCMotor", {forward:2, back:3});
//モーターを動かす関数
var move = (motor, val) => {
//パワー(絶対値)
var absval = Math.abs(val);
//メモリが0なら停止
if(val == 0){ motor.stop(); }
//パワーをセットして正の値なら前進、負の値なら後退
motor.power(absval);
motor.move(0 < val);
}
/*
rangeのイベントは以下を使い分け
・input : メモリの値が変わる度に発火
・change : ツマミを動かし終わった=手を離したタイミングで発火
*/
$("#controller").on("input", "#right", function(){
//右のレバー倒してる間はメモリの位置に応じてモーターを動かす(前後移動)
var val = $(this).val();
move(rmotor, val);
move(lmotor, val);
}).on("input", "#left", function(){
//左のレバー倒してる間も同様に(左右回転)
var val = $(this).val();
move(lmotor, val);
move(rmotor, val*(-1));
}).on("change", "#right", function(){
//レバーから手を離したら0の位置に戻してモーターを止める
$("#right").val(0);
rmotor.stop();
lmotor.stop();
}).on("change", "#left", function(){
//左も同様に
$("#left").val(0);
rmotor.stop();
lmotor.stop();
});
}
</script>
</body>
</html>
