文書の過去の版を表示しています。
簡易近接スイッチ(赤外線方式)
概要
最近の公衆トイレには、自動水洗方式が多く採用されています。
利用者が用を足して離れると、自動で水洗してくれます。
どのような仕組みなのか詳しくは分かりませんが、利用者の検出には、おそらく赤外線による近接スイッチ方式
を使用しているものと考えられます。
そこで今回は、同様の機能(近接スイッチ)を実現してみました。
センサーには、安価で入手可能な、シャープ測距モジュール「GP2Y0A21YK」を使用しました。
<簡易近接スイッチ(赤外線方式)の仕様>
- スイッチの感応距離を自由に設定可能とします。(10cm~80cm)
- 設定した感応距離以下になると、LEDが点滅し、ブザーが鳴ります。
動作原理
測距モジュール「GP2Y0A21YK」の出力電圧を常時監視し、設定された電圧以上になると、LEDおよび圧電スピーカを制御します。
動作原理(ハードウェア)
◎距離の測定
「GP2Y0A21YK」は、対象物までの距離に比例(非線形)した電圧を出力するので、この電圧を利用します。
<GP2Y0A21YKの特長>
- 測定距離=10~80cm
- 出力=アナログ電圧出力
- 電源=4.5V~5.5V
- 消費電流=30~40mA
動作原理(ソフトウェア)
◎距離の測定
「GP2Y0A21YK」の出力電圧を、A/D変換で50回取り込み、その平均値を求め、距離電圧とします。
◎感応距離の設定電圧(リミット)
スイッチ(SW)が押下されると、その時の距離電圧をEEPROMに記録し、感応距離の設定電圧とします。
感応距離の場所に、対象物を置いてから、スイッチを押下してください。
EEPROMに記録されるので、次回起動時からは設定が不要となります。
◎制御出力
距離電圧が、設定電圧を上回ると、LEDを点滅させ、ブザーを鳴らせます。
回路図
ソースコード
- proximity_sensor.c
//********************************************************************** /* <簡易近接センサー> */ //********************************************************************** #define BYTE unsigned short #define WORD unsigned int #define DWORD unsigned long #define ON 1 #define OFF 0 sbit LED at GPIO.B4; sbit SW at GPIO.B3; //********************************************************************** WORD measurement() { BYTE cnt; WORD ad; // ad = 0; for (cnt = 0; cnt < 50; cnt++) { ad += ADC_Get_Sample(0); } return(ad / 50); } //********************************************************************** void main() { WORD ad, limit; // OSCCON = 0b01110000; CMCON0 = 0b00000111; ANSEL = 0b00000001; TRISIO = 0b00101001; // PWM1_Init(1000); PWM1_Set_Duty(PR2 / 2); PWM1_Stop(); // ADC_Init(); // LED = OFF; limit = EEPROM_Read(0); limit <<= 8; limit |= EEPROM_Read(1); // while (1) { ad = measurement(); if (limit < ad) { LED = ON; PWM1_Start(); Delay_ms(100); LED = OFF; PWM1_Stop(); Delay_ms(100); } if (SW == 0) { limit = ad; EEPROM_Write(0, (limit >> 8) & 0xFF); EEPROM_Write(1, limit & 0xFF); } } } //**********************************************************************






