チーム1422
課題名
走る!めざましアラーム!!ε=ε=┏( >_<)┛
ε=ε=ε=ε=ε=┏(゚ロ゚;)┛
ε=ε=ε=ε=ε=┏(゚ロ゚;)┛
研究者名
Class 15 No.24 賈思雨
Class 15 No.25 白井穂乃
概要
普通の目覚まし時計ではどうしても起きられない・・・二度寝してしまう・・・
そんな人々のための最終兵器!
時間になるとアラームと共に目覚まし時計が走り出します。
生きているように、絶対捕まらない、うざくてしょうがない!!
残り時間が画面に表示される親切設計。
仕様
実行するとタイマーがスタートし、LCDに残り時間(秒数)が表示される。
時間が0になると
- LCDが「Alarm on」と表示
- アラームが鳴る
- モーターが動きだしラジコンが前へ進む
SWを押すとアラーム、ラジコン共に止まる。
リセットSWで再びスタートする。
プログラム:メインプログラム
#include <m8c.h> // part specific constants and macros
#include <stdlib.h>
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
#define SW1 0b00000100
#define IN1 0b00000001
#define IN2 0b00000010
int PW=125;
int SILENT=0,D=229,L=204,M=182,F=172,S=153,R=136,C=121,DD=115; //scale
int TC=(タイマーの時間×60), TC2 = 0; //time count down
char *str;
int x=0;
int flag=0; // switch のかわり
void myISR(void)
{
if(TC > 0) { TC -= 1; // count down timer } TC2++; x=csprintf(str, "%d", TC/6); PWM16_1_WritePulseWidth(PW); if(TC>=1){ LCD_1_Init(); LCD_1_Position(0,2); LCD_1_PrString(str); flag=0; } else if(TC==0){ //割り込みは1/6secごと360で1分 LCD_1_Position(0,0); LCD_1_PrCString(" Alarm On"); if(TC2%6 < 3){ PWM16_1_WritePeriod(C); } else{ PWM16_1_WritePeriod(S); } flag=1; }
}
void main(void)
{
// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here. PWM8_1_Start(); PWM8_2_Start(); LCD_1_Start(); M8C_EnableGInt; PWM16_1_Start(); Timer16_1_EnableInt(); Timer16_1_Start(); //モーターの設置: PRT1DR &= (~SW1); while(1){ if(flag==1){ PRT1DR &= (~IN2); PRT1DR |= (IN1); }else{ PRT1DR &= (~IN2); PRT1DR &= (~IN1); } if(PRT1DR&SW1){ flag = 0; PWM16_1_Stop(); } }
}
PSoCの配線
- 使用したModule
LCD :時間の表示
PWM16 Timer16:タイマー割り込み
PWM8 :モーター
- モジュールの配線
Motorの配線・表示画面
全体の配線
LCDに映る時間
アラームが鳴るときの表示
外部電源
使用器具
PSoC基盤
MiniProg
ジャンパ線
ラジコン(モーター)
DCモーター用フルブリッジドライバ(モーター動作用集積回路)
ねじ若干
スピーカー
考察
参考にした演習…hello_world, motor,timer_pwm2
- タイマーとモーターを同じ基盤内で実装させた。
- モーターを動かす為に周波数が60hzなのでTCに設定する数字はセットしたい時間の60倍にする必要がでてしまっている。
- 時間の設定が本体では出来ないがスイッチを取り付けたりシリアルポート通信によって装備は十分に可能である。
- PSoCは16進数しか対応していないためcsprintfを用いて時間を表示させた。 そのため少し表示がチカチカする。
- 電池のみでラジコンを動かしたかったが、電力が足りず外部電源に断念した。
- スピーカを取り付ける時、ねじを入れすぎて、モーターとくっつける歯車の動く邪魔になった。それで、片方の車輪しか動かなくなった。
一つのモーターが止まると、電力が全部もう一つのモーターに入るので、少し邪魔されても動く、というのがモーターの特性だと考えられる。
ε=ε=┏( >_<)┛
- 最終更新:2014-06-17 15:52:32