This is an old revision of the document!
Autor: Neagu Catalina-Andreea
Grupa: 333CD
Un e-book reader portabil bazat pe ESP32 si display E-Ink, optimizat pentru navigare tactila (haptic) si audio.
Scop: Dispozitiv compact pentru citit, cu consum ultra-redus, folosind un ecran paper-like. Utilitate: Afisare pagini text, navigare intuitiva, feedback haptic, portabilitate.
Ideea a fost inspirata de dispozitivele moderne de tip Kindle si de conceptul de “paper-like display”, care ofera confort vizual si consum foarte redus de energie. Proiectul isi propune sa combine experienta unui e-reader minimalist cu functii smart precum feedback haptic.
Afisare text: Redare continut din Flash (PROGMEM) pe ecran E-Ink.
Navigare: Encoder rotativ pentru scrolling si buton OK pentru selectie.
Feedback: Motor de vibratii (haptic) si Buzzer pentru alerte.
Gestionare: Alarma de inactivitate (buzzer) la 10 secunde de nefolosire in modul lectura.
| Componenta | Functionalitate principala |
|---|---|
| ESP32 | Microcontroler principal; gestioneaza display-ul, audio si intrarile utilizatorului |
| Display E-Ink 2.9” | Afisare text si interfata tip e-book cu consum redus |
| Encoder rotativ | Navigare intre pagini si meniuri |
| Buton OK | Confirmare selectie si navigare |
| Motor vibratii 3V | Feedback haptic la interactiune |
| Buzzer Pasiv | Feedback audio si alarma de inactivitate |
| Breadboard | Prototipare |
| Fire Dupont | Conectarea componentelor |
Am distribuit pinii in functie de rolul lor hardware pentru a evita conflictele la pornire:
Display E-Ink (SPI): SCK=18, MISO=19, MOSI=23 (standard SPI); CS=5, DC=17, RST=16, BUSY=4.
Encoder Rotativ: CLK=27 (folosit pentru ISR), DT=22, SW=21.
Buton OK: 13 (intrare cu PULLUP intern).
Motor Vibratii: 26 (iesire digitala catre tranzistor).
Buzzer: 32 (iesire digitala pentru tonuri PWM).
Intreruperi: Folosite pentru encoder (attachInterrupt pe pinul 27) pentru a detecta rotirea imediat, fara a bloca procesorul.
SPI: Folosit pentru comunicatia de mare viteza cu display-ul E-Ink.
GPIO: Utilizate pentru citirea butoanelor si controlul perifericelor de feedback (vibratii/buzzer).
*GxEPD2_BW: Aleasa pentru eficienta in gestionarea buffer-ului E-Ink.
*SPI.h: Esentiala pentru comunicatia hardware cu display-ul.
*PROGMEM: Folosita pentru a stoca textele cartilor direct in Flash, economisind RAM-ul ESP32-ului.
Proiectul foloseste o masina de stari (enum StareKindle {MENIU, LECTURA}).
Interactiunea: Intreruperile gestioneaza encoderul. Loop-ul principal monitorizeaza butoanele (OK si SW) si verifica timpul scurs pentru alarma de inactivitate.
Validare: Validarea interactiunii se face prin feedback haptic (vibratii la fiecare apasare OK) si vizual pe display.
Encoder: Am implementat o logica de debounce hardware si software pentru a elimina zgomotul la rotire.
Buzzer: Calibrat pentru frecventa de 4000Hz, frecventa pentru claritatea sunetului.
Debounce Butoane: Utilizarea unui prag de 300ms (DEBOUNCE_MS) in loop() pentru a evita trigger-ul multiplu la o singura apasare.
*Memorie RAM: Stocarea tuturor cartilor in Flash prin PROGMEM in loc de variabile String in RAM.
*Performanta Display: Utilizarea display.firstPage() si display.nextPage() intr-un loop do-while, care permite actualizarea ecranului pe bucati, fara a necesita un buffer full-frame in RAM.
*Consum: Eliminarea delay()-urilor blocante si utilizarea millis() pentru gestionarea timpului, ceea ce permite ESP32 sa ramana receptiv in orice moment.
Sistemul este controlat de microcontrolerul ESP32 care coordoneaza perifericele.
Display-ul E-Ink afiseaza paginile text citite secvential din Flash. Utilizatorul navigheaza intre carti si pagini folosind encoderul rotativ. La apasarea butonului OK, se intra in modul lectura sau se revine in meniu, fiind insotit de un feedback tactil (motor vibratii).
Daca utilizatorul ramane inactiv timp de 10 secunde in modul lectura, sistemul declanseaza o alarma sonora prin buzzer pentru a notifica trecerea timpului. Sistemul este complet asincron, permitand reactii instantanee la intrarile utilizatorului.