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>