電子工作64 – 火災報知器の音を拾って睡眠中の人の頭部に風と光を強制的に当て起床を促す装置
概要
壁一枚で隣とつながる木造長屋住まい。隣の住人の時折発する奇声が気になり出し、いつしか耳栓をして押入れで寝る羽目になってしまった。寝てみると意外と快適なことが分かった。問題は火災が発生した時に部屋の中に設置してある煙検知式の火災報知器の警報音が聞こえない可能性があることである。そこで、報知器が作動した時の音をマイクで拾って押入れの上部に設置した小型の扇風機と白熱電球を間欠的に動かし、風と光を頭部に当て強制的に目覚めさせようという装置を製作することにした。なぜ風と光にしたかというと寝ている押入れも壁一枚で反対側の隣人の部屋とつながっていてブザー音などを発生させることは迷惑になるので極力避けたいからである。
製作にあたって考えていたこと:
1) 出来るだけ簡単な回路にする
2) プログラムも最低限必要な程度に短くする。
3) 安く仕上げる。
回路図
下図に示すように、火災報知器(Panasonic SH28455K)のスピーカーより火災時に発する警告音を1−3cm離れて設置したコンデンサマイク(C9767)で拾い、コンデンサ(1uF)、2個のトランジスタ(2SC1815)と4個の抵抗で構成された回路で増幅してSine波の上半分が連続したような波形を発生させる。それをCMOSのLogic I C TC4050(buffer)を通してPIC12F629で処理し易いような綺麗な矩形波の出力に変える。音声が検知されたら12F629からリレーSSR (Solid State Relay)を駆動する信号を一定時間(約10分)出す。この間扇風機と白熱電球が動作する。実際の動きは10秒ONになって1秒OFFになる間欠サイクルなので、ゆっくりではあるが光が点滅するのでより効果的であると思われる。システムの電源を入れると電源LED(赤)と点滅LEDが点灯する。音声が検知されるとSSRのLED(緑)が点灯し、点滅LEDは消え、扇風機と白熱電球が約10分間作動し、やがて停止する。再起動には電源SWを一度切ってまた入れるか、Reset SWを押す。点滅LEDが点灯して再び待機状態に入る。
完成した装置: マイクが最上部に見える
左図: 火災報知機のスピーカーの1−3cm上部にマイクを設置し、警報停止ボタンを押すと“正常です”と音声が出る。これで装置の動作を確認する。実際は“火事です”が出る。
右図: AC100V-USBアダプタで、システムの駆動に使う。また、別の同種のアダプタを小型USB扇風機を動かすために使う。
左はAC100V−95Wの小型電球(口金径17mm)、右がUSB5Vで動く小型扇風機(直径13.5cm)。これらを駆動して風と光を約50cm下の睡眠中の人間の頭部に当て強制的に目覚めさせる。
カバーを付けた装置と火災報知機を1枚のボードに組付け使用状態にセット。点滅LEDが装置の中で赤く光っている。
押入れの中の様子: 左の写真で上方に95Wの小型電球が、右の写真でUSB小型扇風機が見える。
パルスの波形
1) このパルスは火災報知機のテストボタン(警報停止ボタン)を押して“正常です”を発声させた時にLogic IC TC4050のPin3に入ってくるもので、Base Lineが0.6−0.7Vである。この電圧は12F629で処理する場合にLow(L)ではなくHigh(H)と読んでしまう可能性があるので都合が悪い。
2) このパルスは火災報知機のテストボタンを押して“正常です”を発声させた時にLogic IC TC4050のPin2から出力されるもので完全な矩形波になっている。この場合Base Lineが0Vである。この電圧は12F629で処理する場合に間違いなくLow(L)と見なされ、ほぼ5VのHigh(H)とあわせて大変処理し易い。つまり、TC4050が波形を整えるという大変重要な役割を果たしている。プログラムでは“L”から“H”になるのを待ち、“H”が検知されたら“H”状態がさらに50uS
(microsecond) 後も続いていれば、火災報知機からの音声が到着したと判断する。したがって幅の狭い波形のパルス(50uS以下)は検知されない。
プログラム
出来るだけ簡単にした。12F629のPin 2 (GP5)に“H”のパルスが到着するのを待ち続け(音声が入ってこないと入力は常に0V=“L”である)、“H”のパルスが到着し検知したら、50uS待ってもう一度それが“H”のレベルにあるかどうかをチェックし、Yesであったら幅広のHパルスだと判断してリレー(SSR)をONにして扇風機や電球を駆動する、Noの場合は“待ち続けるルーチン”の最初に戻って永遠に待ち続ける。
後日(2013.5.20)、リレー(SSR)をONにして扇風機や電球を約10分間駆動した後停止状態に入るこれまでのプログラム(SoundSW629.bas)を改良し、10分間駆動した後再びマイクからの音声入力の待機状態に戻るようにした(SoundSW629m.bas)。
'********* Outline ************
'SoundSW629m.bas 2013.1.17 ―>2013.5.20
'Used with a fire alarm, which activates this SoundSW to wake up a sleeping
'person by blowing wind from a fan and strong light from a 95W-bulb.
'******** Pin connection *****************
'Pin 1: Vdd (5.0V)
'Pin 8: Vss (GND)
'Pin 7: GPIO.0: output - connected to SSR to drive a lamp and a fan.
'Pin 6: GPIO.1: - NC
'Pin 5: GPIO.2: output - connected to flash LED
'Pin 4: GPIO.3: input - Reset - connected to Vdd via R=10K
'Pin 3: GPIO.4: - NC
'Pin 2: GPIO 5: input - connected to the sound generator circuit
'********** Program ***************
Top: ‘この部分2013.5.20に追加 $$$$$$$$$
SSR VAR GPIO.0 'Driving SSR
SoundPlsIN var GPIO.5 'Read a change of SoundPulse from L to H
FlashLED var GPIO.2 'Driving flash led
CMCON=7 'Disable Comparators, GP0 & GP1 -> digital
TRISIO=%101000 'GPIO.3,5 - inputs, GPIO.0,2,4 - outputs
I var Byte '<256
SSR=0
FlashLED=0
HpeakSearch: 'Waiting the arrival of H-peak while checking H-peak twice ここからEndifまでがHパルスを待つルーチン
High FlashLED 'FlashLED -> ON
If SoundPlsIN=1 Then
Pauseus 50 'wait 50 us 50uS待つ
Else
Goto HpeakSearch
Endif
If SoundPlsIN=1 Then '2nd H-peak checking ここで再び(2回目)のHパルスかどうかをチェック
Goto SSRLabel ‘YesならSSRLabelに飛んでリレーをONに、NoならHpeakSearchに飛んで待ち続ける
Else
Goto HpeakSearch
Endif
SSRLabel: ‘リレー(SSR)を約10分ONにするルーチン: リレーを10秒間ONにした後、1秒間OFFにするルーチンを60回繰り返す
Low FlashLED 'FlashLED -> OFF
I=0
For I=1 to 60 'Nearly 10-minutes timer
High SSR 'SSR -> ON
Pause 10000 '10 sec
Low SSR 'SSR -> OFF 'Turn off SSR for 1 sec
Pause 1000 '1 sec
Next I
Pause 10000 '10 sec この部分2013.5.20に追加 $$$$$$$$$
Goto Top ‘Topへ戻る この部分2013.5.20に追加 $$$$$$$$$
End
'******** End of program********
'Note:
'melabs U2 Programmer's configurations:
'Oscillator - INTOSC; Watch-dog Timer - Enable; Power-up Timer - Disable
'MCLRpin function – Reset ; Brown-out Detect – Enable; Code - Not protected; Data EEPROM - Not protected.
結論·余談
1) ほぼ思い通りに仕上がり、動作することが分かった。
2) プログラムも30行ほどの短さで仕上がった。
3) 火災報知器のテスト音“正常です”という80dB前後の人工音声(テスターMASTECH MS8209 の騒音測定機能で測定)ではリレーがONなるが、キッチンタイマーなどのピーピー...のような間欠ブザー音(70−80dB)には反応しない。音のパルス幅が50uS以下と狭いためプログラムで検知されないためである。
4) TC4050 (buffer)の波形を整形する効果(LとHの曖昧なレベルを明確に0Vと5Vにする)は素晴らしい。
5) コンデンサマイクの先端面を指などで触ったり、アルミ側面を叩いたりすると誤動作してリレーがONになるので注意。実際の装置では、マイクを糸で引張って火災報知器のスピーカー上に中ずり状態に保持した。
6) DC5V出力のAC100V−USBアダブタを電源と小型USB扇風機の駆動に使うことで装置がコンパクトになった。ただ、アダプタの出力が最低1000mA以上ないと12F629システムの動作が不安定になり(電源SWを入れた時に点滅LEDの代わりにリレーSSR駆動表示の緑のLED(G)が点灯する -- 誤動作)、また扇風機は十分な風量が出ないことが分かった。アダプタの選択が重要!
7) オシロを使って波形を調べプログラムを作成すれば、いろんな入力音声(例えばブザー音)を選択的に拾えられそうである。
8) 今回の材料費2500円位(扇風機と電球などは含まない)。AC-USBアダプタが1個600円と高かった。
9) とにかくこの装置の設置で、ジジイも今まで通り耳栓して押入れで安心して眠れる! ちょっと現代版落語の上の話のような気もしないではないが。
10) 寝る前に、装置のマイクが火災報知器のスピーカーの1−3cm上部に位置していること、さらに点滅LEDが動作していることを確認する。2日に1回は火災報知器のテストボタンを押して扇風機と白熱電球が実際に動作するかどうかをテストすると確実。最後に点滅LEDが実際に点滅していることを確認して寝床に入る。 Have a good sleeeep !
11) 2013.5.20にプログラムの一部を改良し、10分間扇風機や電球を駆動した後再び音声入力の待機状態に戻るようにした(上記プログラム中で3箇所、“2013.5.20に追加 $$$$$$$$$”で表示)。