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

2024/02/23

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

  • B!
サムネ
サムネ

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

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

注意

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

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

最終目標

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

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

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

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

検出の仕組み

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

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

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

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

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

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

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

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

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

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

実現したい動き

  1. 常にCdsに向かってレーザーを照射する
  2. Cdsからの入力を読み取る(HIGH or LOW)
  3.  
  4. HIGHの時 => レーザーが遮断された
  5. 処理(今回はサーボを動かす)
  6.  
  7. LOWの時 => 遮断されていない

かなりシンプルです。

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

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

  1. import RPi.GPIO as GPIO
  2. import time
  3.  
  4. #サーボのピン番号
  5. Servo_pin = 13
  6.  
  7. GPIO.setmode(GPIO.BCM)
  8. GPIO.setup(Servo_pin, GPIO.OUT)
  9. Servo = GPIO.PWM(Servo_pin, 50)
  10.  
  11. #Cdsのピン番号
  12. GPIO.setup(14, GPIO.IN)
  13.  
  14. #初期化
  15. Servo.start(0)
  16.  
  17. def servo_angle(angle):
  18. #角度をデューティサイクルに変換
  19. duty = 2.5 + (12.0 - 2.5) * (angle + 90) / 180
  20. Servo.ChangeDutyCycle(duty)
  21. time.sleep(1)
  22.  
  23. switch = 0
  24. try:
  25. while True:
  26. #Cdsの値読み取り
  27. cds = GPIO.input(14)
  28. #print(cds)
  29. if cds == 1:
  30. print('=====DETECT=====')
  31. #+90°に回転
  32. if switch == 0:
  33. servo_angle(90)
  34. switch = 1
  35. #-90度に回転
  36. else:
  37. servo_angle(-90)
  38. switch = 0
  39. time.sleep(0.1)
  40. else:
  41. print('')
  42. pass
  43. time.sleep(0.1)
  44. except KeyboardInterrupt:
  45. print('CleanUp')
  46. servo_angle(-90)
  47. Servo.stop()
  48. GPIO.cleanup()

実行結果

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

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

用途について

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

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

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

Writer

アイコン
Python×Raspi IoTシステム・Bot・ラズパイの記録
  • プログラミング
  • IoT
  • Python
\FOLLOW ME/ 𝕏

Ranking

blogmura_pvcount

Community

Search