今回は下の動画のように、タミヤの4輪駆動車工作基本セット(以下、ミニ四駆と呼びます)をobnizでコントロールしてラジコンにする説明をします。
obnizを使った電子工作をYoutubeで公開しているので、宜しければチャンネル登録お願いします。
前回の記事はこちらです。
obnizで圧電ブザーを鳴らそう!【obniz講座第6回】
サンダー今回はobnizで圧電ブザーを鳴らしたいと思います。 ドレミファソラシドのソフトウェアボタンを用意し、圧電ブザーで音階を表現します。 前回の講座はこちらです。 準備するもの 今回 ...
続きを見る
また、ミニ4駆はDCブラシ付モーターを使用していますが、その原理/仕組みについて説明した記事も合わせてご覧ください。
-
DC(直流)ブラシ付モーターの原理/仕組みについて
サンダー今回はDC(直流)ブラシ付モーターの原理/仕組みについて説明します。モーターがどこに使われているか分かりますか? ミニ四駆とかロボットとか! ちなみに僕はロボットじゃないよかみなりん &nbs ...
続きを見る
準備するもの
準備するもの
- obniz本体 ×1個
- マイクロUSBケーブル(obniz付属品) ×1本
- タミヤ4輪駆動車工作基本セット ×1セット
- モバイルバッテリー ×1個
- モーター接続延長用ビニール線 ×2個
- 半田ごて ×1個
- 半田ごて台 ×1個
- 半田 少々
- 端子保護用チューブ(熱収縮チューブなど、あると良い)
- ノイズ対策用コンデンサ ×1個(あると良い)
完成イメージ
完成イメージは上記のようになります。
ミニ四駆に、モバイルバッテリーと「obniz」を搭載し、obnizとDCモーターを接続して、前進・後退と速度の変更を行います。
元々このミニ四駆は乾電池2本の直列接続で動きます。
筒状の乾電池の電圧は1.5Vなので、直列では3V駆動です。
直列回路に関してはこちらも合わせてお読みください。
-
回路のキホン~直列回路~【中学生におすすめ】
回路は好き?嫌い? みなさんは回路にどのようなイメージがありますか? 回路は苦手意識を持つ人が多いと思います。 今回は基本となる直列回路に関して、分かりやすく説明します。 こんな方におすすめ 回路が苦 ...
続きを見る
今回はobnizの供給電源と合わせて、モバイルバッテリーを搭載します。
モーターへの電源供給はobnizから供給します。
ArduinoやAVRなどの通常のマイコンの場合、出力電流は数十mA程度なので、DCモーターのような電流をたくさん流す部品は動かせません。
その場合、外部にモーターを制御するためのモータードライバーや、電流を増幅する回路などが必要になります。
それに対して、obnizでは内部にモータードライバーが組み込まれており、最大で1Aまで出力する事が可能です。
各IOはすべて以下のユニット構成になっています。
1つのIOに対し、A/D・モータードライバー・バススイッチが接続されています。
A/Dは他の2つとは別に独立して動作可能です。
モータードライバーとバススイッチはどちらか一方のみ動作するように設計されています。
【引用】obniz公式サイト
外部にモーター駆動用の回路を設けずに手軽にモーターを動かせるのはobnizの大きなメリットです。
という事で、ミニ四駆のDCモーターはobnizから直接制御する事にします。
ミニ4駆を組み立てる
ミニ4駆をobnizから制御するためにミニ四駆を組み立てます。
組み立てる途中で乾電池BOXの組み立てが入りますが、今回は使用しないので乾電池BOXの組み立ては行いません。
モーターにビニール線を半田付け(半田付けのコツ)
通常であれば乾電池BOXとモーターを付属ケーブルで接続しますが、長さが足りないので、100均などで購入した電子工作用ビニール線を使用します。
ミニ四駆付属のDCモーターの端子と半田付けを行います。
半田付けのコツは先に端子を半田ごてで温めておき、そこへ半田を溶かして流し込むイメージです。
半田付け後、端子がショートしないように熱収縮チューブを被せて、半田ごての熱でチューブを収縮させます。
熱収縮チューブは文字通り、熱で収縮するチューブで端子や接続部の保護に利用します。
同様に反対側のモーターの端子にもビニール線を半田付けします。
モーターに接続したケーブルをobnizと接続する
obnizに接続するケーブルはそのまま端子に挿し込んでも良いのですが、ピンヘッダ等に半田付けし、そのピンヘッダを挿すと抜けにくくなります。
そして、その半田付け部分にも熱収縮チューブを被せておくと、端子がショートする事も回避できます。
モーターに接続したケーブルはobnizの0番と1番に接続します。(プログラムで宣言するので、任意に変更しても構いません。)
どのケーブルをどちらの端子に挿すのかはどちらでも大丈夫です。
逆に接続したとしても、プログラムで前進しようとしたら後退するだけです。
サンプルプログラム
サンプルプログラムはこちらです。
下記のoniz.jsを読み込む際のバージョンは常に最新バージョンへ書き換えてください
<script src="https://unpkg.com/obniz@【ここの部分】/obniz.js" crossorigin="anonymous"></script>
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"> </script> <script src="https://unpkg.com/obniz@2.0.2/obniz.js" crossorigin="anonymous"></script> </head> <body> <div id="obniz-debug"></div> <input type="button" id="brake" value="ブレーキ"> <input type="button" id="accel" value="アクセル"> <br /> <input type="range" id="inputPower" value="0" min="0" max="100" step="10"> 速度:<span id="textPower">0</span> <br /> <input type="radio" name="inputFB" id="forward" checked><label for="forward">前進</label> <input type="radio" name="inputFB" id="back"><label for="back">後退</label> <script> $('#inputPower').change(function() { $('#textPower').text($('#inputPower').val()); }); var obniz = new Obniz("OBNIZ_ID_HERE"); obniz.onconnect = async function () { var motor = obniz.wired("DCMotor", {forward:0 , back:1 }); $('#accel').click(function () { motor.power($('#inputPower').val()); var booleanFB = $('input[name="inputFB"]:checked').attr('id') == 'forward' ? true : false; motor.move(booleanFB); }); $('#brake').click(function() { motor.stop(); }); }; </script> </body> </html>
画面インターフェース
今回作成するインターフェースはこのようにします。
速度をスライダー形式で0~100の10段階で設定させます。つまり10刻みです。
そのスライダー値を右に表示させます。
進行方向を「前進」もしくは「後退」で選択したら、アクセルボタンとブレーキボタンで動作開始/停止させます。
既出部分の概略
<head></head>内の記述については過去の講座で説明していますので、概略を説明し、新たな部分のみ説明致します。
コード | 説明 | 参照講座 |
---|---|---|
<meta charset="utf-8"> | 文字コード(UTF-8)の設定 | obnizでLEDを光らせよう!【第2回】 |
<meta name ~(省略)> | 横幅を端末に合わせ、表示倍率を1倍に設定 | obnizでLEDを光らせよう!【第2回】 |
<script src="https://code.jquery.com~(省略) | jQueryをCDNから読み込んで利用 | obnizのPWM制御でLEDを調光しよう【obniz講座第4回】 |
<script src="https://unpkg.com/obniz@2.0.0/obniz.js"~(省略) | obnizを制御するための関数などを利用 | obnizでIoT電子工作を始めよう!【obniz講座第1回】 |
<div id="obniz-debug"></div> | obnizのデバッグ表示 | obnizでIoT電子工作を始めよう!【obniz講座第1回】 |
<input ~(省略)> | HTMLでボタンを作成し、id名を設定 | ソフトウェアボタンでobnizのLEDをON/OFFしよう!【obniz講座第3回】 |
var obniz = new Obniz("OBNIZ_ID_HERE"); | 設定したobnizのIDを「obniz」変数として宣言 | obnizでIoT電子工作を始めよう!【obniz講座第1回】 |
補足説明が必要な所を説明していきます。
<input type="range" id="inputPower" (省略) step="10">について
下記の14行目と15行目のコードについて説明します。
<input type="range" id="inputPower" value="0" min="0" max="100" step="10"> 速度:<span id="textPower">0</span>
<input type="range" id="inputPower" value="0" min="0" max="100" step="10">は赤い枠で囲った速度調整を行うスライダーの説明です。
inputのtype属性は"range"にして、スライダーにしています。これはPWM制御でLEDを調光しようでも説明しました。
画面インターフェース項目で説明したように、0~100の範囲で10刻みで設定します。
そのため、初期値(value)と最小値(min)を0、最大値(max)を100に設定し、STEP数(step)を10としています。
そして、「速度:●●」の「●●」部分に現在地を表示させるため、この箇所のみ"textPower"というid名を設定しています。
<input type="radio" (省略)>は前進と後退を排他的に選択するInput
下記の17行目と18行目について説明します。
<input type="radio" name="inputFB" id="forward" value=true checked><label for="forward">前進</label> <input type="radio" name="inputFB" id="back" value=false><label for="back">後退</label>
それぞれ前半のinutタグと後半labelタグに分けて説明します。
<input>タグの説明
このinputは進行方向を「前進」と「後退」の二者択一にしています。
name属性を同じ名前にすると、その中から選んだ項目が1つだけ選択されます。このようなボタンをラジオボタンと呼びます。
前進 | 後退 | |
---|---|---|
type | radio | |
name | inputFB | |
id値 | forward | value |
checked | 最初チェック有り | 最初チェック無し |
id値は前進が"forward"、後退を"back"としていますが、後半部分の<label>タグで使用するために宣言しています。
最初は「前進」にチェックを付けたいので、前進にのみ"checked"と記載しています。こうする事で、チェックされた状態を指定する事ができます。
<label (省略)>はlabel内の文字を押したときにチェックが付くように指定
<label>タグのなかで、<label for="●●">△△</label>としています。
これは△△と文字をクリックしたときに、id名が"●●"と設定したinputがクリックされるように指定しています。
つまり「前進」という文字をクリックしたら、id名が"forward"のラジオボタンにチェックを付けます。
この対応をしないと、ラジオボタンを直接クリックしないとチェックした事にならないので、ユーザーに不親切です。
$('#inputPower').change(function() { (省略) } はスライダーの値が変更された時の処理
下記の22行~24行のコードについて説明します。
$('#inputPower').change(function() { $('#textPower').text($('#inputPower').val()); });
これはid名「inputPower」つまり、速度を設定するスライダーの値が変更したときの処理を表しています。
速度変更のスライダーの値が変わったら、速度:●●の「●●(=textPower)」部分にその値を書き換えるという処理です。
var motor = obniz.wired("DCMotor", ,{forward:0 , back:1});はDCモーターを動かすための関数(ポート0が前進、ポート1が後退)
30行目の下記のコードについて説明します。
var motor = obniz.wired("DCMotor", {forward:0 , back:1 });
これはobnizを制御するために用意されたライブラリ(obniz.js)内の関数で、最初の引数に"DCMotor"と記載する事で、DCモーター制御用のポート設定を行います。
前進方向にforward、後退方向がbackとなりますが、モーターに接続したときのケーブルが意図した方向と逆に進む場合、これらの番号を入れ替えるか、配線を入れ替えれば、正常になります。
$('#accel').click( (省略))はアクセルボタンを押したときに速度と進行方向を決めて動作
32行~35行の下記のコードについて説明します。
$('#accel').click(function () { motor.power($('#inputPower').val()); var booleanFB = $('input[name="inputFB"]:checked').attr('id') == 'forward' ? true : false; motor.move(booleanFB); });
アクセルボタン(id名が"accel")がクリックされた時の処理です。
motor.power(***);はobniz.jsで定義された関数で、引数にはモーターのパワーを0~100の範囲で指定します。
データ型は小数点が扱えるfloat型なので、0~100の範囲であれば、小数点を代入する事も可能です。
motor.move(***);には真(=true)もしくは偽(=false)のboolean型を代入します。
trueの場合には前進(モーター正転)、falseの場合には後退(モーター逆転)します。
下記の1行は、進みたい方向が前進なのか、後退なのかを判別するため、「booleanFB」という変数を宣言し、
var booleanFB = $('input[name="inputFB"]:checked').attr('id') == 'forward' ? true : false;
また、これは条件(三項)演算子という演算子を使用しています。
条件(三項)演算子は下記の通りです。
条件(三項)演算子
(条件式)? 条件が真の場合の値 : 条件が偽の場合の値 ;
条件式は、$('input[name="inputFB"]:checked').attr('id') == 'forward'
です。
中身を順に分解してみます。
まず、$('input[name="inputFB"]:checked")ですが、これはjQueryで、name属性が"inputFB"と名付けられたinputタグに関して、チェックが付いた状態のものを指します。
そして、その後の「attr("id")」は、上記に該当するinputタグのid値を取得するというコマンドです。
つまり、"inputFB"というname属性のうち、チェックが付いている方のid名を取得し、それが「true」だったら、booleanFBを「true」、そうでなければbooleanFBに「false」を代入します。
motor.move(boolean);
はobniz.jsで用意されている関数で、引数がtrueの場合は前進、falseの場合は後退する関数となります。
$('#brake').click(function() { motor.stop(); });はモーター停止
最後に37行~39行の下記について説明します。
$('#brake').click(function() { motor.stop(); });
これは直感的に分かりますね。
ブレーキボタン(id名が"brake)を押したら、モーターを停止させます。(=motor.stop() )
動作確認
下記の動画のように前進、後退ができて、速度を変更したら速度が変われば成功です。
obnizを使った電子工作をYoutubeで公開しているので、宜しければチャンネル登録お願いします。
【前回の講座】
-
obnizで圧電ブザーを鳴らそう!【obniz講座第6回】
サンダー今回はobnizで圧電ブザーを鳴らしたいと思います。 ドレミファソラシドのソフトウェアボタンを用意し、圧電ブザーで音階を表現します。 前回の講座はこちらです。 準備するもの 今回 ...
続きを見る
【次回の講座】
-
obnizでサーボモータを動かそう!【obniz講座第8回】
サンダー今回はobnizでサーボモータを動かします。 サーボモータって何?どこで使われるの?かみなりん サンダーサーボモータは角度を指定出来るモータで、ロボットの関節などに使用されています。 &nbs ...
続きを見る
【使用したブラシ付DCモーターの原理・仕組み】
-
DC(直流)ブラシ付モーターの原理/仕組みについて
サンダー今回はDC(直流)ブラシ付モーターの原理/仕組みについて説明します。モーターがどこに使われているか分かりますか? ミニ四駆とかロボットとか! ちなみに僕はロボットじゃないよかみなりん &nbs ...
続きを見る
【講座のまとめ】
記事 | 内容 |
---|---|
obnizでIoT電子工作を始めよう!【obnizでIoT電子工作を始めよう!【obniz講座第1回】 | obnizのディスプレイに文字を表示させます |
obnizでLEDを光らせよう!【obniz講座第2回】 | obnizにLEDと抵抗を接続してLEDを光らせます |
ソフトウェアボタンでLEDをON/OFFしよう!【obniz講座第3回】 | HTMLで作成したボタンを押して、LEDをON/OFFさせます |
obnizのPWM制御でLEDを調光しよう【obniz講座第4回】 | obnizのPWM機能を使ってLEDを調光させます |
obnizでフルカラーLEDをグラデーション点灯しよう【obniz講座第5回】 | obnizでフルカラーLEDをグラデーション点灯させます |
obnizで圧電ブザーを鳴らそう!【obniz講座第6回】 | obnizで圧電ブザーを鳴らします |
obnizでミニ4駆をラジコン化しよう!【obniz講座第7回】 | obnizでタミヤのミニ四駆をコントロールします |
obnizでサーボモータを動かそう!【obniz講座第8回】 | obnizでサーボモータを動かします |