1日1回だけメールを送信する

100円均一のストップウォッチをRTCとして使う


こちらのペー ジで100円ショップのデジタル時計をRTC代わりに使う記事が紹介されています。
そこで、私も近所の100円ショップを探して見ましたが、同じ時計を見つけることができませんでした。
そこで、時計の代わりにダイソーのストップウォッチを使ってみました。



このストップウォッチにはこのようなアラーム機能が付いています。



裏蓋のねじを外してみるとこのようになっています。


このスプリング部分が裏蓋の圧電振動板に触れています。


そこで、テスターを当ててみました。


アラームセットした時間になるとこの端子間の抵抗が0になることが分かりました。
そこで、この端子にジャンパーをつけました。



UNOを使ってこのようなスケッチで1週間ほど様子を見ました。
A0ピンを定期的に監視して、前回値との差が一定以上になったらシリアル通信するだけです。
注意点として、アラームは60秒間続くので、一度アラームを検出したらdelay時間を60秒に変更して
連続動作するのを防いでいます。
抵抗値とAlarmの値は現物あわせで調整してください。



/*
 * Software Serial Send Sample
 */
#include <SoftwareSerial.h>

#define rxPin 2    // PD2
#define txPin 3    // PD3
#define inPin A0   // PC0
#define Model "ATmega328P"
#define Alarm 200

SoftwareSerial mySerial(rxPin, txPin); // RX, TX

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(inPin,INPUT);
}

void loop() {
  int val;
  static int val0 = 0;
  int delta;
  static unsigned long interval = 100;
 
  // put your main code here, to run repeatedly:
  val=analogRead(inPin);
  if (val0 == 0) val0 = val;
  delta = abs(val - val0);
  Serial.print("val=");
  Serial.print(val);
  Serial.print(" val0=");
  Serial.print(val0);
  Serial.print(" delta=");
  Serial.println(delta);
  if (delta > Alarm) {
    mySerial.print("Alarm deletected ");
    mySerial.println(Model);
    interval = 60000UL;
  }
  delay(interval);
  interval = 100;
}

Raspberryとシリアル通信を行うようにして10日間ほど様子を見ました。



10日で15秒ほど進みますが、100円なので....

このようなRTCモジュールを使って時間を監視することもできますが、起動する時間を変えたいときはスケッチの変更が必要になります。
ストップウォッチを使うと、起動時間の変更はストップウォッチ側のアラーム時刻を変更するだけで済みます。


今回は1日1回の定時処理ですが、1日n回の定時処理を行う場合は、ストップウォッチを並列に並べるだけです。




これで1日1回、あるいは1日n回、決まった時間にメール送信を行うことができます。
こちらで 紹介されている100円ショップのデジタル時計は、毎正時のアラーム機能があるようです。
これを使えばn時間ごとにメール送信を行うことできるかも...

続く...