2014年05月23日

Arduinoでタイマーっぽいものを作ってみた

ArduinoUNOを使って、今日はタイマーっぽいものを作ってみました。先日ブレッドボードに12個のLEDを乗せて光らせてみたのですが、そのLEDをあやつる感覚を楽しめるようなものを考えました。

完成した様子はこんな感じです。
IMG_5099S.jpg
青い可変抵抗をまわすとLEDが1個〜10個までの間で点灯したり消えたりします。LEDの数が計測する時間の長さを表していて、タクトスイッチを押すと計測が始まります。時間を計り終えると圧電ブザーが鳴るようにしました。
IMG_5100S.jpg

スケッチは少々複雑になりましたが、設定モードと計測モードの2つのモードを持っていて、設定モードのときタクトスイッチを押すと計測モードに入り、計測モードが終了したら(設定した時間が経過したら)設定モードに戻るようにしました。

設定モードでは可変抵抗の値(0〜1023)を10段階の値に変換し、点灯するLEDの数を決めています。
IMG_5101S.jpg
タクトスイッチが押されたら、そのときのLEDの数を初期値としてカウントダウンを始めます。すぐに終わってしまってはつまらないですし、かといって時間がかかりすぎても退屈してしまうので、LED1個あたり10秒かぞえることにしました。
数えているときは端のLEDが点滅するようにし、点滅しながら圧電ブザーからピッコッピッコッという音が出るようにしました。

プログラム内ではdelay()を使ってタイマーっぽく動かしているのですが、本当は割り込みを使わないと正確な時間は計れないと思うので、近いうちに割り込みも使ってみたいと思います。

スケッチは下記のような感じです。
int val = 0;
int mode = 0; //0=setup 1=run
int time = 0;
int sec = 10;
int bPin = 3;
int sPin = 2;
int vPin = A0;
void setup(){
Serial.begin(9600);
for(int i = 4; i <=13; i++){
pinMode(i, OUTPUT);
}
pinMode(bPin, OUTPUT);
pinMode(sPin, INPUT_PULLUP);
}

void loop(){
if(mode == 0){
val = analogRead(vPin);
time = 11 - (val / 100);
showled(time);
delay(100);

if(digitalRead(sPin) == LOW){
mode = 1;
sec = 10;
tone(bPin,3520,100);
delay(1000);
}
}

if(mode == 1){
showled(time - 1);
tone(bPin,1760,50);
delay(450);
showled(time);
tone(bPin,880,50);
delay(450);
sec = sec - 1;
if(sec == 0){
sec = 10;
time = time - 1;
if(time == 0){
mode = 0;
showled(10);
tone(bPin,880,2000);
}
}
}
}

void showled(int time){
for(int i = 1; i <= 10; i++){
int pin = i + 3;
if(i <= time){
digitalWrite(pin, HIGH);
}else{
digitalWrite(pin, LOW);
}
}
}


posted by はるこち at 23:20| Comment(0) | TrackBack(0) | ロボット/IoT | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。