最近、働き方改革とやらで、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);
}