マイコンボードを中継器にして PC に電子部品を接続し、Ruby で制御してみた(人感センサ編)


この記事は、富士通ソーシアルサイエンスラボラトリ Advent Calendar 2018の 7 日目の記事です。

はじめに

@GORO_Neko です。ご存知の方ご無沙汰してます。初めての方お初にお目にかかります。

えーっと、先にお断りをば一言。

自分、仕事では一切マイコンボードを利用した業務に携わったことがございません。

以下は、自分が所属する会社の意向を反映したものでもスタンスを示すものでもなく、単なる一個人の趣味の活動から産まれた記述です。

PC に電子部品を接続したい & PC 上の Ruby で制御したい

ここ数回 Firmata アプリケーションを書き込んだ Arduino Uno を中継器に、電子部品を PC 上のRuby スクリプトで制御できるよと言う記事を書いてきました。

前回書いた記事までの各記事で、デジタル/アナログピンの read/write 方法およびサーボモータの制御方法をお伝えしました。

この技術に頼った電子部品の制御方法は、ほぼこれですべてなので、もうそろそろこの技術に関する解説を書くのは「打ち止め!」と思っていたのですが、リアル世界の知人から「この技術で人感センサはコントロール出来ないの?」と質問されたので、もう一回だけこのネタで記事を書かせていただきます。

Arduino Uno を Firmata 対応にする

やり方はこちらの記事で説明しましたので割愛。

Arduino IDE を使って StandardFirmata アプリケーションをビルドして、 Arduino Uno に書き込んでおく。ただこれだけです(おお、何回目の記述だろう)。

人感センサをつないでみる。

はい、パッシブ的に赤外線を感知するアレです。

英語では Passive Infrared Ray(PIR)、日本語では焦電型赤外線センサと言うのが正式な名前のようです。

センサの感知圏内に赤外線を発するもの(たとえば生きて体温と言う赤外線発生源である人間とか)が入ってくると、それを感知できるセンサです。

いつものごとく秋葉原の電子パーツ屋やネットショップで簡単に購入可能という理由から、人感センサとして HC-SR501 を、Arduino Uno 経由で PC に接続します。

HC-SR501 と Arduino Uno の結線方法に関しては、以下の図を参照ください。

[回路図]

制御スクリプトについて

SG90 制御用に、以下のスクリプトを作成します。
このスクリプトにより、HC-SR501 が検知圏内に赤外線を発するものがないかを探ります。
そして赤外線を発するものを検知すると、PC の画面上に「There are intruders !」と表示します。

[制御スクリプト]

firmata-test-004.rb
# Author       : Yoshihiko Hara <[email protected]>
# last updated : 2018/12/5
# Overview     : Control Passive Infrared Ray(HC-SR501) with Ruby on the PC.
# License      : MIT License

require "arduino_firmata"

PIN_NUMBER_OF_A0 = 2
ALERT_MESSAGE    = "There are intruders !"
DELAY_TIME       = 1

# Prepare to control Arduino from PC.
arduino = ArduinoFirmata.connect "/dev/tty.usb-device-name"

while true

  # Search for something emitting infrared rays.
  if true == arduino.digital_read PIN_NUMBER_OF_A0
    puts ALERT_MESSAGE
  end

  # Stop operation for 1 S.
  sleep DELAY_TIME

end

HC-SR501 はセンサ正面から 110 度、最大距離 7 m (適正検知距離 3 - 7 m )の範囲に赤外線を発するものが侵入したか否かを検知できます。

センサーを通路の天井や、出入り口の上部に設置しておけば、誰かが通過するたびにそれを検知できそうです。
ちょっとした侵入探知機代わりになってくれるかなと思っています。

※ センサについている検知距離や検知感覚をさだめる 2 つの半固定抵抗をいじったりしないとうまく反応しないかも … しかも結構(部品により?)反応するしないがピーキーだったり

では、また。