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

Berliner Uhr

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Maxim Integrated max7219
Nur der IC, der in den LED-Matrix-Breakouts verwendet wird...
× 1
Echtzeituhr (RTC)
× 1
5 mm LED:Gelb
× 13
5 mm LED:Rot
× 11
Widerstand 10k Ohm
× 1

Über dieses Projekt

Zuallererst...

Dies ist ein Kopieren / Einfügen aus einem Tutorial, das ich auf der Instructables-Website geschrieben habe. Ich muss noch herausfinden, wie ich von einer Seite zur anderen komme. Also vielleicht ist dies nicht so glatt, wie es sein sollte ... Aber fang mit einer-nicht-so-täglichen-Uhr an.

Einführung:Berliner Uhr

Die Berliner Uhr, BerlinUhr oder Mengenlehreuhr, war wahrscheinlich die allererste Digitaluhr.

Es gibt es seit 1975...

Viele Infos findest du hier:https://en.wikipedia.org/wiki/Mengenlehreuhr

Wie wird es gemacht, wie sagt man die Uhrzeit?

Kurz gesagt, es gibt vier Lichterreihen. Die obere Reihe gibt die Stunden x 5 an, die nächste die "Einzelstunden" von 1 bis 4. Die dritte Reihe gibt uns die "Minuten x5", die untere Reihe die Minuten.

Auf dem abgebildeten Bild (eigentlich ist eine Lampe kaputt...) beträgt die Zeit:2x5 Stunden plus 3 Stunden + 6x5 Minuten + 2Minuten.

Es ist also 13:32. OK, ich nehme an, wir Europäer sind eher daran gewöhnt, die Zeit in 24 Stunden anzugeben. Format, auch die Uhr.

Das größte Licht oben blinkt jede Sekunde.

Ich dachte, diese Uhr könnte etwas Spaß machen, wenn man sie in Arduino macht.

Schritt 1:Einige Elektronik

Was brauchen wir für dieses Projekt?

Zuallererst (natürlich) unser Arduino.

Ich benutze eines meiner Unos, die überall in der Nähe meines Computers liegen.

Da wir von einer Uhr sprechen, können wir eine RTC verwenden. Ich habe ein billiges mit einem DS 1307 verwendet.

Für die "Anzeige" benötigen wir einige LEDs. Ich habe 13 gelbe, 5 mm und 11 rote verwendet. (Ich habe eigentlich RGBs für die Rottöne verwendet, da ich nicht genug Rottöne herumliegen hatte...)

Ein Steckbrett, eine Leiterplatte mit nur Löchern und "Lötinseln". Ich habe nur einen Teil des sogenannten "Eurokarten-Formats" verwendet.

2 Widerstände, die ich verwendet habe. Einer von 220 Ohm (die Sekunden-LED) und ein anderer von 68 K.

Und ein zusätzlicher IC:MAX7219.

Der MAX ist ein 8-stelliger LED-Anzeigetreiber. Viele von uns kennen es, da es auch in LED-Matrizen verwendet wird.

Zur Vereinfachung habe ich auch die Arduino-Bibliothek "LedControl" verwendet. Wenn Sie es immer noch nicht haben, können Sie es hier herunterladen:

https://github.com/wayoda/LedControl

Schritt 2:Einrichten.

Ein sehr schönes Datenblatt für diesen MAX 7219 findet ihr hier:

https://www.sparkfun.com/datasheets/Components/Gen...

COM-09622-MAX7219-MAX7221.pdf

Ich werde nicht weiter auf dieses Datenblatt eingehen, aber es lohnt sich, es zu verwenden, es ist eine Art "Spaß"-IC.

Ein Sprung zum Arduino.

Auf diesem Schema sehen Sie eine sehr einfache Konstruktion:Ich verwende SDA und SCL, um die Uhr (A 1307 Breakout) zu verwenden, und vier weitere Ausgänge:DataIn, Clock und Chipselect, die zum MAX 7219 gehen, und OUT 13, die wir für unsere verwenden blinkende "Sekunden"-LED.

Die meisten Dinge passieren im Arduino:Es liest die Uhr, wandelt sie in die verschiedenen Ausgabearten um und sendet dann die Daten an den 7219.

Wenn Sie den Code lesen, werden Sie sehen, dass ich dafür nur meine eigene Sprache, Niederländisch, verwende. Zum Beispiel:das int "vijfuren", das ich verwende, ist die Variable, die "Fünf-Stunden" zählt, dasselbe gilt für "vijfminuten" und "vijfminuten1":Diese geben die Ausgabe "Fünf-Minuten" aus.

In der Skizze verwende ich auch das Jahr, den Monat, den Monatstag und den Wochentag, in dieser speziellen Skizze brauche ich sie nicht, aber vielleicht könnte ich später einen Kalender hinzufügen.

Im Fritzing(c)-Layout ist der IC nicht verdrahtet:Ich habe das der Einfachheit halber gemacht, da er viele Ausgänge hat.

Fassen wir sie zusammen:

Pin 4 und 9 sind mit GND verbunden,

19 ist VCC

18, ISet, ist mit einem Widerstand an VCC angeschlossen:Dieser begrenzt den Strom, der zu den Ausgängen fließt. Zuerst habe ich es mit einem 20K-Widerstand versucht, aber nach 10 Minuten oder so war alles dunkel... Jetzt, mit einem 68K-Widerstand, läuft die Uhr immer noch (nach mehr als 24 Stunden). Aber es gibt einen Unterschied zwischen der Helligkeit von Rot und Gelb, ich denke, es liegt daran, dass die roten tatsächlich RGB-LEDs sind. Ich muss das klären...

Pin 1 ist DataIn, dieser kommt vom Arduino, Pin 12

Pin 12 ist Load, kommt von Arduino Pin 10

Pin 13 ist Clk, kommt von Arduino 11.

Soweit die Eingänge des 7219.

Schauen Sie sich die Ausgaben an:

Der 7219 hat die Möglichkeit, 8 7-seg-Displays mit Strom zu versorgen.

Diese Ausgänge, DIG 0 bis DIG 4, werden hier verwendet, um die "Zeilen" der LEDs anzusteuern:Da die "Fünf-Minuten"-Zeile 11 LEDs enthält, verwende ich DIG 1 und DIG 2, um sie anzusteuern.

Die anderen Ausgänge:Segmente A bis G und DP (eines normalen 7Seg-Displays).

In diesem Fall (mit LedControl) sende ich ihnen Binärwörter (Byteform, wie B01010100).

Und da habe ich einen Fehler gemacht. Eine Logik sagte mir, dass SEG A das MSB sein würde, B das zweithöchste Bit und so weiter, bis DP, von dem ich dachte, dass es das niedrigstwertige Bit (LSB) wäre. Falsch... Aus dem einen oder anderen Grund dachten die Macher des ICs, dass DP das MSB wäre. Kann die Logik davon nicht erkennen...

Das hat mich dazu gebracht, meine Codierung zu ändern, da ich die LEDs bereits gelötet habe...

Schritt 3:Die LEDs

Auf diesem Schema sehen Sie, wie die LEDs miteinander verbunden sind. Ich habe nur die ersten drei gezeichnet, die anderen gehen genauso.

Die Sekunden-LED ist direkt an Pin 13 angeschlossen.

Das Bild zeigt "wie es funktioniert". Es ist 17:47 Uhr...

Ok, die untere Reihe ist nicht so klar, sie befindet sich auf einem Steckbrett. Ich hoffe, Sie glauben mir, dass es wirklich funktioniert. (das tut es!).

Oh, es kommt noch ein Schritt...

Schritt 4:Schritt "letzter", der Code.

#include  #include const int DS1307 =0x68;// A5 =SCL, A4 =SDA const char* days[] ={"Sunday", "Monday" , "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};const char* Monate[] ={"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"};Byte Sekunde =0; Byte-Minute =0; Byte-Stunde =0; Byte Wochentag =0; Byte Monatstag =0; Byte Monat =0; Byte Jahr =0; Byte LastMinute =0; Byte letzte Sekunde =0; int Led =13; Byte null =B0000000; Byte een =B01000000; Byte-Twee =B01100000; Byte-Speicher =B01110000; Byte vier =B01111000; Byte vijf =B01111100; Byte-Zes =B01111110; Byte zeven =B01111111; Byte acht =B11111111; Byte negen =B0100000; Byte-Tien =B01100000;Byte-Elf =B01110000; Int a =0; intb =0; intc =0; int vijfMinTwee=0;int uitgang =LOW; /*Pin 12 ist mit DataIn verbunden Pin 11 ist mit CLK verbunden Pin 10 ist mit LOAD verbunden */LedControl lc=LedControl(12, 11, 10, 1);unsigned long delaytime=100; Void setup () { Wire.begin (); Serial.begin (9600); PinMode (Led, OUTPUT); lc.shutdown (0, false); /* Helligkeit auf mittlere Werte einstellen */ lc.setIntensity(0, 8); /* und Anzeige löschen */ lc.clearDisplay(0);}void loop() { readTime(); digitalWrite (Led, uitgang); if (second !=lastSecond) { if (uitgang ==LOW) uitgang =HIGH; sonst uitgang =LOW; digitalWrite (Led, uitgang); lastSecond =Sekunde; } if (Minute !=lastMinute) { printTime(); lastMinute =minute;}}byte bcdToDec(byte val) {return ((val/16*10) + (val%16));}void printTime() { char buffer [3];long minuten =minute;long uren =Stunde;int vijfmin =Minuten /5; int eenminuut =minuten -(vijfmin * 5);int vijfuren =uren/5; int eenuren =uren - (vijfuren *5); a =vijfmin; digital (); vijfmin =b; vijfMinTwee =c;a =eenminuut;digitalaal(); eenminuut =b; a=vijfuren; digitalaal();vijfuren =b;a =eenuren; digitalaal();eenuren =b; lc.setRow(0, 4, vijfuren);lc.setRow(0, 3, eenuren); lc.setRow(0, 1, vijfmin);lc.setRow(0, 2, vijfMinTwee); lc.setRow (0, 0, eenminuut);}void readTime() { Wire.beginTransmission (DS1307); Wire.write (byte (0)); Wire.endTransmission();Wire.requestFrom(DS1307, 7); Sekunde =bcdToDec(Wire.read());Minute =bcdToDec(Wire.read());Stunde =bcdToDec(Wire.read()); Wochentag =bcdToDec(Wire.read()); Monattag =bcdToDec(Wire.read());Monat =bcdToDec(Wire.read()); Jahr =bcdToDec(Wire.read()); }void digitaal(){switch (a){ Fall 0:b=null; c=null; brechen; Fall 1:b =een; c=null; brechen; Fall 2:b =twee; c=null; brechen; Fall 3:b =trocken; c=null; brechen; Fall 4:b =vier; c=null; Pause;Fall 5:b =vijf; c=null; brechen; Fall 6:b =zes; c=null; brechen; Fall 7:b =sieben; c=null; brechen; Fall 8:b =acht; c=null; brechen; Fall 9:b =acht; c =negen; brechen; Fall 10:b=acht; c =tien; brechen; Fall 11:b=acht; c =Elfe; brechen; } } 

Ziemlich einfach, glaube ich.

Ein weiterer Vorteil dieser Skizze:Jetzt lernst du auf Niederländisch zu zählen... Von 0 bis 11...;-)

Ich hoffe, Sie genießen das!

Marc

Code

Github
https://github.com/wayoda/LedControlhttps://github.com/wayoda/LedControl

Herstellungsprozess

  1. Zeitkonstantengleichungen
  2. Kuckucksuhr
  3. Sanduhr
  4. Anschauen
  5. Python-Schlaf()
  6. Rpibot – Robotik lernen
  7. Arduino-Pov-Vision-Uhr
  8. Verilog-Taktgenerator
  9. Python - Datum &Uhrzeit
  10. Infinity-Spiegeluhr