撃退音強化の方針
機器設置後の検出機会が多くないが、何度か撃退できていないと思われる写真が撮影されていたので、撃退音発生部の強化を行う。
強化法としては、
- 撃退音の周波数変更又は追加
- 低周波音波追加
- 撃退音の音量増大
- 駆動電圧を上げる(現状+10V)
- 追加低音波は大音量可能に(オーディオアンプ駆動)
撃退音発生部の変更
- 新規追加部
- 低音音源(Arduino Uno + 分電圧回路)
- オーディオアンプ(小型で数ワット以上)
- スピーカー(屋外設置可能)
- アンプ用電源(+12V)
- より大きな筐体(追加部の組み込みの為)
- 修正部
- 高音発生部(低音部とまとめてArduino Unoの上部拡張基板に)
音源生成
高音及び低音音源を発生させるArduino Unoの組み込みソフトウェア(Arduino IDE)を以下に載せます。
#include <math.h>
#include <float.h>
#define DISABLE_PIN 3
#define HFREQ_PIN 6
#define LFREQ0_PIN 9
#define LFREQ1_PIN 10
#define LED_PIN 13
#define COUNT_TIMER1 1500
#define HIGH_FREQUENCY 99
#define LOW_FREQUENCY_DUTY1 750
#define LOW_FREQUENCY_DUTY2 150
int disable;
int disable_prev;
void setup() {
// ディスエブル入力ピンモード設定
pinMode(DISABLE_PIN,INPUT);
// 高音出力ピンモード設定
pinMode(HFREQ_PIN,OUTPUT);
//タイマー0 の設定
TCCR0B = 0x00; // タイマー0 いったん停止
TCCR0A = 0b01000010; // モード設定
TCCR0B = 0b00000010; // 8分周
OCR0A = HIGH_FREQUENCY; // 16M/2/8 = 1MHz x 100カウントで 10KHz
// 低音出力ピンモード設定
pinMode(LFREQ0_PIN,OUTPUT);
pinMode(LFREQ1_PIN,OUTPUT);
//タイマー1 の設定
TCCR1B = 0x00; // タイマー1 いったん停止
// タイマー1 制御レジスタB
TCCR1A = 0b10100010; //10:コンペアマッチAでLOW,10:高速PWM動作
// タイマー1 制御レジスタB
TCCR1B = 0b00011101; //11:高速PWM動作, 101:1024分周
// タイマー1 のカウント数設定
ICR1 = COUNT_TIMER1; //0から数える. 全体時間 16M/1024 Hz -> 64us x 1500 = 0.096s = 10.4Hz
// HIGHの時間(クロック数)
OCR1A = LOW_FREQUENCY_DUTY1; //0から数える. High時間 Duty OCR1A/ICR1 = 1/2 = 50% pin9
OCR1B = LOW_FREQUENCY_DUTY2; //0から数える. High時間 Duty OCR1A/ICR1 = 1/10 = 10% pin10
// LED出力ピンモード設定
pinMode(LED_PIN,OUTPUT);
digitalWrite(LED_PIN, 0);
}
void loop() {
// ディスエブル入力取得
disable = digitalRead(DISABLE_PIN);
// イネーブル入力立ち上がり
if ((disable == 0) && (disable_prev == 1)) {
//タイマー0 の設定
TCCR0B = 0x00; // タイマー0 いったん停止
TCCR0A = 0b01000010; // モード設定
TCCR0B = 0b00000010; // 8分周
OCR0A = HIGH_FREQUENCY; // 16M/2/8 = 1MHz x 100カウントで 10KHz
TCCR1B = 0x00;
TCCR1A = 0b10100010; //10:コンペアマッチAでLOW,10:高速PWM動作
TCCR1B = 0b00011101;
// タイマー1 のカウント数設定
ICR1 = COUNT_TIMER1; //0から数える. 全体時間 16M/1024 Hz -> 64us x 1500 = 0.096s = 10.4Hz
// HIGHの時間(クロック数)
OCR1A = LOW_FREQUENCY_DUTY1; //0から数える. High時間 Duty OCR1A/ICR1 = 1/2 = 50% pin9
OCR1B = LOW_FREQUENCY_DUTY2; //0から数える. High時間 Duty OCR1A/ICR1 = 1/10 = 10% pin10
digitalWrite(LED_PIN, 1);
}
else if (disable == 1) {
TCCR0A = 0x00;
TCCR0B = 0x00;
TCCR1A = 0x00;
TCCR1B = 0x00;
digitalWrite(LED_PIN, 0);
}
// ディスエブル入力保存
disable_prev = disable;
}Raspberry Piよりの音波発生イネーブル信号は、Raspberry Piからのノイズ対策フォトカプラーにて論理反転される為、ディスエブル信号に。
また、発熱を抑えるためにEFT及びアンプへの入力は、ディスエブル時強制的に0Vに。
ここでは、高周波を10kHzに、低周波を10Hzとしているが、それぞれは [HIGH_FREQUENCY]と[COUNT_TIMER1]を変更する事で変える事ができる。
音波発生回路
回路図を以下に示す。

R2は、FETオン時に+12Vが印加されるので抵抗値と容量(ワット数)の選択に注意の事。
基本的に抵抗値が低いほど、超音波スピーカーに印加される電圧が大きくなります(数十kHzの周波数ではインピーダンスが数百Ω)。
筐体への組み込み
新規筐体に全ての部品を組み込んだ写真を以下に示す。

筐体の側面上部には、冷却用換気穴を多数設け、Arduino Uno上部には、音波発生回路を実装している。
# 防水、内部温度管理を考慮の上、故障や漏電に気を付けて、ご自分の責任で行ってください


コメント