@m_seki の

I like ruby tooから引っ越し

ラズパイの人感センサーと距離計連携させてみた

asin:B00U6WMPTQ:detail

http://d.hatena.ne.jp/m_seki/20150426
http://d.hatena.ne.jp/m_seki/20150429

前回の続き。超音波距離センサーとPIRセンサーを同時につないで連携させてみた。

PIRセンサーがなにかを検知したら、距離を三回測ってみる、って仕様です。

結線メモ

前回、前々回の結線と同じです。5Vから二つ繋がなきゃならないのだけどブレッドボードの電源の列から分けました。
動くものねえ。

プログラム

前回のmodule GPIOを使用して、主処理だけ書き換えます。
無限ループだから後処理にたどり着かないんだよなー。

def distance(trig, edge)
  GPIO.write(trig, 1)
  sleep(0.0001)
  GPIO.write(trig, 0)

  edge.read
  edge.wait(1)
  s = Time.now
  edge.wait(1)
  e = Time.now
  (e.to_f - s.to_f) * 17000
end

GPIO.export(17, 'out')
GPIO.export(27, 'in')
GPIO.export(4, 'in')

edge = GPIO::Edge.new(27)
pir = GPIO::Edge.new(4)

while true
  if pir.wait.to_i == 1
    puts 'motion'
    3.times do |n|
      sleep(0.5)
      p [n, Time.now, distance(17, edge)]
    end
  else
    puts 'leave'
  end
end

edge.close
pir.close

GPIO.unexport(17)
GPIO.unexport(27)
GPIO.unexport(4)

実験

PIRセンサーの反応する角度が広いので、実験してると自分が検知されてしまいました。
トイレットペーパーの芯を二つつないで指向性(?)をあげて手をかざすと手との距離を測ってくれるようになりました。