チーム1215

課題名

危険察知マシン(X _X)

研究者名

2年15組51番 三宅 正悟
2年15組52番 宮崎 博行

内容


圧力センサーに触れる力の強さによって、ディスプレイに表示される顔文字、出る音の周期、LEDの点滅間隔が変わる。




何もしない場合

IMG_0136.JPG

少した押した場合

IMG_0137.JPG

少し強く押した場合

IMG_0138.JPG

かなり強く押した場合

IMG_0139.JPG




追記
画像にはないが、スピーカも付けた。

使用したもの

・基盤
・圧力センサー
・抵抗
・ジャンパ線
・液晶ディスプレイ
・PSoC miniprog

ソースコード



#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules


void main(void)
{
  // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
   // Insert your main routine code here.
   int count1, count2, count3;
   unsigned int adc_data;
   count1 = 0;
   count2 = 0;
   count3 = 0;
   PGA_Start(PGA_HIGHPOWER);
   LCD_Start();
   LCD_InitBG(LCD_SOLID_BG);
   PWM16_1_WritePeriod(172);
   PWM8_1_Start();
   M8C_EnableGInt;
   ADCINC_Start(ADCINC_HIGHPOWER);
   ADCINC_GetSamples(0);
   while(1){
       while(ADCINC_fIsDataAvailable() == 0);
       adc_data = ADCINC_wClearFlagGetData();
       LCD_Position(0,0);
       LCD_PrHexInt(adc_data);
       count1++;
       count2++;
       count3++;
       if(adc_data > 3840){
           LCD_Position(0,4); // Position cursor @ row 0, col 4
           LCD_PrCString("(^ o^)");
           PWM8_1_Stop();
           PWM16_1_Stop();
       }else if(adc_data > 3000){
           LCD_Position(0,4); // Position cursor @ row 0, col 4
           LCD_PrCString("(- .-)");
           if(count1 < 100){
               PWM8_1_Start();
               PWM16_1_Start();
           }    
           else{
               PWM8_1_Stop();
               PWM16_1_Stop();
           }    
       }else if(adc_data > 1500){
           LCD_Position(0,4); // Position cursor @ row 0, col 4
           LCD_PrCString("(- -;)");
           if(count2 < 40){
               PWM8_1_Start();
               PWM16_1_Start();
           }
           else{
               PWM8_1_Stop();
               PWM16_1_Stop();
           }    
       }else if(adc_data > 500){
           LCD_Position(0,4); // Position cursor @ row 0, col 4
           LCD_PrCString("(x _x)");
           if(count3 < 10){
               PWM8_1_Start();
               PWM16_1_Start();
           }else{
               PWM8_1_Stop();
               PWM16_1_Stop();
           }
       }
       if(count1 == 200){
           count1 = 0;    
       }
       if(count2 == 80){
           count2 = 0;    
       }
       if(count3 == 20){
           count3 = 0;    
       }
   }
}

考察


圧力センサーに触れる力によって、抵抗値が変わっていきます。ここで抵抗値の変化を利用して、抵抗値を場合分けすることによって、ディスプレイに表示される顔文字が変わり、出る音の間隔LEDの点滅する周期も変わるようにしました。
抵抗値は少し押す力が変わるだけで、だいぶ値が変わってしまうことや場合分けが少し雑だったために、思ったとおりの顔文字を表示するのが難しい、などまだまだ改善しなければならないところが多いです。

  • 最終更新:2012-05-15 17:01:36

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

認証パスワード