2015年07月16日

RaspberryPiで光の明るさを測ってみた【フォトレジスタ(Photoresistor)】【Python】


◆今日のゴール

RaspberryPiで光の明るさを計測します。

今回は、フォトレジスタ(Photoresistor)を使って計測をします。 

◆必要なもの
  • フォトレジスタ(Photoresistor)
  • コンデンサ(10μF)
  • 抵抗(10kΩ)
  • ブレッドボードとジャンパーピン(あると便利)
フォトレジスタは光依存性抵抗といい、入射する光の強度が増加すると電気抵抗が低下する電子部品です。

コンデンサは電荷を蓄えたり・放出したりするものです。容量は、1μFから10μFくらいのものを使いましょう
今回は、10μFを使いました。



◆配線する

抵抗・フォトレジスタ・コンデンサに極性はありませんので、向きはどちらでも構いません。
下記のように接続します。

photoregi.png

フォトレジスタの片側は、抵抗を挟んで3.3Vに。
もう一方は、GPIOと、コンデンサを挟んでGNDに。

GPIOは今回は5番を使いました。変更しても構いません。その場合は、以下のコードも変更してください。

スポンサードリンク
◆計測するプログラム【Python】

まずは、任意のディレクトリに「photoresistor.py」という名前で、新規ファイルを作ります。
$ cd ~
$ sudo vi photoresistor.py

以下のように編集して保存します。
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO

# GPIOのピン番号。適宜変更すること。
PiPin = 5

GPIO.setmode(GPIO.BCM)

def RCtime():
  value = 0

  # コンデンサの中の電気を放出する。
  GPIO.setup(PiPin, GPIO.OUT)
  GPIO.output(PiPin, GPIO.LOW)
  time.sleep(1)
 
  # コンデンサへの蓄電を始める
  GPIO.setup(PiPin, GPIO.IN)

  # コンデンサの蓄電が終わるまでループ
  while (GPIO.input(PiPin) == GPIO.LOW):
    value += 1
    # 無限ループ防止
    if value > 100000:
      return -1
  return value

try:
  measurement = RCtime()
  print(measurement)
except KeyboardInterrupt:
  print "Quit"
finally:
  print "clean up"

保存して、下記のように実行すると「4995」と数字が出力されました。
$ sudo python photoresistor.py 
4995
clean up

◆解説

15~18行目でコンデンサを放電させています。

21行目で、コンデンサへの蓄電が始まります。

蓄電にかかる時間が長いほど、24行目の中がたくさん実行されて、RCtimeメソッドから返却される値が大きくなります。

フォトレジスタは、光が強いと、抵抗が小さくなるので、コンデンサに蓄電されるまでの時間が短くなり、出力される値が小さくなります。

逆に、光が弱いと(暗いと)抵抗が大きくなり、コンデンサに蓄電されるまでの時間は長くなります。従って、出力される値は大きくなります。

今回の例では、蛍光灯で明るい部屋で4500前後、暗い場所で8000前後という値になりました。

この値は、コンデンサの値や、フォトレジスタの種類によって異なってきます。
この例では、コンデンサに蓄電される時間を便宜上利用しており、実際の「光度」を示す指標とは異なりますので、ご注意ください。



posted by Raspberry Pi at 08:00 | Raspberry Pi | このブログの読者になる | 更新情報をチェックする