電子工作52 – 人感センサライト実用機の製作

 

概要

先日友人からトイレを使用中の時だけ電球が点灯し、使用していない時は消灯するような装置が出来ないかという問い合わせがあった。そこで要望に応えるべく前述の電子工作35を参考にしてAC100Vで動作する実用型人感センサライトを製作することにした。

注意: 危険なので製作は自分の責任で行うこと

 

製作にあたって;

1)     出来るだけ簡単な構造にする。

2)     安全性に最大限の注意を払う。

3)     動作が確実であること。

 

回路図と動作原理

  回路図を下に示す。人感センサとしてパナソニック電工のMPモーションセンサを使った。事前に安価なRE-210を使った回路(電子工作36)を再度組上げ試してみたが複雑で不安定であったので、高価ではあった結局前者を使用することにした。人体を検知している時間を選択する反応時間と、電球の点灯時間を選択する2つの要素だけ取込むようにしたのでコントローラーには最も簡単なPICの1つである12F629を使った。

 )

 

<<主要部品の詳細>>

1)      PIC 12F629

2)     集電型MPモーションセンサ AMN3111(黒、パナソニック電工) (¥1030 マルカ電機工業―秋葉原)

3)     SSR(Solid State Relay) D2W202F 2A240VAC (¥250 秋月)

4)     超小型ACアダプタ DC5V 1.0A (¥600 秋月)

5)     アルミケース 60X100X130mm (¥450)

 

人感センサの全体図: 左が蛍光灯電球、真ん中が制御部、右がACアダプタ

右手を上にして吊るして使用する

 

制御部の内部:、12F629,その右手がSSRとフューズ

 

                                             左が電球、黒いのがモーションセンサ、LEDはセンサが検知すると光る

 

結果&コメント

                   

1)    最適光源として蛍光灯電球を選んだ理由: MPモーションセンサのすぐ前で点灯していてもその人感検知能に影響を与えなかった。白熱電球、電気ヒータなど遠赤外線を出すものは近くにある場合時として誤動作(電球が消灯しない)を起こした。白熱電球を使う場合はMPモーションセンサの設置位置を直接電球の光を受けない場所、例えば、アルミボックスの側面などに移動する。ただ、蛍光灯電球は十分明るくなるまで1分以上かかる。

2)    良く出来たセンサで、トイレでの実験でもドアを開けるとすぐ点灯し中に入っている間は消灯することはなかった。

3)    LED電球と組合せで超エコを図ろうとしたが、世の中そう旨くはいかなかった。LED電球を使うと0.5秒位の間隔で強目の光を放って点滅した。壊れるような症状に見えたので即中止。このLED電球(KEIAN60W相当、秋葉原で¥980で入手)の箱には人感センサには使えないと書いてあった。解決策: SSRをメカニカルリレーに変えればOKだろう。ただし、耐久性のありそうなDC5Vリレーはあまり見かけない。

4)    総材料費はちょっと高めの3000円ほど。市販品を買った方が安いかも?

 

プログラム

  このプログラムの中で最も重要な部分は、検知される人間が居る間は電球を途中で消灯させることなく点灯し続けるようにすることだった。 例えば、以下のルーチンでは120秒間だけ電球をONにするが、その間にIf SensIn=1 Then LongTimeでMPモーションセンサからの入力をチェックし、もし、入力があれば(人が居れば)LongTimeに戻って最初から120秒間だけ電球をONにするルーチンを繰り返す。もし、入力がなければ電球をOFFにしてプログラムの最初に戻る。したがって、MPモーションセンサが何も検知しなくなってから(人が居なくなってから)常に120秒間は電球が点灯し続けることが出来る

 

LongTime:

t=0

High SSR

For t=1 to 120 '120 sec

pause 1000    '1 sec

If SensIn=1 Then LongTime

Next t

Low SSR

Goto LightupLoop

 

'*************** Outline **********************

'MotionSens629CPrac.bas  2011.1.10

'This is for a practical model.

'12F629 based, AC adaptor of DC5V output

'******** Pin connection *****************

'Pin 1: Vdd (5.0V)

'Pin 8: Vss (GND)

'Pin 6: GPIO.1: input - connected to Motion Sensor and LED (red)                       

'Pin 3: GPIO.4: output - connected to SSR and LED (red)

'Pin 2: GPIO 5: input - connected to SW which leads to Vdd or GND via R=100K  Lightup Time

'Pin 4: GPIO.3: input - connected to Vdd via R=10K

'Pin 7: GPIO.0: input - connected to SW which leads to Vdd or GND via R=100K  Wait Time

 

'********** Program ***************

SSR    VAR     GPIO.4  'LEDs on GPIO.4  SSR=Solid State Relay

LupTimeSW var  GPIO.5  'Read H(Vdd Long time) or L(0V Short time) 点灯時間を選択するSWからの入力

WaitTimeSW var GPIO.0  'Read H(Vdd X-sec wait) or L(0V Instantly)  反応時間を選択するSWからの入力

SensIn var     GPIO.1  'Input from Sensor MPモーションセンサからの入力

AddH var byte        'AddH = No. of 'H' pulse detected in reading SensIn

CMCON=7             'Disable Comparators, GP0 & GP1 -> digital

TRISIO=%101011       'GPIO.1, LupTimeSW & WaitTimeSW read - inputs

t var byte            'Counter

 

LightupLoop:

SSR=0

 

If WaitTimeSW=0 Then Instantly   ‘反応時間を選択するSWからの入力をチェックする

If WaitTimeSW=1 Then Xsecwait

 

Instantly:  ‘人体にすぐ反応する場合のルーチン

AddH=0         'AddH = No. of 'H' pulse detected in reading SensIn

If SensIn=1 Then  'Read SensIn MPモーションセンサからの入力を読込む ‘H’パルスを読む

AddH=AddH+1  ‘’H‘の数を積算する

Endif

Pause 100  '0.1 sec 0.1秒待つ

If SensIn=1 Then ‘MPモーションセンサからの入力を読込む

AddH=AddH+1

Endif

Pause 100  '0.1 sec

If AddH = 2 Then '2 times out of 2 times MPモーションセンサからの入力(H)を2回読んで、2回とも‘H’ならLightupへ飛ぶ

Goto Lightup

Endif

Goto LightupLoop

 

Xsecwait:    ‘人体をセンサが0.5秒毎に10回(5秒間)検知して、その内7回かそれ以上の回数が’H’なら反応する場合のルーチン

AddH=0         'AddH = No. of 'H' pulse detected in reading SensIn

If SensIn=1 Then  'Read SensIn

AddH=AddH+1  ‘’H‘の数を積算する

Endif

Pause 500  '0.5 sec 0.5秒待つ

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

 

If AddH >= 7 Then '7 times out of 10 times 10回検知して、その内7回かそれ以上の回数が’H’ならLightupへ飛ぶ

Goto Lightup

Endif

Goto LightupLoop

 

Lightup:  

If LupTimeSW=0 Then ShortTime  ‘点灯時間を選択するSWからの入力をチェックする

If LupTimeSW=1 Then LongTime

 

ShortTime: ‘センサが最後に人体を検知後30秒間電球を点灯させるルーチン

t=0

High SSR  ‘SSR−>ON

For t=1 to 30 '30 sec  1秒毎に30秒間数える

Pause 1000    '1 sec

If SensIn=1 Then ShortTime ‘センサ入力をチェックし、もし、1(’H‘)ならShortTimeへ、もし、0(’L‘)なら Next t へ、そして30回に達したら‘SSR−>OFFにしてLightupLoopへ飛ぶ

Next t

Low SSR  ‘SSR−>OFF

Goto LightupLoop

 

LongTime: ‘センサが最後に人体を検知後120秒間(2分間)電球を点灯させるルーチン

t=0

High SSR

For t=1 to 120 '120 sec

pause 1000    '1 sec

If SensIn=1 Then LongTime

Next t

Low SSR

Goto LightupLoop

'********** End of program ***************

'Note:                                                                                             

   'melabs U2 Programmer's configurations 12F629

'FOSC – INTOSC; Watch0dog Timer - Enable; Power-up Timer - Disable

       'MCLR – Input Pin; Brown-out Detect - Enable; Code – Not Protected; Data EEPROM – Not Protected

 

LED電球も使えるメカニカルリレー式人感センサライト実用機の製作(2011.1.21)

  上述のSSRを使った人感センサライトではLED電球が使えなかった。そこで、SSRをメカニカルリレー(OMRON G5LE-1,5VDC)に換えることにした。リレーの寿命が問題になるが、メーカーの説明書によると電気的寿命は4−10万回を保証しているようなので、1日30回開閉したとして5年以上は持つ計算になる。下の回路図にも示したように、今回は昼夜ともに動作するモードと夜のみ動作するモードを選択できるスイッチ(SW3)を導入した。結果は上々でLED電球を含めすべての種類の電球が使えるようになった

 

                                            右手に装着してあるのがLED電球(KEIAN 60W相当)である

 

プログラム

  今回は、昼夜ともに動作するモードと夜のみ動作するモードを選択できるスイッチ(SW3)を導入したので、上記のプログラム'MotionSens629CPrac.basをわずかに変えた。すなわち以下の1行を加えた。

if DayorNight=0 Then LightupLoop

 

'*************** Outline **********************

'MotionSens629CPracMR.bas  2011.1.19 MR−Mechanical Relay

'This is for a practical model.

'12F629 based, AC adaptor of DC5V output

'Mechanical relay introduced for LED lamp

'Day & night SW introduced

'******** Pin connection *****************

'Pin 1: Vdd (5.0V)

'Pin 8: Vss (GND)

'Pin 6: GPIO.1: input - connected to Motion Sensor and LED (red)                       

'Pin 3: GPIO.4: output - connected to SSR and LED (red)

'Pin 2: GPIO 5: input - connected to SW which leads to Vdd or GND via R=100K  Lightup Time

'Pin 4: GPIO.3: input - connected to Vdd via R=10K

'Pin 7: GPIO.0: input - connected to SW which leads to Vdd or GND via R=100K  Wait Time

'Pin 5: GPIO.2: input - connected to CdS SW3 which selects Day&Night or Night Only operation 新たに導入

 

'********** Program ***************

SSR    VAR     GPIO.4  'LEDs on GPIO.4

LupTimeSW var  GPIO.5  'Read H(Vdd Long time) or L(0V Short time)

WaitTimeSW var GPIO.0  'Read H(Vdd X-sec wait) or L(0V Instantly)

SensIn var     GPIO.1  'Input from Sensor

DayorNight var  GPIO.2  'Read CdS-SW - H (day&night) or variable (night only)-CdS input

AddH var byte       'AddH = No. of 'H' pulse detected in reading SensIn

CMCON=7             'Disable Comparators, GP0 & GP1 -> digital

TRISIO=%101111      'GPIO.1, LupTimeSW & WaitTimeSW read – inputs 少し変更

t var byte          'Counter新たに導入

 

LightupLoop:

SSR=0

if DayorNight=0 Then LightupLoop  'Day or Night SW3 check ここでSW3(GP0)をチェックー新たに導入

 

If WaitTimeSW=0 Then Instantly

If WaitTimeSW=1 Then Xsecwait

 

Instantly:

AddH=0         'AddH = No. of 'H' pulse detected in reading SensIn

If SensIn=1 Then  'Read SensIn

AddH=AddH+1

Endif

Pause 100  '0.1 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 100  '0.1 sec

If AddH = 2 Then '2 times out of 2 times

Goto Lightup

Endif

Goto LightupLoop

 

Xsecwait:

AddH=0            'AddH = No. of 'H' pulse detected in reading SensIn

If SensIn=1 Then  'Read SensIn

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

 

If AddH >= 7 Then '7 times out of 10 times

Goto Lightup

Endif

Goto LightupLoop

 

Lightup:

If LupTimeSW=0 Then ShortTime

If LupTimeSW=1 Then LongTime

 

ShortTime:

t=0

High SSR

For t=1 to 30 '30 sec

Pause 1000    '1 sec

If SensIn=1 Then ShortTime

Next t

Low SSR

Goto LightupLoop

 

LongTime:

t=0

High SSR

For t=1 to 120 '120 sec

Pause 1000    '1 sec

If SensIn=1 Then LongTime

Next t

Low SSR

Goto LightupLoop

'********** End of program ***************

'Note:

      'melabs U2 Programmer's configurations 12F629

'FOSC – INTOSC; Watch0dog Timer - Enable; Power-up Timer - Disable

              'MCLR – Input Pin; Brown-out Detect - Enable; Code – Not Protected; Data EEPROM – Not Protected

 

Building of Motion Sensor Light (English version of the above Electronics Project 52 in Japanese)

  One of my friends asked me if I could build an eco-friendly sensor light for a toilet in his home. So I decided to build one using a motion sensor and PIC12F629 for lighting a LED lamp, compact fluorescent lamp or incandescent lamp. The control program was compiled by using PICBasic Pro. The circuit diagram is shown below. A brief explanation on it is given as follows:

1)       Three selectable inputs into 12F629 from SW1, SW2 and SW3. Namely, SW1 selects Response Sensitivity, in which if L is selected the program turns on the light instantaneously when the sensor detects human-body movement but if H is selected, it turns on the light several seconds later after the detection of human-body movement. SW2 decides Lighting Time, in which if L is selected the lighting lamp is turned off 30 seconds later after the last detection of human-body movement by sensor but if H is selected the lighting lamp is turned off 120 seconds later after the last detection of human-body movement by the sensor. SW3 is Day&Night Select, in which if L is selected the lamp lights up only when the environment is dark (night) but if H is selected, it lights up day and night..

2)       Motion Sensor (MP motion sensor NaPiOn, AMN31111, made by Panasonic Denko, \1030) has a built-in amplifier, so when the sensor detects the movement of human body, its output changes from L to H. This change is easily picked up and processed by 12F629, controlling the ON/OFF of the relay or lamp through GP4.

3)       Mechanical relay was used to turn on the latest energy-saving LED lamp (60W equivalent using 5.5W made by Keian). Initially I tried to use a SSR (Solid State Relay) but it did not turn on the LED lamp properly. Later, I found that the instruction for the LED lamp said that it was not suited for use with a sensor light device.

.

 

Completed motion sensor light unit

Comments

1)       This Motion Sensor senses the far-infrared ray from various sources including electric heater or incandescent lamp. Therefore, when an incandescent lamp is used,, the sensor needs to be installed such a way that no direct light of the lamp is exposed to the sensor. Besides LED lamp, the compact fluorescent lamp that also consumes less electricity can be used satisfactorily.

2)       Total cost was about \3000.

 

Program

'*************** Outline **********************

'MotionSens629CPracMR.bas  2011.1.19

'This is for a practical model.

'12F629 based, AC adaptor of DC5V output

'Mechanical relay introduced for LED lamp

'Day & night SW introduced

'******** Pin connection *****************

'Pin 1: Vdd (5.0V)

'Pin 8: Vss (GND)

'Pin 6: GPIO.1: input - connected to Motion Sensor and LED (red)                       

'Pin 3: GPIO.4: output - connected to SSR and LED (red)

'Pin 2: GPIO 5: input - connected to SW which leads to Vdd or GND via R=100K  Lightup Time

'Pin 4: GPIO.3: input - connected to Vdd via R=10K

'Pin 7: GPIO.0: input - connected to SW which leads to Vdd or GND via R=100K  Wait Time

'Pin 5: GPIO.2: input - connected to CdS SW3 which selects Day&Night or Night Only operation

 

'********** Program ***************

SSR    VAR     GPIO.4  'LEDs on GPIO.4

LupTimeSW var  GPIO.5  'Read H(Vdd Long time) or L(0V Short time)

WaitTimeSW var GPIO.0  'Read H(Vdd X-sec wait) or L(0V Instantly)

SensIn var     GPIO.1  'Input from Sensor

DayorNight var  GPIO.2  'Read CdS-SW - H (day&night) or variable (night only)-CdS input

AddH var byte       'AddH = No. of 'H' pulse detected in reading SensIn

CMCON=7             'Disable Comparators, GP0 & GP1 -> digital

TRISIO=%101111      'GPIO.1, LupTimeSW & WaitTimeSW read - inputs

t var byte          'Counter

 

LightupLoop:

SSR=0

if DayorNight=0 then LightupLoop  'Day or Night SW3 input check

 

If WaitTimeSW=0 Then Instantly  Response Sensitivity SW1 input check

If WaitTimeSW=1 Then Xsecwait

 

Instantly:

AddH=0         'AddH = No. of 'H' pulse detected in reading SensIn - Sensor

If SensIn=1 Then  'Read SensIn - Sensor

AddH=AddH+1

Endif

Pause 100  '0.1 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 100  '0.1 sec

If AddH = 2 Then '2 times out of 2 times

Goto Lightup

Endif

Goto LightupLoop

 

Xsecwait:          ‘Wait several seconds routine

AddH=0            'AddH = No. of 'H' pulse detected in reading SensIn - Sensor

If SensIn=1 Then  'Read SensIn - Sensor

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

If SensIn=1 Then

AddH=AddH+1

Endif

Pause 500  '0.5 sec

 

If AddH >= 7 Then '7 times out of 10 times

Goto Lightup

Endif

Goto LightupLoop

 

Lightup:

If LupTimeSW=0 Then ShortTime  Day&Night Select SW3 input check

If LupTimeSW=1 Then LongTime

 

ShortTime: ’30 seconds light-up routine after the last sensor input

t=0

High SSR

For t=1 to 30 '30 sec counting

Pause 1000    '1 sec

If SensIn=1 Then ShortTime ‘Checking the last sensor input. If yes, count again from the beginning. – important!!

Next t

Low SSR

Goto LightupLoop

 

LongTime: ‘’120 seconds light-up routine after the last sensor input

t=0

High SSR

For t=1 to 120 '120 sec

Pause 1000    '1 sec

If SensIn=1 Then LongTime

Next t

Low SSR

Goto LightupLoop

'********** End of program ***************

'Note:

'melabs U2 Programmer's configurations 12F629

'FOSC – INTOSC; Watch0dog Timer - Enable; Power-up Timer – Disable

'MCLR – Input Pin; Brown-out Detect - Enable; Code – Not Protected; Data EEPROM – Not Protected

 

Menu Pageへ戻る

Topへ戻る