1本のワイヤで正確なArduinoの時計を作る - 外付けのハードウェアは不要です。

1本のワイヤで正確なArduinoの時計を作る - 外付けのハードウェアは不要です。

目次:

Anonim

Arduinoの時計の作り方 - 外部発振器や時計チップを使わずに:

(私たちの研究ウェブサイト上の私のプロジェクトの詳細 - ホームページのarduinoロゴトップをクリックしてください)

必要になるだろう:

Arduinoボード(どんな風味でもうまく動作します)とソフトウェア

1つのLED

1ジャンパー線

(配線例を下記に更新)

私は20年以上の電気技師で、数ヶ月前にArduinoプラットフォームを発見しました。言うまでもなく私はそれに恋をし、今プロジェクトに夢中になっています。今年のクリスマスには、両親への心からの贈り物にしたいと思いました。私の母にとって、それは間違いなく「1の」時計デザインでした。私は夏時間やうるう年についていくのではなく、単に曜日と時刻を正確に守っています。

しかし、ユニークで正確な方法でクロックパルスを生成する方法は?確かに私はファンシーなエンベデッドクロックICか一般的な32,768クリスタルオシレータを使うことができました、しかし、私は他のものとは違う何かが欲しかったです。私は555タイマーを使って100Hzの安定した方形波を出力し始めました。これはかなりうまくいきましたが、私は1時間に約1秒を失いました。問題ありません - 私はちょうどソフトウェアで欠けている秒を修正するためのアルゴリズムを書きました。私は幸せでした。それから私はArduinoの内部タイマーが計時のために完全に信頼できなかったけれども、アナログPWM出力が490Hzの非常に安定した方形波を持っていたことを発見しました。デューティサイクルは、アナログピンに書き込まれた値によって決まります。 (すなわち、−0はゼロボルト、127は50%デューティサイクル、255は論理ハイ/ 5V)。

私は、割り込みピン2に直接配線されたPWMアナログ出力を試してみることにしました、そして、それはとてもうまくいきました!さらに、ソフトウェアによる補正を必要とせずに、私のコンピュータのリアルタイムクロックに完全に追いつきました。私は何日もそれを走らせていました、そして私が望んだようにそれは実行し続けています….すべて1本のワイヤーといくつかのコードで。

完成品のギフトには、プレキシガラスの筐体に収められた、電源とロジック用のEagle CADカスタムPCBがあります。全体のテーマは、アナログ時計を模したアイスブルーのLED照明です。エンクロージャには日中、時刻、および室温を表示する白色の青のLCDがありますが、シリアルケーブルはプロジェクトボックスから実際の時計に接続します。 12ビットの10進数カウンタ、サーボ、そしてたくさんの青いLEDを使って、私はプレキシガラスに印刷されたカスタムデザインのアナログ時計の文字盤に適切な時間セグメントを照らしています。サーボは時計の文字盤の中央に取り付けられ、ガラスの後ろの分を照らすために取り付けられたLEDが取り付けられた電機子を持っています。 (毎分サーボが6度回転し、適切な分が点灯します)。私はそれがもうすぐ完成することを願っています、そして最終的な製品のビデオを作るであろう….私は彼女がそれを愛することを願っています!

この方法を使ってあなた自身の時計を作るための簡単なArduinoの配線図とデモコード。必要に応じて、555タイマー@ 100Hzの使用方法を示すCircuit Labへのリンクもあります。

以下のコードとリンク…

555タイマー発振器回路(この方法を試したい場合)

www.circuitlab.com/circuit/b575r9/555-100hz-oscillator/

時計デモコード:

/ *シンプルな内部時計のデモ:Joseph Unik別名Relic1974によって

50%デューティサイクルで490HzのアナログPWM出力を

非常に正確な時間を保ってください;)。 LEDをピン13に接続して

秒針が点滅します。アナログピン0からジャンパを接続

デジタル・ピン2(割り込み0)へ。シリアルへの分出力

モニター。 http://www.planetxresearch.com 'Arduino'ロゴ

より多くのプロジェクトやトリックのために…

(完全に機能的に拡張するためにこのコードを自由に使用してください。

時計やクリエイティブコモンズの下で他のプロジェクト;)

*/

int clockInt = 0。 //デジタルピン2は割り込み0になりました

int masterClock = 0。 //立ち上がりエッジクロック信号をカウント

int秒= 0。 //変数

int minutes = 0。 //変数

int ledPin = 13。

void setup()

{

attachInterrupt(clockInt、clockCounter、RISING);

// clockIntは私たちの割り込みです、clockCounter関数はいつ呼び出されるか

// RISINGクロックエッジで呼び出されます

analogReference(デフォルト);

pinMode(ledPin、OUTPUT);

Serial.begin(57600);

analogWrite(0、127); //これはPWMの「クロック」を50%のデューティサイクルで開始します

}

void clockCounter()//割り込みによって呼び出される

{

masterClock ++; //クロックが上がるごとにmasterclockカウントに1を加える

if(masterClock == 489)// 490Hzに達した

{

秒++; // 490Hzの1サイクル後に1秒を追加します。

masterClock = 0。 // 1秒後にリセット

トーン(13、100、500)。 //ディレイコールなしでトーンを使用してLEDを点滅させる

}

戻る

}

void loop()

{

if(seconds == 60)//リアルタイムキープに入る

{

分++; //分を1増やします

秒= 0。 // seconds変数をリセットします

Serial.print( "Minutes =");

Serial.println(minutes);

}

}

私のプロジェクトのデモはこちら

用品: