チーム1535
センサー電子ピアノ
研究者名
2年15組34番 下山 翔
2年15組37番 高橋 公康
仕様
距離センサーを使用し、スイッチが押されている間のみ手を近づけたり遠ざけたりするとそれに応じて音階を奏でる。
使用した機材
PSoC基盤 1個
書込み器 1個
LCDディスプレー 1個
距離センサー 1個
スピーカー 1個
ジャンパ線 4本
ソースコード
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
int PW=125; // Pulse Width
int SILENT=0, D=229, L=204, M=182, F=172, S=153, R=136, C=121, DD=115;
#define SW 0b00010000
void main(void)
{
// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here. 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_1_Stop(); PRT1DR &= (~SW); while(1){ while(ADCINC_fIsDataAvailable() == 0); adc_data = ADCINC_wClearFlagGetData(); if(PRT1DR & SW){ PWM16_1_Start(); LCD_Start(); PWM16_1_WritePulseWidth(PW); if (adc_data < 1024){ PWM16_1_WritePeriod(DD); LCD_PrCString("DD"); } else if(adc_data>=1024 && adc_data < 1280){ PWM16_1_WritePeriod(C); LCD_PrCString("C"); } else if(adc_data >= 1280 && adc_data < 1536){ PWM16_1_WritePeriod(R); LCD_PrCString("R"); } else if(adc_data >= 1536 && adc_data < 1792){ PWM16_1_WritePeriod(S); LCD_PrCString("S"); } else if(adc_data >= 1792 && adc_data < 2048){ PWM16_1_WritePeriod(F); LCD_PrCString("F"); } else if(adc_data >= 2048 && adc_data < 2304){ PWM16_1_WritePeriod(M); LCD_PrCString("M"); } else if(adc_data >= 2304 && adc_data < 2560){ PWM16_1_WritePeriod(L); LCD_PrCString("L"); } else if(adc_data >= 2560 && adc_data <= 2816){ PWM16_1_WritePeriod(D); LCD_PrCString("D"); } PRT1DR &= (~SW); } else { PWM16_1_Stop(); LCD_Start(); LCD_PrCString("SILENT"); PRT1DR &= (~SW); } } }
考察
今回は距離センサーを利用した新しい電子楽器を作りたいということで、手を近づけたり遠ざけたりするとその距離に応じてドレミファソラシドを演奏する装置を実装した。
今回は1オクターブの音階しか演奏できないが音域を広げたり音程を連続的に変化させることができればより本格的な電子楽器になると考えられる。
- 最終更新:2015-07-14 16:05:08