2020年2月4日火曜日

M5StickCでクォーツ時計を簡単駆動(分解不要)

Arduinoなどのマイコンで市販のアナログクォーツ時計を駆動する方法は数多く紹介されていますが、どれも時計を分解して、内部にあるステップモーターに配線する必要がありました。しかし、分解するときにプラスチックのツメが折れてしまったり、ギヤがばらばらになって組み立てができなくなってしまう場合がありました。

ここで紹介する方法では、時計を分解する必要がなく、時計の電池ホルダーから2本の電線でM5StickCと接続するだけで、時計の制御ができます。

全体像です。時計はダイソーで100円で売っているもので、文字盤の直径が11.5cmです。


配線は、時計の電池ボックスのマイナス端子をM5StickCのGND端子へ、プラス端子をM5StickCのG26へ接続します。



M5StickCで下記のスケッチを実行すると、時計の秒針が約1.5秒で2ステップ(2秒に相当)進みますので、約45秒で針が一周します。delay(50)の数値を大きくすると秒針はゆっくり動くようになります。

void setup() {
  pinMode(26, OUTPUT);
}

void loop() {
  dacWrite(26, 255*15/33);
  delay(1450);
  dacWrite(26, 0);
  delay(50);
}

このスケッチで動いている時計の動画です。



下記のスケッチは、秒針が約0.5秒で2ステップ進みます。ただしこの方式では、loop()内の最初のdelayの数値239はかなり微妙で、値を1増減しただけでも動かなくなったりしました。時計の置き方にも影響され、同じ時計でも個体間差がありそうです。

void setup() {
  pinMode(26, OUTPUT);
  for (int i=0; i<2; i++) {
    dacWrite(26, 255*15/33);
    delay(1450);
    dacWrite(26, 0);
    delay(50);
  }
}

void loop() {
  dacWrite(26, 255*15/33);
  delay(239);
  dacWrite(26, 0);
  delay(261);
}


このスケッチで動いている時計の動画です。



変わった針の動きの時計や、夏時間と冬時間の自動切換えなどに応用できると思います。