Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Construire une Horloge de Berlin avec Arduino UNO – Horloge à Matrice LED DIY

Composants et fournitures

Composant Quantité Notes
Arduino UNO 1
MAX7219 (pilote afficheurs 8 chiffres / matrice LED) 1 Juste le CI, utilisé dans les modules matrice LED
Module RTC (horloge temps réel) – DS1307 1
LED 5 mm jaune 13
LED 5 mm rouge 11 Peut être remplacé par des RGB
Résistance 10 kΩ 1

À propos du projet

Ce projet est adapté d'un tutoriel que j'ai publié sur Instructables. L'horloge de Berlin (BerlinUhr ou Mengenlehreuhr) est probablement la toute première horloge numérique, existant depuis 1975. Plus d'infos sur Wikipedia.

Comment lire l'heure

Quatre rangées de lumières :

Exemple sur la photo : 2×5h + 3h + 6×5min + 2min = 13:32 (format 24h).

Étape 1 : Électronique

Arduino UNO, module RTC DS1307 (broches A4/SDA, A5/SCL), MAX7219 pour piloter les LED (DataIn pin 12, CLK pin 11, LOAD pin 10), LED secondes sur pin 13. Résistances : 220 Ω pour la LED secondes, 68 kΩ pour Iset du MAX7219 (limite le courant des sorties).

Étape 2 : Montage

Construire une Horloge de Berlin avec Arduino UNO – Horloge à Matrice LED DIY

Le MAX7219 pilote 8 afficheurs 7 segments. Ici, ses sorties DIG 0–4 commandent les « lignes » de LED. La rangée « minutes×5 » ayant 11 LED, on utilise DIG 1 et DIG 2. Les sorties segments A–G et DP reçoivent des mots binaires (ex: B01010100) via la bibliothèque LedControl.

Attention : Le bit de poids fort (MSB) correspond au segment DP, pas au segment A – inverser la logique si vous avez déjà câblé.

Construire une Horloge de Berlin avec Arduino UNO – Horloge à Matrice LED DIY

Étape 3 : Les LED

Construire une Horloge de Berlin avec Arduino UNO – Horloge à Matrice LED DIY

Les anodes des LED d'une même rangée sont reliées à une sortie DIG du MAX7219, les cathodes aux segments correspondants. La LED secondes est branchée directement sur la pin 13.

Construire une Horloge de Berlin avec Arduino UNO – Horloge à Matrice LED DIY

Étape 4 : Le code

#include 
#include 

const int DS1307 = 0x68; // A5=SCL, A4=SDA
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;

// Patterns binaires pour 0 à 11 LED allumées (MSB = DP)
byte nul  = B00000000;
byte een  = B01000000;
byte twee = B01100000;
byte drie = B01110000;
byte vier = B01111000;
byte vijf = B01111100;
byte zes  = B01111110;
byte zeven= B01111111;
byte acht = B11111111;
byte negen= B01000000; // 9 = 8+1
byte tien = B01100000; // 10 = 8+2
byte elf  = B01110000; // 11 = 8+3

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

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

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

void loop() {
  readTime();
  digitalWrite(Led, uitgang);

  if (second != lastSecond) {
    uitgang = (uitgang == LOW) ? HIGH : LOW;
    digitalWrite(Led, uitgang);
    lastSecond = second;
  }

  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 : heures×5
  lc.setRow(0, 3, eenuren);    // DIG 3 : heures unitaires
  lc.setRow(0, 1, vijfmin);    // DIG 1 : minutes×5 (partie 1)
  lc.setRow(0, 2, vijfMinTwee); // DIG 2 : minutes×5 (partie 2)
  lc.setRow(0, 0, eenminuut);  // DIG 0 : minutes unitaires
}

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;
  }
}

Le code est simple : lecture RTC, conversion BCD, calcul des rangées, envoi au MAX7219 via setRow. Bonus : vous apprenez à compter en néerlandais de 0 à 11 !

Bibliothèque

LedControl sur GitHub

Processus de fabrication

  1. Maîtriser les calculs de constante de temps pour circuits RC et RL
  2. L'Horloge à Coucou : Histoire, Artisanat et Évolution Moderne
  3. Le sablier : histoire, artisanat et attrait moderne
  4. L'évolution de la mesure du temps : des cadrans solaires aux montres à quartz de précision
  5. Maîtriser time.sleep() en Python : Bonnes pratiques, multithreading et exemples réels
  6. Rpibot : Robot mobile low-cost et extensible pour apprentissage systèmes embarqués
  7. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation
  8. Maîtriser les dates et heures en Python : Guide pratique
  9. Horloge Miroir Infini : Élégance Infinie et Précision Temporelle