概要

フォトレジスタ (photoresistor) とは、入射する光の強度が増加すると電気抵抗が低下する電子部品である。 光依存性抵抗 (light-dependent resistor, LDR) や 光導電体 (photoconductor) 、フォトセル(photocell)とも呼ばれる。
フォトレジスタは、高抵抗の半導体でできている。 充分に周波数の高い光が素子に入ると、半導体に吸収された光子のエネルギーにより束縛電子が伝導帯に飛び込む。 結果として生じる自由電子(と対になるホール)によって電流が流れ、電気抵抗が低くなる。
光電素子には、内因性・外因性のどちらもある。 内因性の素子では価電子帯にだけ存在する電子がバンドギャップを越えなければならず、その励起に相当する以上のエネルギーを持つ光子が必要になる。 外因性の素子には伝導帯に近い基底状態エネルギーを持つ不純物が加えられているので電子が遠くまで飛ばなくてもよく、エネルギーの低い(波長が長い、周波数が低い)光子でも充分に機能する。
半導体に真性半導体を用いるイントリンシック形と、n形やp形半導体を用いるエキシトリンシック形がある。 エキシトリンシック形は、エネルギーギャップよりも小さいエネルギーの光で電子を励起できるので、より長い波長領域に感度があるという特徴がある。フォトレジスタにはいろいろなタイプがある。 カメラの露出計、時計付きラジオ、セキュリティ警報器や街灯などの身近な製品では、安価な CdS セルが使われていた。 コンプレッサー等のエフェクターやアナログシンセサイザーにおいて、LEDと組み合わせてアナログフォトカプラとして使われている。 一方で、赤外線天文学や赤外分光法では、遠赤外線の検出に適している Ge:Cu 光導電体が使われている。このプロジェクトでは、
ラズベリー・パイとフォトレジスタ、リレーなどを接続して、街灯の自動制御する。周囲環境の光強度が弱い時、リレークロージャして、LED点灯する。周囲環境の光強度が強い時、リレーディスコネクトして、LED消灯する。

DSC_5460

必要なパッツ

LACC2006ADx3
フォトレジスタ x1
PI
Pi3ボード x1
LACC2006AD-24
LED x1
BMP180
リレー x1
LACC2006AD-26
10KΩ抵抗 x1
LACC2006AD-26
1KΩ抵抗 x1
LACC2006AD-31
ジャンプワイヤー若干
LACC2006AD-12
ブレッドボード x1
MCP3008
A/Dコンバータ(MCP2008やMCP3204)x1

ラズパイについて

Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
日本ではラズパイとも呼ばれる。Raspberry Pi はデジタル入出力はできるのが、 アナログ入力ができない。ラズベリーパイにアナログ電圧を入力する
のため、A/Dコンバータが必要このプロジェクトではMCP3008又は MCP3204を使用して、フォトレジスタからの
電圧信号をデジタルに変更して、ラズパイに入力して、ラズパイをデジタル信号によって、リレーのクロージャ又はディスコネクトを制御する。

配線図(MCP3008を使用の場合):

Untitled Sketch_MCP3008

配線図(MCP3204を使用の場合):

Untitled Sketch_MCP32041

ソフトウエアのインストール

(1)ラズパイのPythonのインストールと設定が必要。まず、PythonとGPIOライブラリをインストールする:

1)以下のコマンドでソースを更新する:

 

sudo apt-get update

 

2)以下のコマンドでpythonをインストールする:

 

sudo apt-get install python-dev

 

3)以下のコマンドでpython-pip(python-pipはpython管理用ツール)をインストールする:

 

sudo apt-get install python-pip

 

4)以下のコマンドでrpi.gpioをインストール(pipツール使用)する:

 

sudo pip install rpi.gpio

 

(2)以下のコマンドで正確にインストールかどうか確認する:

 

sudo python

 

图片4

(3)コードの編集

1)以下のコマンドで任意のパス(例/home/pi/)でraspi-adc-photoファイルを新規作成する:

sudo touch  raspi-adc-photo.py

 

2)以下のコマンド(nanoエディターを使用)を作動して、raspi-adc-photo.pyファイルを開けて、編集する:

 

sudo nano  raspi-adc-photo.py

 

3)以下の内容をraspi-adc-photo.pyファイルにコーピーする

import time      #importing the time module
import os     #importing the os module
import RPi.GPIO as GPIO       #importing the RPi.GPIO module
GPIO.cleanup()      #clean up at the end of your script
GPIO.setmode(GPIO.BCM)    #to specify whilch pin numbering system

#read SPI data from MCP3008(or MCP3204) chip,8 possible adc's (0 thru 7)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
        if ((adcnum > 7) or (adcnum < 0)):
                return -1
        GPIO.output(cspin, True)  

        GPIO.output(clockpin, False)  # start clock low
        GPIO.output(cspin, False)     # bring CS low

        commandout = adcnum
        commandout |= 0x18  # start bit + single-ended bit
        commandout <<= 3    # we only need to send 5 bits here
        for i in range(5):
                if (commandout & 0x80):
                        GPIO.output(mosipin, True)
                else:
                        GPIO.output(mosipin, False)
                commandout <<= 1
                GPIO.output(clockpin, True)
                GPIO.output(clockpin, False)

        adcout = 0
        # read in one empty bit, one null bit and 10 ADC bits
        for i in range(12):
                GPIO.output(clockpin, True)
                GPIO.output(clockpin, False)
                adcout <<= 1
                if (GPIO.input(misopin)):
                        adcout |= 0x1

        GPIO.output(cspin, True)
        
        adcout >>= 1       # first bit is 'null' so drop it
        return adcout

# change these as desired - they're the pins connected from the
# SPI port on the ADC to the Cobbler
SPICLK = 11
SPIMISO = 9
SPIMOSI = 10
SPICS = 8

# set up the SPI interface pins
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)

#relay port to the cobbler
Relay_pin = 26

#set up the relay port
GPIO.setup(Relay_pin,GPIO.OUT)
 
#disable the gpio warning information
GPIO.setwarnings(False)

# photoresistor connected to adc #0
photo_ch = 0;

#last_read = 0       # this keeps track of the last potentiometer value
#tolerance = 5       # to keep from being jittery we'll only change
                    # volume when the pot has moved more than 5 'counts'
print"______________________________________________________________________"
while True:
  photo_value = readadc(photo_ch, SPICLK, SPIMOSI, SPIMISO, SPICS)
  if(photo_value<=300):
    print "It`s dark,turn on the light"
    GPIO.output(Relay_pin,True)
  else:
    print "dawn,turn off the light"
    GPIO.output(Relay_pin,False)

  print "photo_value=", photo_value
  time.sleep(0.5)

#GPIO.cleanup()

4)キーボードのCtrl+Xを押して、Yを入力して、raspi-adc-photo.pyファイルを保存する

2017-03-14-102304_1824x984_scrot

(5)以下のコマンドを作動して、結果を確認する

 

sudo python  ./raspi-adc-photo.py

 

2017-03-14-102441_1824x984_scrot

手でセンサーを遮ると、リレーがクロージャして、LEDを点灯する。懐中電灯などセンサーを照れると、リレーがディスコネクトして、LED消灯する。