【Cds&レーザー】レーザーモジュールとCdsセルで物体検知センサーを自作する

2024/02/23

Cds サーボモーター ラズパイ レーザー

  • B!

今回は赤外線レーザーCdsセルで人感センサーを自作します。

赤外線人感センサであるHC-SR501がすでに存在しますが、レーザー人感センサのメリットを考えてみます。

注意

赤外線レーザーモジュールを使用しています。

レーザーを直接目で見ないように注意してください。

最終目標

レーザー式人感センサーの構成

レーザーを常にCdsに当てておきます。

物体が赤外線レーザーを遮断するとCdsの出力する値が変化します。

Cdsが出す値に応じて物体が通過したことを検出します。

レーザー式人感センサの特徴

1.人間(動物)以外も認識可能

HC-SR501は人体から発せられた赤外線の変化をセンサーで受光することで人の存在を認識します。

今回作成する人感センサーはレーザーから発せられた赤外線が遮断されたかどうかを検出し、人体(物体)の存在を認識することができます。

そのため、赤外線を発しないモノに対して用いることができます。

2.範囲が限定的かつ微調整できる

HC-SR501の検出範囲は3m~7mかつ120°の範囲で検出します。

広い範囲で認識させる用途(部屋のライトを点灯させる)では活躍します。

ですが狭い範囲に絞って用いることは難しいです。

レーザー式であれば、レーザーからCdsまでの距離が検出範囲になるため、「0m~レーザーの届く範囲」で調整可能です。

実現したい動き

常にCdsに向かってレーザーを照射する
Cdsからの入力を読み取る(HIGH or LOW)

HIGHの時 => レーザーが遮断された
    処理(今回はサーボを動かす)

LOWの時 => 遮断されていない

かなりシンプルです。

今回のCdsはDO(デジタルリード)に接続しているため0か1かの判断になります。

サーボモーターを動かしてみる

import RPi.GPIO as GPIO
import time

#サーボのピン番号
Servo_pin = 13

GPIO.setmode(GPIO.BCM)
GPIO.setup(Servo_pin, GPIO.OUT)
Servo = GPIO.PWM(Servo_pin, 50)

#Cdsのピン番号
GPIO.setup(14, GPIO.IN)

#初期化
Servo.start(0)

def servo_angle(angle):
	#角度をデューティサイクルに変換
    duty = 2.5 + (12.0 - 2.5) * (angle + 90) / 180
    Servo.ChangeDutyCycle(duty)
    time.sleep(1)

switch = 0
try:
    while True:
    	#Cdsの値読み取り
        cds = GPIO.input(14)
        #print(cds)
        
        if cds == 1:
            print('=====DETECT=====')
            
            #+90°に回転
            if switch == 0:
                servo_angle(90)
                switch = 1
            #-90度に回転
            else:
                servo_angle(-90)
                switch = 0
            
            time.sleep(0.1)
        else:
            print('')
            pass
        time.sleep(0.1)
        
        
except KeyboardInterrupt:
    print('CleanUp')
    servo_angle(-90)
    Servo.stop()
    GPIO.cleanup()

実行結果

変数「switch」の値を毎回切り替えることでサーボの回転角も毎回切り替わります。

赤外線を遮断しない透明な素材の物体は検知できません。

用途について

「人感センサー」を自作するつもりでしたが赤外線レーザーを使用しているため、人体や動物に向けて使用したくはないです。

レーザーを直接目で見ることができないようにケースを作成して、「手をかざすとライトをつける」等の動作を行うことはできそうです。

物体の数を数えることもできそうです。

Ranking

Community

Search