Skip to main content

🏠 Domov · ⬅️ Nahor

PRJ020 — Presentation

PixelPet​

2025-PRJ-020-ST_020-ST_020-PixelPet

Verzia: 2.1
Dátum: Január 2025
Autor: Alexandra Vetrov
Typ projektu: IoT Stolný Spoločník

Projektová Dokumentácia


OBSAH​

  1. Business
  2. Top Level Architecture
  3. Solution Architecture
  4. Analysis
  5. Design
  6. Implementation
  7. Testing & Verification
  8. Operation
  9. Change Management
  10. Future Work

01 Business​

1.1 Čo je PixelPet?​

PixelPet je inteligentný stolný spoločník, ktorý vám pomôže byť produktívnejší a zdravší. Je to malé zariadenie s farebným displejom, ktoré sedí na vašom stole a stará sa o vás - pripomína pitie vody, pomáha udržať koncentráciu pomocou Pomodoro techniky a sleduje, či máte v miestnosti dobrú teplotu a dostatok svetla.

Najlepšie na tom je, že to nie je len nudný nástroj - PixelPet je virtuálny miláčik s emóciami. Keď je chladno, triasi sa. Keď ho pohladkáte (klepnete na displej), ukáže vám srdiečko. Je to váš malý pomocník, ktorý robí prácu príjemnejšou.

5E4DDC31-4A59-448B-81BE-36D6428EC286_1_102_a.jpeg Čo všetko vie:

  • 🐱 Virtuálny miláčik - má 9 rôznych emócií (veselý, smutný, ospalý, prekvapený...)
  • ⏱️ Pomodoro časovač - pomáha pracovať efektívne (25 min práca, 5 min pauza)
  • 💧 Pripomienky na vodu - každých 90 minút vám pripomenie zapiť
  • 🌡️ Monitorovanie miestnosti - sleduje teplotu, vlhkosť, svetlo a hluk
  • 📊 Štatistiky - ukáže vám koľko vody ste vypili a koľko Pomodoro sessionov absolvovali

1.2 Prečo PixelPet vznikol?​

Keď pracujete alebo študujete niekoľko hodín pri počítači, často sa stáva toto:

❌ Zabudnete piť - celý deň len káva, žiadna voda
❌ Žiadne pauzy - sedíte 4 hodiny v kuse, potom ste vyčerpaní
❌ Zlé prostredie - príliš teplo, málo svetla, hlučno
❌ Strata motivácie - nevieme ako dlho pracujeme, cítime sa neproduktívni

PixelPet všetky tieto problémy rieši. Pripomenie vodu, rozdelí prácu na efektívne bloky, upozorní ak je zle nasvietené alebo prehriaté, a ešte vás poteší vtipnou animáciou.

Screenshot 2026-01-21 at 09.59.49.png Screenshot 2026-01-21 at 10.01.22.png​

Čo už existuje na trhu?​

RiešenieČo robíCenaProblém
Pomodoro appkyČasovač na telefóneFree-5€Telefón rozptyľuje
Smart reproduktoryČasovač, hlasové príkazy50€+Potrebujú WiFi, reklamy
Monitory vzduchuMerajú CO2, teplotu150-300€Drahé, len meranie
TamagotchiVirtuálny miláčik20€Len zábava, žiadna praktickosť

Čo robí PixelPet inak?​

✅ Všetko v jednom - časovač + monitoring + miláčik + pripomienky
✅ Offline - žiadne WiFi, žiadne trackovanie, žiadne reklamy
✅ Lacný - ~40€ komponenty (DIY)
✅ Bez rozptyľovania - nie je to telefón, má jednu úlohu
✅ Osobný - open-source, môžete si ho prispôsobiť
✅ Roztomilý - emócie robia prácu príjemnejšou

Hlavný diferenciátor: PixelPet je jediný produkt, ktorý spája produktivitu, zdravie a zábavu bez potreby internetu.


1.3 Pre koho je PixelPet určený?​

Študenti 🎓​

  • Potrebujú štruktúru pri učení
  • Často zabudnú na pitný režim
  • Ocenia gamifikáciu a roztomilého miláčika
  • Technicky zdatní, radi si zariadenie zostavia sami

Home office pracovníci 💼​

  • Dlhé hodiny pri počítači
  • Potrebujú produktivitné nástroje
  • Chcú sledovať kvalitu vzduchu doma
  • Oceňujú pekný dizajn workspace

DIY nadšenci 🔧​

  • Majú záujem o IoT projekty
  • Chcú sa učiť programovať ESP32
  • Radi si veci prispôsobujú

1.4 Business Use Cases​

BusinessUseCaseModel.png Figure 2: Business Use Case Diagram

UC-01: Pozeranie sa na čas​

Najjednoduchšia vec - keď sa pozriete na displej, vidíte aktuálny čas a dátum. Face page (tvár miláčika) vždy zobrazuje čas v strede, takže nemusíte zapínať telefón.

Prečo je to užitočné:
Telefón rozptyľuje - otvoríte ho pre čas a skončíte na sociálnych sieťach. PixelPet jednoducho ukazuje čas bez rozptyľovania.


UC-02: Sledovanie prostredia​

Klepnete na displej a dostanete sa na Info page, kde vidíte všetky parametre:

  • 🌡️ Teplota: 22.5°C (ideálne 20-24°C)
  • 💧 Vlhkosť: 45% (ideálne 40-60%)
  • ☀️ Svetlo: číselná hodnota (čím nižšie, tým svetlejšie)
  • 🔊 Zvuk: vizuálny bargraf

Bonus: PixelPet aj reaguje emóciami - ak je chladno, triasi sa. Ak je teplo, potí sa. Ak je veľmi tmavo, je smutný.

22EDD2A3-B990-49E9-A3BC-E955EB0C69DB_4_5005_c.jpeg


UC-03: Používanie Pomodoro​

Toto je srdce produktivity. Princíp je jednoduchý:

  1. Navigujete na Pomodoro page (niekoľko klepnutí)
  2. Počkáte 3.5 sekundy - časovač sa automaticky spustí
  3. Pracujete 25 minút - displej odpočítava čas
  4. Prestávka 5 minút - PixelPet vás upozorní pípnutím
  5. Opakujete 4x - potom dostanete dlhú prestávku 15 minút

Kedykoľvek môžete:

  • Klepnúť = pauza/pokračovanie
  • Pridržať 2 sekundy = reset na začiatok

ActivityDiagram.png
Figure 3: Activity Diagram - Pomodoro Flow

Prečo to funguje:
Pomodoro technika je vedecky overená metóda. Krátke bloky práce s prestávkami udržiavajú vysokú koncentráciu a predchádzajú vyhoreniu.


UC-04: Dostávanie pripomienok​

PixelPet sa sám stará o vaše zdravie:

💧 Pripomienka na vodu - každých 90 minút (8:00-22:00)

C6BD51E8-13A9-482B-B15A-60911F70799D_4_5005_c.jpeg 💊 Pripomienka na vitamíny - presne o 9:00 ráno

EF96C3C2-569E-4300-95EB-A962F5F7EF59_1_201_a.jpeg 🚶 Pripomienka na pohyb - každých 60 minút 887F9D19-81DB-4E5E-9A06-308F860ED6A4_1_201_a.jpeg


UC-05: Prezeranie štatistík​

Na konci dňa sa môžete pozrieť čo ste dokázali: DE9768B1-0EEB-4348-ABAD-E67708930FD0_4_5005_c.jpeg

Motivácia: Keď vidíte čísla, máte motiváciu ich zlepšiť. Včera 4 Pomodoro, dnes chcem 6!

Dáta sa ukladajú do EEPROM (trvalá pamäť), takže aj po reštarte zostávajú. O polnoci (00:00) sa štatistiky resetujú a začína nový deň.


UC-06: Interakcia s miláčikom​

Toto je to čo robí PixelPet výnimočným - nie je to len nástroj, je to spoločník.

9 rôznych emócií:

EmóciaSpúšťačVizuál
😐 NormalZákladný stavNormálne oči, úsmev
😊 HappyIdeálne podmienkyVeľký úsmev
❤️ LoveKlepnutie na displejSrdiečka miesto očí (2s)
😴 SleepyNočný čas (22:00-6:00)Zavreté oči, zívanie
😲 SurprisedHlasný zvukVeľké oči, otvorené ústa
😢 SadPríliš tmavoKvapky sĺz
🥶 ColdTeplota < 18°CTrasenie sa
🥵 HotTeplota > 28°CPotenie
😑 BlinkKaždých 3-6sRýchle žmurknutie (150ms)

Automatické animácie:

  • Mrká každých 3-6 sekúnd (náhodne)
  • Pozerá sa do strán každých 15-30 sekúnd
  • Reaguje okamžite na dotyk

Emočná hodnota: Keď pracujete sami doma, malý roztomilý miláčik na monitore robí prácu príjemnejšou. Keď vás pochváli srdiečkom, cítite sa lepšie.


02 Top Level Architecture​

2.1 Ako je to celé postavené?​

PixelPet je embedded systém - to znamená malý počítač zabudovaný v zariadení s konkrétnou úlohou. Postavený je na ESP32, čo je lacný ale výkonný mikrokontrolér. Component TYpe DIagram.png Figure 4: Component/Context Diagram

Hlavné časti:​

  1. User (Používateľ)

    • Komunikuje cez dotykový senzor
    • Dostáva vizuálny feedback na displeji
    • Počuje zvukové signály z buzzera
  2. PixelPet System (Srdce zariadenia)

    • ESP32 mikrokontrolér
    • Spracováva všetky dáta
    • Riadi displej a senzory
    • Ukladá štatistiky
  3. Physical Environment (Prostredie)

    • Poskytuje teplotu a vlhkosť (DHT22)
    • Poskytuje úroveň svetla (LDR fotoresistor)
    • Poskytuje úroveň zvuku (MAX4466 mikrofón)
  4. Sensor Array (Senzorové pole)

    • DHT22 - poskytuje teplotu a vlhkosť
    • LDR fotoresistor - poskytuje úroveň svetla
    • MAX4466 mikrofón - poskytuje úroveň zvuku
    • DS3231 RTC - poskytuje presný čas
    • Všetky dáta zbiera SensorManager

2.2 Hardvér - čo je vnútri​

Hlavné komponenty:​

KomponentModelFunkciaCena
MikrokontrolérESP32 DevKit v1Mozog celého systému~5€
DisplejST7735 128x160 TFTFarebná obrazovka~8€
Senzor teplotyDHT22Teplota + vlhkosť~5€
Svetelný senzorLDR PhotoresistorÚroveň svetla~1€
MikrofónMAX4466Úroveň zvuku~3€
HodinyDS3231 RTCPresný čas~3€
Dotykové tlačidloTTP223BDotykový vstup~2€

Celková cena: ~25€ (vrátane káblov a konektorov)

F13AED86-6A30-4FC5-B396-E0BE0C759C41_1_105_c.jpeg

Prečo ESP32?​

  • ⚡ Výkonný - dual-core 240 MHz procesor
  • 💾 Dosť pamäte - 520 KB SRAM, 4 MB Flash
  • 🔌 Veľa pinov - SPI, I2C, ADC, GPIO, PWM
  • 💰 Lacný - len ~5€
  • 📚 Dobrá podpora - Arduino knižnice, veľa tutoriálov
  • 📡 Bonus - má WiFi a Bluetooth (zatiaľ nepoužívam)

2.3 Softvér - ako to funguje​

Programovací stack:​

  • Platform: Arduino Framework (C++)
  • IDE: Arduino IDE 2.x
  • Jazyk: C++ s Arduino knižnicami
  • Architektúra: Event-driven (riadené udalosťami)

Hlavné knižnice:​

KnižnicaÚčel
Adafruit_GFXKreslenie (čiary, kruhy, text)
Adafruit_ST7735Ovládanie TFT displeja
DHTČítanie DHT22 senzora
RTClibPráca s DS3231 hodinami
WireI2C komunikácia
SPISPI komunikácia s displejom
EEPROMUkladanie do pamäte

Ako to beží:​

void loop() {
// Hlavný cyklus, beží stále dookola

handleTouch(); // Skontroluj dotyk
readSensors(); // Prečítaj senzory (každé 2s)
updatePage(); // Aktualizuj aktuálnu stránku
checkReminders(); // Skontroluj pripomienky
updateAnimations(); // Aktualizuj animácie (mrk, pohľad)
}

Systém funguje ako nekonečná slučka - každých pár milisekúnd kontroluje všetko dôležité a reaguje.


03 Solution Architecture​

3.1 Architektúra riešenia​

PixelPet používa modulárnu architektúru - celý kód je rozdelený do logických celkov, aby bol prehľadný a ľahko rozšíriteľný.

PageManager - Mozog navigácie​

Stará sa o:

  • Prechod medzi stránkami (Face → Info → Audio → Pomodoro → Stats → Modes)
  • Kreslenie aktuálnej stránky
  • Reakciu na dotyky

5 hlavných stránok:

  1. Face - animovaný miláčik s časom
  2. Info - detailné senzorové údaje
  3. Audio - vizualizér zvuku
  4. Pomodoro - časovač
  5. Stats - denná štatistika

Plus špeciálna stránka Modes s rôznymi režimami displeja.


SensorManager - Zberač dát​

Každé 2 sekundy:

  • Prečíta teplotu a vlhkosť z DHT22
  • Prečíta svetlo z LDR
  • Prečíta zvuk z mikrofónu
  • Aktualizuje min/max hodnoty

Kalibrácia mikrofónu: Pri štarte nameeria 50 vzoriek na určenie "tichej" úrovne (noise floor).


FaceAnimator - Tvorca emócií​

Zodpovedný za:

  • Kreslenie očí (kruhy s bodkami)
  • Kreslenie úsmevu alebo smútku (oblúky)
  • Špeciálne efekty (srdiečka, slzy, pot)
  • Automatické mrkanie (každých 3-6s)
  • Pohľad do strán (každých 15-30s)

State machine: Emócie sa prepínajú podľa podmienok (teplota, svetlo, čas, dotyk).


PomodoroEngine - Časovač productivity​

Riadi stavy:

  • Idle - čaká na spustenie
  • Work - 25 minút práce
  • Break - 5 minút pauza
  • LongBreak - 15 minút po 4 cykloch
  • Paused - pozastavený

Počíta cykly a automaticky prepína medzi prácou a prestávkami.


ReminderSystem - Strážca zdravia​

Sleduje:

  • Čas od poslednej vody (90 min interval)
  • Dennú pripomienku vitamínov (9:00)
  • Pohybovú pripomienku (60 min)
  • Tiché hodiny (22:00-8:00)

Pri spustení pripomienky:

  • Prepne displej na špeciálnu obrazovku
  • Pípne (ak nie sú tiché hodiny)
  • Čaká na potvrdenie
  • Inkrementuje počítadlo

StorageManager - Pamäť systému​

Ukladá do EEPROM:

  • Počet Pomodoro za deň
  • Počet vypitých pohárov vody
  • Počet prestávok
  • Deň posledného resetu

O polnoci (00:00) sa všetko resetuje a uloží.

EEPROM mapa:

Address 0-3:   Pomodoro count
Address 4-7: Water count
Address 8-11: Break count
Address 12-15: Last day

3.2 Komunikácia medzi modulmi​

User (dotyk) → TouchHandler → PageManager → Draw next page
↓
DisplayDriver → TFT

Environment → Sensors → SensorManager → PageManager → Show data
↓
FaceAnimator → Emotions

Time → RTC → PomodoroEngine → Timer countdown
↓
ReminderSystem → Trigger reminder

PomodoroEngine → StorageManager → EEPROM → Persistent stats

Všetky moduly spolu komunikujú cez jasne definované rozhrania. Napríklad FaceAnimator nepristupuje priamo k senzorom - pýta sa SensorManager na teplotu.


04 Analysis​

4.1 Funkčné požiadavky​

FR-01: Zobrazovanie stránok​

  • Systém musí podporovať minimálne 5 hlavných stránok
  • Navigácia jedným klepnutím (tap)
  • Plynulé prechody (bez blikania)

FR-02: Čítanie senzorov​

  • Teplota a vlhkosť každé 2 sekundy (DHT22 limit)
  • Svetlo a zvuk priebežne
  • Kalibrácia mikrofónu pri štarte
  • Graceful handling chýb (ak senzor nefunguje, zobrazí "N/A")

FR-03: Animácia tváre​

  • 9 emočných stavov
  • Automatické mrkanie každých 3-6 sekúnd (random)
  • Pohľad do strán každých 15-30 sekúnd
  • Okamžitá reakcia na dotyk (< 100ms)

FR-04: Pomodoro časovač​

  • Work: 25 minút
  • Short Break: 5 minút
  • Long Break: 15 minút (po 4 cykloch)
  • Možnosť pauzy (tap) a resetu (long press)
  • Automatický štart po 3.5s na stránke

FR-05: Systém pripomienok​

  • Voda každých 90 minút (8:00-22:00)
  • Vitamíny o 9:00
  • Pohyb každých 60 minút
  • Bez zvuku v nočných hodinách (22:00-8:00)
  • Zvýšenie počítadla po potvrdení

FR-06: Ukladanie dát​

  • Denná štatistika do EEPROM
  • Reset o polnoci (00:00)
  • Min/max teplota a vlhkosť
  • Prežitie reštartu zariadenia

4.2 Nefunkčné požiadavky​

Performance (Výkon)​

MetrikaCieľDosiahnuté
Touch response< 100ms~50ms ✅
Page transition< 500ms~200ms ✅
Animation FPS> 20~30 ✅
Sensor read2s interval2s presne ✅

Reliability (Spoľahlivosť)​

  • Uptime: 99%+ (zariadenie beží týždne bez reštartu)
  • Error handling: Graceful degradation (zobrazí "N/A" namiesto crashu)
  • EEPROM writes: Optimalizované (len pri zmene, nie každú sekundu)

Usability (Použiteľnosť)​

  • Learning curve: Nový používateľ pochopí všetko za < 5 minút
  • One-button interface: Všetko ovládateľné jedným dotykovým tlačidlom
  • Visual feedback: Každá akcia má okamžitú odozvu
  • No configuration: Plug & play, žiadne nastavenie

Maintainability (Udržiavateľnosť)​

  • Modularita: Nová stránka = ~100 riadkov kódu
  • Comments: Každá sekcia má hlavičku
  • Constants: Všetky magic numbers sú konštanty s názvom

4.3 Use Case Scenarios​

Scenár 1: Ranný štart​

7:55 - User zapne zariadenie (USB)
7:56 - PixelPet sa inicializuje, kalibruje senzory
→ Zobrazí Face page s "Good Morning"
9:00 - Vitamínová pripomienka
→ User tapne, potvrdí
9:15 - User naviguje na Pomodoro page
→ Počká 3.5s, automatický štart
9:40 - Koniec prvého Pomodoro
→ Pípnutie, 5 min break
9:45 - Automatický návrat na Work

Scenár 2: Touch Navigation​

SequenceDiagram.png Figure 5: Sequence Diagram - Touch Navigation


05 Design​

5.1 Hardware dizajn​

Pin Mapping (Pripojenie pinov)​

ESP32 → TFT Displej (SPI):

TFT_CS  = GPIO 5   (Chip Select)
TFT_DC = GPIO 2 (Data/Command)
TFT_RST = GPIO 4 (Reset)
TFT_LED = GPIO 15 (Backlight)
MOSI = GPIO 23 (Data)
SCK = GPIO 18 (Clock)

ESP32 → RTC DS3231 (I2C):

SDA = GPIO 21
SCL = GPIO 22

ESP32 → Senzory:

DHT22      = GPIO 13  (OneWire)
Touch = GPIO 27 (Digital Input, Active HIGH)
Microphone = GPIO 35 (ADC, Analog)
Light LDR = GPIO 34 (ADC, Analog, inverted)
Buzzer = GPIO 25 (PWM Output)

5.2 Software dizajn​

Vlastný dizajn krabičky (Custom Enclosure)​

Motivácia: PixelPet potrebuje profesionálne puzdro ktoré:

  • Chráni elektroniku pred prachom a poškodením
  • Vyzerá esteticky na stole
  • Má výrezy pre displej, senzory a USB kábel
  • Je kompaktné a ľahko prenosné FA18A87B-B8BF-4D6E-9DED-8BC230335C62_4_5005_c.jpeg 321283E4-E2F4-43E6-9EBC-1280F3AE8236_4_5005_c.jpeg

Dizajn proces:

Krabička bola kompletne navrhnutá a modelovaná špecificky pre tento projekt. Celý proces zahŕňal:

  1. Meranie komponentov - presné rozmery ESP32, displeja, senzorov
  2. CAD modelovanie - vytvorenie 3D modelu v CAD softvéri
  3. Optimalizácia dizajnu - iterácie pre najlepšie umiestnenie výrezov
  4. Príprava na výrobu - export do formátu vhodného pre 3D tlač alebo laser cutting img.pngimg_1.pngimg_2.pngimg_3.png

Štruktúra kódu​

Celý kód je v jednom súbore PixelPet.ino rozdelený na sekcie:

// ===== CONFIGURATION =====
// Piny, konštanty, thresholdy

// ===== LIBRARIES =====
// Include všetkých knižníc

// ===== GLOBALS =====
// Globálne premenné

// ===== SETUP =====
void setup() {
// Inicializácia
}

// ===== MAIN LOOP =====
void loop() {
// Hlavný cyklus
}

// ===== TOUCH HANDLING =====
void handleTouch() { }
void onSingleTap() { }
void onLongPress() { }

// ===== PAGE MANAGEMENT =====
void drawPage() { }
void updatePage() { }
void nextPage() { }

// ===== FACE MODULE =====
void updateFace() { }
void drawFaceEyes() { }
void drawSmile() { }

// ===== SENSOR MODULE =====
void readSensors() { }
void calibrateMic() { }

// ===== POMODORO MODULE =====
void updatePomo() { }
void startPomo() { }
void resetPomo() { }

// ===== REMINDER MODULE =====
void checkReminders() { }
void showWaterReminder() { }
void confirmReminder() { }

// ===== STORAGE MODULE =====
void saveStats() { }
void loadStats() { }
void checkNewDay() { }

// ===== UTILITY =====
// Pomocné funkcie

Dátové štruktúry​

// Výčtové typy (enums)
enum Page {
PAGE_FACE,
PAGE_INFO,
PAGE_AUDIO,
PAGE_POMO,
PAGE_STATS,
PAGE_MODES
};

enum FaceState {
FACE_NORMAL,
FACE_HAPPY,
FACE_LOVE,
FACE_SLEEPY,
FACE_SURPRISED,
FACE_SAD,
FACE_COLD,
FACE_HOT,
FACE_BLINK
};

enum PomoState {
POMO_IDLE,
POMO_WORK,
POMO_BREAK,
POMO_LONG,
POMO_PAUSED
};

Konštanty a thresholdy​

// Časovanie
#define SENSOR_INTERVAL 2000 // 2 sekundy
#define BLINK_DURATION 150 // 150ms
#define WATER_INTERVAL 5400000 // 90 minút
#define POMO_WORK 1500 // 25 minút (v sekundách)
#define POMO_BREAK 300 // 5 minút
#define POMO_LONG 900 // 15 minút

// Thresholdy
#define TEMP_COLD 18.0 // °C
#define TEMP_HOT 28.0 // °C
#define LIGHT_BRIGHT 800 // ADC hodnota
#define LIGHT_DARK 3500 // ADC hodnota

// Farby (RGB565)
#define COLOR_BLACK 0x0000
#define COLOR_WHITE 0xFFFF
#define COLOR_GREEN 0x07E0
#define COLOR_RED 0xF800
#define COLOR_BLUE 0x001F
#define COLOR_CYAN 0x07FF
#define COLOR_PINK 0xFC18

5.3 UI dizajn​

Farebná paleta​

FarbaKódPoužitie
Čierna0x0000Pozadie
Biela0xFFFFText, oči
Zelená0x07E0OK stav, Work timer
Červená0xF800Warning, chyby
Modrá0x001FVoda
Cyan0x07FFBreak timer
Žltá0xFFE0Long Break
Ružová0xFC18Love emócia

Typografia​

  • Veľký text (čas): Size 3-4 (18-24px výška)
  • Normálny text: Size 2 (12px)
  • Malý text (hints): Size 1 (8px)

Pravidlo: Všetok text je centrovaný pre lepšiu čitateľnosť.

Layout stránok​

┌──────────────────────┐  ← 0px
│ HEADER │
│ (title) │ ← 25px
├──────────────────────┤
│ │
│ │
│ CONTENT AREA │ ← 28-110px
│ │
│ │
├──────────────────────┤
│ FOOTER / HINTS │ ← 115px
│ (tap instructions) │
└──────────────────────┘ ← 128px
128px wide

ACBA4687-114E-4B9E-B313-99C9FB38CF3F_4_5005_c.jpeg


06 Implementation​

6.1 Vývojové prostredie​

Softvér​

  • IDE: Arduino IDE 2.3.x
  • ESP32 Board Package: verzia 2.x
  • Driver: CP2102 USB-to-UART (pre Mac/Windows/Linux)

Build konfigurácia​

Board: ESP32 Dev Module
Upload Speed: 921600
CPU Frequency: 240 MHz
Flash Frequency: 80 MHz
Flash Mode: QIO
Flash Size: 4MB (Default partition)

6.2 Kľúčové implementačné detaily​

Touch debouncing​

unsigned long touchStartTime = 0;
bool touchPressed = false;

void handleTouch() {
bool currentTouch = digitalRead(TOUCH_PIN);

if (currentTouch && !touchPressed) {
// Začiatok dotyku
touchStartTime = millis();
touchPressed = true;
}
else if (!currentTouch && touchPressed) {
// Koniec dotyku
unsigned long duration = millis() - touchStartTime;

if (duration < 2000) {
onSingleTap(); // Krátke klepnutie
} else {
onLongPress(); // Dlhé podržanie
}

touchPressed = false;
}
}

Kalibrácia mikrofónu​

void calibrateMic() {
int sum = 0;
for (int i = 0; i < 50; i++) {
sum += analogRead(MIC_PIN);
delay(10);
}
micBaseline = sum / 50; // Priemer 50 vzoriek
micBaseline += 50; // Pridať margin
}

Optimalizácia displeja​

Problém: Celé prekreslenie displeja spôsobuje blikanie.

Riešenie: Čiastočné aktualizácie - prekresliť len to čo sa zmenilo.

// Zlé - prekresľuje všetko
void badUpdate() {
tft.fillScreen(BLACK);
drawEverything();
}

// Dobré - len nové hodnoty
void goodUpdate() {
// Len ak sa teplota zmenila
if (temp != lastTemp) {
tft.fillRect(x, y, w, h, BLACK); // Vymaž starú hodnotu
tft.setCursor(x, y);
tft.print(temp);
lastTemp = temp;
}
}

6.3 Výzvy a riešenia​

Problém 1: Display flicker (blikanie)​

Príčina: Volanie fillScreen() každý frame.

Riešenie:

  • Parciálne aktualizácie (len zmenené časti)
  • Double buffering tam kde je to potrebné
  • Používať fillRect() namiesto celého screenu

Výsledok: Plynulé animácie bez blikania ✅


Problém 2: Mikrofón šum​

Príčina: Mikrofón číta elektrický šum aj v tichej miestnosti.

Riešenie:

  • Kalibrácia pri štarte (50 vzoriek)
  • Určenie noise floor (baseline)
  • Odpočítanie baseline od každého merania
  • Margin (+50) pre istotu

Výsledok: Presná detekcia zvuku ✅


Problém 3: Stack overflow​

Príčina: Príliš veľa String objektov a sprintf() volaní.

Riešenie:

  • Použiť const char* namiesto String
  • Použiť print() namiesto sprintf()
  • Minimalizovať rekurziu

Výsledok: Stabilný beh týždne bez crashu ✅


Problém 4: EEPROM wear​

Príčina: Časté zapisovanie opotrebúva EEPROM (~100,000 cyklov).

Riešenie:

  • Zapisovať len pri skutočnej zmene (nie každú sekundu)
  • Ukladať o polnoci + pri shutdown
  • Používať wear leveling (rôzne adresy)

Výsledok: Životnosť roky namiesto týždňov ✅

07 Testing & Verification​

7.1 Testové scenáre​

TC-01: Touch Navigation​

Vstup: Klepnutie na Face page
Očakávaný výsledok: Prechod na Info page
Výsledok: ✅ PASS
Čas odozvy: ~50ms


TC-02: Pomodoro Auto-Start​

Vstup: Zostať na Pomodoro page 4 sekundy
Očakávaný výsledok: Časovač sa automaticky spustí
Výsledok: ✅ PASS
Poznámka: Spúšťa sa presne po 3.5s


TC-03: Vodná pripomienka​

Vstup: Počkať 90 minút (alebo simulovať v kóde)
Očakávaný výsledok: Zobrazenie Water Reminder + pípnutie
Výsledok: ✅ PASS
Poznámka: Funguje len v rozmedzí 8:00-22:00


TC-04: Teplotný senzor​

Vstup: DHT22 pripojený, teplota ~22°C
Očakávaný výsledok: Zobrazenie teploty s presnosťou ±1°C
Výsledok: ✅ PASS
Presnosť: ±0.5°C (lepšie ako očakávané)


TC-05: Emočná reakcia na chlad​

Vstup: Teplota klesne pod 18°C
Očakávaný výsledok: Cold emócia (trasenie)
Výsledok: ✅ PASS
Čas reakcie: ~3s (čakanie na update cycle)


TC-06: Long Press Reset​

Vstup: Podržať dotyk 2+ sekundy na aktívnom Pomodoro
Očakávaný výsledok: Reset na Idle stav
Výsledok: ✅ PASS


TC-07: Persistent Storage​

Vstup: Dokončiť 1 Pomodoro, reštartovať zariadenie
Očakávaný výsledok: Stats page ukazuje 1 Pomodoro
Výsledok: ✅ PASS
Poznámka: Dáta prežijú aj vypnutie


TC-08: Tiché hodiny​

Vstup: Nastaviť čas na 23:00, spustiť pripomienku
Očakávaný výsledok: Vizuálna pripomienka BEZ zvuku
Výsledok: ✅ PASS


7.2 Integračné testy​

IT-01: 8-hodinový test​

Scenár: Nechať zariadenie bežať 8 hodín s pravidelnými interakciami.

Výsledok: ✅ PASS

  • Žiadny crash
  • Všetky pripomienky fungovali
  • Pamäť stabilná (žiadny leak)

IT-02: Presnosť senzorov​

Metodika: Porovnanie s referenčnými zariadeniami

ParameterPixelPetReferenciaRozdiel
Teplota22.3°C22.1°C+0.2°C ✅
Vlhkosť46%48%-2% ✅
Svetlo920 ADC-N/A

Záver: Presnosť vyhovuje pre home use.


08 Operation​

8.1 Používateľská príručka​

Prvé spustenie​

  1. Pripojte USB kábel k ESP32 a počítaču/adaptéru
  2. Počkajte 2 sekundy - displej sa inicializuje
  3. Vidíte Face page - PixelPet je pripravený! Screenshot 2026-01-21 at 10.03.01.png

Jedno klepnutie (TAP) = Ďalšia stránka

Poradie stránok:

Face → Info → Audio → Pomodoro → Stats → Modes → Face (loop)

Dlhé podržanie (2 sekundy) = Špeciálna akcia

StránkaLong Press akcia
FaceOtvoriť Modes menu
PomodoroReset časovača
StatsDetail view (zatiaľ neimplementované)
ModesExit modes, späť na Face

Používanie Pomodoro​

  1. Navigujte na Pomodoro page (tap tap tap...)
  2. Počkajte 3.5 sekundy ALEBO ihneď tapnite
  3. Časovač sa spustí - zobrazuje 25:00 → 24:59 → ...
  4. Pracujte 25 minút bez rozptyľovania
  5. Pípnutie - čas na prestávku!
  6. 5 minút pauza - naťahnite sa, voda, pohyb
  7. Automatický návrat na ďalší Work cycle
  8. Po 4 cykloch - 15 minút dlhá prestávka

Ovládanie počas timera:

  • TAP = Pauza / Pokračovať
  • LONG PRESS = Úplný reset (späť na Idle)

Display Modes​

Long press na Face page otvorí Modes menu:

  1. Normal - Štandardné stránky
  2. Big Clock - Veľké hodiny na celom displeji
  3. Slideshow - Automatické prepínanie stránok každých 10s
  4. Emotions - Len emócie, žiadne dáta
  5. Night - Tmavý režim, minimálna jas

Výber módu:

  • TAP = Cykluj cez režimy
  • Počkaj 2 sekundy = Aktivuj vybraný režim
  • LONG PRESS = Návrat na Normal

8.2 Údržba​

Denná​

Žiadna akcia potrebná! PixelPet sa o seba stará sám.

Týždenná​

  • Skontrolujte presnosť času (porovnajte s telefónom)
  • Ak je rozdiel > 5 minút, možno treba nastaviť RTC

Mesačná​

  • Otrite displej jemnou handričkou (prach)
  • Skontrolujte USB kábel (nech nie je poškodený)

8.3 Riešenie problémov​

Displej je biely/prázdny​

Možné príčiny:

  1. Zlé SPI zapojenie
  2. Nesprávny init kód displeja
  3. Nesprávny typ displeja v kóde

Riešenie:

  • Skontrolujte káble (CS, DC, RST)
  • V kóde skontrolujte initR(INITR_BLACKTAB)

Zlá teplota​

Možné príčiny:

  1. DHT22 je zle zapojený
  2. DHT22 je pokazený
  3. DHT22 potrebuje 3.3V (nie 5V!)

Riešenie:

  • Skontrolujte zapojenie
  • Vyskúšajte iný DHT22 senzor

Dotyk nefunguje​

Možné príčiny:

  1. TTP223B je zle zapojený
  2. Kábel na GPIO 27 je voľný

Riešenie:

  • Skontrolujte GPIO 27
  • Dotknite sa priamo plochy TTP223B (nie okolie)

09 Change Management​

9.1 História verzií​

Verzia 1.0 (Október 2024)​

Prvá funkčná verzia

  • ✅ Základná Face animácia
  • ✅ Čítanie senzorov
  • ✅ Jednoduchá navigácia medzi stránkami
  • ❌ Žiadne pripomienky
  • ❌ Žiadne Pomodoro
  • ❌ Žiadne ukladanie

Problém: Displej blikal, mikrofón šumel


Verzia 2.0 (November 2024)​

Veľká aktualizácia

  • ✅ Pomodoro časovač
  • ✅ Systém pripomienok (voda, vitamíny, pohyb)
  • ✅ Stats page s EEPROM ukladaním
  • ✅ Display Modes (Big Clock, Slideshow...)
  • ✅ Oprava blikania displeja
  • ✅ Kalibrácia mikrofónu

Verzia 2.1 (Január 2025) - Aktuálna​

Vylepšenia UX

  • ✅ Nová Emotions mode
  • ✅ Vylepšená vizualizácia vodnej pripomienky
  • ✅ Všetok text je centrovaný
  • ✅ Pripomienka na vitamíny presne o 9:00
  • ✅ Optimalizácia EEPROM (menej zápisov)
  • ✅ Bug fixes a stabilizácia

10 Future Work​

10.1 Plánované rozšírenia hardvéru​

WiFi Konektivita 📡​

Motivácia: ESP32 má WiFi chip, zatiaľ nepoužitý.

Možnosti:

  • ✅ Automatická synchronizácia času (NTP server)
  • ✅ OTA Updates (Over-The-Air firmware update)
  • ✅ Cloud sync štatistík (backup do Google Drive / Dropbox)
  • ✅ Weather forecast (zobrazenie počasia z API)
  • ✅ Notifications (z kalendára, emailov)

Batériové napájanie 🔋​

Motivácia: Byť mobilný, nie viazaný na USB.

Riešenie:

  • LiPo batéria 3.7V (2000mAh)

Výhody:

  • Prenosnosť (brať na kúpeľňu, kuchyňu...)
  • Backup pri výpadku prúdu

Odhadovaná výdrž: 12-16 hodín pri plnom použití


Väčší a Dotykový displej 📺​

Motivácia: 128x160 je malé, ťažko čitateľné z diaľky.

Výhody:

  • Lepšia čitateľnosť
  • Viac priestoru pre grafy
  • Možnosť viacerých widgetov naraz Nové možnosti:
  • Swipe gestures (posúvanie stránok)
  • Tap na konkrétnu vec (nie len celý displej) Výzva: Vyššia spotreba, pomalší refresh (E-Ink)

ZÁVER

PixelPet je viac ako len projekt - je to váš osobný asistent, ktorý sa stará o vaše zdravie a produktivitu. Kombinuje praktickosť s emóciami, čo je zriedkavé v tech svete.

Kľúčové úspechy:

  • ✅ Fungujúci prototyp s 5 hlavnými stránkami
  • ✅ Modulárna architektúra pripravená na rozšírenia
  • ✅ Offline-first dizajn (privacy & reliability)
  • ✅ Reálna hodnota pre používateľa (ROI < 2 dni)
  • ✅ Open-source potenciál

Čo som sa naučila:

  • Embedded programming (ESP32, Arduino)
  • Hardware integrácia (senzory, displeje)
  • User experience dizajn

Ďakujem za pozornosť! 🙏


Screenshot 2026-01-21 114312.png