thunder5178 が 2020年04月15日18時55分03秒 に編集
コメント無し
本文の変更
今回は、前回記事の「[【IoT電子工作】obnizで測距センサーを使おう!【前編:LED調光】](https://elchika.com/article/390010b2-9738-4a10-872e-4bca97e30f81/)」に続いて、測距センサーとの距離に応じてサーボモーターを動かす方法を紹介します。 サーボモーターを単体で動かしている「[【IoT電子工作】obnizでサーボモータを動かそう!](https://elchika.com/article/780e5475-fb36-4ad9-b338-d5ae482d01e5/)」もご覧ください。 **この記事でできること** ==obnizに接続した測距センサーの値を取得し距離に応じてサーボモータの角度を変える== ## 用意するもの **部材一式** 1. obniz(開発ボード) 1. USB A - USB mini Bケーブル(obniz電源供給用) 1. 測距センサー GP2Y0A21YK(SHARP)」(以下、測距センサー) 1. タワープロ マイクロサーボ SG-90(以下、サーボモータ) 1. タミヤ 楽しい工作シリーズ クロスユニバーサルアームセット(サーボモータ動作確認用、なくても可) 1. ジャンパーワイヤー(オスーオス)(以下、ジャンパーワイヤー) 1. クリップ付コード(以下、クリップコード) | 用意する部材 | 購入先の例 | |:---:|:---| | obniz | [obniz公式ストア](https://obniz.io/ja/products)など | | USB A - mini Bケーブル | 家電量販店など | | 測距センサー | [秋月電子通商](http://akizukidenshi.com/catalog/g/gI-02551/)など | | サーボモータ | [秋月電子通商](http://akizukidenshi.com/catalog/g/gM-08761/)など | | クロスユニバーサルアームセット | [タミヤ公式ストア](https://www.tamiya.com/japan/products/70212/index.html)など | | ジャンパーワイヤー | [秋月電子通商](http://akizukidenshi.com/catalog/g/gC-05371/)など | | クリップコード | [秋月電子通商](http://akizukidenshi.com/catalog/g/gC-04352/)など | 使用する開発ボードのobniz ![obniz](https://camo.elchika.com/216b44470c3c4124e48b386320331c2389e12159/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f38663836633565662d326131322d346264372d396533352d383038316464323839313531/) 対象物との距離を測ります ![SHARP 測距センサー GP2Y0A21YK](https://camo.elchika.com/6bd24d2b7b6096872d26a163f36e86e1ef321ef3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f34353764396564322d663531342d343461652d386331322d363566353639376465373533/) 動作させるサーボモータ ![タワープロ サーボモータ SG-90](https://camo.elchika.com/adacc0bc62528947751eb1d7b53890f19ebe46ee/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f33366461396233382d613034362d346632342d613661382d663264323438383565303766/) サーボモータの動作を分かりやすくするために取り付けます ![タミヤ クロスユニバーサルアームセット](https://camo.elchika.com/52d67744fa5e6e8372344498549991c9a40ed1f3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f31376437336462312d616264662d343531382d383230372d616463356430636562363136/) obnizの端子と接続するために使用します ![ジャンパーワイヤー(オス-オス)](https://camo.elchika.com/8f4bf9be3c0a98079e4da6da6deff5a23e2abb45/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f32646634623035382d616131372d343464612d383234622d613833393661623733666133/) 測距センサーの線とジャンパーワイヤーをつなぎます ![クリップコード](https://camo.elchika.com/c17ddb7d768cd6b057ad62e2f95a57b26274e82d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f64326364663038362d636530612d343533362d393331392d343638333238646261306164/) ## obnizに測距センサーとサーボモータを接続する 下の図のようにobnizに測距センサーとサーボモータを接続します。 ![obnizに測距センサーとサーボモータを接続する](https://camo.elchika.com/915f225bd3c9e50707a68baef906fd944e128d62/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f64336562393835662d343533622d343534372d383662322d313266363431383335646266/) 実際に接続した様子。 ![全体接続イメージ](https://camo.elchika.com/11d5722821765b777847265bba8c80aea4e4b056/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f64626466303232362d306638662d346162322d613833652d346233396230633135366132/) 測距センサーと測定対象物との距離に応じて、サーボモータの角度を変更します。まずはobnizに測距センサーとサーボモータを接続します。 ## 接続手順
下記の順番でobnizに測距センサーとobnizを接続します。
下記の順番でobnizに測距センサーとサーボモータを接続します。
1. 測距センサー付属の線とクリップコードを接続する 1. クリップコードの反対側にジャンバーワイヤーを繋ぎ、obnizに接続する 1. サーボモータにジャンバーワイヤーを接続し、obnizに接続する 順に説明します。 ### 1.測距センサー付属の線とクリップコードを接続する 測距センサーとobnizは下記の様に接続します。 前回記事の「[【IoT電子工作】obnizで測距センサーを使おう!【前編:LED調光】](https://elchika.com/article/390010b2-9738-4a10-872e-4bca97e30f81/)」と同様の接続です。 | 測距センサーピン番号 | 信号名 | センサ付属の線|クリップ&ジャンパー| obniz IO| |:---|:---|:---|:---|:---| | 1 | Vout | 白 | 緑 | 2番 | | 2 | GND | 茶 | 黒 | 1番 | | 3 | Vcc | 黒 | 赤 | 0番 | 測距センサー付属の線にクリップコードを接続します。 ![測距センサー付属の線にクリップコード接続](https://camo.elchika.com/3d1ebb82289b51efe6018e7fcfacfd2eb3a88235/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f39633766613932622d333861342d346434372d623235352d383163616365653264303831/) 白い信号線(Vout)には緑のクリップコード、茶色いGND線には黒のクリップコード、黒い電源線(Vcc)には赤のクリップコードを接続します。 ### 2.クリップコードの反対側にジャンバーワイヤーを繋ぎ、obnizに接続する 測距センサーの線に接続したクリップコードの反対側にジャンパーワイヤーをつなぎ、obnizに接続します。 ![obnizとジャンパーワイヤーの接続](https://camo.elchika.com/92875ea54539eb0d71e443e5549c3f82bf2e38bd/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f34303365393732352d616538302d346466632d623361662d346633663565376333626639/) 赤の電源線(Vcc)をobnizの0番ポート、黒のGND線をobnizの1番ポート、緑の信号線(Vout)をobnizの2番ポートに接続します。 ### 3.サーボモータにジャンバーワイヤーを接続し、obnizに接続する サーボモーターをobnizに接続します。 ![obnizとサーボモータの接続イメージ](https://camo.elchika.com/6d4d13475a0113e9153ab3b0d168d5951abb4a34/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f36356630633963352d396461332d343134342d383663302d653265633933613061343666/) 接続は下記表のように接続します。 | サーボモータの線色 | 信号名 | 使用するジャンパーワイヤーの色 | obnizのポート番号| |:---|:---|:---|:---| | 黄 | 信号線 | 青| 5番| | 赤 | 電源線 | 赤| 6番| | 茶 | GND線 | 黒| 7番| まず、サーボモータのコネクタにジャンパーワイヤーを接続してください。 青のジャンパーワイヤーを黄色、赤のジャンパーワイヤーを赤、黒のジャンパーワイヤーを茶色のケーブルに接続します。 ![サーボモータとobnizの接続](https://camo.elchika.com/33dd0a77dbf57594cc2ca181fb42f8d1f54b9a35/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f30333730656132372d343962642d346536352d383330382d653236373638306662306665/) ジャンパーワイヤーの反対側は、青の信号線をobnizの5番ポート、赤の電源線を6番ポート、黒のGND線を7番につなげます。 ## obnizに接続した測距センサーとの距離に応じてサーボモータを動かすプログラム 測距センサーとの距離に応じて、サーボモータを動作させるプログラムです。 測距センサーとの距離に応じて、サーボモータの角度を3段階に変更します。 | 測距センサーとの距離 | サーボモータの角度 | |:---|:---| | 0 mm ~ 200 mm | 0度 | | 201mm ~ 1,000 mm | 90度 | | 上記以外 | 180度 | ```HTML:測距センサーの距離に応じてサーボモータを動かすプログラム <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://unpkg.com/obniz@3.4.0-beta.0/obniz.js" crossorigin="anonymous"></script> </head> <body> <!-- obnizデバッグ表示 --> <div id="obniz-debug"></div> <!-- 記述リスト --> <dl> <dt>センサー距離</dt> <dd> <!-- センサ距離表示 --> <span id="text-distance">xxx</span>mm </dd> <dt>サーボモータ角度</dt> <dd> <!-- サーボモータ角度表示 --> <span id="text-angle">xxx</span>度 </dd> </dl> <script> // obnizクラスのインスタンス化 const obniz = new Obniz("OBNIZ_ID_HERE"); // obnizがオンライン obniz.onconnect = async function () { // 測距センサーの定義 const sensor = obniz.wired("GP2Y0A21YK0F", { vcc:0, gnd:1, signal:2 }); // サーボモータの定義 const obniz_servo = obniz.wired("ServoMotor", { signal: 5, vcc: 6, gnd: 7 }); // サーボモータのパルス幅設定 obniz_servo.range = { min: 0.5, max: 2.4 }; // 測距センサーの計測開始 sensor.start(function (distance) { // 測距センサーとの距離を表示 document.getElementById("text-distance").textContent = distance; let servo_value = 0; // サーボモータの角度 // 測距センサーとの距離に応じて、サーボモータ角度変数を変更 if(distance >= 0 && distance <= 100) { servo_value = 0; } else if(distance > 100 && distance <= 200) { servo_value = 90; } else { servo_value = 180; } // サーボモータを指定の角度に動作 obniz_servo.angle(servo_value); // サーボモータの角度を表示 document.getElementById("text-angle").textContent = servo_value; }) }; </script> </body> </html> ``` プログラムの説明をします。これまでの記事で説明した項目は割愛させていただき、新しく紹介する部分を説明します。 **<dl><dt><dd>タグ(記述リスト)** 測距センサーからの距離、サーボモータの角度をブラウザ上に表示するため、dl、dt、ddタグで区切っています。 dl、dt、ddタグは定義(説明)リストと呼ばれ、dtには語句、ddはその説明を記述し、全体をdlタグでくくります。 ![](https://camo.elchika.com/97457dff4151f177d5902776c168b8fb6a817da7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f66353830643932612d643639392d346362362d393132342d623931623765616365663864/) | | 測距センサー | サーボモータ | |:---|:---|:---| | dt | センサー距離 | サーボモータ角度 | | dd | ●●mm(プログラムで書き換え) | ●●度(プログラムで書き換え) | ddタグには測距センサーとの距離、サーボモータの角度を表示し、JavaScriptで値を書き換えます。 書き換える箇所に<span id="text-distance">xxx</span>と<span id="text-angle">xxx</span>とID名を付けて変更します。 **obniz_servo.range = {min: 0.5,max: 2.4};の説明** 今回使用するサーボモータ「SG90」のパルス幅設定をしています。 [秋月電子通商](http://akizukidenshi.com/catalog/g/gM-08761/)の「SG90」のページで仕様を確認します。 | 制御パルス | 制御角 | |:---|:---| | 0.5ms~2.4ms | ±約90度(0度~180度) | 0.5msのときに-90度(0度)、2.4msのときに+90度(180度)となります。 ![パルス幅とサーボモータ角度の関係](https://camo.elchika.com/0243f4b9218d31ff078ac8e56117b998844ac43b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f61646231373961632d646536312d343136322d393134632d376262343736346333646463/) 制御信号のパルス幅は製品によって異なるので、モーター毎に設定する必要があります。 **測距センサーとの距離とサーボモータ角度の関係** 今回のプログラムでは測距センサーとの距離とサーボモーターの角度を下記の範囲に設定しました。 | 測距センサーとの距離 | サーボモーターの角度 | |:---|:---| | 0mm~100mm | 0度 | | 100mm~200mm | 90度 | | 上記以外 | 180度 | 測距センサーとの距離に応じて、サーボモーターの角度(servo_value)の値を変更し、obnizでサーボモーターの角度を変更するobniz_servo.angle()に代入して角度を変更しています。 ## 実際の動作させている動画 実際に動作させた動画を撮影しました。 このように測距センサーとの距離に応じて、サーボモーターの角度が変化します。 @[youtube](https://www.youtube.com/watch?v=zQruOoaoRxo) Webブラウザには測距センサーとの距離とサーボモーターの角度を表示しています。 ![ブラウザに距離とサーボモーターの角度を表示](https://camo.elchika.com/aa6966957dfa615e87916e4a917a7d6f2ae46b9e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35306534636263632d343764382d343534322d626263622d3666633133653533363538662f63366435333362632d323063332d346535392d393866382d343035313533343161616238/) ## まとめ 今回紹介した方法で測距センサーとの距離に応じて、サーボモーターの角度を変更できるようになりました。 obnizならセンサーの情報もWebブラウザに簡単に表示できるので、離れた場所にあるセンサー情報も容易に知ることができます。 センサーの情報を元にモーターを動かすこともできるので、この記事を参考にしながら試してみてください。