超音波距離センサー

距離センサーを使うことで、ユーザーが近づいたときにベゼリーを喋らせるといった使いかたができます。

超音波距離センサーモジュールHC-SR04をご用意ください。

ベゼボードの表に従い、左記の位置に470Ωと220Ωの抵抗をハンダづけしてください。上側の抵抗値が下側の約2倍になれば、他の抵抗でも構いません。

ベゼボードに超音波距離センサーを接続してください。

モジュールの表記「GND, Echo, Trig, 5V」がベゼボードの表記に合うようにしてください。

ベゼボックスのフロントパネルに超音波距離センサーを取り付けてください。

ケーブルはいったんベゼボックスの外にでてから、中に引きこみます。

こんな感じになったでしょうか。

サンプルプログラムを実行してみましょう。ディスプレイに「遠い」という文字が表示されますが、超音波距離センサーに手をかざしたとき、「近いです」に変わったら成功です。

python3 sample_range1.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Sample Code : 超音波センサーサンプル
# 超音波距離センサーHC-SR04を接続してください。

# モジュールのインポート
from time import sleep                # ウェイト処理
import RPi.GPIO as GPIO
import time
import sys

# 定義
trigger_pin = 17      # GPIO 17
echo_pin = 27         # GPIO 27
actionDistance = 10.0 # しきい値(単位:センチ)

# 初期設定
#bezelie.moveCenter()
GPIO.setmode(GPIO.BCM)
GPIO.setup(trigger_pin, GPIO.OUT)
GPIO.setup(echo_pin, GPIO.IN)

# 関数
def send_trigger_pulse():
    GPIO.output(trigger_pin, True)
    time.sleep(0.0001)
    GPIO.output(trigger_pin, False)

def wait_for_echo(value, timeout):
    count = timeout
    while GPIO.input(echo_pin) != value and count > 0:
        count -= 1

def get_distance():
    send_trigger_pulse()
    wait_for_echo(True, 10000)
    start = time.time()
    wait_for_echo(False, 10000)
    finish = time.time()
    pulse_len = finish - start
    distance  = int(pulse_len / 0.000058)
    return (distance)    

# メインループ
def main():
  try:
    while True:
      distance = get_distance()
      print(distance, end="\t")
      if distance < actionDistance:
        print ("近いです")
      else:
        print ("遠い")
      sleep(0.5)

  except KeyboardInterrupt:
    print (' 終了しました')
    GPIO.cleanup()
    sys.exit(0)

if __name__ == "__main__":
    main()

距離に応じてアクションとお喋りをするように改良したのが以下のプログラムです。受付や店頭に置いておくと、お客さんが近づいてきたときに喋るので、客寄せになりますよ。セリフデータdata_rangeDialogueJ.csvを編集すれば、お店の名前や売出し中の製品など、好きなセリフを言わせることができます。

python3 demo_range1.py

ケーブルがベゼボックスの外に出てしまうのは見栄えが悪いと思うひとは、ハンダづけに挑戦してみましょう。

ハンダづけすれば、ご覧の通り、ケーブルが すっきり収まります。

超音波式の距離センサーは広い場所で使うのに向いています。狭い部屋の中で使うと、正面の壁に反射された音波を拾ってしまい、値が安定しないことがあります。