thunder5178のアイコン画像
thunder5178 2020年03月28日作成 (2020年04月01日更新)
セットアップや使用方法 セットアップや使用方法 閲覧数 2193
thunder5178 2020年03月28日作成 (2020年04月01日更新) セットアップや使用方法 セットアップや使用方法 閲覧数 2193

【IoT電子工作】obnizで測距センサーを使おう!【前編:LED調光】

前回記事「【IoT電子工作】obnizでサーボモーターを動かそう!」に続いての投稿となります。

この記事では、obnizという開発ボードに測距センサーを接続し、測距センサーからの距離に応じてLEDの光を変化させたいと思います。
なお、測距センサーとは対象物との距離を測定できるセンサーです。

この記事でできること
obnizに接続した測距センサーの値を取得し距離に応じてLEDを調光させる

測距センサーを扱う記事は2部構成とし、この記事を前編としてLED点灯、後編としてサーボモーターを動作させます。

obnizに関する説明やobnizの動作確認用プログラムについては、前回記事の「【IoT電子工作】obnizでサーボモーターを動かそう!」も合わせてご覧ください。

まずは用意する物を紹介します。

用意するもの

この記事では下記の部材を用意します。

部材一式

  1. obniz(開発ボード)
  2. USB A - USB micro Bケーブル(obniz電源共有用)
  3. 測距センサー「GP2Y0A21YK(SHARP)」(以下、測距センサー)
  4. 抵抗内蔵赤色LED(5V用)(以下、LED)
  5. ジャンパーワイヤー(オスーオス)(以下、ジャンパーワイヤー)
  6. 小型クリップ付コード(以下、クリップコード)
用意する部材 購入先の例
obniz obniz公式ストアなど
測距センサー 秋月電子通商など
LED 秋月電子通商など
ジャンパーワイヤー 秋月電子通商など
クリップコード 秋月電子通商など

開発ボードのobniz
obniz

対象物との距離を測定する測距センサー
測距センサー

出力確認用のLED
抵抗内蔵赤色LED

obniz端子接続用のジャンパーワイヤー
ジャンパーワイヤー

測距センサーとジャンパーワイヤーをつなぐクリップコード
クリップコード

obnizに測距センサーと抵抗内蔵赤色LEDを接続する

下記の図のようにobniz、測距センサー、LEDを接続します。
接続イメージ図

実際に接続した様子がコチラです。

実際に接続した様子
obnizに測距センサーと抵抗内蔵の赤色LEDを接続します。
測距センサーと測定物との距離に応じて、LEDの光量を変化させます。

【抵抗内蔵LEDを使用する理由】抵抗なしでLEDを使用すると電流が流れすぎてしまい、LEDが破損する恐れがあります。今回使用するLEDは抵抗内蔵されているため、そのまま使用することができます。

接続手順

測距センサーとobnizは下記の様に接続します。
測距センサーとobnizの接続

測距センサピン番号 信号名 センサ付属の線 クリップ&ジャンパー obniz io
1 Vout 2
2 GND 1
3 Vcc 0

下記の順番で接続します。
接続手順

  1. 測距センサー付属の線とクリップコードを接続する
  2. 反対側のクリップコードにジャンパーワイヤーを接続し、obnizに接続する
  3. LEDをobnizに接続する

1.測距センサー付属の線とクリップコードを接続する

測距センサー付属の線にクリップコードを挟みます。
秋月電子通商から測距センサーを購入すると、測距センサー付属のコードが同梱されていますが、片側は芯線むき出しの状態です。

このままではobnizの端子に挿しにくいので、ミノムシクリップとジャンパーワイヤーをつないでobnizへ接続します。

測距センサー付属の線とクリップコードを接続する
今回使用する測距センサー「GP2Y0A21YK」のピンアサインは下記のようになります。
センサーの端子は、センサー正面から見て左から1番、2番、3番となります。

測距センサピン番号 信号名 センサ付属線 クリップコード
1 Vout
2 GND
3 Vcc

データシートはシャープの公式サイトからダウンロードできます。

白線(Vout)には緑のクリップ、茶線(GND)には黒のクリップ、黒線(Vcc)には赤のクリップをつなぎます。

2.反対側のクリップコードにジャンパーワイヤーを接続し、obnizに接続する

測距センサーの線を接続した反対側のクリップにはobniz接続用のジャンパー線をつなぎます。
クリップコード、ジャンパーワイヤー、obnizの接続

クリップコードには同じ色のジャンパーワイヤーを接続します。
そしてobnizの0番ポートに赤色のVcc、1番ポートに黒色のGND、2番ポートに緑色のVoutを接続します。

信号名 線色 obnizポート番号
Vcc 0番
GND 1番
Vout 2番

3.LEDをobnizに接続する

LEDをobnizに接続します。LEDにはプラス(アノード)とマイナス(カソード)があります。LEDの足が長い方がプラス(アノード)、短い方がマイナス(カソード)です。
今回はアノード(足が長い方)をobnizの5番ポート、カソード(足が短い方)をobnizの6番ポートに接続します。

LEDの極性 obnizのポート番号
アノード(足が長い) 5
カソード(足が短い) 6

距離センサーの距離に応じてLEDを調光させるプログラム

距離センサーとの距離に応じてLEDを調光させたいと思います。
距離センサーから離れるほど明るく、近づくほど暗くなるプログラムです。

測距センサーとの距離が近いとLEDは暗い

測距センサーとの距離が遠いとLEDが明るい

距離センサとの距離に応じてLEDを調光

<html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://unpkg.com/obniz@3.3.0/obniz.js" crossorigin="anonymous"></script> </head> <body> <!-- obnizデバッグ表示 --> <div id="obniz-debug"></div> <!-- センサ距離表示 --> <p>距離:<span id="text-distance">000</span>mm</p> <script> // Obnizクラスのインスタンス化 const obniz = new Obniz("OBNIZ_ID_HERE"); // obnizオンライン obniz.onconnect = async function () { // 距離センサ「GP2Y0A21YK0F」の定義 const sensor = obniz.wired("GP2Y0A21YK0F", { vcc:0, gnd:1, signal:2 }); // 未使用のPWMを取得 const pwm = obniz.getFreePwm(); // obnizポート5番でPWMスタート pwm.start({io:5}); // obnizポート6番をGND obniz.io6.output(false); // 距離センサ常時測定 sensor.start(function (distance) { // 距離センサとの距離をmm単位で取得 document.getElementById("text-distance").textContent = distance; // 60mm~1,000mmの範囲でLED調光 if(distance >= 60 && distance <= 1000) { // PWMのデューティー比 = 距離 pwm.duty(Math.floor(distance/10)); } else { pwm.duty(0); // 60mm~1,000mmの範囲外では消灯 } }) }; </script> </body> </html>

上記のプログラムをHTML形式で保存したら、お使いのブラウザで実行してください。

プログラムの説明

下記のコードについては、前回記事の「【IoT電子工作】obnizでサーボモーターを動かそう!」に説明しておりますので、今回は割愛させていただきます。

  • <script src~(省略)></script>
  • <div id="obniz-debug"></div>
  • const obniz = new Obniz("OBNIZ_ID_HERE");
  • obniz.onconnect = async function () {};

今回新しく使用する部分について説明します。

<p>距離:<span id="text-distance">000</span>mm</p>の説明
測距センサーからの距離をブラウザ上に表示するためのHTMLを記述しています。
距離の表示

「000」と記載している部分に<span>タグでID名「text-distance」と名前を付けています。
距離センサーとの距離に応じて、ここの数字を変化させるためです。

const sensor = obniz.wired("GP2Y0A21YK0F", {vcc:0,gnd:1,signal:2});の説明
距離センサ「GP2Y0A21YK0F」を使用するための設定です。
obnizと距離センサは下記のように配線しましたが、こちらを記述しています。

信号名 線色 obnizポート番号
Vcc 0番
GND 1番
Vout 2番

const pwm = obniz.getFreePwm();の説明
今回、PWMと呼ばれる機能でLEDの光を変化させます。

PWMとは、「Pulth Width Modulation」の頭文字をとったもので、ONとOFFの組み合わせにより、電流や電圧を制御します。

PWMにはデューティー比というものがあります。
パルス幅(ON時間)から、1周期(ONとOFFの合算)を割り、100を掛けた値です。

デューティ比=1パルス(ONの時間)÷1周期(ONとOFFの時間)×100
このデューティー比を変化させる、つまりON時間を変化させることで、LEDの光量を変化させます。

なお、obnizで使用できるPWM信号は6つあり、その中で使用されていないPWMを呼び出して使用します。

pwm.start({io:5});の説明
呼び出したPWM機能は5番ポートに割り当てます。
LEDは下記の様に接続しました。

LEDの極性 obnizのポート番号
アノード(足が長い) 5
カソード(足が短い) 6

LEDのアノード(プラス側)を5番ポートに接続し、5番ポートからPWM出力することで、LEDに電流が流れます。
デューティー比を変化させることで、LEDに流れる電流が変化し、LEDの光量が変化します。

obniz.io6.output(false);の説明
LEDのカソード(マイナス側)は6番ポートに接続しました。
obniz.io6.output(false);
と記述することで、obnizの6番ポートが0V出力され、GNDとして使用しています。

sensor.start(function (distance) {};の説明
この関数を使用することで、距離センサーの測定を開始します。
この関数では返り値として、距離センサーとの距離「distance」をmm単位で受け取ります。
この「distance」の値に応じて、LEDを調光させます。

document.getElementById("text-distance").textContent = distance;の説明
sensor.start関数で取得した「distance」をブラウザ上に表示させます。
ここで、HTMLタグで下記のように記述しました。

<p>距離:<span id="text-distance">000</span>mm</p>

ID名を「text-distance」と名付けたspanタグのテキストを測距センサーとの距離「distance」に書き換えています。
これにより、ブラウザ上で測距センサーとの距離が表示されます。

距離の表示

pwm.duty(Math.floor(distance/10);の説明
if文で60mm~1,000mmの範囲内のとき、LEDを調光させるプログラムとしています。
60mm~1,000mmの範囲のとき、PWMで説明したデューティー比を変化させています。
距離を10で割った値をPWMのデューティー比に代入しています。
距離「distance」は小数点1桁単位で受け取るので、Math.floorにて小数点以下を切り捨てています。

distance デューティー比
60.0mm~1,000.0mm 6%~100%

測距センサーとの距離が近づくほどデューティー比が高くなる、つまりON時間が長くなるのでLEDは明るくなります。
反対に距離センサーからの距離が遠ざかるほどデューティー比は下がるので、LEDは暗くなります。

まとめ

今回は測距センサーとの距離に応じてLEDを調光させるプログラムを紹介しました。

次回は測距センサーとの距離に応じて、サーボモーターを動かすプログラムを紹介したいと思います。

thunder5178のアイコン画像
はじめまして。プロフィールをご覧いただき、ありがとうございます。 本業はメーカーの電気・システム設計をしており、趣味で電子工作やプログラミングをしています。 ご覧いただいた皆様の参考になれば幸いです。 また、個人では電子工作や電気関連のブログを運営しております。 ご一読いただけると嬉しいです。 https://thunderblog.org/
ログインしてコメントを投稿する