チーム1346

課題名

モノ見つけマシン

研究者名

2年14組34番 竹尾 智哉
2年14組33番 高橋 大輔

概要

光センサーを用いて明るいと感知したとき音楽を流し、暗いと感知したときLEDを光らせるという仕組みにすることにより身近な何かに付属することによってそのモノを見つけることができるというマシンである。
音楽はひこうき雲が流れる。

使用器具

光センサー
ジャンパー線×10
スピーカー
LED

1382424523572.jpg

ソースコード

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
#define LED 0b00010000
#define SP 0b00000001
int PW=125;
int SILENT=0,D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115,LL=100,MM=90;
int TC=0;

void myISR(void)
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);

if(TC == 1)
  PWM16_1_WritePeriod(S);

else if(TC == 3)
  PWM16_1_WritePeriod(R);

else if (TC == 6)
  PWM16_1_WritePeriod(C);

else if (TC == 12)
   PWM16_1_WritePeriod(SILENT);
   
else if(TC == 15)
  PWM16_1_WritePeriod(C);

else if(TC == 18)
  PWM16_1_WritePeriod(LL);

else if(TC == 21)
  PWM16_1_WritePeriod(C);

else if (TC == 24)
  PWM16_1_WritePeriod(R);

else if(TC == 27)
  PWM16_1_WritePeriod(S);

else if(TC == 35)
  PWM16_1_WritePeriod(SILENT);

else if (TC == 38)
  PWM16_1_WritePeriod(S);
   
else if(TC == 40)
  PWM16_1_WritePeriod(R);

else if (TC == 43)
  PWM16_1_WritePeriod(C);

else if(TC == 49)
  PWM16_1_WritePeriod(SILENT);
   
else if(TC == 52)
  PWM16_1_WritePeriod(C);

else if(TC == 55)
  PWM16_1_WritePeriod(MM);

else if (TC == 58)
  PWM16_1_WritePeriod(LL);

else if(TC == 61)
  PWM16_1_WritePeriod(C);

else if(TC == 64)
  PWM16_1_WritePeriod(S);

else if (TC == 72)
  PWM16_1_WritePeriod(SILENT);    
   
else if(TC == 75)
  PWM16_1_WritePeriod(M);
else if(TC == 76)
  PWM16_1_WritePeriod(SILENT);
   
else if(TC == 77)
  PWM16_1_WritePeriod(M);

else if(TC == 78)
  PWM16_1_WritePeriod(SILENT);
   
else if(TC == 79)
  PWM16_1_WritePeriod(M);

else if(TC == 80)
  PWM16_1_WritePeriod(SILENT);    
   
else if(TC == 81)
  PWM16_1_WritePeriod(D);

else if(TC == 84)
  PWM16_1_WritePeriod(SILENT);    
   
else if(TC == 87)
  PWM16_1_WritePeriod(L);

else if(TC == 89)
  PWM16_1_WritePeriod(D);    
   
else if(TC == 91)
  PWM16_1_WritePeriod(L);
   
else if(TC == 93)
  PWM16_1_WritePeriod(F);
   
else if(TC == 98)
  PWM16_1_WritePeriod(SILENT);
   
else if(TC == 99)
  PWM16_1_WritePeriod(L);
   
else if(TC == 102)
  PWM16_1_WritePeriod(F);

else if(TC ==105)
  PWM16_1_WritePeriod(R);
   
else if(TC == 108)
  PWM16_1_WritePeriod(S);
   
else if(TC == 111)
  PWM16_1_WritePeriod(F);
   
else if(TC == 114)
  PWM16_1_WritePeriod(S);
   
else if(TC == 120)
  PWM16_1_WritePeriod(SILENT);    

}


void main(void)
{
unsigned int adc_data;
PGA_Start(PGA_HIGHPOWER);
M8C_EnableGInt;
PWM16_1_Start();
Timer16_1_EnableInt();
Timer16_1_Start();
PWM8_1_Start();
ADCINC_Start(ADCINC_HIGHPOWER);
ADCINC_GetSamples(0);
LCD_Start();
LCD_InitBG(LCD_SOLID_BG);


while(1){
  while(ADCINC_fIsDataAvailable()==0);
   adc_data=ADCINC_wClearFlagGetData();
   LCD_Position(0,0);
   LCD_PrHexInt(adc_data);
   LCD_DrawBG(1,0,16,(adc_data/50));
   if(adc_data >= 0x0800)
        PWM8_1_Start();
   else
       PWM8_1_Stop();
       
   if(adc_data >= 0x0800)
        PWM16_1_Stop();
   else
       PWM16_1_Start();
}
}

考察

ラボ timer_pwm2 lab3_adc lab1_pwm を参考に製作した。
今回、光センサーで感知した光の強さをLCDに表示させること、さらに今回の仕様に合わせたLEDの点滅、スピーカーの音の有無にソースコードを場合分けし、構築することに苦労した。
途中、LCDへの数値の表示が上手くいかなかった際に、一度は基盤の故障が考えられ基盤自体を交換することになった。そこで簡単な確認として、LCDに"Hello"と表示させる仕様にし故障の有無の確認を簡略化した。
今回はジャンパ線を多く使用することになったので、次回なにかを製作する際にはもう少しすっきりしたものに仕上げたい。
このマシンを小型化、軽量化、リモートコントロール機能をつけることにより、製品化の可能性もみえてくると考えられる。

  • 最終更新:2013-10-22 15:55:21

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

認証パスワード