電子工作 26 しゃべる火災報知器の製作

概要

前の電子工作25の味気無いブザーによる警報音の代わりに、今回は音声(しゃべる)機能を付けてみようということになった。 たまたま、秋月電子のHPで60秒間録音/再生できる¥380の音声チップAPR9600 (Aplus Integrated Circuits Inc.製) を見つけたのがきっかけである。

 

APR9600とシステム回路の製作

  インターネット上では、このチップを使った、アマによる製作例など、まだ殆んど見当らない。そこで、まずデータシートを頼りにテストボード上で組上げ、何とか、自分の声を録音し、再生できることを確かめた。 ただ、音声が小さく、実用目的にはアンプで増幅する必要があり、音質もイマイチであることが分かった。

 

マニュアルから、APR9600について以下のようなことが分かった。

1) このチップには、ランダムアクセスモード(他にテープモードあり)で、最大8個のメッセージを録音/再生できるが、今回は、4メッセージを録音/再生する設定を選んだ。 したがって、各メッセージ当たりの録音/再生時間は、最長の60秒間設定(あまり音質は良くない)では、60/4=15秒ということになる。

2) 録音/再生時間は、チップのOscRに接続する抵抗の値によって変わり、84Kで60秒、38Kで40秒、24Kで32秒である。そして、時間が短いほど、高音質である。今回は、47Kの抵抗を使った。 実際に録音/再生時間を測ってみたら、約11秒/メッセージであった。

3)     ピン19 (AGC) に接続される抵抗の値も録音される音質に関係するらしく、英語圏の人々には220Kが最適だという、ここでも、この値を選択した。

 

  ランダムアクセスモード(/M1-/M4の各キーをGNDに落とすと、対応するメッセージが、そのつど先頭から再生される)で、

1) 4メッセージ設定にするには、ピン25と24を、それぞれMsel-1=1、Msel-2=0にする。 しかし、実際には、前者を0、後者を1と逆にしないと4メッセージ設定にはならなかった。理由は不明。 そして、4個のキーを接続した。

2) 録音するには、2-way SWをRec側に倒し、各キーを押して、/BusyのLEDが点灯し、/StrobeのLEDが点滅したら、マイクから音声を入れる。 録音時間が終わると、両LEDは消える。

3) 再生するには、2-way SWをPlay側に倒し、各キーを押す。 録音時間だけ再生される。 この間/BusyのLEDが点灯し、/StrobeのLEDは点滅する。

 

さて、前回製作した火災報知器を、いかにしてこの音声システムと組合るか。

火災報知器の12F675のGP5から接続していたブザーを除いて、その代わりにAPR9600のピン1(/M1)に接続した。そして、新たに、GP4をピン2(/M2)に接続した。これで、前者のピン1が、12F675からの信号でLowになると、メッセージ1が再生され、後者のピンがLowになると、メッセージ2が再生される。

 

 メッセージ1の録音内容(約11秒): “火事だ、火事だ、起きろ、逃げろ ….”

 メッセージ2の録音内容(約11秒): “輝度電圧が下がり過ぎ、0.5V以上に上げろ …”     とこんな具合。

 

新しく導入したBSch3Vを使って作成した回路図と、実験の様子を示す写真を下に示す。


     

   回路図で、火災報知器の煙感知のための光源に高輝度LEDが使われているが、観察の結果、輝度が徐々に低下することが分かった。 したがって、GP0に入る電圧も低下する。そこで、約0.5V以下に下がるとメッセージ2が発生し、輝度調整を促すようにした。 写真では、左に火災報知器、中央にテストボード、それに、右にアンプ入りスピーカが見える。 テストボードの中央部には28ピンのAPR9600が、その左手に4個のプッシュボタン式のキーが見える。マイクは極性のあるエレクトレットコンデンサ式を使用。 5V電源は、ACアダプタ+7805でつくりだしている。 このアンプ入りスピーカ(¥650)につなぐと、こもり音だが、十分聞き取れる程度の音質で、音量も大きくできる。  

 

プログラム

   APR9600チップを載せたテストボード上で、キーを押して録音/再生を繰返すうち、火災報知器のGP5とGP4からの信号を使って、/M1と/M2をLowにする場合、先ず、0.3秒間程度のLowパルスをトリガー信号として/M1や/M2に送って録音内容を再生させ、その後Highの状態を約13秒間(1メッセージの再生時間約11秒+2秒)保つと、うまい具合に再生動作をすることを見出した。 このことを以下のプログラムの中で行っている。 煙の濃度や温度が設定値(>1.0V)以上、また、輝度レベルが設定値(<0.5V)以下であり続ける限り、各メッセージは15.5秒間(実測値)毎に繰返し発生し続ける(最下部の図参照)。

 

'************ プログラミング備忘録 *************

‘AudFAL.bas     2007.11.1  for audio fire alarm project  Succeeded!

‘Based on FAL675c.bas 2007.9.7

 

'*************** プログラム本体 ******************

ANSEL=%00010011  'GP0 and GP1 pins -> analog, Fosc/8

TRISIO=%001011    'GP0, GP1 and GP3 -> Inputs, others Outputs

CMCON=7          'turns off comparator function

 

Define ADC_BITS 10     '10-bit ADC used

Define ADC_CLOCK 3     'Internal clock used

Define ADC_SAMPLEUS 50 'Sample timing

 

Vin0 var word       'Vin0 - smoke voltage input storage

Vin1 var word       'Vin1 - temp. voltage input storage

 

ADCloop: 

'Smoke sensing (煙検知ルーチン)

ADCON0=%10000011

Pause 20

GPIO.5=1      'sets ToM1pin to High (to drive M1pin in APR9600 board)

GPIO.4=1      'sets ToM2pin to High (to drive M2pin in APR9600 board)

Vin0=0

Pause 20

ADCIN 0, Vin0  'reads ADC ch-0 and save in Vin0

                 '(range 0-1024)

Pause 50      'allows time for ADC conversion

If Vin0>200 then     '200 equal to about 1.0V analog input V: 煙が検知された!

Goto ToM1pin       'To drive M1pin in APR9600 board(V=5.0 x 200/1024=0.98V)

Endif

IF Vin0<100 then    '100 equal to about 0.5V analog input V: 輝度レベルが低すぎる!

Goto ToM2pin       'Drive M2pin in APR9600 board

Endif

 

'Temperature sensing (温度検知ルーチン)

ADCON0=%10000111  '=135(decimal)

Pause 20

GPIO.5=1       'turns on ToM1pin to High

Vin1=0

Pause 20

ADCIN 1, Vin1  'reads ADC ch-1 and save in Vin1

                 '(range 0-1024)

Pause 50      'allows time for ADC conversion

If Vin1>200 then   '200 equal to about 1.0V analog input V: 高い温度が検知された!

Goto ToM1pin     '(V=5.0 x 200/1024=0.98V)

Endif                    

Goto ADCloop

 

ToM1pin:      'lowers M1pin to activate M1 message (煙、または、高い温度が検知された)

Low GPIO.5

Pause 300    '0.3 sec - triggering pulse for /M1pin キーセッテング

High GPIO.5

Pause 13000  '13 sec - (1 message=11 sec + 2 sec in 4-fixed message mode) キーセッテング

Goto ADCloop

                    

ToM2pin:      'lowers M2pin to activate M2 message (輝度レベルが低すぎる)

Low GPIO.4

Pause 300    '0.3 sec

High GPIO.4

Pause 13000  '13 sec

Goto ADCloop

 

End

'********** プログラムの終わり ***************

'Note:

   'AKI Programmer's configurations:

   'FOSC- INTOSC (GP4:I/O); WDTE - Enable; PWRTE - Enable

'MCLR -MCLRPin; BODEN - Enable; CD - Disable; CDP – Disable

 

余談

何とか火災報知器にしゃべらす機能を付けることが出来た。 前から気になっていた音声ICの使い方や、PICとのインターフェイスの仕方が曲がりなりにも理解できたのは収穫であった。今回製作したシステムでは、まだ2個の各11秒間のメッセージ枠が残っているので、いろいろな目的に使えそう。 上記回路より分かるように、APR9600回りの配線も結構大変なので、キット(¥1000)を購入して、改造するのも良いかも知れない。

後で分かったこと’07.11.6)

火災報知器側からの信号で、音声のメッセージ1や2が再生されている時、/Busy(Pin10)のLEDは点灯し続け、下図のように、/Strobe (Pin22)のLEDは約0.5秒の間隔で点滅を続ける。そして、4.66+10.93=15.59秒毎に再生が繰返される。マイコンで制御する場合、これらの情報が使えそうだ。例えば、/BusyのLEDが点灯中は再生中と判断するとか、また、/StrobeのLEDの点滅回数をカウントして、ある回数に達したら、再生が終了したと判断するとか。余っている12F675のGP3とPicBasic ProのコマンドCountの組合せが、それらの目的に使える可能性あり。

 

メッセージ再生中に、繰返し/Strobe (Pin22)から出る信号


 


Menu Pageへ戻る    

Topへ戻る