Pomodoro-Timer

Pomodoro-Timer
Die Pomodoro-Technik (orig. pomodoro technique von italienisch pomodoro = Tomate und englisch technique = Methode, Technik) ist eine Methode des Zeitmanagements, die von Francesco Cirillo in den 1980er Jahren entwickelt wurde. Das System verwendet einen Kurzzeitwecker, um Arbeit in 25-Minuten-Abschnitte – die sogenannten pomodori – und Pausenzeiten zu unterteilen. Der Name pomodoro stammt von der Küchenuhr, die Cirillo bei seinen ersten Versuchen benutzte. (web.archive.org)

Dieses Projekt ist das Resultat eines intensiven 48-Stunden-Sprints an einem einzigen Wochenende. Das ehrgeizige Ziel: Ein vollständiges Hardware- und Software-Produkt von der ersten Idee bis zum fertigen Prototypen zu realisieren. Innerhalb von nur zwei Tagen wurden sämtliche Entwicklungsphasen durchlaufen - von der detaillierten Planung und dem 3D-Design über die Fertigung der Einzelteile und das Verlöten der Elektronik bis hin zur Programmierung des Codes und der finalen Montage. Diese strikte zeitliche Limitierung wurde bewusst gewählt. Sie dient als Proof of Concept, um meine Fähigkeiten im Rapid Prototyping sowie mein fundiertes, interdisziplinäres Wissen praxisnah und greifbar zu demonstrieren.

Anforderungen an den Pomodoro-Timer

und was ihn besser macht als eine einfache Küchenuhr

Verschiedene Zeitintervalle

  • Grundphasen: Der Timer muss Fokus-, Kurzpausen- und Langpausenintervalle abbilden können.
  • Individualisierbarkeit: Die Länge der jeweiligen Phasen muss anpassbar sein.
  • Phasen-Zyklus: Es muss einstellbar sein, nach wie vielen kurzen Pausen eine lange Pause stattfindet.
  • Automatischer Wechsel: Der Wechsel zwischen den Phasen soll nach einer Bestätigung automatisch erfolgen und den korrekten neuen Timer starten.
  • Pausenfunktion: Der Timer muss jederzeit pausiert werden können.

Visualisierung des Fortschrittes

  • Countdown: Ein Display soll die exakte Restzeit darstellen.
  • Ladebalken: Ein Fortschrittsindikator soll die verstreichende Zeit visuell greifbar machen.
  • Signalgebung: Nach Vollendung einer Phase macht der Timer durch ein klares Lichtsignal auf sich aufmerksam.

Moderne & ansprechende Optik

  • RGB-Beleuchtung: Der Timer ist mit RGB-LEDs ausgestattet, um die unterschiedlichen Phasen farblich voneinander abzugrenzen.
  • Gehäusedesign: Der Timer soll sich durch ein modernes, semitransparentes Design auszeichnen.

Benutzerfreundlichkeit

  • Minimalistisch: Für die Stromversorgung und Nutzung des Produkts reicht ein einfaches USB-C Kabel.
  • Ein-Knopf-Bedienung: Die gesamte Steuerung des Timers erfolgt intuitiv über einen einzigen Knopf.
  • Plug & Play: Sobald das Gerät mit dem Strom verbungen wird, laden sich automatisch die Standardeinstellungen für einen Pomodoro-Durchlauf, damit man direkt loslegen kann.

CAD-Zeichnen der Einzelteile

Vorplanung

Mein erster Schritt bei der Planung bestand darin, mir mit Stift und Papier einen groben Überblick zu verschaffen. Dabei konnte ich erste Design-Ideen skizzieren und direkt die Maße der Komponenten festhalten, die mir zur Verfügung standen. Konkret waren das ein ESP32-S3 Super Mini, ein WS2812B-LED Streifen, ein 1.54-Zoll E-Ink-Display mit einer Auflösung von 200x200 Pixeln sowie ein Cherry-Red-Taster.

Wahl des CAD-Programmes

Da ich in der Vergangenheit schon einiges mit Fusion 360 entworfen habe, wollte ich für dieses Projekt bewusst eine neue Software ausprobieren. Meine Wahl fiel dabei auf Onshape. Der große Vorteil für mich war, dass es keine lokale Installation braucht und ich extrem flexibel an den 3D-Modellen arbeiten konnte.

CAD-Design

Case

LightBlock

TopCover

Button

Adapter


Fertigung der Einzelteile

Für die Fertigung konnte ich auf verschiedene 3D-Drucker zurückgreifen. Da ich jedoch ein semitransparentes Design anstrebte, bregrenzte sich die Auswahl schnell auf Resin-Drucker. Am Ende stand die Entscheidung zwischen klassischem SLA (Formlabs Form 2) und MSLA (Elegoo Saturn 4 Ultra). Meine Wahl fiel auf den MSLA-Drucker, da dieser dem Form 2 im direkten Vergleich sowohl bei der Druckauflösung und der Geschwindigkeit als auch bei den Unterhaltskosten deutlich überlegen war.


Verkabelung der Komponenten

Nachdem jetzt die Kabellängen abschätzbar wurden, ging es ans Löten. Das Herzstück der Schaltung ist der ESP32-S3 Super Mini. Um beim anschließenden Programmieren keine Probleme zu bekommen, habe ich die Pin-Belegung vorher genau definiert.

  • E-Paper Modul
    • VCC an 3.3V
    • GND an GND
    • DIN / SDI an 11 (MOSI)
    • CLK / SCK an 12 (SCK)
    • CS an 10 (Chip Select)
    • DC an 9 (Data/Command)
    • RST / RES an 8 (Reset)
    • BUSY an 7
  • LED-Streifen (WS2812B)
    • 5V / VCC an 5V
    • GND an GND
    • DIN / Data an 5
  • Hardware-Knopf (Cherry-Red-Taste)
    • Seite 1 an Pin 3
    • Seite 2 an GND

Programmieren der Software

Für die Programmierung habe ich Visual Studio Code mit dem PlatformIO-Plugin verwendet, geschrieben wurde das Ganze objektorientiert in C++. Um das System wartbar und skalierbar zu halten, ist der Code stark modularisiert (aufgeteilt in eigene Manager-Klassen für Display, LEDs, Buttons und den internen Zustand).

Besonders bei der Kombination aus flüssigen LED-Animationen und einem relativ trägen E-Paper-Display gab es einige technische Herausforderungen, die ich wie folgt gelöst habe:

  • Dual-Core Processing (FreeRTOS): Um zu verhindern, dass die Aktualisierung des E-Paper-Displays das gesamte System einfriert, greife ich auf das Echtzeitbetriebssystem FreeRTOS zurück und nutze beide Kerne des ESP32-S3. Der rechenintensive ledTask läuft durchgehend auf Core 0, während der displayTask sowie die eigentliche Logik (Main-Loop) auf Core 1 ausgelagert sind. So bleiben die Taster-Eingaben und das LED-Feedback jederzeit "non-blocking" und extrem reaktionsschnell.
  • State Machine: Die gesamte Kernlogik des Pomodoro-Timers basiert auf einem Zustandsautomaten (StateManager). Das System weiß exakt, ob es sich im STATE_BOOT, STATE_TIMER, STATE_MENU oder im energiesparenden STATE_SLEEP befindet, was eine fehlerfreie Navigation ermöglicht.
  • Partial Refresh für das E-Paper: Für die Ansteuerung des Displays nutze ich die GxEPD2-Bibliothek. Um zu verhindern, dass der Bildschirm beim sekündlichen Herunterzählen des Countdowns störend schwarz-weiß flackert, habe ich gezielt partielle Updates (forcePartialUpdate) implementiert. Nur bei großen Phasenwechseln wird ein vollständiger Refresh (forceFullUpdate) durchgeführt.

Finaler Zusammenbau