ラベル 時計 の投稿を表示しています。 すべての投稿を表示
ラベル 時計 の投稿を表示しています。 すべての投稿を表示

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);
}


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



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

2019年5月6日月曜日

ESP32で古時計の精度改善

これまではCPUとしてESP8266を使っていましたが、今回はその上位バージョンであるESP32とOLEDディスプレイが合体したボードを使って、機能と性能の向上を図りました。
モジュールの写真です。


時計と組み合わせた写真です。左が普通の振り子時計(以下重力振り子時計と呼びます)、右は回転振り子時計です。



動作原理を説明します。
振り子に取り付けられた磁石の磁力線を磁気センサーが検出して振り子のタイミングを認識し、時計のギヤ比を使って時計が指している時刻を算出します。一方正確な時刻は、WiFiを通してNTPサーバーから取得します。これらを比較して、時計が遅れている場合は振り子の周期が短くなるように、進んでいる場合は振り子の周期が長くなるように、調整します。

重力振り子の場合は、振り子に取り付けた磁石に対して、電磁コイルで上下方向の力を加えます。これは重力加速度が変化したのと同等の効果があるので、振り子の周期が変化します。下の写真の黒い楕円がコイル、振り子の下端についている円柱状のものが磁石、その直下にホールセンサーが黄色いワイヤーでコイルに固定されています。


回転振り子の場合は、振り子に取り付けた磁石に対して、電磁コイルで水平方向の力を加えます。これは振り子を吊っているワイヤの捻じりばね係数が変化したのと同等の効果があるので、回転振り子の周期が変化します。下の写真は回転振り子に取り付けた正方形の磁石。
下の写真は、ベースプレートの裏に取り付けた、コイルとデジタルコンパスです。



ディスプレイには、現在時刻、誤差、コイル電流に加え、誤差とコイル電流のグラフも表示されます。下は回転振り子時計の例です。2行目の-0000.04が0.04秒の遅れを示しており、113はコイル電流です(範囲は-1023から1023で、最大電流は100mA程度)。
グラフのX軸の範囲は約5時間、Y軸の誤差は+/-0.5秒の範囲を表示しています。


Webサーバーの機能も備えているので、WiFi経由でブラウザからアクセスできます。下の例はパラメータの設定画面です。


重力振り子時計の実験結果です。青が誤差で縦軸は左側、赤がコイル電流で縦軸は右側です。約1週間の測定でほぼ+/-0.1秒以内に収まっています。左の大きな変動は、時計を動かしたためのもの、右側の変動は周囲に置いたものによる影響と思われます。


重力振り子時計用の回路図です。
磁気センサーはデジタル出力のホール素子です。


回転振り子時計用の回路図です。
磁気センサーはi2c接続のデジタルコンパスです。

以下2020年5月17日追記

ソースコードはこちらです

ハードウェアをブログにアップしてから1年近くが経ってしまい、その間にソフトはだいぶ変更されたので、Web画面の構成など写真とは一部異なります。かなり強引なコーディングなので、より良い書き方がありましたら、教えていただけるとありがたいです。


2018年7月28日土曜日

棒テンプ時計の精度アップ Ver3

メーカーフェア東京2018に出展しました。ご来場の皆様ありがとうございました。


Ver2(リンクはこちら)では糸の長さ調整をリニアサーボで行っていましたが、動作音が大きいのと、故障しやすいことから、ステップモーターに変更しました。

写真です。ステップモーターのねじのストロークは約17mmです。



ステップモーターのドライバーとしては、TIのDRV8834を載せたPololuのボードを使用しました。電流制限があまり小電流にならないので、ENABLE端子をSTEP端子と接続して、パルスの無いときは電流を流さないようにしています。
回路図です。



3日ほど連続で動かして、誤差は+/-10秒に入っています。下の写真が直近8時間のデータで、青い線が誤差(左目盛り、単位秒)、赤い線が制御出力の相対値のグラフです。



2018年6月13日水曜日

振り子時計の精度改善 - その2

メーカフェアプラハでMAKER of MERIT賞をいただきました。
メーカーフェア東京2018にご来場の皆様、ありがとうございました。




以前実験に使った振り子時計(リンク)は、大きすぎてメーカーフェアに持って行けないので、小型の振り子時計を入手しました。高さ50cm程度のものです。



ドアを開けたところ。



調整デバイスはWROOM-02-DEVを使って作り直しました。



遅れ進みのデータをブラウザでグラフ表示(青線)できるようにしました。正が進み、負が遅れです。+2/-1秒以内に収まっています。赤線は正が振り子を上方向に押し上げる方向、負が振り子を下に引っ張る方向の磁力線の強さを表します。



振り子を350秒ほど止めた後の復帰の状況です。約4時間で誤差がなくなっています。(上はスマホの画面ですが、こちらはタブレット)。



回路図です。



ソースコードはこちら(Source Code)


2018年5月19日土曜日

錘式時計の自動巻き上げ機構

写真の棒テンプ時計は、1日に2回ほど錘を巻き上げる必要があり、結構面倒なので、これを自動化する機構を考えました。錘の紐をループにして、ゆっくり回るモーターで引っ張ります。





モータはAC100Vで1分間に1回転する仕様のものです。これに木製のプーリーを取り付け、紐をかけます。下にぶら下がっているボトルが錘の代用で、330㏄の水が入っています。この重さで紐とプーリーの摩擦を適度に調整します。



下の写真で木製プーリーは反時計方向に回転します。小さいアイドラは紐の引っ張り力を一定に保つ効果を持たせるために付けいています。なんらかの理由で引っ張り力が強くなると、モーターが時計回りに傾くので、モーターケースに固定されているアイドラが紐を右側押して、紐とプーリーの接触の長さが短くなり、引っ張り力が小さくなるという仕掛けです。アイドラの有り無しでの違いは検証してませんが、とにかく、1日2回の巻き上げをしなくて済むようになり、快適です。


2018年4月18日水曜日

棒テンプ時計の精度アップ Ver 2


メーカーフェア東京2018に出展します。



昨年のメーカーフェアでは、棒テンプの慣性モーメントを変えて往復回転運動の周期を調整するデバイスを紹介しました(リンクはこちら)。

今回は、棒テンプを吊っている糸の長さを変えることによって周期を調整する方式に変更しました。こうすることによって、デバイスは時計本体に固定されるので、ACアダプタから電源を供給できるようになりました。消費電流を気にしなくてよいので、WIFIでネットに接続してNTPから正確な時刻を取得します。またデバイスにWebサーバーを持たせ、タブレットなどのブラウザで履歴の確認やパラメータの変更ができるようにしました。


全体像です。本デバイスは時計本体の上部に固定され、赤外線センサーで棒テンプの回転を検出します。これより計算された時刻と、正しい時刻を比較し、誤差に応じて棒テンプを吊っている糸の長さを調整します。長さが長いときは棒テンプの周期も長くなり、短くなると周期も短くなります。


デバイスを上から撮った写真です。



デバイスを正面から撮った写真です。



周期調節部分の拡大です。吊り糸押さえより下の部分のみが捻じれるようにしてあります。吊り糸押さえを上下することにより、吊り糸の実効長を変化させ、棒テンプの周期を変えています。



回路図です。



タブレットで時刻誤差(秒)の履歴の一部を表示した写真です。109分前に8秒遅れ、60分前には11秒の進み、現在は4秒の遅れという履歴が読み取れます。棒テンプの周期が約4秒なので、現在のアルゴリズムではとびとびの秒数となります。最大15時間分の履歴が表示されます。



実験に使った棒テンプ時計は、ギヤが木製で、きちんとメンテナンスをしていなので、一日数分の誤差が生じ、これが毎日累積していく状態でした。この時計に本デバイスを取り付けて、自動調整を行った結果、一日の誤差は1分以内となりました。また時計の特性が大きく変化しない限り、原理的に誤差の累積はありません。

24時間のデータです。青が時刻の誤差(秒)です。