Arduinoで遊んでいるといつも電源で悩みます。だいたいモバイルバッテリーをつないで済ますのですが、結構大きくて邪魔だったりします。で、なにかいいものないかなと思っていたのですが、部品箱を漁っていたらLIR2032を2個入れる電池ボックスを発掘しました。
お!これは行けそうだということでVINにつないでみるとちゃんと動作\(^_^)/でもどのくらいの時間もつかなぁと調べようとしたのですが、じっと見張っているのも馬鹿らしい…
ちょうどマルティファンクションシールドというのが余っていたので、信号がHIGHになってからLOWになるまでの秒数を7セグLEDに表示するのを作りましたw(写真右)
計測してみると5分程度しかもたないみたいです…ただ、ボタン電池が購入してから1年以上放置していたものなので劣化してしまっている、あるいは、中華なので最初から不良なんて可能性もあります^^;
ちなみに動作させた左側のArduinoは孫の夏休みの自由研究用にと用意したFMラジオです。元は宿題用にバラックだったのですが、興味を示さなかったのでボツ。ジィジの記念用にケースというかワーキンベースというかを3Dプリンターで印刷しました^^;
時間計測しかできませんが意外と便利だったのでソースを公開します。
お!これは行けそうだということでVINにつないでみるとちゃんと動作\(^_^)/でもどのくらいの時間もつかなぁと調べようとしたのですが、じっと見張っているのも馬鹿らしい…
ちょうどマルティファンクションシールドというのが余っていたので、信号がHIGHになってからLOWになるまでの秒数を7セグLEDに表示するのを作りましたw(写真右)
計測してみると5分程度しかもたないみたいです…ただ、ボタン電池が購入してから1年以上放置していたものなので劣化してしまっている、あるいは、中華なので最初から不良なんて可能性もあります^^;
ちなみに動作させた左側のArduinoは孫の夏休みの自由研究用にと用意したFMラジオです。元は宿題用にバラックだったのですが、興味を示さなかったのでボツ。ジィジの記念用にケースというかワーキンベースというかを3Dプリンターで印刷しました^^;
時間計測しかできませんが意外と便利だったのでソースを公開します。
/** * 時間計測器 * * filename: Uno-Timer.ino * * @version 1.0.0 * @copyright Copyright (C) 2019 Yoshio Kiya All rights reserved. * @date 2019-09-01 * @author 木屋 善夫 */ #include <TimerOne.h> #include <Wire.h> #include <MultiFuncShield.h> enum { WAITING, STARTED, STOPED, }; uint8_t mode; unsigned long startTime; unsigned long offTime; unsigned long stopTime; #define PIN_INPUT 5 void setup() { Timer1.initialize(); MFS.initialize(&Timer1); // initialize multi-function shield library pinMode(LED_BUILTIN, OUTPUT); pinMode(PIN_INPUT, INPUT); int pin = digitalRead(PIN_INPUT); digitalWrite(LED_BUILTIN, !pin); MFS.write(-1); mode = WAITING; } void loop() { int pin = digitalRead(PIN_INPUT); digitalWrite(LED_1_PIN, !pin); unsigned long now = millis(); // モードごとの動作 switch (mode) { case WAITING: { // 起動前 if (pin) { // スイッチがオンになった mode = STARTED; startTime = now; digitalWrite(LED_2_PIN, LOW); // 点灯 } else { digitalWrite(LED_2_PIN, (now >> 9) & 1); } break; } case STARTED: { if (!pin) { // スイッチがオフになった mode = STOPED; stopTime = millis(); digitalWrite(LED_3_PIN, LOW); // 点灯 } else { digitalWrite(LED_3_PIN, (now >> 9) & 1); } int sec = (int)((now - startTime) / 1000); int min = sec / 60 * 100; sec = sec % 60; MFS.write(min + sec); break; } case STOPED: { if (pin) { mode = STARTED; digitalWrite(LED_4_PIN, HIGH); // 消灯 } else { digitalWrite(LED_4_PIN, (now >> 9) & 1); } break; } } delay(100); }
使い方は、マルチファンクションシールドの右下の方にある A5 ピンに信号線をつなぎ、GND どうしを接続してください。
マルチファンクションシールドの右にあるLEDの意味は上から
マルチファンクションシールドの右にあるLEDの意味は上から
- ウォッチドク:動作中は約0.5秒間隔で点滅します。
- スタンバイ:信号線が HIGH になるのを待っています。
- 計測中:最初に信号が HIGH になってから最後に LOW になるまでの時間を7セグLEDに「分分秒秒」で表示します。
- 計測終了:信号が HIGH になると 3. に戻ります。