チーム1511
課題名
救急車
研究者名
2年15組49番 野村 亮太
2年15組52番 右田 悠太
概要
前回まで授業でLEDを光らせる方法、モーターを動かす方法、スピーカーから音を鳴らす方法などを習いました。
これら三つの技術を用いて、同時に動かすというものに今回チャレンジしました。
LEDで救急車のランプを、スピーカーでサイレンを、モーターで車体を動かすというものです。
サイレンは途中から、通りすぎたことを想像させるために音を半音下げてドップラー効果を表現しました。
本体・機能ブロック図
使用機材
・Psoc Mini Prog
・LED
・スピーカー
・単3電池×4、電池ケース
・ミニ四駆のセット
・モーター
・ジャンパ線
・モータードライバー TA7291P
ソースコード
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
int PW=125;
int SILENT=0,S=153,C=121,Cf=126, Sf=162;
int TC=0; //Timer count
void myISR(void)
{
TC +=1;
PWM16_WritePulseWidth(PW);
if(TC==1)
PWM16_WritePeriod(C);
else if(TC==5)
PWM16_WritePeriod(S);
else if(TC==9)
PWM16_WritePeriod(C);
else if(TC==13)
PWM16_WritePeriod(S);
else if(TC==17)
PWM16_WritePeriod(C);
else if(TC==21)
PWM16_WritePeriod(S);
else if(TC==25)
PWM16_WritePeriod(C);
else if(TC==29)
PWM16_WritePeriod(S);
else if(TC==33)
PWM16_WritePeriod(C);
else if(TC==37)
PWM16_WritePeriod(S);
else if(TC==41)
PWM16_WritePeriod(Cf);
else if(TC==45)
PWM16_WritePeriod(Sf);
else if(TC==49)
PWM16_WritePeriod(Cf);
else if(TC==53)
PWM16_WritePeriod(Sf);
else if(TC==57)
PWM16_WritePeriod(SILENT);
}
void main(void)
{
M8C_EnableGInt; PWM16_Start(); Timer16_EnableInt(); Timer16_Start(); PWM8_1_Start(); PWM8_2_Start(); PWM8_3_Start(); while(1){};
}
考察
モータードライバの使い方について、以下のサイトを参考にしました。
モータードライバを利用するのは電力を供給するものと、書き込みを行うものを別々にするためです。
音とホタル的明暗を同時に行うためにはclockの値の変更が必要となりました。なぜなら、音を鳴らすためにclockが受け取る値とホタル的明暗を実行するために受け取る値が異なるからです。音の再生に必要な値とホタル的明暗に必要な値を計算して、VC1,VC2,VC3の値を決定しました。
動かなかったが、配線は完成しているので原因としてはLEDの点灯、モーターの駆動、音の再生を同時に行うために電力が足りなかったと考えました。
- 最終更新:2015-05-19 16:14:45