Arduinoを使用したDIYの最もシンプルなIV9Numitron時計
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 4 | ||||
| × | 4 | ||||
| × | 2 | ||||
| × | 4 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
| |||
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
今回は、素敵なレトロスタイルのヌミトロンチューブ時計の作り方を紹介します。正しい時刻に加えて、デバイスは30秒ごとに日付、年、現在の温度を簡単に表示します。
与えられたGithubページhttps://github.com/theremotheman/simple_numitron_clock_with_4_shift_registers_and_rtc3231からこの時計を作るというアイデアを思いつきました。
最初にサイトの指示に従ってプロジェクトを作成しましたが、多くの欠陥が含まれていることがわかりました。
74HC595を使用した最初のプロトタイプは次のようになりました
<図>74HC595 ICの場合データシートによると、合計最大電流は70ミリアンペアであり、この場合は数倍を超えているため(8桁目は約160ミリアンペア)、しばらくするとICが過熱して正常に動作しなくなります。もう1つの欠点は、コードのループに遅延が多すぎるため、時間が60秒に1回だけ読み取られることです。写真では、主に上のページの指示に従って作られた完成した時計を見ることができます。最初は完全に正常に動作しますが、しばらくするとランダムなセグメントがアクティブになり、IC、ヌミトロン、またはマイクロコントローラーが非常に簡単に燃焼する可能性があります。最初のケースでは、大電流用に提供されている74HC595の代わりにTPIC6C595ICを使用することで問題が解決されました。また、これら2つの集積回路はピン互換ではないことに注意する必要があります。
<図>
-------------------------------------------------- --------------------------------
https://www.pcbgogo.com/promo/from_MirkoPavleskiMK
-------------------------------------------------- ---------------------------------
また、新しいコードは、delay()関数の代わりにmillis()を使用して作成されたため、リアルタイムクロックが常に読み取られます。また、ヌミトロンの光の強さ、つまり寿命を変えるスイッチを追加しました。ご覧のとおり、このデバイスは比較的簡単に作成でき、これがチューブクロックを作成する最も簡単な方法だと思います。ヌミトロンは安価で入手が容易で、追加の高電圧電源を使用しません。
この時計を作るのに必要な部品はほんのわずかです:
-4つのNumitronチューブIV9
-4つの集積回路TPIC6C595
-Arduinoマイクロコントローラー
-DS3231リアルタイムクロックモジュール
-2つのLEDを数秒間
-スイッチ
-および4つのデカップリングコンデンサ
<図>リアルタイムモジュールには温度計も含まれているため、温度をより正確に表示するために、ボックスの外側に配置され、メッシュで保護されています。まず、リアルタイムクロックをPCクロックと同期させることが望ましく、DS1307RTCライブラリを使用して同期します。次に、コードをアップロードすると、デバイスの準備が整います。ボタンを使用して時間を設定できるようにコードを変更する必要があり、プロジェクトの更新として次の期間になります。
最後に、時計は適切なボックスに取り付けられており、すべてのショーケースで美しい装飾が施されています。
コード
- Arduinoコード
Arduinoコード C / C ++
#include// ds3231RTC_DS3231の温度を使用したrtcrtc; //使用するrtcモジュールの設定#include // widget#include // time lib#include // time function#include // rtc #include #define led 7const intラッチピン=13; //ラッチコンストintclockPin =10; // clockconst int dataPin =11; // dataunsigned long previousMillis =0; //最後にLedが点滅した時間を保存しますlonginterval =30000; //点滅する間隔(ミリ秒)unsigned long previousMillisDiode =0; //最後にLedが点滅した時間を保存しますlongintervalDiode =500; //点滅する間隔(ミリ秒)const int nums [12] ={//表示配列の設定-ドキュメントによると:pin1は一般的、pin2はドット(スケッチでは使用されない)、残りはシフトレジスタに1つずつ接続する必要があります1つの0b10111110、// 0 0b00000110、// 1 0b01111010、// 2 0b01101110、// 3 0b11000110、// 4 0b11101100、// 5 0b11111100、// 6 0b00001110、// 7 0b11111110、// 8 0b11101110、// 9 0b11001010、// st。 0b10111000//celz。};inthour1; //時間の最初の数値inthour2; //時間秒数intminute1; //分最初のnumberintminute2; //分秒数intday1; //日最初のnumberintday2; //日2番目の数値intmonth1; //月の最初の数値intmonth2; //月の2番目の数値intyear1; //年の最初の数値-定数2intyear2; //年の2番目の数値-定数0(変更するためにそれほど長く生きたいですか?)int year3; // 3年目intyear4; //年4番目のnumberinthourDecimal; // hourintminuteDecimalの10進解析; // minuteintの10進数の解析dayDecimal; // dayintmonthDecimalの10進解析; // monthintyear70の10進解析; // unix epochinttemp1の1年後; //最初の温度numberinttemp2; // 2番目の温度numberinttempDecimal; //温度の10進解析(最初の2つの数値)void setup(){pinMode(led、OUTPUT); pinMode(latchPin、OUTPUT); //ピンを出力に設定して、シフトレジスタを制御できるようにしますpinMode(clockPin、OUTPUT); //ピンを出力に設定して、シフトレジスタを制御できるようにしますpinMode(dataPin、OUTPUT); //ピンを出力に設定して、シフトレジスタを制御できるようにしますSerial.begin(9600); // SPIを初期化します:SPI.begin(); // SSピンをローにしてチップを選択します:digitalWrite(clockPin、LOW); } void loop(){tmElements_t tm; // DS1307RTCライブラリからの命名RTC.read(tm); // rtcの時刻/日付/年を読み取りますminuteDecimal =tm.Minute / 10; //出力を10時間で割って読み取り可能(短い)に解析しますDecimal =tm.Hour / 10; // 10日で除算して出力を読み取り可能(短い)に解析しますDecimal =tm.Day / 10; //出力を10か月で割って読み取り可能(短い)に解析しますDecimal =tm.Month / 10; //出力を10年で割って読み取り可能(短い)に解析します70 =tm.Year-30; // unix epoch(1970)から減算して実年を表示しますhour1 =hourDecimal; //その時間のように単純2 =tm.Hour-10 * hourDecimal; // 2桁の数字から2番目の数値のみを表示するように計算しますstringminute1 =minutesDecimal; //単純なminute2 =tm.Minute-10 * minutesDecimal; // 2桁の数字から2番目の数値のみを表示するように計算しますstringday1 =dayDecimal; //単純なday2 =tm.Day-10 * dayDecimal; // 2桁の文字列から2番目の数値のみを表示するように計算しますmonth1 =monthDecimal; //単純なmonth2 =tm.Month-10 * monthDecimal; // 2桁の文字列から2番目の数値のみを表示するように計算しますyear1 =2; //初年度の番号、本当に変更する必要がありますか?空飛ぶ車などを手に入れましたか? year2 =0; // 2年目の数字、変更する必要がある場合は、代わりに孫と遊ぶ必要がありますyear3 =year70 / 10; //出力を10で割って読み取り可能(短い)に解析しますyear4 =year70-10 * year3; // 2桁の文字列から2番目の数値のみを表示するように計算しますtempDecimal =rtc.getTemperature()/ 10; //出力を10で割って読み取り可能(短い)に解析しますtemp1 =tempDecimal; //単純なtemp2 =rtc.getTemperature()-10 * tempDecimal; // 2桁の文字列から2番目の数値のみを表示するように計算しますif(millis()-previousMillisDiode> =intervalDiode){previousMillisDiode =millis(); digitalWrite(led、!digitalRead(led)); // LEDの状態を変更} if(millis()-previousMillis> =interval){previousMillis =millis(); digitalWrite(clockPin、LOW); SPI.transfer(0b00000000); SPI.transfer(0b00000000); SPI.transfer(0b00000000); SPI.transfer(0b00000000); digitalWrite(clockPin、HIGH); delay(500); // numitronを0.5秒間オフにして、「呼吸」効果をdigitalWrite(clockPin、LOW);にします。 SPI.transfer(nums [month2]); SPI.transfer(nums [month1]); SPI.transfer(nums [day2]); SPI.transfer(nums [day1]); digitalWrite(clockPin、HIGH); delay(1500); digitalWrite(clockPin、LOW); SPI.transfer(0b00000000); SPI.transfer(0b00000000); SPI.transfer(0b00000000); SPI.transfer(0b00000000); digitalWrite(clockPin、HIGH); delay(500); // numitronを0.5秒間オフにして、「呼吸」効果をdigitalWrite(clockPin、LOW);にします。 SPI.transfer(nums [year4]); SPI.transfer(nums [year3]); SPI.transfer(nums [year2]); SPI.transfer(nums [year1]); digitalWrite(clockPin、HIGH); delay(1500); digitalWrite(clockPin、LOW); SPI.transfer(0b00000000); SPI.transfer(0b00000000); SPI.transfer(0b00000000); SPI.transfer(0b00000000); digitalWrite(clockPin、HIGH); delay(500); // numitronを0.5秒間オフにして、「呼吸」効果をdigitalWrite(clockPin、LOW);にします。 SPI.transfer(0b10111000); SPI.transfer(0b11001010); SPI.transfer(nums [temp2]); SPI.transfer(nums [temp1]); digitalWrite(clockPin、HIGH); delay(1500); digitalWrite(clockPin、LOW); SPI.transfer(0b00000000); SPI.transfer(0b00000000); SPI.transfer(0b00000000); SPI.transfer(0b00000000); digitalWrite(clockPin、HIGH); delay(500); // numitronは、「呼吸」効果を出すために0.5秒間オフになりました} else {digitalWrite(clockPin、LOW); SPI.transfer(nums [minute2]); SPI.transfer(nums [minute1]); SPI.transfer(nums [hour2]); SPI.transfer(nums [hour1]); digitalWrite(clockPin、HIGH); }}
回路図
製造プロセス
- MPU-6050を搭載したArduinoジャイロスコープゲーム
- イスラムの祈りの時間とArduino時計
- マスタークロック
- ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
- ArduinoとNokia5110ディスプレイを備えたDIY電圧計
- MobBob:Androidスマートフォンで制御されるDIY Arduino Robot
- ロータリーエンコーダー付きDIYシンプル測定ホイール
- Arduino、Yaler、IFTTTを使用したIoTゲージ
- シングルLEDマトリックスArduinoフリップクロック
- シャープなGP2Y1010AU0Fセンサーを備えたDIY空気品質モニター
- DS1302RTCを備えたシンプルな目覚まし時計