簡易ストロボフラッシャー(キセノン管)
概要
田畑の農作物が、夜間に害獣(猪、鹿、アライグマ、タヌキ、きつね等)に荒らされて困っています。
そこでカメラのストロボフラッシュ光(キセノン管による強烈な閃光)で威嚇する装置を製作してみました。
<仕様>
- 安価(500円前後)な使い捨てカメラ「写るんです」のストロボ機構を使用します。
- 「写るんです」の改造は、必要最小限とします。(リード線2本のみを半田付け)
- 夜間のみ動作させます。(起動時の照度>現時点の照度)
- 閃光の間隔は、10秒~20秒の間をランダムに変化させます。
動作原理
周囲が暗くなると「写るんです」のシャッタースイッチをオン(10秒~20秒間隔)にし、ストロボをフラッシュ(閃光)させます。
動作原理(ハードウェア)
◎ストロボ機構→※「写るんです」の回路をそのまま利用します。
- 高電圧発生部は、トランジスタとトランス(T1)によるブロッキング発振回路です。
- シャッタースイッチ(SW2)を、SCRでオンにします。
※手持ちのNEC社製のSCR(P2M)を使用しました。SCRは、サイリスタ (Thyristor)とも呼ばれています。
※秋月電子で販売している「高感度小型サイリスタMCR22-8」でも代用可能です。(8個200円) - トリガトランス(T2)経由で、高電圧パルスをキセノン管を囲む反射板に与えます。
- キセノン管は励起され放電(発光)を開始します。
◎照度の検出
- CDSと抵抗を利用した簡易回路です。
- 周囲が明るくなると電圧が上昇します。
- 周囲が暗くなると電圧が下降します。
動作原理(ソフトウェア)
◎メイン関数(main)
- 起動時の照度を測定し、基準照度(Lux1)とします。
- 照度(Lux2)を測定します。
- 基準照度(Lux1)と照度(Lux2)を比較し、照度(Lux2)が小さい場合、周囲が暗くなったと判断します。
- ストロボをフラッシュさせます。(SCRのゲートに10msec間、電圧を印加します)
- 10秒~20秒のランダムディレイします。
◎照度測定関数(measurement)
- 照度を100回測定し、その平均値を求めます。
◎ランダムディレイ関数(random_delay)
- 乱数を使用して、10秒~20秒のディレイ(遅延)を行います。
回路図
ソースコード
- flasher_v1_00.c
//********************************************************************** /* 【簡易フラッシャー】 */ //********************************************************************** #define BYTE unsigned short #define WORD unsigned int #define DWORD unsigned long // #define FLASH GPIO.B5 #define ON 1 #define OFF 0 //********************************************************************** extern void main(); extern int measurement(); extern void random_delay(); //********************************************************************** //■■■メイン関数■■■ void main() { int ad, threshold; // OSCCON = 0b01000000; CMCON0 = 0b00000111; ANSEL = 0b00000010; TRISIO = 0b00001010; FLASH = OFF; // ADC_Init(); // threshold = measurement(); // while (1) { ad = measurement(); if (threshold > ad) { FLASH = ON; Delay_ms(10); FLASH = OFF; // random_delay(); } } } //********************************************************************** //■■■照度測定関数■■■ int measurement() { long ad; int cnt; // ad = 0; for (cnt = 0; cnt < 100; cnt++) { ad += ADC_Get_Sample(1); } return (ad /= 100); } //********************************************************************** //■■■ランダムディレイ関数■■■ void random_delay() { int rd; // rd = rand() / 2979; //0.....10 rd += 10; Vdelay_ms(rd * 1000); //10sec.....20sec } //**********************************************************************








