電子工作44 – 超音波を使ったゴキブリ追っ払い器の試作

 

概要

   夏場になって長屋の流し台周りで黒光りしたゴキブリが頻繁に目にするようになった。 超音波と関わったついでに、それを応用したゴキブリを排除する装置を製作してみることにした。Web上で検索してみると、超音波はゴキブリに効果がないとか、あるとかと意見が分かれている。どっちかというと効果がないという意見が多い。とにかく試してみよう。

 

   製作時に考えていたことなど;

1)     ゴキブリの嫌う周波数は20−25KHzらしい。

2)     ネズミや害虫の排除も考え、20、25、30、それに50KHzの4つの周波数の超短波を1.5秒おきに繰り返し発生させる。

3)     超音波スピーカー(超音波センサ AT40-10PB)を使用したが、その中心周波数は40±KHzなので20−50KHz中の他の領域で高周波を出すかどうか不明。

4)     とにかく設置して効果のほどを試してみたい。効果がなければまた別の策を取ろう。

 

回路

  電源にACアダプタを使い、LM317でDC10Vをつくって超音波スピーカーを駆動し、さらに7805でDC5Vを作り出し12F683を駆動している。出力を上げようと超音波スピーカーを2個使用した。一般見られるスピーカーの前に0.1−10mF位のコンデンサを直列に入れる回路(直流をカットしスピーカーに約倍の電圧が加わるという)を実際に組み出力を測ったみたが本回路と余り違いはなかった。

 

超音波スピーカー(センサ): AT40-10PB 中心周波数 40±KHz

 

実験ボード: 右上部に2個の超音波スピーカーが見える。これをACアダプタにつなぎ流し台上に吊るす

 

結果など

1)     2個の超音波スピーカーのすぐ上に可聴音用の簡易騒音計(MASTECH製 MS8209テスタの1つの機能)のマイク部をつけて測定したみた。確かに超音波が出ているようで数値が45−75dB位の間で変化した。耳では勿論何も聞こえない。オシロでは後述のプログラム通りにスピーカーに周波数20−50KHzのの4つの信号が印加されていることが確認されている。

2)     下の5枚の信号波形図の中の3、4,5枚目の図で分かるようにマイクからの出力は非常に小さく、はたしてゴキブリを追い払うの効果あるかどうか不明。

3)     超音波域での高出力、例えば可聴域で使われている防犯ブザー位の出力が欲しい。どうすれば可能なのか考えてみたい。

4)     とにかく違った周波数の超音波(高周波)が短いプログラムでほぼ自由に出せるようになったのが収穫。

 

信号波形

   後述するプログラムによって発生する4つの異なる周波数の信号を、超音波スピーカーへの+入力ポイントでオシロで捉えたものである。50、30、25、20KHzが連続して発生していることが分かる。1連続区間は約6秒である(1.5 sec x 4=6sec)。

 

            上の20KHzの部分を拡大したものである。この例では1波長が46msなので約22KHz(1,000,000/46=21.7)となる。

 

    これは今回のゴキブリ追っ払い器の超音波スピーカー(AT40-10PB)から発生する20−50KHzの信号を電子工作43超音波信号を受けて3個のLEDをON/OFFする回路のマイク(R40-16)で拾った時(スピーカーとマイク間距離1−2cm)に受信側で測定したものです。具体的には超音波信号を受けて3個のLEDをON/OFFする回路のポイント(A)でオシロで測定。この部分は波長が約20msの50KHの部分で、信号は30KHz、25KHzと弱くなり、20KHzではほぼ雑音に近くなった。

 

    これは超音波信号を受けて3個のLEDをON/OFFする回路のマイクをゴキブリ追っ払い器の超音波スピーカーに接触させた状態で、そのマイク端子の+側とGNDの間をオシロで測定したものである。微弱ではあるが確かにマイクに信号が拾われていることが分かる。比較的大きい50KHzの信号はスピーカーとマイクの中心周波数40KHzに近いので応答が良さそうなのは分かるが、20KHzの信号でまた少し大きくなる理由は分からない。

 

上の50KHzの部分をスケールを変えて別途測定したものである。この様に電圧幅がプラスとマイナス側合わせて200mV近くになることもある。

 

プログラム

  このプログラムはいたって簡単で、12F683のPWM機能とTimer2を利用して連続して次のことを行っているだけである。

1)     50KHzのDuty比がほぼ50%の方形波を1.5秒間12F683のGP2(ピン5)より発生させる。

2)     30KHzのDuty比がほぼ50%の方形波を1.5秒間より発生させる。

3)     25KHzのDuty比がほぼ50%の方形波を1.5秒間より発生させる。

4)     20KHzのDuty比がほぼ50%の方形波を1.5秒間より発生させる。 以上を永遠に繰り返す。

 

周波数と波形(Duty比)はPR2とCCPR1Lによって決まる。実験を通じて、ほぼDuty比50%の以下の4つの周波数を発生するような値を求めた。別表の周波数域13−19KHzの部分は参考までに測定した。

PR2値

CCPR1L値

実測周波数KHz

方形波の波幅us

19

11

50

20

32

13

30

32

39

16

25

40

45

17

20

46

 

50

19

19

50

55

20

18

56

60

22

16

62

65

24

15

66

70

27

13

76

 

'********* プログラム ************

'UltraSoundCockroach638.bas - 2010.6.22

'Generating 50, 30, 25 and 20 KHz PWM of nearly 50% duty ratio

'12F683 with internal clock 4MHz

'******** ピン接続 ************

'Pin 1: Vdd (5V)

'Pin 8: Vss (GND)

'Pin 4: GPIO.3: input - /MCLR (reset) via R=10K

'Pin 5: GPIO.2: output - to Tr driving UltraSound speaker

 

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

TRISIO=%001000 'all outputs except GPIO.0 & 3

CMCON0=7             'No comparator

VRCON=0              'A/D voltage reference disabled

T2CON=%00000100      'Timer2 ON + 1:1 prescale

 

Start:

CCP1CON=%00001100    'PWM mode selection =12 in decimal  以下の4行で50KHzの信号を1.5秒間発生させる

PR2=19               'Set PWM for 50 KHz (experimetally set)  この値で出力周波数を設定する

CCPR1L=11            'Set PWM for nearly 50% duty cycle   この値でDuty比が出来るだけ50%に近くなるようにする

Pause 1500           '1.5 sec

 

PR2=32               'Set PWM for 30 KHz (experimetally set)  以下の3行で30KHzの信号を1.5秒間発生させる

CCPR1L=13            'Set PWM for nearly 50% duty cycle

Pause 1500           '1.5 sec

 

PR2=39               'Set PWM for 25 KHz (experimetally set)  以下の3行で25KHzの信号を1.5秒間発生させる 

CCPR1L=16            'Set PWM for nearly 50% duty cycle  

Pause 1500           '1.5 sec

 

PR2=45               'Set PWM for 20 KHz (experimetally set)  以下の3行で20KHzの信号を1.5秒間発生させる

CCPR1L=17            'Set PWM for nearly 50% duty cycle

Pause 1500           '1.5 sec

Goto Start         ‘Continue forever

End

'******** プログラムの終了 ********

'Note:

   'melabs U2 Programmer's configurations 12F683:

   'FOSC – INTOSCIO; WDTE - Enable; Power-up Timer - Disable

   'MCLRpin – Reset ; BODEN - Enable; Internal External Switvh Over – Enable, Fail-Safe Clock Monitor – Enable, CD - Disable;Dtata EPPROM - Disable.

 

実験機の製作(2010.7.1)

  ゴキブリ追っ払い器の実験機を製作して実際にゴキブリの排除に効果があるかどうか試してみることにした。上述のものを以下の様に改良した。

1)     出力パワーが足りないようなので超音波スピーカー(AT40-10PB)の代わりにツイーター(ONKYO TW-537K 1.9KW Max 20V)を装着した。 これは高周波数域(20KHz以上?)までカバー出来るとされているスピーカーの一種で秋葉原(ラジオストア内のコイズミ無線)で特価500円で入手。古いものらしくインターネットで検索しても関連データはほとんど見つからなかった。

2)     プログラムではゴキブリが嫌がるとされる周波数域を含む15、20、25KHzの信号が出るようにした。

 

下に実験機のの写真と回路図を示す。一番下に直径5cmのツイーター(高周波数域スピーカー)が見える。

安全を考えボードの最上部右方にフューズを装着してある。そしてボード全体を流し台の上部から吊り下げて使う。

ツイーターの直ぐ前に入れた4.7K抵抗は最大限に出力を上げる役目(±V ® 幅10V)をするようで実験的に決めた。

 0

 

結果など

1)      ツイーターからツーまたはシーという高周波(超音波)がかすかに出ているのが聞き取れた。この様な音は前の超音波スピーカーでは検知出来なかった。もうちょっと明確にするかめに下のようなテスタの騒音計機能を使って測定してみることにした(一部既述した)。テスタ本体の上部右手に音の取り入れ口がある(この写真では見えない)。この取り入れ口の上1−2cmの位置にツイーターを対面させ測定すると15KHz波で99dB以上、20KHz波で85dB、25KHz波で80dB位の値が記録された(周波数発生のない時は53dB位)。騒音計は可聴音域を測るように出来ているので、可聴音の高域に相当する15KHzで最も高く出るのはうなずける。20KHzと25HKz波は多分この騒音計ではカバーしきれないのかも分からない。それとプログラムの中の動作の変わり目でカチ、カチという音が出る。理由は不明である。ただ深夜でもよそ様に迷惑になるような高さではない。

2)      なんでもゴキブリなどは信号の同じパターンの繰り返しにはじきに慣れてしまうので時々パターンを変える必要があるらしい。変えることはプログラムでいくらでも可能。

3)      実験機の効果をみて実用機を製作するつもり。とにかく得体の知れない部品やガジェットを求めて秋葉原を歩きまわるのは楽しい。

 

プログラム

  このプログラムでは15、20、25KHzの信号がこの順序に2秒間隔で出て、5秒間休みまた同じことを永久に繰り返す。

'********* プログラム ************

'UltraSoundCockroach638B.bas for testing purpose - 2010.6.28

'Generating 15, 20 and 25 KHz PWM of nearly 50% duty ratio

'12F683 with internal clock 4MHz

'******** ピン接続 ************

'Pin 1: Vdd (5V)

'Pin 8: Vss (GND)

'Pin 4: GPIO.3: input - /MCLR (reset) via R=10K

'Pin 5: GPIO.2: output - to Tr driving UltraSound speaker

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

TRISIO=%001000 'all outputs except GPIO.0 & 3

CMCON0=7             'No comparator

VRCON=0              'A/D voltage reference disabled

T2CON=%00000100      'Timer2 ON + 1:1 prescale

 

Start:        ‘サブルーチンを使って綺麗にまとめた

Gosub F15KHZ

Pause 2000

Gosub F20KHZ

Pause 2000

Gosub F25KHZ

Pause 2000

CCP1CON=0   ‘PWMの使用中止

Pause 5000

Goto Start

 

F15KHZ:

CCP1CON=%00001100    'PWM mode selection =12 in decimal 15KHzを発生させる

PR2=65               'Set PWM for 15 KHz (experimetally set)

CCPR1L=24            'Set PWM for nearly 50% duty cycle

Return

 

F20KHZ:

CCP1CON=%00001100    'PWM mode selection =12 in decimal   

PR2=45               'Set PWM for 20 KHz (experimetally set)  20KHzを発生させる

CCPR1L=17            'Set PWM for nearly 50% duty cycle

Return

 

F25KHZ:

CCP1CON=%00001100

PR2=39               'Set PWM for 25 KHz (experimetally set)  25KHzを発生させる

CCPR1L=16            'Set PWM for nearly 50% duty cycle

Return

'******** プログラムの終了 ********

'Note:

   'melabs U2 Programmer's configurations 12F683:

   'FOSC – INTOSCIO; WDTE - Enable; Power-up Timer - Disable

   'MCLRpin – Reset ; BODEN - Enable; Internal External Switvh Over – Enable, Fail-Safe Clock Monitor – Enable, CD - Disable;Dtata EPPROM - Disable.

 

改良したプログラム(2010.7.2)

 単調な信号パターンの繰り返しだとゴキブリが慣れてしまうということでちょっと変化をつけてみた。すなわち、3つの信号(周波数)パターンの発生順序とそれらの発生と停止時間ををいろいろと変えてみた。

'********* プログラム ************

'UltraSoundCockroach638C.bas  - 2010.7.2

'Generating combinations of 15, 20 and 25 KHz PWM of nearly 50% duty ratio

'12F683 with internal clock 4MHz

'******** ピン接続 ************

'Pin 1: Vdd (5V)

'Pin 8: Vss (GND)

'Pin 4: GPIO.3: input - /MCLR (reset) via R=10K

'Pin 5: GPIO.2: output - to Tr driving UltraSound speaker

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

TRISIO=%001000 'all outputs except GPIO.0 & 3

CMCON0=7             'No comparator

VRCON=0              'A/D voltage reference disabled

T2CON=%00000100      'Timer2 ON + 1:1 prescale

m var byte           'Counter

n var byte           'Counter

 

Start:

m=0

n=0

For m=1 To 200             ‘以下の工程を200回繰り返す。3つの周波数パターンの発生順序とそれらの発生と停止時間ををいろいろと変えた

  For n=1 To 50            ‘以下を50回繰り返す

  Gosub F15KHZ: Pause 2000   ‘サブルーチンF15KHZに行き戻って来たら2秒間休んで次へと意味。マルチステートメントでコロン(:)を入れて見栄えを良くした。

  Gosub F20KHZ: Pause 2000

  Gosub F25KHZ: Pause 2000

  CCP1CON=0: Pause 5000

 

  Gosub F25KHZ: Pause 2000

  Gosub F20KHZ: Pause 2000

  Gosub F15KHZ: Pause 2000

  CCP1CON=0: Pause 5000

 

  Gosub F20KHZ: Pause 2000

  Gosub F15KHZ: Pause 2000

  Gosub F25KHZ: Pause 2000

  CCP1CON=0: Pause 5000

  next n

 

  n=0

  For n=1 To 50            ‘以下を50回繰り返す

  Gosub F15KHZ: Pause 1000

  Gosub F20KHZ: Pause 2000

  Gosub F25KHZ: Pause 1000

  CCP1CON=0: Pause 3000

 

  Gosub F25KHZ: Pause 1000

  Gosub F20KHZ: Pause 2000

  Gosub F15KHZ: Pause 1000

  CCP1CON=0: Pause 5000

 

  Gosub F20KHZ: Pause 1000

  Gosub F15KHZ: Pause 2000

  Gosub F25KHZ: Pause 1000

  CCP1CON=0: Pause 3000

  next n

 

Next m

Goto Start

                 ‘以下は3つのサブルーチン

F15KHZ:

CCP1CON=%00001100    'PWM mode selection =12 in decimal

PR2=65                 'Set PWM for 15 KHz (experimetally set)

CCPR1L=24             'Set PWM for nearly 50% duty cycle

Return

 

F20KHZ:

CCP1CON=%00001100    'PWM mode selection =12 in decimal

PR2=45                 'Set PWM for 20 KHz (experimetally set)

CCPR1L=17             'Set PWM for nearly 50% duty cycle

Return

 

F25KHZ:

CCP1CON=%00001100

PR2=39                'Set PWM for 25 KHz (experimetally set)

CCPR1L=16            'Set PWM for nearly 50% duty cycle

Return

'******** プログラムの終了 ********

'Note:

   'melabs U2 Programmer's configurations 12F683:

   'FOSC – INTOSCIO; WDTE - Enable; Power-up Timer - Disable

   'MCLRpin – Reset ; BODEN - Enable; Internal External Switvh Over – Enable, Fail-Safe Clock Monitor – Enable, CD - Disable;Dtata EPPROM – Disable

 

電池駆動のゴキブリ追っ払い実験機の製作(2010.7.12)

電池駆動の実験機の回路図と写真を下に示す。 今回のものは次のような特徴を持つ。

1)     V(06P型)のアルカリ電池で駆動する。

2)     節電のためCdSセンサを取り入れ夜間時のみ動作するようにした。

3)     前と同様にツイーターを使った。

4)     プログラムでPICBasic Proの Sleep コマンドを使って非動作時にPICを眠らせ節電をはかった。 WDTがONの状態で時間が来るとシステムは自動的に起き上る。

 

 

 

得られた結果など

1)     ツイーターの前に1Kの抵抗を入れることによって出力が増し、ツイーターの前約1cmの距離で最大98dBの騒音計値が得られた。

2)     CdS回路のデバイダに高い抵抗値のVR=500Kと220Kを使うことによって節電を図った。この部分で常時消費される電流を10−20mAと小さくできた。

3)     電池に直列に電流計を入れて各動作時の電流量を測ったところ以下のようであった。

待機時(Sleep)

15KHz発生時

20KHz発生時

25KHz発生時

5秒間待機時

0.12mA

3.0mA

3.2mA

3.4mA

0.85mA

 電池の持ち  下述のプログラムから明らかなように1動作ルーチンの時間が180秒(=45+75+60)で、その中で高周波発生時の平均電流消費3.2mAが45秒間続き、5秒間待機時の電流消費0.85mAが75秒、更にSleep待機時の電流消費0.12mAが60秒間続く。一日10時間(夜間)動作するとして、例えば、3.2mAが流れている時間は3600秒X10時間X(45/180)=9,000秒 =150分 =2.5時間。 3.2mAX2.5h=8.0mAh。更に、5秒間待機時の0.85mA流れている時間は3600秒X10時間X(75/180)=15,000秒=250分=4.2時間。 0.85mAX4.2h=3.6mAh。またSleep待機時の0.12mA流れている時間は3600秒X10時間X(60/180)=12,000秒=200分=3.3時間。 0.12mAX3.3h=0.40mAh.上の3つの合計は8.0mAh+3.6mAh+0.40mAh=12mAH。一方、Web上で調べると06P型9Vアルカリ電池の容量は200mAh位らしい。したがって200mAh/12mAH=17。つまり、この電池で17日間位持つという計算になる。正しいかな?

4)     Sleepコマンドを使うのは初めてだが電池を使うプロジェクトには役立ちそう。

5)     このゴキブリ追っ払い器の効果のせいか流し台付近で最近ゴキブリの姿が見えない。ただ、ホウ酸団子も使っているのでまだ何とも言えない。

6)     今夜も暗闇の中でうっすらと赤いLEDを点滅しながら、カチカチ音をかすかに出して動作中。

 

プログラム

  9Vの電池で動作させるので節電しないといけない。先ず、ゴキブリが出てくる夜間のみに動作させるためにCdSセンサを取り付けた。センサ入力をGP0(ピン7)からアナログ値として読込みAD変換してその値が一定以下だと夜になったと判断し、Jump1に飛んで高周波を発生させるルーチンを行う。しかし、AD変換した値が一定以上の場合はまだ夜ではないと判断して節電のためSleep命令で60秒間の省エネモードに入る。60秒間後再び起き上ってGP0からアナログ値を読込んで同様の操作を繰り返す。つまり明るい間はほぼ省エネモードのSleep状態にある。一方、Jump1に飛んで高周波を発生させるルーチンでは、15、20それに25KHzを各1秒間ずつ3回X5回、合計45秒間発生させ、更に途中に5秒間の休み(高周波の発生なし)を3回、合計75秒間の休みが入る。そのあと60秒間の省エネSleep状態の後にStartに戻る。なおSleep命令を使う場合Watch Dog TimerはEnableに設定しないといけない

 

'********* プログラム ************

'SoundGenCockroach638ADC1.bas - 2010.7.13 Shorten the operation time to save the battery.

'Generating combinations of 15, 20 and 25 KHz PWM of nearly 50% duty ratio

'Battery (06P) operation

'12F683 with internal clock 4MHz

'Sleep command used to save battery

'Addition of CdS sensor + ADC

'******** ピン接続 ************

'Pin 1: Vdd (5V)

'Pin 8: Vss (GND)

'Pin 4: GPIO.3: input - internal reset via R=10K

'Pin 5: GPIO.2: output - to Tr driving UltraSound speaker

'Pin 7: GPIO.0: input - Analog value (V) from CdS sensor

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

Define ADC_BITS 10     '10-bit ADC used  以下5行ADCの設定

Define ADC_CLOCK 3     'Internal clock used

Define ADC_SAMPLEUS 50 'Sample timing

ANSEL=%00010001  'Fosc/8 selected, AN0 selected

ADCON0=%10000011 '=131 (decimal)  Select GP0/AN0 Pin

TRISIO=%001001 'all outputs except GPIO.0 & 3

CMCON0=7             'No comparator

T2CON=%00000100      'Timer2 ON + 1:1 prescale

Vin0 var word       'Vin0 - CdS voltage input storage

n var byte           'Counter

 

Start:

ADCIN 0, Vin0  'Read CdS voltage and store it in Vin0 ここでCdS値を読込む

Pauseus 50  '50 us

If Vin0 < 500 then Jump1  '500 ? この500は実験的に決めた。Vdd=5Vを1024と設定している。したがって500は2.5V位に相当。

Sleep 60  'Sleep for 60 sec  明るい間はほぼこのSleep省エネモード状態にある。60秒間毎に起きてCdS値をチェックを繰り返す。WDTがEnableで可能になる。

Goto Start

 

Jump1:

n=0

  For n=1 To 5

  Gosub F15KHZ: Pause 1000  '1 sec (shortend from 2 sec) 節電のため1秒間にした

  Gosub F20KHZ: Pause 1000

  Gosub F25KHZ: Pause 1000

  CCP1CON=0: Pause 5000

 

  Gosub F25KHZ: Pause 1000

  Gosub F20KHZ: Pause 1000

  Gosub F15KHZ: Pause 1000

  CCP1CON=0: Pause 5000

 

  Gosub F20KHZ: Pause 1000

  Gosub F15KHZ: Pause 1000

  Gosub F25KHZ: Pause 1000

  CCP1CON=0: Pause 5000

  Next n

 

Sleep 60  'Sleep for 60 sec  上の高周波発生ルーチンが終了する毎に60秒間Sleepする

Goto Start

 

F15KHZ:

CCP1CON=%00001100    'PWM mode selection =12 in decimal

PR2=65               'Set PWM for 15 KHz (experimetally set)

CCPR1L=24            'Set PWM for nearly 50% duty cycle

Return

 

F20KHZ:

CCP1CON=%00001100    'PWM mode selection =12 in decimal

PR2=45               'Set PWM for 20 KHz (experimetally set)

CCPR1L=17            'Set PWM for nearly 50% duty cycle

Return

 

F25KHZ:

CCP1CON=%00001100

PR2=39               'Set PWM for 25 KHz (experimetally set)

CCPR1L=16            'Set PWM for nearly 50% duty cycle

Return

'******** プログラムの終了 ********

'Note:

   'melabs U2 Programmer's configurations 12F683:

   'FOSC – INTOSCIO; *WDTE - Enable; Power-up Timer - Disable

   'MCLRpin – Reset ; BODEN - Enable; Internal External Switvh Over – Enable, Fail-Safe Clock Monitor – Enable, CD - Disable;Dtata EPPROM – Disable

'*WDT must be set to Enable..

 

Menu Pageへ戻る

Topへ戻る