チーム1215
課題名
危険察知マシン(X _X)
研究者名
2年15組51番 三宅 正悟
2年15組52番 宮崎 博行
内容
圧力センサーに触れる力の強さによって、ディスプレイに表示される顔文字、出る音の周期、LEDの点滅間隔が変わる。
何もしない場合
少した押した場合
少し強く押した場合
かなり強く押した場合
追記
画像にはないが、スピーカも付けた。
使用したもの
・基盤
・圧力センサー
・抵抗
・ジャンパ線
・液晶ディスプレイ
・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