Mira&Luna's nursery lab

旅乙女と発明娘の子供部屋

壁にぶつからないために🔰 赤外線障害物回避センサモジュールを試してみました🚗

f:id:miraluna:20181023214015j:plain:w100 吸血鬼 ミラ・カーミラ
障害物検知センサ🔎を試してみます。

障害物検知センサは、センサが障害物に接近したことを知ることができるものです。お掃除ロボットの”ルンバ”は壁に近づくと方向を変えるでしょ? その「壁に近づいた」ことを知るために使われているのが障害物検知センサなの。自動車にもぶつかり防止用に使われているわね。

◆ IR赤外線障害物回避センサモジュール
f:id:miraluna:20201025174507j:plain:w350
障害物検知センサは、超音波を使ったものや、赤外線(IR)を使ったものや、光を使ったものなどさまざま。今回使ったものは赤外線を利用した「IR赤外線障害物回避センサモジュール」というものです。
以前に使った人感センサも赤外線センサでした。
   ↓ 人感センサガジェットの記事
miraluna.hatenablog.com
miraluna.hatenablog.com
miraluna.hatenablog.com

<赤外線障害物検知センサ>
アマゾンで買いました。LM393というコンパレータをブレインとしたモジュール。コンパレータというのは2つの電圧や電流を比べて、どちらが大きいか比べてくれるもの。障害物の検知方法は、透明なLEDから赤外線を出して、物体に当たって反射した赤外線を黒いLEDが受信することで検知するの。でもコンパレータが何と何の値を比較してるのか、よくわからない。それでね、このモジュールがまた安いの。
送料込みで70円よ。 つい買っちゃったっ。
(今(2021.8月)は送料が150円かかるみたい。でも他のものを併せ買いしても150円🚛)

さあ、試運転をしていきましょう。
障害物検知センサには3つのピン(端子)があります。「電源の+」と「電源のー」につなぐピン、それから障害物を検知したことを知らせる「信号線」のピンです。

今回はArduinoを使って、センサからの信号を目に見えるようにします。
マイコンを制御してくれるマシン「Arduino」→ f:id:miraluna:20190511195022p:plain:w200



.配線をする
ブレッドボードとジャンパワイヤを使って配線をしていきます。

    「障害物検知センサ」      「Arduino
        Vcc       →      5v
        GND       →     GND
        OUT       →     A0
f:id:miraluna:20201025174630j:plain
このモジュール(障害物検知センサ)は 3.3v~5v で動作するんだけど、3vでも動くので Vccは 3vのピンでもO.K.
OUTは障害物を検知したことを知らせるための信号線。センサから信号が出されて、Arduinoが受け取る。「A0」のピンは A0~A5(どれもアナログピンというピン)のどれでもよくて、スケッチ(プログラム)を書くときにつないだピンを指定します。

配線はこれだけでもいいんだけど、せっかくなのでLEDとかブザーとかをONOFFできるようにしよう。
(追加配線)Arduinoの 7pin → 抵抗器(330Ω) → LED → Arduinoの GND
☆追加配線☆ f:id:miraluna:20201025175000j:plain:w400

LEDは 7pin側を長い足(アノード)に、GND側を短い足(カソード)につなぎましょう。
抵抗器はLEDを守るためのものです。なくても動作するけど、ないとLEDが壊れることがあるの。330Ωというのは 5vを使うときの、大体の目安ね。
「7」のピンはさっきの A0と同様、スケッチで指定することができるわ。



.スケッチ(プログラム)を書く
◆ センサから信号を受け取って、LEDを点灯させるプログラム

const int in = A0; //ここで A0~A5を指定する
const int out = 7; //ここで出力ピンを指定する

void setup() {
  Serial.begin(9600); //Arduinoとパソコンで通信を始めますよ
  pinMode(7,OUTPUT); //7番ピンは出力ですよ
}

void loop() {
  int n =analogRead(in); //「in」こと「A0」の値を読む

  Serial.println(n); //読んだ値をパソコンのシリアルモニタに表示する

  if(n<150){          //もし値が150未満なら
    digitalWrite(7,HIGH); //7番ピンをON
  }else{
    digitalWrite(7,LOW); //値が150未満以外なら7番ピンをOFF
  }
}

左詰めで見にくくてごめんなさい。はてなブログでコードをそのまま表示するやり方がまだよく分からないの。 今なら分かる(∂, ∂🎀y(2021.8月)

Arduinoにプログラムを書き込むツール Arduino IDE (Arduino開発環境)を起動させて、スケッチを書き込みます。Arduino IDE は無料でダウンロードできます。
 Arduino公式←リンク
ダウンロード方法 ↓
miraluna.hatenablog.com



.動かしてみる
f:id:miraluna:20201025174855j:plain:w290 f:id:miraluna:20201025174744j:plain:w290
🍎電源をつなぐと赤い色のLEDが光る。 🍐障害物を感知すると緑色のLEDも光る。

スケッチをArduinoに書き込んで、Arduino IDEにある🔎マークの「シリアルモニタ」を開きましょう。障害物検知センサが読み取った値がどんどんどんどん送られてきます。

<調整>
でも私、初めはうまくいかなかった。2つの調整が必要だったの。
1つめ。赤外線を送受信する2つの砲弾型LEDの向きが水平・平行じゃなかった。だからそれをぐいっとやって、向きを整えました。
2つめ。中央にある青いボックス見える? これは半固定抵抗器で、中央の十字を回転させるとセンサの感知距離(感度)を調整できるの。時計回しで感知距離が近くなって、反時計回しで遠くなる。緑のLEDが点きっぱなしだとずっと障害物を感知し続けている状態なので、緑のLEDが消えるまで半時計回しに回します。回しすぎると反応しなくなるので、ちょうど境目くらいね。この調整も、大切です。

<送られてくる値>
調整がうまくいって、手をかざすと検知センサが反応するようになったら、シリアルモニタの値を見てみましょう。私の場合、5vにつないだときは1020前後の数値が送られてきて、障害物を感知すると80前後の値になった。3vにつないだときは750くらいの値で、感知すると20前後の値になった。数値には個体差があります。

<感知距離>
感知可能な距離は、5vでも3vでもだいたい2cm~30cmくらいでした。5cm~10cmくらいは調整が簡単だったけど、30cmくらいで感知させるにはかなりシビアな調整が必要だったわ。あまり精密な造りじゃなさそうだから、シビアというよりは偶然とフィーリングの賜物ね。
送受信LEDの横方向にある障害物にもけっこう反応します。

<プログラム調整>
シリアルモニタで値を確認することができたら、7番ピンにつないだLEDを光らせる値を修正します。私の場合は5vの値が1020-80で、3vの値が750-20だったので、どちらの値にもかぶらないまんなかの値を「境目」にしましょう。境目というのはスケッチ内の「150」という値がそれ。150未満だと感知していて、150以上だと感知していないとするもの。だから300とか500とかでもいいわね。個体に合わせて修正しましょう。

◆ 光らせたのは、左側にある緑色のLED
f:id:miraluna:20201025175054j:plain:w290 f:id:miraluna:20201025175155j:plain:w290
障害物を感知すると、ブレッドボードの左端にある緑色のLEDが光ります。
実験成功! やったね(∂. ∂🎀y


障害物が近づきました🔰 赤外線センサの検証

.工作アイディア
今回は動作検証までだけど、同じ原理を使えばLEDの代わりに音を鳴らしたりモーターを動かしたりすることもできる(モーターなどを動かすにはArduinoの出力以外にももっと電力が必要だけど、それはまた別のお話)。
こんなのはどうかな?
🌈手をかざすとアルコール消毒液やハンドソープが出てくるディスペンサー(ポンプを動かす)
🌈鼻や尻尾を近づけると餌が出てくる給餌器(サーボモータを動かす)
🌈触ろうとすると歌って踊り出すダンスロボ(スイッチを切り替える)
🌈車が近づくとゲートが開くジオラマサーボモータを動かす)
🌈障害物に近づくと急停止するおもちゃの車(スイッチを切り替える)

組み合わせのアイディア次第でいろいろなものが作れそう。

検証・紹介はミラでした。
f:id:miraluna:20200610180017j:plain:w150     
 🎀ミラの部屋へ🎀