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

Berlin-Uhr mit Arduino UNO bauen – DIY LED-Matrix-Uhr

Komponenten und Zubehör

Arduino UNO 1
MAX7219 LED-Display-Treiber 1 Der IC, der auch in LED-Matrix-Breakouts verwendet wird
Real Time Clock (RTC) Modul 1 z. B. DS1307 Breakout
5 mm LED gelb 13 Für Stunden-Anzeige (5h & 1h Reihen)
5 mm LED rot 11 Für Minuten-Anzeige (5min & 1min Reihen)
Widerstand 10 kΩ 1 Für MAX7219 Strombegrenzung (ISet)
Widerstand 220 Ω 1 Für Sekunden-LED an Pin 13
Widerstand 68 kΩ 1 Alternative für ISet (bessere thermische Stabilität)

Benötigte Werkzeuge

Über dieses Projekt

Dies ist eine Übertragung eines Tutorials von der Instructables-Website. Noch nicht ganz perfekt integriert, aber der Inhalt ist vollständig.

Einführung: Die Berlin-Uhr

Die Berlin-Uhr (Berliner Uhr, Mengenlehreuhr) war vermutlich die allererste digitale Uhr. Seit 1975 öffentlich installiert. Mehr Infos: Wikipedia.

Wie man die Zeit abliest: Vier Lichtreihen zeigen die Zeit an:

Beispiel: 2 Lichter in Reihe 1 (2×5=10h) + 3 Lichter in Reihe 2 (3h) + 6 Lichter in Reihe 3 (6×5=30min) + 2 Lichter in Reihe 4 (2min) = 13:32. Die Uhr nutzt 24-Stunden-Format.

Schritt 1: Die Elektronik

Benötigt werden: Arduino UNO, RTC-Modul (DS1307), 13 gelbe + 11 rote LEDs (5mm), MAX7219 Treiber-IC, Breadboard/Lochrasterplatine, Widerstände (220Ω für Sekunden-LED, 68kΩ für MAX7219 ISet). Die LedControl-Bibliothek wird verwendet: GitHub.

Schritt 2: Aufbau

Datenblatt MAX7219: SparkFun.

Berlin-Uhr mit Arduino UNO bauen – DIY LED-Matrix-Uhr
Schaltplan: RTC an I2C (A4=SDA, A5=SCL), MAX7219 an Pins 12 (DIN), 11 (CLK), 10 (LOAD), Sekunden-LED an Pin 13

MAX7219 Pin-Belegung:

Ausgänge: DIG 0–4 treiben die LED-Reihen an (DIG 1 & 2 für die 11 LEDs der 5-Minuten-Reihe). Segmente A–G + DP erhalten Byte-Werte (z. B. B01010100). Wichtig: DP ist das MSB (Most Significant Bit), nicht LSB – dies muss bei der Programmierung beachtet werden.

Berlin-Uhr mit Arduino UNO bauen – DIY LED-Matrix-Uhr

Schritt 3: LED-Verdrahtung

Berlin-Uhr mit Arduino UNO bauen – DIY LED-Matrix-Uhr
LED-Anordnung: Gemeinsame Anoden pro Reihe (DIG 0–4), Kathoden an Segmente A–G/DP

Die Sekunden-LED ist direkt an Pin 13 angeschlossen. Das Foto zeigt 17:47 Uhr.

Berlin-Uhr mit Arduino UNO bauen – DIY LED-Matrix-Uhr

Schritt 4: Der Code

#include 
#include 

const int DS1307 = 0x68;  // I2C-Adresse RTC
const char* days[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const char* months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

byte second = 0, minute = 0, hour = 0, weekday = 0, monthday = 0, month = 0, year = 0;
byte lastMinute = 0, lastSecond = 0;
int Led = 13;
byte nul = B00000000, een = B01000000, twee = B01100000, drie = B01110000;
byte vier = B01111000, vijf = B01111100, zes = B01111110, zeven = B01111111;
byte acht = B11111111, negen = B01000000, tien = B01100000, elf = B01110000;

int a = 0, b = 0, c = 0, vijfMinTwee = 0;
int uitgang = LOW;

LedControl lc = LedControl(12, 11, 10, 1);  // DIN, CLK, LOAD, Devices
unsigned long delaytime = 100;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  pinMode(Led, OUTPUT);
  lc.shutdown(0, false);
  lc.setIntensity(0, 8);  // Helligkeit 0-15
  lc.clearDisplay(0);
}

void loop() {
  readTime();
  digitalWrite(Led, uitgang);
  
  // Sekunden-Blinken
  if (second != lastSecond) {
    uitgang = (uitgang == LOW) ? HIGH : LOW;
    digitalWrite(Led, uitgang);
    lastSecond = second;
  }
  
  // Minuten-Update
  if (minute != lastMinute) {
    printTime();
    lastMinute = minute;
  }
}

byte bcdToDec(byte val) {
  return ((val / 16 * 10) + (val % 16));
}

void printTime() {
  long minuten = minute;
  long uren = hour;
  int vijfmin = minuten / 5;
  int eenminuut = minuten - (vijfmin * 5);
  int vijfuren = uren / 5;
  int eenuren = uren - (vijfuren * 5);
  
  a = vijfmin; digitaal(); vijfmin = b; vijfMinTwee = c;
  a = eenminuut; digitaal(); eenminuut = b;
  a = vijfuren; digitaal(); vijfuren = b;
  a = eenuren; digitaal(); eenuren = b;
  
  lc.setRow(0, 4, vijfuren);    // DIG 4: 5-Stunden
  lc.setRow(0, 3, eenuren);     // DIG 3: 1-Stunden
  lc.setRow(0, 1, vijfmin);     // DIG 1: 5-Minuten (Teil 1)
  lc.setRow(0, 2, vijfMinTwee); // DIG 2: 5-Minuten (Teil 2)
  lc.setRow(0, 0, eenminuut);   // DIG 0: 1-Minuten
}

void readTime() {
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.endTransmission();
  Wire.requestFrom(DS1307, 7);
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read());
  weekday = bcdToDec(Wire.read());
  monthday = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());
}

void digitaal() {
  switch (a) {
    case 0: b = nul; c = nul; break;
    case 1: b = een; c = nul; break;
    case 2: b = twee; c = nul; break;
    case 3: b = drie; c = nul; break;
    case 4: b = vier; c = nul; break;
    case 5: b = vijf; c = nul; break;
    case 6: b = zes; c = nul; break;
    case 7: b = zeven; c = nul; break;
    case 8: b = acht; c = nul; break;
    case 9: b = acht; c = negen; break;
    case 10: b = acht; c = tien; break;
    case 11: b = acht; c = elf; break;
  }
}

Der Code ist übersichtlich: RTC auslesen, Zeit in Berlin-Uhr-Format umrechnen, an MAX7219 senden. Als Bonus lernt man niederländisch zählen (nul, een, twee, drie, vier, vijf, zes, zeven, acht, negen, tien, elf) – der Autor ist Niederländer!

Code-Repository

LedControl Library auf GitHub

Herstellungsprozess

  1. Zeitkonstanten-Berechnung für RC- und RL-Schaltungen meistern
  2. Kuckucksuhr: Geschichte, Handwerkskunst und moderne Evolution
  3. Die Sanduhr: Geschichte, Handwerkskunst und moderne Anziehungskraft
  4. Die Evolution der Zeitmessung: Von Sonnenuhren zu präzisen Quarzuhren
  5. Pythons time.sleep() meistern: Best Practices, Multithreading und Praxisbeispiele
  6. Rpibot: Kostengünstiger, erweiterbarer mobiler Roboter für Embedded Systems Lernen
  7. Arduino POV-Uhr: Persistence-of-Vision LED-Display selbst bauen
  8. Verilog Clock Generator: Design & Implementierungsleitfaden
  9. Datum & Zeit in Python meistern: Praktischer Leitfaden
  10. Infinity Mirror Clock: Endlose Eleganz trifft präzise Zeitanzeige