自作で超音波による猫などの小動物撃退装置を作ってみました。

出力は圧電素子に19kHz程度の高周波を12Vpp程度の音圧で出力します。

ちなみに15kHz程度のモスキート音を聞いていると気分が悪くなったり頭が痛くなったりと明らかに人間には有害である事を身をもって感じました。

作成されるかたは自己の全責任において作成してください。私の責任はございません!!

実際に作成した装置の動画はこちらです。

 

 

最初のLED点灯で15kHz 次に16kHz 次で17kHz 次が18kHz 最後に19kHzになります。

 

ことの発端は・・・

職場の看護師さんからご依頼がありました。

最近自宅敷地内に”猫”が侵入するようです。

なんとか傷つけずに撃退できないか?という内容でした。

すぐさま私の著書で紹介している安全でお手軽に作れる

「鳥獣撃退電気柵」が思いつきましたが、小さな子供がいるそうで電気柵は危ないとの事。

 

そこで思いついたのが超音波を利用した撃退方法です。

アマゾンでは上記のような製品が実際に販売されており、コメントでは一定の効果があるようです。

値段は安いもので三千円程度、高いもので1万円程度です。

何が違うのかというと高いものは超音波の猫慣れを防ぐ為に猫など小動物が近づいた時に赤外線センサーが働いてその時だけ、超音波を発生させたり超音波自体の音圧や周波数を変動させるといった付加価値がついているようです。

でも安いものでも一定の効果があると言う事なので、多分常時超音波をぶっぱなしても猫などの小動物は何かしらの異常を感じ取って近寄らなくなるっという事なんでしょう・・

 

 

機器の原理はというと・・・

猫や犬は人間より聴覚が優れていて人間よりはるかに”高い音”が聞けるというのを利用したものです。

人間の聴覚は20Hz〜15KHzであるのですが猫は人間の10倍くらい高い10万Hz(100KHz)程度まで聞けます。

 

それはネズミなど小動物が発する高い周波数の鳴き声などをキャッチする為などと言われていますが、それを利用して人間には聞こえないけど猫や犬には聞こえ、且つ超音波による音で威嚇し、敷地内にフンなどを落としていかないようにするのです。

なお、人間である私だと15KHz程度の音でも”キーッン”という甲高い音で頭が痛くなったり、気分が悪くなったりします。だから、猫も嫌がるだろう・・という発想なのだと思います。

 

さっそく製作構想

製作に関しては15kHz〜19KHzまでをスイッチで可変できるようにした簡単な機器をとりあえず製作しようと思います。

発振方法はタイマーIC555などいろいろ考えましたが、簡単に手直しや微調整を行う事を考えてマイコンを利用します。

開発環境はMPLABXC言語開発です。

超音波を発生させるスピーカー的なものは”圧電素子”を利用します。

 

回路図です

 

 

 

超音波発生部

どんな圧電素子にするか迷いましたが、わざわざ買うのも面倒だったので、100均一ダイソーで100円防犯ブザーの中から圧電素子を部品取りしました。

 

↓これが 圧電素子です。

また超音波を発生させる圧電素子は電圧駆動で歪んで音を出す仕組みなので、大きな音を出すには駆動電圧を高くしたり、何か金属のケースなどに接触させて共振をねらう必要があります。

そこで、駆動電圧はマイコンを動かす5Vよりも高い13Vを利用し、金属ケースもダイソーで売っていた調味料用のステンレス製容器にしました。(なんかメタリックでかっこいし)

 

圧電素子はステンレスケースの底に瞬間接着剤で固定。

 

 

 

この超音波発生装置は屋外に置く事を想定しているので、防水とする為に”グルーガン”で穴を埋めとります。

 

ケーブルは自動車配線用の安価なもので、接続も簡単に延長できるようにギボシ端子を利用しています。

 

 

電源と本体駆動部について

今回、超音波を発生させる方法はマイコンにより5Vの矩形波を発生させます。

その周波数は15kHz〜19kHzまでの5段階をタクトスイッチにより切り替えます。

切り替えた事がわかるように5つのLEDを点灯させ、現在どの周波数が出力されているか目視でわかるようにしました。

スポンサードリンク

 

最終的には猫撃退に使用する19kHzの出力時だけLEDを白色にした回路構成にしました。

なんせ、私の耳では16kHzからまったく聞こえませんので、本当に出力されているかが聴覚的にはわからないのです。

マイコンから出力される5Vの矩形波は、これまた安いトランジスタである2sc1815でドライブさせ駆動電圧13Vまで引き上げます。

そしてその13Vの矩形波で圧電素子を鳴らすのです。

 

↓スイッチを押して出力を切り替えているところ

 

電源はそのへんに転がっていたもの13VのACアダプターを利用、家庭用ACコンセントから電源供給がなされるので電池切れは心配ないでーす。

 

 

13Vの直流電源だとマイコンが吹っ飛ぶので、100mA出力の小さな3端子レギュレータで5V電圧を作成しています。

 

 

 

マイコンとプログラム

マイコンはPIC16F88を利用しました。

もっと小さいやつでよかったのですが、手元にあったのがPIC16F88だったので、しかたなくこれを利用。

メモリも数パーセントしか使ってなくて、もっとセンサやらを取り付けると凝ったものが作れますが、なんせ冒頭でも説明したとおり、超音波を出し続けるものでも効果があるのでその必要性するないのかな?と思ってます。

MplabXでXC8でコンパイルしてます。 

// PIC16F88 Configuration Bit Settings

// ‘C’ source line config statements

// CONFIG1
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CCPMX = RB3 // CCP1 Pin Selection bit (CCP1 function on RB0)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)

// CONFIG2
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF // Internal External Switchover bit (Internal External Switchover mode disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>

 

//////////delay関数を使うために定義 8Mhz////////////
#define _XTAL_FREQ 8000000

 

int count;
int i;

 

//外部割込みプログラム スイッチが押されるとここに飛ぶ
void interrupt gaibuwarikomi(void) {
//スイッチが押されれば視覚的にわかるようにLEDが一瞬点灯する↓
//チャタリング防止のためにもdelayを入れてる
RA3 = 1;
__delay_ms(300);
RA3 = 0;

//COUNTをカウントする
if (count == 0){
//15kHz
count = count+1;
RA1 = 1;
RA7 = 0;
RB7 = 0;
RB5 = 0;
RB4 = 0;

}else if(count == 1){
//16kHz
count = count+1;
RA1 = 0;
RA7 = 1;
RB7 = 0;
RB5 = 0;
RB4 = 0;

}else if(count == 2){
//17kHz
count = count+1;
RA1 = 0;
RA7 = 0;
RB7 = 1;
RB5 = 0;
RB4 = 0;

}else if(count == 3){
//18kHz
count = count+1;
RA1 = 0;
RA7 = 0;
RB7 = 0;
RB5 = 1;
RB4 = 0;

}else if(count == 4){
//19kHz
count = count+1;
RA1 = 0;
RA7 = 0;
RB7 = 0;
RB5 = 0;
RB4 = 1;

}else if(count == 5){
//出力停止
count = 0;
RA1 = 0;
RA7 = 0;
RB7 = 0;
RB5 = 0;
RB4 = 0;

}

INTCONbits.INTF = 0;//割込みフラグクリア

}

void main(void) {

OSCCON = 0b01110000;//内部発信 8MHzに設定

//すべてデジタルで使用する
ANSEL = 0b00000000;

//Aポートはすべて出力設定
TRISA = 0b00000000;

//Bポート RB0だけ入力 あとは出力設定
TRISB = 0b00000001;

PORTA = 0;//クリア
PORTB = 0;//クリア

INTCONbits.GIE = 0;//グローバル割り込み不許可
INTCONbits.INTE = 0;//RB0/INT 割り込みを不許可
OPTION_REGbits.INTEDG =0;//外部割込み 立下りを検知
INTCONbits.INTF = 0;//割込みフラグをクリア

count = 0;//クリア

//最初の動作2.5秒かけてLEDが点滅して起動する
RA3 = 1;
__delay_ms(500);
RA3 = 0;
__delay_ms(500);
RA3 = 1;
__delay_ms(500);
RA3 = 0;
__delay_ms(500);
RA3 = 1;
__delay_ms(500);
RA3 = 0;

//外部割込みが入るように設定
INTCONbits.GIE = 1;//全割込みを許可
INTCONbits.INTE = 1;//外部割込みを許可

//メインループ
while (1) {
while(count == 0)
{
NOP();//外部割込みスイッチが押されないと永遠ここ
}

/*
//13kHz
while(count == 1){

RA2 = 1;
__delay_us(39);
RA2 = 0;
__delay_us(39);

}
//14kHz
while(count == 2){
RA2 = 1;
__delay_us(33);
RA2 = 0;
__delay_us(33);
}

*/

//15kHz
while(count == 1){
RA2 = 1;
__delay_us(33);
RA2 = 0;
__delay_us(33);
}

//16kHz
while(count == 2){
RA2 = 1;
__delay_us(31);
RA2 = 0;
__delay_us(31);
}

//17kHz
while(count == 3){
RA2 = 1;
__delay_us(29);
RA2 = 0;
__delay_us(29);
}

//18kHz
while(count == 4){
RA2 = 1;
__delay_us(27);
RA2 = 0;
__delay_us(27);
}

//19kHz
while(count == 5){
RA2 = 1;
__delay_us(26);
RA2 = 0;
__delay_us(26);
}

/*
//20kHz
while(count == 8){
RA2 = 1;
__delay_us(25);
RA2 = 0;
__delay_us(25);
}
*/

}
return;
}

 

スポンサードリンク