Sicherheitsschalter Zugdraht von Schmersal


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Zeitzonen

Bei dem Versuch „Zeitzonen“ kommen gleichzeitig zwei 4 Digit 7-Segmentanzeigen ins Spiel. Eine von ihnen wird mit dem Treiber TM1637 gesteuert. Sie dient der Anzeige der aktuellen Uhrzeit und wird von Arduino mithilfe der Bibliothek TM1637 (#include <TM1637Display.h>) angesprochen. Um die Kommunikation zwischen den beiden Partnern zu ermöglichen, werden lediglich zwei Leitungen benötigt. Die zweite 4 Digit 7-Segmentanzeige (SH5461AS), die im Laufschrift Städte anzeigen wird, muss man selbst mit einem passenden Programm (in der Arduino-Welt Sketch genannt) bedienen. Sie wird mit der Multiplexing – Methode gesteuert. Trotz dessen werden hier (statt 28) 11 Verbindungen zu Arduino benötigt. Mit sieben von ihnen werden die einzelnen Segmente der Anzeige bedient, mit vier weiteren die einzelnen Digits ein- bzw. ausgeschaltet. Zusätzlich werden sieben Vorwiderstände zum Schutz der Anzeige-Leuchtdioden benötigt. Für die aktuelle Zeit ist das Modul ZS-042 mit einer Batterie und dem RTC-Chip DS3231 zuständig.

Als Anwendungsbeispiel wird uns das Gespann die aktuelle Uhrzeit in verschiedenen Städten auf der ganzen Welt anzeigen.

Die Komponenten

Aufgebaute Testschaltung

Testschaltung


Bei dem Multiplexing-Verfahren werden in diesem Fall die einzelnen Digits stets ganz schnell ein- und ausgeschaltet. Die Schaltfrequenz muss ausreichend hoch sein, damit der Vorgang vom menschlichen Auge nicht bemerkt werden kann. Möchte man auf dem ersten Digit ein Zeichen sichtbar machen, muss man es einschalten (hier der Ausgang 45 auf LOW stellen) und mit den Ausgängen 31-43, die für die einzelnen Segmente der Anzeige (a bis g) zuständig sind, das gewünschte Zeichen bilden. Mit HIGH-Signal wird z.B. ein Element eingeschaltet. Dabei müssen die drei übriggebliebenen Digits ausgeschaltet bleiben. So verfährt man mit allen Digits.

Schaltplan

Schaltplan

Schaltplan (Arduino ohne USB-Anschluss oder Netzteil: Vin > 6 V)

Das Programm (Sketch):

// ----------------------------------------------------------
// Zeitzonen
// 7-Segmentanzeige 4-Digit SH5461AS / Multiplexing
// 7-Segmentanzeige 4-Digit und Treiber TM1637
// Real Time Clock - Modul mit DS3231
// Arduino Mega2560 R3 (kompaktibel)
// ----------------------------------------------------------
                
#include <TM1637Display.h>
#include <DS3231.h>
#define CLK 2
#define DIO 3

DS3231 clock;
RTCDateTime dt;
TM1637Display display(CLK, DIO);

int a = 31;
int b = 33;
int c = 35;
int d = 37;
int e = 39;
int f = 41;
int g = 43;
int digit1 = 45;
int digit2 = 47;
int digit3 = 49;
int digit4 = 51;

String Ausgabe;
int Z1 = 0;
int Z2 = 0;
String Zone = "00";
String Leer = "oooo";
int Zone_Neu = 0;
int DigitNr;
char Zeichen;

bool A [] = {1,1,1,0,1,1,1};
bool B [] = {0,0,1,1,1,1,1};
bool D [] = {0,1,1,1,1,0,1};
bool E [] = {1,0,0,1,1,1,1};
bool I [] = {0,1,1,0,0,0,0};
bool K [] = {1,0,1,0,1,1,1};
bool L [] = {0,0,0,1,1,1,0};
bool M [] = {1,0,1,0,1,0,1};
bool N [] = {0,0,1,0,1,0,1};
bool O [] = {1,1,1,1,1,1,0};
bool R [] = {0,0,0,0,1,0,1};
bool S [] = {1,0,1,1,0,1,1};
bool T [] = {0,0,0,1,1,1,1};
bool U [] = {0,1,1,1,1,1,0};
bool W [] = {1,0,1,1,1,0,0};
bool Y [] = {0,1,1,1,0,1,1};
bool o [] = {0,0,0,0,0,0,0};
bool Buchstabe [] = {1,0,1,1,0,1,0};
                             
char Stadt [] = { "ooooBERLINooooLONDONooooNEWYORKooooTOKIOooooMOSKAUoooo" };

void Zeitanzeige (int Zone) {
  dt = clock.getDateTime();
  int Std_Aktuell = dt.hour + Zone;
  if ((dt.hour + Zone) > 24) { Std_Aktuell = dt.hour + Zone - 24; }
  if ((dt.hour + Zone) < 0) { Std_Aktuell = 24 + dt.hour + Zone; }
  Ausgabe = String(Std_Aktuell);
  if (dt.minute < 10) { Ausgabe = Ausgabe + "0"; } 
  Ausgabe = Ausgabe + String(dt.minute);
  display.showNumberDecEx(Ausgabe.toInt(), 0b01000000, false, 4, 4);
}

void setup() {
  clock.begin();
  display.setBrightness(10);
  display.clear();

  pinMode (a, OUTPUT);
  pinMode (b, OUTPUT);
  pinMode (c, OUTPUT);
  pinMode (d, OUTPUT);
  pinMode (e, OUTPUT);
  pinMode (f, OUTPUT);
  pinMode (g, OUTPUT);
  pinMode (digit1, OUTPUT);
  pinMode (digit2, OUTPUT);
  pinMode (digit3, OUTPUT);
  pinMode (digit4, OUTPUT);
  Zeitanzeige (0);
  // Aktuelle Zeit setzen (// entfernen):
  //clock.setDateTime(2020, 03, 21, 11, 42, 0);
}

void Digit_On_Off (int DigitNr) {
  digitalWrite (digit1, HIGH);
  if (DigitNr == 1) { digitalWrite (digit1, LOW); }
  digitalWrite (digit2, HIGH);
  if (DigitNr == 2) { digitalWrite (digit2, LOW); }
  digitalWrite (digit3, HIGH);
  if (DigitNr == 3) { digitalWrite (digit3, LOW); }
  digitalWrite (digit4, HIGH);
  if (DigitNr == 4) { digitalWrite (digit4, LOW); }
}

void Anzeige (char Zeichen, int DigitNr) {
  Digit_On_Off (DigitNr);
  switch (Zeichen) {
      case 'A' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = A [i]; } break; }
      case 'B' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = B [i]; } break; }
      case 'D' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = D [i]; } break; }
      case 'E' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = E [i]; } break; }
      case 'I' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = I [i]; } break; }
      case 'K' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = K [i]; } break; }
      case 'L' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = L [i]; } break; }
      case 'M' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = M [i]; } break; }
      case 'N' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = N [i]; } break; }
      case 'O' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = O [i]; } break; }
      case 'R' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = R [i]; } break; }
      case 'S' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = S [i]; } break; }
      case 'T' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = T [i]; } break; }
      case 'U' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = U [i]; } break; }
      case 'W' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = W [i]; } break; }
      case 'Y' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = Y [i]; } break; }
      case 'o' : { for (int i = 0; i < 7; i++) { Buchstabe [i] = o [i]; } break; }
      } 
  digitalWrite (a, Buchstabe [0]);
  digitalWrite (b, Buchstabe [1]);
  digitalWrite (c, Buchstabe [2]);
  digitalWrite (d, Buchstabe [3]);
  digitalWrite (e, Buchstabe [4]);
  digitalWrite (f, Buchstabe [5]);
  digitalWrite (g, Buchstabe [6]);
}
  
void loop() {
  Z2++;
  for (int i = 0; i < 4; i++) {
    DigitNr = i+1;
    Zeichen = Stadt [Z1+i];
    Anzeige (Zeichen, DigitNr);
    delay (2); 
    if (Z2 == 50) {
      digitalWrite (digit1, HIGH);
      Z2 = 0; 
      Z1++;
      if (Z1 > 51) { Z1 = 0; }
        Zone = "";
        Zone.concat (Stadt [Z1+3]);
        Zone.concat (Stadt [Z1+4]);
        if (Zone == "oB") { Zone_Neu = 0; }
        if (Zone == "oL") { Zone_Neu = -1; }
        if (Zone == "oN") { Zone_Neu = -5; }
        if (Zone == "oT") { Zone_Neu = 8; }
        if (Zone == "oM") { Zone_Neu = 2; }
        Leer = "";
        for (int j = 0; j < 4; j++) {
          Leer.concat(Stadt [Z1+j]); }
        if (Leer == "oooo") {
          Zeitanzeige (Zone_Neu); }
     } 
   }
}       
// ----------------------------------------------------------
        

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz