チーム1842

課題名

ファミリーマート付き自動ドア

研究者名

Taku Watanabe
Kakeru Yamaguchi
Takuya Furumoto

使用した機器

  • PSoCMiniProg
  • PSoC評価基板
  • ジャンパ線3本
  • 距離センサー
  • スピーカー

概要

距離センサーを使用し物体が一定距離まで近づくとファミリーマートの入店音を奏でるというもの。
同時にLCDディスプレイにWelcome!という文字列、および自動ドアを表示する。


ソースコード


#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
int PW=125; // Pulse Width
int SILENT=20000, L=102, M=91, F=81, LR=136, R=68; //Scale


void main(void)
{
  // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
   // Insert your main routine code here.
   unsigned int adc_data;
 int state = 0;
 int cnt = 0;
 int bar = 0;
 int dif = -1;
 PGA_Start(PGA_HIGHPOWER);
 LCD_Start();
 LCD_InitBG(LCD_SOLID_BG);
 M8C_EnableGInt;
 ADCINC_Start(ADCINC_HIGHPOWER);
 ADCINC_GetSamples(0);
 PWM16_Start();
 PWM16_WritePulseWidth(PW);
 PWM16_WritePeriod(SILENT);
 while(1){
     while(ADCINC_fIsDataAvailable() == 0);
     adc_data = ADCINC_wClearFlagGetData();
     LCD_Position(0, 0);
     if(state == 0 && adc_data <= 0x1000){
         state = 1;
         cnt = 0;
         LCD_PrCString("Welcome!");
     }
     else if((state == 1 | | state == 2)&& adc_data > 0x1000){
         state = 0;
         bar = 9;
         dif = -1;
         LCD_PrCString("         ");
         PWM16_WritePeriod(SILENT);
     }
     //LCD_Position(1, 0);
     //LCD_PrHexInt(adc_data);
     if(state == 1){
          if(cnt%800 == 0)
             PWM16_WritePeriod(F);
          else if(cnt%800 == 50)
             PWM16_WritePeriod(L);
          else if(cnt%800==100)
              PWM16_WritePeriod(LR);
          else if(cnt%800==150)
              PWM16_WritePeriod(L);
          else if(cnt%800==200)
              PWM16_WritePeriod(M);
          else if(cnt%800 == 250)
             PWM16_WritePeriod(R);
          else if(cnt%800==300)
              PWM16_WritePeriod(R);
          else if(cnt%800==350)
              PWM16_WritePeriod(LR);
          else if(cnt%800==400){
              PWM16_WritePeriod(M);
              dif = 1;
             }
          else if(cnt%800 == 450)
             PWM16_WritePeriod(F);
          else if(cnt%800==500)
              PWM16_WritePeriod(M);
          else if(cnt%800==550)
              PWM16_WritePeriod(LR);
          else if(cnt%800==600)
              PWM16_WritePeriod(L);
          else if(cnt%800==650)
              PWM16_WritePeriod(L);
          else if(cnt%800==700)
              PWM16_WritePeriod(L);
          else if(cnt%800==750){
              PWM16_WritePeriod(SILENT);
              state=2;
           }
       
       LCD_DrawBG(1,0,16-bar,bar*5);
       LCD_DrawBG(1,16-bar,8,bar*5);
       if(cnt%50==0)
           bar = bar + dif;

       cnt += 2;
     }
 }
}
配線図NYN.PNG

考察

lab3_adc、pwm_uart_2,motor,チーム1727を参考にし、作成した。
  • LCDディスプレイに自動ドアを表示する際、LCD_DrawBG()を左右別方向にそれぞれ移動し、音が鳴っている間に開いて閉じる時間調整がとても難しかった。
  • 距離センサーが感知してくれる距離がとても短く、そこの調整も難しかった。
  • ファミリーマートのほかに、いろいろなコンビニの入店音も作ろうかと思ったが、時間が足らなかった。
  • 改善点として、いろいろなセンサーを使いそれぞれが感知したらそれぞれでほかの音を出せるとなお良いものができると思う。

  • 最終更新:2018-10-23 16:48:39

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

認証パスワード