工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoを使用したDIYの最もシンプルなIV9Numitron時計

コンポーネントと消耗品

>
Arduino Nano R3
× 1
Maxim Integrated DS3231M-±5ppm、I2Cリアルタイムクロック
× 1
TPIC6C595シフトレジスタ
× 4
IV9Numitronチューブ
× 4
LED(汎用)
× 2
コンデンサ100nF
× 4
1N4007 –高電圧、高電流定格ダイオード
× 2
スライドスイッチ
× 1
抵抗1kオーム
× 1

必要なツールとマシン

>
はんだごて(汎用)
はんだワイヤー、鉛フリー

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

今回は、素敵なレトロスタイルのヌミトロンチューブ時計の作り方を紹介します。正しい時刻に加えて、デバイスは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); }} 

回路図


製造プロセス

  1. MPU-6050を搭載したArduinoジャイロスコープゲーム
  2. イスラムの祈りの時間とArduino時計
  3. マスタークロック
  4. ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
  5. ArduinoとNokia5110ディスプレイを備えたDIY電圧計
  6. MobBob:Androidスマートフォンで制御されるDIY Arduino Robot
  7. ロータリーエンコーダー付きDIYシンプル測定ホイール
  8. Arduino、Yaler、IFTTTを使用したIoTゲージ
  9. シングルLEDマトリックスArduinoフリップクロック
  10. シャープなGP2Y1010AU0Fセンサーを備えたDIY空気品質モニター
  11. DS1302RTCを備えたシンプルな目覚まし時計