不均一な稼働時間



この時計のアイデアは、それらの矢印が不均等に動き、加速または遅れることですが、それにもかかわらず、平均して時計は正しい時間を示しています。 次に、その方法を説明します。



検死



クォーツ時計の壁に基づいています。 彼らはあなたが望むように設計することができます、しかし、ケースの99%で、プラスチック部品が中にある標準的な中国の動きがあります。 以下がその1つです。





ケースをオープンし、同時に空きスペースの可用性を確認します。これは非常に有益です。





どのギアがどこに置かれているかを忘れないように、メカニズムを慎重に分解します。





クロックは、ステッピングモーターによって駆動されます。ステッピングモーターは、巻線を備えたステーターと永久磁石を備えたローターで構成されています。 電気パルスが1秒間に1回巻線に供給され、各パルスでローターが180°回転します。 分解されたエンジンは次のとおりです。





クロックジェネレーターボードは、巻線の裏側に固定されています。 これは次のようなものです。





脳移植



クロックメカニズムは、主に「put what is」原理に基づいて選択されたATtiny13Aマイクロコントローラーによって制御されます。 約100ミリ秒の持続時間の極性パルスを交互にモーターに印加する必要があります。 各パルスは秒針を1マーク移動します。

ご覧のとおり、すべてが非常に簡単です。2つの出力を持つコントローラーを巻線に接続し、電源を投入します...停止します! しかし、この時計は1.5ボルトのバッテリーで駆動され、ATtiny13Aの最小動作電圧は1.8ボルトです。 になる方法 実際、AVRコントローラーは1ボルト以下の電源電圧( たとえば )でも動作しますが、2つの条件下で動作します。 まず、クロック周波数は数十キロヘルツの範囲で低くなければなりません。 第二に、タイミングは外部ソースからのものでなければなりません。

外部クロックはどこで入手できますか? 解決策は明らかです。通常のクロックジェネレータから。 32 768 Hz (2 15 Hz)の周波数の信号を生成します。これは、クオーツリードの1つ(実験的に決定)から除去できます。 ボードとはんだワイヤを使用して、電力、クロック信号を除去し、エンジンを制御します。 また、ネイティブジェネレーターから巻線の端子までトラックを切断する必要があります。





マイクロコントローラーの接続図は、2ペニーのように単純です。





2つの点に注意するようにお願いします。 まず、超低電圧ではポートの出力キーが完全に開かないため、抵抗を減らすために、出力はペアで並列化されます( PB0PB1 、およびPB2PB4 )。 第二に、電源回路のコンデンサは、漏れ電流が最小のタンタルでなければなりません。

コントローラはブレッドボードのトリムに取り付けられ、ケースの隅の空きスペースに完全に配置されています。





MKを回路内で直接フラッシュすることはできないため、意図的にはんだ付けするのではなく、ソケットに取り付けることを強くお勧めします。



ファームウェア



時計のロジックは次のとおりです。秒針のステップ間の間隔はランダムですが、ムーブメントの精度が損なわれないように、正確に1分で完全に回転する必要があります。 パルス間の最小間隔は1/4秒であることが実験的に確立されました。矢印をより速く移動しようとすると、ステップがスキップされます。 これに基づいて、各間隔の期間をこの最小値の倍数にします。 1分ごとに240の「ティック」に1分ごとに分割すると便利です。

ファームウェアの作成中に発生した主な問題は、分を60の間隔にランダムに分割する方法でした。 数時間かけて数枚の紙を書いた後、2つのアルゴリズムを作成しました。 1つ目は、240個の要素の配列を作成することで、すべての「ティック」の番号が配置されました。 次に、59個の要素が配列からランダムに選択されました。各要素は、矢印が移動する「目盛り」の数を表していました。 2番目のアルゴリズムは、4秒間隔(16ティック)をランダムに2つの部分に分割し、各部分を2つに分割しました。 これらの操作を15の間隔で実行した後、1〜13の「ティック」の範囲で60の値が取得され、これらすべての値の合計はちょうど240でした。

残念ながら、このMKのメモリサイズが非常に小さいため(1 KBのフラッシュと64バイトのSRAMのみ)、ATtiny13に最初または2番目のアルゴリズムを実装できませんでした。 おそらくいくつかのアセンブラーの達人がこれを行うことができますが、私はそれをより簡単に、そしてコードを1つの時間間隔の表に厳密に打ち込みました。 矢印のリズムが毎分繰り返されるという事実は、すぐには明らかにならないはずです。

プログラムは次のように構成されています。 タイマー割り込みによる各ティック(1/4秒)が生成され、その間にティック番号がチェックされ、必要に応じてモーター巻線に電圧が印加され、次の間隔の持続時間がテーブルから抽出されます。 100 ms後、2番目の割り込みが生成され、これにより巻線に供給される電圧がオフになります。 残りの時間、コントローラは電力消費を削減するためにスリープモードになります。 完全なソースコードへのリンクは、記事の最後に記載されています。

外部クロックモードを有効にするには、コントローラーのヒューズビットをフラッシュする必要もあります(工場出荷時以外の値は強調表示されています)。



SELFPRGEN = 1

DWEN = 1

BODLEVEL1 = 1

BODLEVEL0 = 1

RSTDISBL = 1

SPIEN = 0

EESAVE = 1

WDTON = 1

CKDIV8 = 1

SUT1 = 1

SUT0 = 0

CKSEL1 = 0

CKSEL0 = 0



この方法でヒューズを取り付けた後、外部クロックソースがないとコントローラーを再フラッシュできないことに注意してください。



組立



そのため、コントローラはプログラムされ、ボードにインストールされ、接着剤の滴でケースに固定されます。 メカニズムを元に戻し、矢印を修正して結果を楽しむことができます。





はい、私の時計は反対方向に進み、ランダムな観察者をさらに狂わせます。



参照資料



  1. ファームウェアのソースコード: http : //pastebin.com/P3y6wBUh
  2. 類似プロジェクト: Vetinari's Clock
  3. 超低電圧AVR操作: AVRをRFIDタグとして使用



All Articles