ラピロに写真を撮ってもらう(ラピロへのタッチセンサの搭載)

 

前回はラピロとインタラクションするためにジェスチャセンサをつけましたが、今回はもう少し簡単に、タッチセンサを取り付けて、ラピロの頭に手を置くと反応してくれるようにしたいと思います。それから、その活用例として、頭にポンと手を置くと写真を撮ってくれるようにしたいと思います。

使用するタッチセンサは、今回もGroveシステムのものになります。

th_rapiro_touch_1

ラピロの頭を開けて、てっぺんに両面テープで仮止めしてみました。この状態でちょっとだけ動作確認してみたところ、ギリギリ、てっぺんのプラスチック越しに指を近づけても反応してくれました。 ということで、あとはこれを綺麗にはめ込んでいきます。

th_rapiro_touch_2

上から見ると、ちょっとだけハンダがはみ出していて、頭を閉じる時に干渉してしまいます。

th_rapiro_touch_3

ということで、ちょっとだけ切り込みを入れてやると、無事に頭を閉じられるようになりました。

 

次にケーブルの準備です。イチから自作しても良いですが、専用のケーブルを加工していく方が簡単です。

th_rapiro_touch_6

デフォルトだとちょっと長いので、短く切って、先端にピンヘッダ・ピンソケットをハンダづけします。黄色線がタッチセンサの信号出力なので、ピンソケットをつけてRaspberry PiのGPIOに直挿しできるようにしています。あと、信号線を他の線となるべく接触させたくないので、全体を熱収縮チューブで覆っています。赤色線と黒色線は電源とGNDですが、自分の場合は電源をRaspberry Pi本体のGPIOとは別にとっているので、その都合でピンヘッダをつけています。GPIOから電源を取る場合は、ここもピンソケットにします。白色線は今回は使いません。

th_rapiro_touch_7

頭にくっつけるとこんな感じです。なんかもうごちゃごちゃですみません。

 

さて、ここからはサンプルプログラムを書いていきたいと思います。コンソールにプリント出力するだけだと味気ないので、頭に触るとシャッター音が鳴って写真を撮ってくれるようにしたいと思います。そのため、以下をそのまま実行する場合は、事前にRaspberry Pi用カメラモジュールを接続して、raspi-configでカメラを有効にしておいてください。前回ジェスチャセンサを取り付けてしまった人は、すみません、カメラモジュールに差し替えてください(誰もいないかもしれませんが)。

カメラのシャッター音はこちらのmp3素材を使わせていただきます。

以下、サンプルファイルです。

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
import picamera
import pygame.mixer

TOUCH_PIN = 40
touch_state = 0

GPIO.setmode(GPIO.BOARD)
GPIO.setup(TOUCH_PIN, GPIO.IN)

camera = picamera.PiCamera()
camera.hflip = True
camera.vflip = True

pygame.mixer.init()
pygame.mixer.music.load('Camera-Shutter02-1.mp3')

while True:
  current_touch_state = GPIO.input(TOUCH_PIN)
  if current_touch_state != touch_state:
    if current_touch_state == 1:
      camera.capture('sample.jpg')
      print("Shoot!")
      pygame.mixer.music.play(1)
    touch_state = current_touch_state
  #print(current_touch_state)
  time.sleep(0.2)

とても簡単。ラピロのカメラは正位置と上下左右反転した形で取り付けられているので、それの補正を”camera.hflip”と”camera.vflip”で行っていることだけ注意です。

これを実行すると、こんな感じになります。

 

うん、テストとしてはこれでOKです。これにラピロの動作を付け加えたり、「ハイ、チーズ!」とか喋らせると、よりそれっぽくなると思います。

 

少し気がかりなのが、タッチセンサの感度があまり良くないことです。反応しないこともしばしば。何かタッチセンサの感度を上げる方法があれば良いのですが、残念ながら自分には分かりません。もしどなたか良い方法があるなら、教えてくださいませ。