Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

DIY einfachste IV9 Numitron-Uhr mit Arduino

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5 ppm, I2C-Echtzeituhr
× 1
TPIC6C595-Schieberegister
× 4
IV9 Numitron-Röhre
× 4
LED (generisch)
× 2
Kondensator 100 nF
× 4
1N4007 – Hochspannungs-, Hochstrom-Nenndiode
× 2
Schiebeschalter
× 1
Widerstand 1k Ohm
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)
Lötdraht, bleifrei

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Dieses Mal zeige ich Ihnen, wie Sie eine schöne Numitron-Röhrenuhr im Retro-Stil herstellen. Neben der korrekten Uhrzeit zeigt das Gerät alle 30 Sekunden kurz Datum, Jahr und aktuelle Temperatur an.

Die Idee zu dieser Uhr kam mir von der angegebenen Github-Seite:https://github.com/theremotheman/simple_numitron_clock_with_4_shift_registers_and_rtc3231.

Ich habe das Projekt zuerst gemäß den Anweisungen auf der Website erstellt und festgestellt, dass es viele Fehler enthält.

So sah der erste Prototyp mit 74HC595 aus

Für 74HC595 IC Der maximale Gesamtstrom laut Datenblatt beträgt 70 Milliampere, was in diesem Fall mehrfach überschritten wird (ca. 160 Milliampere für Ziffer 8), so dass der IC nach einiger Zeit überhitzt und nicht richtig funktioniert. Ein weiterer Mangel besteht darin, dass die Codeschleife zu viele Verzögerungen enthält, sodass die Zeit nur einmal in 60 Sekunden gelesen wird. Auf dem Bild sehen Sie die fertige Uhr, die hauptsächlich nach den Anweisungen auf der obigen Seite hergestellt wurde. Am Anfang funktioniert es ganz normal, aber nach einer Weile werden zufällige Segmente aktiviert und IC-s, Numitrons oder der Mikrocontroller können sehr leicht brennen. Im ersten Fall wurde das Problem gelöst, indem der IC TPIC6C595 anstelle des 74HC595 verwendet wurde, der für größere Ströme vorgesehen ist. Es sollte auch darauf geachtet werden, dass diese beiden integrierten Schaltkreise nicht pinkompatibel sind.

-------------------------------------------------- --------------------------------

https://www.pcbgogo.com/promo/from_MirkoPavleskiMK

-------------------------------------------------- ---------------------------------

Und der neue Code wurde mit millis() anstelle der Funktion delay() erstellt, sodass die Echtzeituhr jetzt ständig gelesen wird. Ich habe auch einen Schalter hinzugefügt, der die Lichtintensität der Numitronen und damit die Lebensdauer ändert. Wie Sie sehen, ist das Gerät relativ einfach zu bauen und ich denke, dies ist die einfachste Möglichkeit, eine Röhrenuhr zu bauen. Numitrons sind kostengünstig, leicht zu beschaffen und benötigen keine zusätzliche Hochspannungsversorgung.

Für diese Uhr werden nur wenige Komponenten benötigt:

- Vier Numitron-Röhren IV9

- Vier integrierte Schaltkreise TPIC6C595

- Arduino-Mikrocontroller

- DS3231 Echtzeituhrmodul

- Zwei LEDs für Sekunden

- Schalter

- und vier Entkopplungskondensatoren

Das Echtzeitmodul enthält auch ein Thermometer, sodass es sich für eine genauere Anzeige der Temperatur außerhalb der Box befindet, geschützt durch ein Netz. Erstens ist es wünschenswert, die Echtzeituhr mit der PC-Uhr zu synchronisieren, und dies tun wir mit Hilfe der DS1307RTC-Bibliothek. Dann laden wir den Code hoch und damit ist das Gerät fertig. Es bleibt noch, den Code zu ändern, damit wir die Zeit mit Hilfe von Schaltflächen einstellen können und er in der nächsten Zeit als Projekt-Update verfügbar sein wird.

Abschließend wird die Uhr in einer passenden Box montiert und ist eine schöne Dekoration in jeder Vitrine.

Code

  • Arduino-Code
Arduino-CodeC/C++
#include  //rtc mit Temperatur für ds3231RTC_DS3231 rtc; //Festlegen, welches RTC-Modul verwendet wird#include  //Wiring#include  //Zeitbibliothek#include  //Zeitfunktion#include  //rtc #include #define led 7const int LatchPin =13; // Latchconst Int ClockPin =10; // Clockconst Int dataPin =11; //dataunsigned long previousMillis =0; // speichert das letzte Mal Led blinkt langes Intervall =30000; // Intervall, in dem blinken (Millisekunden) unsigned long previousMillisDiode =0; // speichert das letzte Mal LED blinktlanges IntervallDiode =500; // Intervall, in dem blinken (Millisekunden) const int nums [12] ={ // Anzeigearray einstellen - laut Dokumentation:Pin1 ist üblich, Pin2 ist Punkt (in der Skizze nicht verwendet), der Rest sollte einzeln mit den Schieberegistern verbunden werden eins 0b10111110, //0 0b00000110, //1 0b01111010, //2 0b01101110, //3 0b11000110, //4 0b11101100, //5 0b11111100, //6 0b00001110, //7 0b11111110, //8 0b11101110, // 9 0b11001010, //st. 0b10111000 //celz.};int Stunde1; //Stunde erste Zahlint Stunde2; // Stunde zweite Zahlint Minute1; //Minuten erste Zahlint Minute2; //Minuten zweite Zahlint Tag1; //Tag erste Zahlint Tag2; // Tag zweite Zahlint Monat1; //Monat erste Zahlint Monat2; //Monat zweite Zahlint Jahr1; //Jahr erste Zahl - konstant 2int Jahr2; // Jahr zweite Zahl - konstant 0 (willst du so lange leben, um es zu ändern?)int year3; // Jahr dritte Zahlint Jahr4; // Jahr vierte Zahlint hourDecimal; //Dezimalanalyse von hourint minuteDecimal; //Dezimalanalyse von Minuteint dayDecimal; //Dezimalanalyse von dayint monthDecimal; //Dezimalanalyse von monthint year70; // Jahr nach Unix-Epoche temp1; //erste Temperaturnummerint temp2; //zweite Temperaturnummerint tempDecimal; // Dezimalanalyse der Temperatur (erste zwei Zahlen)void setup () { PinMode (led, OUTPUT); pinMode (LatchPin, AUSGANG); // Setzen Sie die Pins auf den Ausgang, damit Sie das Schieberegister steuern können pinMode (clockPin, OUTPUT); // Setzen Sie die Pins auf die Ausgabe, damit Sie das Schieberegister steuern können pinMode (dataPin, OUTPUT); // Setzen Sie die Pins auf die Ausgabe, damit Sie das Schieberegister Serial.begin (9600) steuern können; // SPI initialisieren:SPI.begin(); // Nehmen Sie den SS-Pin niedrig, um den Chip auszuwählen:digitalWrite (clockPin, LOW); }void loop () { tmElements_t tm; // Benennung aus der DS1307RTC-Bibliothek RTC.read (tm); // rtc-Zeit/Datum/Jahr lesen minuteDecimal =tm.Minute / 10; // Ausgabe auf Lesbarkeit (kürzer) durch Division durch zehn analysieren hourDecimal =tm.Hour / 10; // Ausgabe durch Division durch zehn lesbar (kürzer) werden dayDecimal =tm.Day / 10; // Ausgabe auf lesbare (kürzere) Weise durch Division durch zehn auswerten monthDecimal =tm.Month / 10; // Ausgabe auf Lesbarkeit (kürzer) durch Division durch zehn analysieren year70 =tm.Year - 30; // Anzeige des realen Jahres durch Subtraktion von Unix-Epoche (1970) hour1 =hourDecimal; //einfach so hour2 =tm.Hour - 10 * hourDecimal; // Berechnungen durchführen, um nur die zweite Zahl aus zwei Ziffern anzuzeigen string minute1 =minuteDecimal; //einfache Minute2 =tm.Minute - 10 * minuteDecimal; // Berechnungen durchführen, um nur die zweite Zahl aus zwei Ziffern anzuzeigen string day1 =dayDecimal; //einfacher Tag2 =tm.Tag - 10 * TagDezimal; // Berechnungen durchführen, um nur die zweite Zahl aus der zweistelligen Zeichenfolge anzuzeigen month1 =monthDecimal; //einfacher Monat2 =tm.Monat - 10 * MonatDezimal; // Berechnungen durchführen, um nur die zweite Zahl aus der zweistelligen Zeichenfolge anzuzeigen year1 =2; // Nummer des ersten Jahres, müssen Sie das wirklich ändern? hast du fliegende autos und so? Jahr2 =0; // zweite Jahreszahl, wenn Sie ändern müssen, dass Sie stattdessen mit Enkelkindern spielen sollen year3 =year70 / 10; // Ausgabe auf lesbare (kürzere) Weise durch Division durch zehn auswerten year4 =year70 - 10 * year3; // Berechnungen durchführen, um nur die zweite Zahl aus der zweistelligen Zeichenfolge anzuzeigen tempDecimal =rtc.getTemperature () / 10; // Ausgabe auf Lesbarkeit (kürzer) durch Division durch zehn analysieren temp1 =tempDecimal; //einfache temp2 =rtc.getTemperature() - 10 * tempDecimal; // Berechnungen durchführen, um nur die zweite Zahl aus der zweistelligen Zeichenfolge anzuzeigen if (millis() - previousMillisDiode>=intervalDiode) { previousMillisDiode =millis(); digitalWrite (led, !digitalRead (led)); // LED-Zustand ändern} if (millis () - previousMillis> =Intervall) { previousMillis =millis (); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); Verzögerung (500); // Numitron für 0,5 Sekunden ausgeschaltet, um den 'Atmungs'-Effekt digitalWrite (clockPin, LOW) zu erzeugen; SPI.transfer (Zahlen[Monat2]); SPI.transfer (Zahlen[Monat1]); SPI.transfer (Zahlen[Tag2]); SPI.transfer (Zahlen[Tag1]); digitalWrite (clockPin, HIGH); Verzögerung (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); Verzögerung (500); // Numitron für 0,5 Sekunden ausgeschaltet, um den 'Atmungs'-Effekt digitalWrite (clockPin, LOW) zu erzeugen; SPI.transfer (Zahlen[Jahr4]); SPI.transfer (Zahlen[Jahr3]); SPI.transfer (Zahlen[Jahr2]); SPI.transfer (Zahlen[Jahr1]); digitalWrite (clockPin, HIGH); Verzögerung (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); Verzögerung (500); // Numitron für 0,5 Sekunden ausgeschaltet, um den 'Atmungs'-Effekt digitalWrite (clockPin, LOW) zu erzeugen; SPI.transfer (0b10111000); SPI.transfer (0b11001010); SPI.transfer (nums[temp2]); SPI.transfer (nums[temp1]); digitalWrite (clockPin, HIGH); Verzögerung (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); Verzögerung (500); // Numitron für 0,5 Sekunden ausgeschaltet, um einen "Atmungseffekt" zu erzielen} else { DigitalWrite (clockPin, LOW); SPI.transfer (Zahlen[Minute2]); SPI.transfer (Zahlen[Minute1]); SPI.transfer (Zahlen[Stunde2]); SPI.transfer (Zahlen[Stunde1]); digitalWrite (clockPin, HIGH); }}

Schaltpläne


Herstellungsprozess

  1. Arduino-Gyroskop-Spiel mit MPU-6050
  2. Arduino-Uhr mit islamischen Gebetszeiten
  3. Hauptuhr
  4. Arduino-Temp. Monitor und Echtzeituhr mit 3.2 Display
  5. DIY Voltmeter mit Arduino und einem Nokia 5110 Display
  6. MobBob:DIY-Arduino-Roboter, der von einem Android-Smartphone gesteuert wird
  7. DIY Einfaches Messrad mit Drehgeber
  8. IoT-Messgerät mit Arduino, Yaler und IFTTT
  9. Einzelne LED-Matrix-Arduino Flip Clock
  10. Einfacher Wecker mit DS1302 RTC