チーム1235

課題名

温度センサーとスピーカー

研究者名

2-15-26 高橋 弘人
2-15-35 仲野 翔太

装置

スピーカー
温度センサー
ジャンパ線
液晶ディスプレイ
基盤
PSoC MiniProg

内容

温度センサーを用いて、温度変化を音に変える。
温度が高いと高音、低いと低温が鳴る。
また、音も単音でなく和音をなるようにした。
DSC_0042.JPG

ソースコード

#include <m8c.h>
#include "PSoCAPI.h"


int PW=125;
double SILENT = 0,D =229.01,L =204.8,M =181.82,F=171.92,S=153.06,R=136.36,C=121.47,DD=114.72;
int O=32;

void MC(double R,int O){ // Major Code
PWM16_1_WritePeriod((R*32)/O);
  PWM16_2_WritePeriod((R*0.8*32)/O);    // メジャーコードではルート音の周波数(Hz)に対してHz*4/5とHz*2/3の音が必要。
  PWM16_3_WritePeriod((R*2*32)/(O*3));
}

void mC(double R,int O){ // Minor Code
PWM16_1_WritePeriod((R * 32)/O);
  PWM16_2_WritePeriod((R*0.8333333 * 32)/O);// マイナーコードでは、ルート音の周波数(Hz)に対してHz*5/6とHz*2/3の音が必要。
 PWM16_3_WritePeriod((R*0.6666667 * 32)/O);
 }
  void Mute(){
     PWM16_1_WritePeriod(SILENT);
      PWM16_2_WritePeriod(SILENT);
      PWM16_3_WritePeriod(SILENT);
  }



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

  
   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/6));


      PWM16_1_WritePulseWidth(PW);
       PWM16_2_WritePulseWidth(PW);
       PWM16_3_WritePulseWidth(PW);

      if(adc_data >= 280 && adc_data < 282)
           MC(D,O);
       if(adc_data >= 282 && adc_data < 284)
           mC(L,O);
       if(adc_data >= 284 && adc_data < 286)
            mC(M,O);
       if(adc_data >= 286 && adc_data < 288)
           MC(F,O);
       if(adc_data >= 288 && adc_data < 290)
           MC(S,O);
       if(adc_data >= 290 && adc_data < 292)
           mC(R,O);
       if(adc_data >= 292 && adc_data < 294)
           MC(C,O);
       if(adc_data >= 294 && adc_data < 296)
           MC(DD,O);
       if(adc_data < 280)
           Mute();
   }
}

考察

今回の自由課題では、"timer_pwm2"と"lab3_abc"をつかって温度センサーをにより、ある一定の温度に達したら音を出力するようにした。
電圧の大きさを液晶に出力し、温度センサーで測った温度の大きさを数値化して、その数値に応じた電圧の強さをゲージに出力できるようにした。

和音を出すときに、ノイズなどでうまくきれいな音がならなかった。
部屋の温度によって温度センサーがスムーズに反応したり、しなかったり苦労した。

  • 最終更新:2012-07-10 13:34:16

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

認証パスワード