これまでのobniz講座はコチラからどうぞ。
記事 | 内容 |
---|---|
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でミニ四駆をラジコン化しよう!【obniz講座第7回】 | obnizでタミヤのミニ四駆をコントロールします |
また、Facebookグループ「obnizファン」主催のmeetup vol.1に参加したレポートも宜しければご覧ください。
obnizファンmeetup vol.1参加レポート【ロボットからHMDまで】
サンダー先日、2019年3月20日(水)に「obnizファンmeetup vol.1」に参加させて頂きました。 面白そうだね!どんな内容か教えて!かみなりん サンダーはい、とても参考になりましたので簡 ...
続きを見る
準備する物
準備するもの
- obniz本体 ×1個
- マイクロUSBケーブル ×1本
- サーボモータ ×1個
- ピンヘッダ(モータコネクタとobnizのポートを接続)
サーボモータとobnizを接続
サーボモータとobnizを接続します。
今回、サーボモータはTowerPro(http://www.towerpro.com.tw/)社の「SG90」を使用します。
SG90のデータシート
SG90のスペックは下記の通りです。
重量 | 9g |
---|---|
サイズ | 23mm×12.2mm×29mm |
トルク | 1.8 kgf・cm (4.8V) |
動作電圧 | 4.8V(~5V) |
デューティサイクル | 0.5ms~2.4ms(適切値は0.6ms~2.3ms) |
重量、サイズ、動作電圧はなんとなくお分かり頂けるかと思いますが、トルクやデューティサイクルは聞き馴染みがないかもしれません。
トルクやデューディーサイクルについては、のちほど説明いたします。
SG90の配線
SG90の信号線は下記の通りです。
アサイン | ワイヤーカラー |
---|---|
信号線 | 黄 |
電源 | 赤 |
GND | 茶 |
信号線はモーターを制御するためで、サーボモータはPWMという機能を使ってコントロールします。
PWMのパルス幅に応じて、サーボモーターの角度が決まります。
PWMについてはこちらで説明しているので、こちらも合わせてご覧ください。
-
PWMってなに?PWMで何ができる?
デジタルとアナログについて 電気の世界では基本的に「1」か「0」、つまり「ON」か「OFF」かで表現されます。 このように「0」か「1」かで表されることを「デジタル」と呼びます。 それに ...
続きを見る
電源線はモーターへ電力を供給するためで、今回は5V、GND線は電圧が0Vとなる基準の位置です。
「obniz.js」で使用する関数では、下記のようになります。
obniz.wired("ServoMotor", {signal:0, vcc:1, gnd:2});
それぞれの後の数字はobnizのポート番号になります。
モーターのトルクって?
今回使用するサーボモーター「sg90」のトルクは、「1.8kgf・cm」です。
トルクの単位は「kgf・m(キログラムメートル)」や「N・m(ニュートンメートル)」で表します。
1993年までは「kgf・m」が扱われていましたが、1993年に「新計量法」によって「N・m」へ移行されています。
N(ニュートン)の定義は、質量1kgに1m/s2の加速度を生じさせる力です。
地球には重力がありますが、その重力加速度は9.8m/s2です。
1993年まで使用されていた「1kgf・m」はこの重力加速度をかけた値となり、1kgf・m ≈ 9.8N・mです。
トルクは、「トルク = 力×回転半径」で表されます。
今回使用するサーボモータ「sg90」のトルクは「1.8kgf・cm」なので、モーターの軸から半径1cmの位置にある1.8kgfの重りを動かせるという事になります。
ちなみに1kgf・cmは0.098 N・mなので、「sg90」のトルクは、1.8kgf・cm ≈ 0.176 N・mになります。
$$ 1kgf \cdot cm = 0.01 kgf \cdot m \approx 0.098 N \cdot m $$
$$ 1.8kgf \cdot cm = 0.018 kgf \cdot m \approx 0.176 N \cdot m $$
デューティーサイクル
sg90のデータシートを見ると、デューティーサイクルは0.5ms~2.4msとなっています。
これは何を表しているかというと、PWMのパルス幅の適正な値を示しています。
「sg90」の可動域は180度ですが、パルス幅が0.5msのときが-90度、2.4msのときが+90度、中間の1.45msのときに0度となります。
これを適切な範囲で使用しない場合、モーターはこれ以上移動できない方向へ移動しようとするので、最悪の場合破損してしまいます。
使用する際は使用するサーボモータのデータシートを読み、適切な範囲で使用する事を心がけてください。
サンプルプログラム
サンプルプログラムはこちらになります。
onbiz.jsは常に最新にしてください
下記のoniz.jsを読み込む際のバージョンは常に最新バージョンへ書き換えてください
<script src="https://unpkg.com/obniz@【ここの部分】/obniz.js" crossorigin="anonymous"></script>
<html> <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> <table> <tr> <td><input type="range" id="angle" min="0" max="180" value="90"></td> <td>サーボ角度:<span id="angleText">90</span>度</td> </tr> </table> <script> var obniz = new Obniz("OBNIZ_ID_HERE"); obniz.onconnect = async function () { var servoMotor = obniz.wired("ServoMotor", {signal:0,vcc:1,gnd:2}); servoMotor.range = {min: 0.6,max: 2.3} var angle = $("#angle").val(); servoMotor.angle(angle); $("#angle").on("change", function(){ angle = $("#angle").val(); servoMotor.angle(angle); $("#angleText").text(angle); }); } </script> </body> </html>
画面インターフェース
今回作成するインターフェースは上記のようにシンプルです。
サーボモータの角度を0°~180°の範囲で指定し、スライダーに連動させてサーボモータの角度を指定します。
これは「obnizのPWM制御でLEDを調光しよう【obniz講座第4回】」の会で行ったLEDをPWM制御させたときの手段と同じで、スライダーで値を変更し、その値に応じて数字を書き換える処理をさせます。
既存部分の概略
これまでの講座で既出の部分については、過去の該当講座を紹介し、新たな部分のみ説明致します。
コード | 説明 | 参照講座 |
---|---|---|
<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.2/obniz.js"~(省略) | obnizを制御するための関数などを利用 | obnizでIoT電子工作を始めよう!【obniz講座第1回】 |
<div id="obniz-debug"></div> | obnizのデバッグ表示 | obnizでIoT電子工作を始めよう!【obniz講座第1回】 |
<input type="range" ~(省略)> | inputのrangeタイプを使用 | obnizのPWM制御でLEDを調光しよう【obniz講座第4回】 |
<span id="angleText">~</span> | spanタグでかこった数字を書き換え | obnizのPWM制御でLEDを調光しよう【obniz講座第4回】 |
var obniz = new Obniz("OBNIZ_ID_HERE"); | 設定したobnizのIDを「obniz」変数として宣言 | obnizでIoT電子工作を始めよう!【obniz講座第1回】 |
var angle = $("#angle").val(); | IDが「angle」の値を取得 | obnizのPWM制御でLEDを調光しよう【obniz講座第4回】 |
$("#angle").on("change",function() {(省略)} | IDが「angle」が変化したときの処理 | obnizのPWM制御でLEDを調光しよう【obniz講座第4回】 |
<table><tr><td></td><td></td></tr></table>(14行目)
今回、サーボモータの角度を変更するスライダー(inputタグ)と、サーボモータの角度を表示する値を1つのテーブルの中に収め、レイアウトを整形しています。
<table></table>がテーブルである事を表します。
<tr></tr>は「table row」の略で、テーブルの行部分(横方向)を指定するタグです。
<td></td>は「table data」の略で、テーブルセルの内容を指定するタグです。
スライダー(inputタグ)と、サーボモータの角度を表示する部分を1つのテーブルで囲み、2つの要素が横並びになるようにしています。
var servoMotor = obniz.wired("ServoMotor", {signal:0,vcc:1,gnd:2});はサーボモータのポート指定
obnizでサーボモータを制御するための設定です。
「obniz.wired("ServoMotor", {signal:0,vcc:1,gnd:2});」はヘッダー部で読み込んだ「obniz.js」で定義されている関数1つです。
obniz.wiredの最初の引数として"ServoMotor"、次はどのポートを使用するか宣言しています。
アサイン | ワイヤーカラー | obnizポート番号 |
---|---|---|
信号線 | 黄 | 0 |
電源 | 赤 | 1 |
GND | 茶 | 2 |
図のように信号線(黄)を0番ポート、電源線(赤)を1番ポート、GND線(茶)を2番ポートと接続しました。
購入したサーボモータがコネクタタイプの場合には、下記のようなピンヘッダを中継として挿入する事で、onizのポートと接続します。
servoMotor.range = {min: 0.6,max: 2.3}はデューティーサイクルの設定
「servoMotor.range」は、パルス幅の最小値と最大値を設定しています。
「sg90」のデューティーサイクルは0.5ms~2.4msですが、この値に設定すると範囲を超えてしまうようだったので、調整して0.6ms~2.3msの範囲で動作させるようにしました。
servoMotor.angle(angle);は0°~180°の角度を指定して動作させる
servoMotor.angle(degree);の「degree」に角度を代入します。
その角度に応じて、サーボモータが動作します。
今回のサンプルプログラムではスライダー(id名【angle】)から取得した値を「angle」という変数に格納し、その「angle」をサーボモータの角度として代入しています。
動作確認
スライダーを動かして、サーボモータが左右に動作すれば成功です。
うまく動作しない場合は、配線ミスがないか、スペルミスがないかなど確認してください。
【前回の講座】
-
obnizでミニ4駆をラジコン化しよう!【obniz講座第7回】
今回は下の動画のように、タミヤの4輪駆動車工作基本セット(以下、ミニ四駆と呼びます)をobnizでコントロールしてラジコンにする説明をします。 obnizを使った電子工作をYoutube ...
続きを見る
【講座のまとめ】
記事 | 内容 |
---|---|
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でサーボモータを動かします |