Valentinstags-Geschenk: DIY Tage-zusammen-Zähler
Benötigte Komponenten
| Komponente | Menge |
|---|---|
| DS3231 Echtzeituhr (RTC) | 1 |
| Arduino KYX-5461AS 4-stelliges 7-Segment-Display | 1 |
| Steckbrett (Breadboard) | 1 |
| Jumper-Kabel | 1 Set |
| Arduino UNO | 1 |
| Widerstand 1 kΩ | 1 |
Über dieses Projekt
Im September 2017, zu Beginn meines zweiten Studienjahres, lernte ich ein wunderbares Mädchen kennen. Wir zogen zusammen in eine WG und teilten uns eine Etage. Aus Freundschaft wurde bald mehr – unser Jahrestag ist der 10.12.2017.
Fast ein Jahr später überlegte ich, was ich zum Jahrestag schenken könnte. Da ich Elektronik studierte, kam mir die Idee, einen Zähler zu bauen, der die Tage seit unserem Kennenlernen anzeigt – eingebaut in einen Bilderrahmen mit einem Foto von uns.
Dieses Projekt eignet sich perfekt als persönliches Geschenk zum Jahrestag oder Valentinstag. Der einzige knifflige Teil ist der Code, aber ich habe eine Vorlage mit Kommentaren erstellt, damit du dein eigenes Datum einfach eintragen kannst.
Schaltplan
Die Verdrahtung erfolgt gemäß dem Schaltplan von circuito.io. Füge folgende Komponenten hinzu:
- RTC (DS3231)
- 7-Segment-Display 20 mm (generisch, nicht SparkFun)
Verbinde dann jeden Pin gemäß dem Diagramm mit Jumper-Kabeln.
Code
Du benötigst die Arduino IDE sowie zwei Bibliotheken:
- RTC-Bibliothek (RTClib)
- 7-Segment-Bibliothek (SevSeg)
Installiere beide als ZIP-Dateien über Sketch → Bibliothek einbinden → .ZIP-Bibliothek hinzufügen.
Im Code musst du nur Zeile 7 anpassen: DateTime dtBegin (2017, 12, 9, 0, 0, 0); – trage dort dein eigenes Datum ein (Jahr, Monat, Tag).
#include <RTClib.h>
#include <SevSeg.h>
SevSeg sevseg;
RTC_DS3231 rtc;
DateTime dtBegin(2017, 12, 9, 0, 0, 0); // HIER DEIN DATUM EINTRAGEN
TimeSpan tsPassed;
void showInfo(const DateTime& dt) {
Serial.print("NOW:");
Serial.print(dt.year(), DEC); Serial.print('/');
Serial.print(dt.month(), DEC); Serial.print('/');
Serial.print(dt.day(), DEC); Serial.print(' ');
Serial.print(dt.hour(), DEC); Serial.print(':');
Serial.print(dt.minute(), DEC); Serial.print(':');
Serial.print(dt.second(), DEC);
Serial.print("\tPASSED:");
Serial.print(tsPassed.days(), DEC); Serial.print(' ');
Serial.print(tsPassed.hours(), DEC); Serial.print(':');
Serial.print(tsPassed.minutes(), DEC); Serial.print(':');
Serial.print(tsPassed.seconds(), DEC);
Serial.println();
}
void delayWithUpdate(uint32_t parDelay) {
uint32_t started = millis();
while (millis() < started + parDelay) {
sevseg.refreshDisplay();
}
}
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("RTC nicht gefunden");
while (1);
}
delay(1000);
// RTC einmalig stellen (dann auskommentieren und neu hochladen):
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
byte numDigits = 4;
byte digitPins[] = {7, 8, 9, 10};
byte segmentPins[] = {2, 3, 4, 5, 11, 12, 13, 6};
bool resistorsOnSegments = false;
byte hardwareConfig = COMMON_CATHODE;
bool updateWithDelays = false;
bool leadingZeros = false;
bool disableDecPoint = true;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins,
resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(100);
sevseg.setNumber(1234, 1);
delayWithUpdate(1000);
sevseg.setNumber(8888, 1);
delayWithUpdate(1000);
}
void loop() {
sevseg.refreshDisplay();
DateTime now = rtc.now();
tsPassed = now - dtBegin;
static uint32_t nextReportMillis = 0;
static uint16_t prevDaysPassed = 0;
if (tsPassed.days() != prevDaysPassed) {
prevDaysPassed = tsPassed.days();
sevseg.setNumber(prevDaysPassed, 0);
}
sevseg.refreshDisplay();
if (millis() > nextReportMillis) {
showInfo(now);
nextReportMillis = millis() + 5000;
}
}
Herstellungsprozess
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- Arduino Iron Man bauen: Komponenten, Sensoren & Schritt-für-Schritt-Anleitung
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
- Funktionaler 3D-gedruckter Roboterarm mit Arduino – Schritt-für-Schritt-Anleitung
- DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
- Intelligenter Parkplatzzähler: Echtzeit-Fahrzeugverfolgung mit Arduino, Processing & PHP
- Hochgeschwindigkeits-Arduino-Drehzahlmesser (RPM) mit neuartigem Algorithmus
- NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen
- DIY Arduino Lenkrad / Joystick für Rennspiele – USB-HID-Umbau
- Leistungsstarker FM-Radio-Empfänger mit Arduino & TEA5767