チーム1745

課題名

距離センサーを用いた接近アラーム

研究者名

2年14組48番 堀川悠仁 (horikawa yuto)
2年14組62番 若泉亮汰 (wakaizumi ryota)

使用部品

基盤
PSoCMiniPrag
距離センサー
スピーカー
ジャンパー線

概要

車のバック時に接近を知らせるアラームをモチーフにして作成した。
距離センサーに反応があった場合アラームが断続的に鳴り、LEDが光り、LCDにdangerと点滅しながら表示される。
距離が遠い場合のアラームの鳴る周期は長く、近い場合の周期は短い。dangerの点滅も同様。
反応がなくなればアラームは止まり、LEDが消えて、LCDにsafeと表示される。
ただし、約三センチメートルまで近づくと、センサーは反応しなくなってしまう。
気を付けましょう。

ソースコード

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
int PW=125; // Pulse Width
int SILENT=0,R=136;

int x = 0;

unsigned int adc_data = 0;

int TC=0; //Time Count

void myISR(void)
{
  LCD_Start();

  // x=0 -> センサー反応なし 
   // x=1 -> センサー反応あり(近い)
   // x=2 -> センサー反応あり(遠い)
   adc_data = ADCINC_wClearFlagGetData();
   if (adc_data > 2500)
       x = 1;
   else if(adc_data<=2500&&adc_data>=1500)
       x = 2;
   else
       x = 0;

  TC += 1; //TC = TC + 1

  // 近い(timer_pwm2より引用)
   // 幅の狭い断続的なアラーム音を発生させる
   if(TC == 1 && x==1) {
       LCD_PrCString("Danger");
       PWM16_1_Start();
       PWM16_1_WritePulseWidth(PW);
       PWM16_1_WritePeriod(R);
   }
   else if(TC == 3&& x==1) {
       PWM16_1_Stop();
       PWM16_1_WritePulseWidth(SILENT);
       PWM16_1_WritePeriod(SILENT);
   }
   else if(TC >= 4&& x==1) {
       TC=0;    
   }
   //遠い
   //幅の広い断続的なアラーム音を発生させる
       if(TC == 1 && x==2) {
       LCD_PrCString("Danger");
       PWM16_1_Start();
       PWM16_1_WritePulseWidth(PW);
       PWM16_1_WritePeriod(R);
   }
   else if(TC == 4&& x==2) {
       PWM16_1_Stop();
       PWM16_1_WritePulseWidth(SILENT);
       PWM16_1_WritePeriod(SILENT);
   }
   else if(TC == 6&& x==2) {
       TC=0;    
   }
   

  // 安全なとき
   //アラームを止めてSafeを表示する
   if(x==0) {
       LCD_PrCString("Safe");
       TC=0;
       PWM16_1_Stop();
       PWM16_1_WritePeriod(SILENT);
   }
}

void main(void)
{
  // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
   // Insert your main routine code here.
   
   PGA_Start(PGA_HIGHPOWER);
   LCD_Start();
   LCD_PrCString("Safe");
   ADCINC_Start(ADCINC_HIGHPOWER);
   ADCINC_GetSamples(0);
   
   M8C_EnableGInt;
   PWM16_1_Start();
   Timer16_1_EnableInt();
   Timer16_1_Start();    
}

考察

この装置はlab3_adc、timer_pwm2を応用させて制作した。
距離センサーの精度に問題があったため、距離センサーに反応があったときの距離を2つのみにわけて、遠い距離のときのアラームの鳴る断続周期を長く、短い距離のとき短くすることで、接近した距離の近さにより危険性の違いが伝わるようにしているが、距離センサーの精度が良ければ、距離をさらに細かく分け、よりアラームの音でどれだけ接近しているかわかるようにできると考えられる。

  • 最終更新:2017-10-24 16:43:00

このWIKIを編集するにはパスワード入力が必要です

認証パスワード