◆今日のゴール
RaspberryPiで光の明るさを計測します。
今回は、フォトレジスタ(Photoresistor)を使って計測をします。
◆必要なもの
- フォトレジスタ(Photoresistor)
- コンデンサ(10μF)
- 抵抗(10kΩ)
- ブレッドボードとジャンパーピン(あると便利)
コンデンサは電荷を蓄えたり・放出したりするものです。容量は、1μFから10μFくらいのものを使いましょう
今回は、10μFを使いました。
◆配線する
抵抗・フォトレジスタ・コンデンサに極性はありませんので、向きはどちらでも構いません。
下記のように接続します。
フォトレジスタの片側は、抵抗を挟んで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前後という値になりました。
この値は、コンデンサの値や、フォトレジスタの種類によって異なってきます。
この例では、コンデンサに蓄電される時間を便宜上利用しており、実際の「光度」を示す指標とは異なりますので、ご注意ください。