チーム1235
課題名
温度センサーとスピーカー
研究者名
2-15-26 高橋 弘人
2-15-35 仲野 翔太
装置
スピーカー
温度センサー
ジャンパ線
液晶ディスプレイ
基盤
PSoC MiniProg
内容
温度センサーを用いて、温度変化を音に変える。
温度が高いと高音、低いと低温が鳴る。
また、音も単音でなく和音をなるようにした。
ソースコード
#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