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. に戻ります。


























