1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

12時間タイマー

Last updated at Posted at 2019-12-29

最近、働き方改革とやらで、12時間以上会社にいてはいけないというルールが流行っているらしい。

出社時間が日によってまちまちな自分は、本日の12時間期限が何時なのか、よくわからなくなる。なので、わかりやすい12時間タイマーが欲しいと思った。こういう感じのもの。
https://www.amazon.co.jp/dp/B07MTL166J/ref=cm_sw_r_tw_dp_U_x_xnkcEbPN0H31F

しかし、いざ探してみると1時間はあっても12時間ものはない。
ということで、1時間ものタイマーを12時間にしてみた。

当初、クォーツ式のムーブメントへの入力クロックを12分周させようかなと思っていた。しかし、便利ワンチップが見つからず、FlipFlop組み合わせて12分周させるのが案外面倒そうだったので、転がっていたArduino UNOに逃げた。

下に名刺ケースを両面テープで貼り付けてUNOを収納。やっつけ感たっぷり。

PIN2と4でムーブメントを動かす。元の基板は無視。タイマー終了接点から200ΩでPIN5に入力し、ムーブメント動作を停止させる。表の顔も0〜60のままでは混乱しそうなので、0〜12版をそれっぽく作り変更。動いてるかどうか不安になるので、UNOのビルトインLEDを秒で点滅するようにした。

完成。電源はUSBになり電池も不要になった。
来年から使おう。
実は、結構需要あったりしないかしら?これ。

スケッチはこちら。久々にArduino触ったけど、お手軽でいいね。
元基板の動作を観測してみるとムーブメントへは30msec幅でクロックが入っていたので、それに習う。

const int clk_pin1 = 2; // for movement
const int clk_pin2 = 4; // for movement
const int stp_pin  = 5; // for timer end
const int pulse_time = 30;
const int delay_time = 1000 - pulse_time;
const int clk_counter_default = 12;  // 12 minutes
int clk_counter = clk_counter_default;
bool isLed = false;
bool isPin1 = false;

void pulse() {
  if (digitalRead(stp_pin)) {
    digitalWrite(LED_BUILTIN, LOW);  // 停止
    clk_counter = clk_counter_default;
    return;
  }
  digitalWrite(LED_BUILTIN, isLed);
  isLed = !isLed;
  if (--clk_counter > 0) {
    return;
  }
  clk_counter = clk_counter_default;
  
  if (isPin1) {
    digitalWrite(clk_pin1, HIGH);
    delay(pulse_time);
    digitalWrite(clk_pin1, LOW);
  } 
  else {
    digitalWrite(clk_pin2, HIGH);
    delay(pulse_time);
    digitalWrite(clk_pin2, LOW);
  }
  isPin1 = !isPin1;
}

void setup() {
  // put your setup code here, to run once:
  digitalWrite(clk_pin1, LOW);
  digitalWrite(clk_pin2, LOW);
  pinMode(clk_pin1, OUTPUT);
  pinMode(clk_pin2, OUTPUT);
  pinMode(stp_pin, INPUT); // 停止確認用
  pinMode(LED_BUILTIN, OUTPUT); // 動作確認用
}

void loop() {
  // put your main code here, to run repeatedly:
  pulse();
  delay(delay_time);
}

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?