チーム1837
課題名
救急車もどき(走らない)
研究者名
Shun Ogasawara
Koji Aoyama
Hibiki Kawagoe
使用器具
PSoCMiniProg 1つ
ジャンパ線 7本
距離センサー 1個
LED 1個
モータ 1個
目的
距離センサーに手を近づけることで救急車の警告音(ピー、ポー)を交互に発生させると同時に
LEDの点灯、モータの回転をさせて擬似的に救急車のサイレンを再現させる。
配線図・ソースコード
#include <m8c.h>
#include "PSoCAPI.h"
int SILENT = 0, GG = 77, BB = 61;
void func(unsigned int oct, unsigned int vec);
void main(void)
{
unsigned int vec,oct;
unsigned int oct2, vec2; int i = 0; PWM8_1_Start(); PGA_3_Start(PGA_3_HIGHPOWER); PGA_1_Start(PGA_1_HIGHPOWER); PGA_2_Start(PGA_2_HIGHPOWER); M8C_EnableGInt; DUALADC_Start(DUALADC_HIGHPOWER); DUALADC_SetResolution(10); DUALADC_GetSamples(0); PWM16_1_Start(); for(;;) { while(DUALADC_fIsDataAvailable() == 0); vec = DUALADC_iGetData1(); oct = DUALADC_iGetData2();
PWM16_1_WritePulseWidth(125); if(vec <= 150){ vec2 = 0; } else if(vec <= 250){ vec2 = 7; } else if(vec <= 350){ vec2 = 6; } else if(vec <= 450){ vec2 = 5; } else if(vec <= 550){ vec2 = 4; } else if(vec <= 650){ vec2 = 3; } else if(vec <= 750){ vec2 = 2; } else { vec2 = 1; } if(oct <= 150){ oct2 = 0; }
else {
oct2 = 1; } switch(oct2*10 + vec2) { case 11: PWM16_1_WritePeriod(BB); break; case 12: PWM16_1_WritePeriod(GG); break; case 13: PWM16_1_WritePeriod(BB); break; case 14: PWM16_1_WritePeriod(GG); break; case 15: PWM16_1_WritePeriod(BB); break; case 16: PWM16_1_WritePeriod(GG); break; case 17: PWM16_1_WritePeriod(BB); break; default: PWM16_1_WritePeriod(SILENT); break; } }
}
考察
車として走らせたかったが難度が高かったため諦め、その代わりに距離センサーを用いた手法に変更した。
距離センサーの導入においては、チーム1632の作品を引用し、参考にした。
距離センサーの実装と救急車としての要素(ピーポーの音、赤色LED点灯、モータの回転)を別々に制作し、
それぞれうまく作動させられたが、その2つを合わせる作業がうまく進まず難航したが、実現できた。
音が濁ってしまうことが多く、正確性に欠けるのでバンドパスフィルタを用いてノイズを減らすことが課題である。
- 最終更新:2018-07-10 17:08:42