はじめに
LEGOとobnizでラジコンを作ったので、その作り方を紹介します。
今回は動力部分『obnizでのモーター制御とコントローラー』の作り方を紹介します。
参考
-
obniz ゆるメカトロ車 LEGO構成をレシピを整えたメモ
- obnizでのモーター制御のスクリプトや車体の作り方について参考にさせて頂きました
冬空の下でドライブしてみた
タイトルに偽り無し。ちゃんとドライブしました。ラジコンにはカメラを付けているので、FPS視点(ラジコン視点)でも楽しめます。いやぁ~ラジコンたのしい
カメラ搭載ラジコンカー。ラジコン視点/操作画面/三人称視点をまとめてみた。#obniz #RaspberryPi #LEGOTechnic pic.twitter.com/E7Ex0tgQDG
— j4amountain (@zsipparu) January 2, 2020
完成図
このようにIoTデバイス(ラズパイ、obniz)と、給電用のバッテリーを2つ搭載しています。
今回紹介するのはobnizのモーター制御
後輪のモーター制御には、obnizを使用しています。
左車輪のモーターをobnizの0,1に、右車輪のモーターをobnizの10,11に接続します。赤と黒の配線を図のように接続します。
※今回使用したモーターはこちらです → 赤い歯車モーター
制御の概要
Windows上にNodejsでWebサーバーを用意し、obnizを制御するスクリプトcontroler.html
を用意します。 ※Webサーバーは必須ではありません。
controler.html
は、githubに置きました → controler.htmlのソース
11行目の『obniz-ID』を持っているobnizのIDに書き換えます。これで準備完了です。あとはcontroler.htmlをブラウザで開けばコントローラーとして使えます。
コントローラーの説明
コントローラーは、用意したWebサイト(例:http://localhost/controler.html
)にアクセスすると開きます。コントローラー画面はこんな感じです。
操作は、画面に指をタッチします(マウスでは操作できません)
指と中心点との位置関係(指の距離、指の角度)でラジコンの動きを制御します。
スクリプトの説明
controler.html
のJavaScriptについて補足します。
<body ontouchmove="event.preventDefault()">
ontouchmove・・・
は、iOSでページ全体のスクロールを無効にしています。コントローラーを指で操作したときにスクロールしないようにしています。
var motor1 = obniz.wired("DCMotor", {forward:0, back:1}); // 左車輪のモーター
var motor2 = obniz.wired("DCMotor", {forward:10, back:11}); // 右車輪のモーター
forward
,back
に設定している番号は、obnizデバイスの端子の番号です。
let x1 = div_x ;
let y1 = div_y ;
let x2 = event.changedTouches[0].pageX - div_x ;
let y2 = event.changedTouches[0].pageY - div_y ;
x1,y1は、コントローラー用の円の中心点です。
x2,y2は、画面にタッチしている指の座標です。中心点(x1,x2)を原点とした場合の座標にしています。
let mpow = Math.round( Math.sqrt( Math.pow( x2-x1, 2 ) + Math.pow( y2-y1, 2 ) ) ) ; // 2点間の距離
if( mpow >=100 ) mpow = 100;
円の中心(x1,y1)とタップした指の位置(x2,y2)間の距離を算出します。距離が100を超える場合は、値を100とします。この値が、モーターの出力になります。数値が高いほどモーターの回転速度が上がりラジコンが速く移動します。
let angle = ( Math.atan2( y2 - y1, x2 - x1 ) * 180 / 3.1415 ).toFixed(2);
タップした指の位置(x2,y2)の角度を算出します。
el_hitarea.addEventListener('touchend', function(event) {
console.log("[debyg] now_x=0 now_y=0");
motor1.stop();
motor2.stop();
}, false);
タップした指が画面から離れるとモーターが止まります。
これで説明は以上です。
関連リンク
- 車体の作り方はこちらにかきました。
おまけ
そーいえば年明けてた。2020年の干支はネズミだそうです。