This shows you the differences between two versions of the page.
|
pm:prj2026:ionut.otelea:catalina.neagu [2026/05/27 16:48] catalina.neagu |
pm:prj2026:ionut.otelea:catalina.neagu [2026/05/27 17:30] (current) catalina.neagu [Biblioteci folosite] |
||
|---|---|---|---|
| Line 18: | Line 18: | ||
| ====== 2. Functionalitati principale ====== | ====== 2. Functionalitati principale ====== | ||
| - | *Afisare text: Redare continut din Flash (PROGMEM) pe ecran E-Ink. | + | 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. | + | Navigare: Encoder rotativ pentru scrolling si buton OK pentru selectie. |
| - | *Gestionare: Alarma de inactivitate (buzzer) la 10 secunde de nefolosire in modul lectura. | + | |
| + | Feedback: Motor de vibratii (haptic) si Buzzer pentru alerte. | ||
| + | |||
| + | Gestionare: Alarma de inactivitate (buzzer) la 10 secunde de nefolosire in modul lectura. | ||
| ====== 3. Descrierea componentelor ====== | ====== 3. Descrierea componentelor ====== | ||
| Line 38: | Line 41: | ||
| ===== Schema Bloc ===== | ===== Schema Bloc ===== | ||
| - | {{:pm:prj2026:ionut.otelea:schema_bloc.png?500|}} | + | {{:pm:prj2026:ionut.otelea:schema_bloc_kindle_1_.png?500|}} |
| ===== Schema Electrica ===== | ===== Schema Electrica ===== | ||
| - | {{:pm:prj2026:ionut.otelea:schema_electrica.png?600|}} | + | {{:pm:prj2026:ionut.otelea:schematic_kindle.png?500|}} |
| ===== Pini folositi si motivatie ===== | ===== Pini folositi si motivatie ===== | ||
| - | *Am distribuit pinii in functie de rolul lor hardware pentru a evita conflictele la pornire: | + | 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. | + | Display E-Ink (SPI): SCK=18, MISO=19, MOSI=23 (standard SPI); CS=5, DC=17, RST=16, BUSY=4. |
| - | *Buton OK: 13 (intrare cu PULLUP intern). | + | |
| - | *Motor Vibratii: 26 (iesire digitala catre tranzistor). | + | Encoder Rotativ: CLK=27 (folosit pentru ISR), DT=22, SW=21. |
| - | *Buzzer: 32 (iesire digitala pentru tonuri PWM). | + | |
| + | Buton OK: 13 (intrare cu PULLUP intern). | ||
| + | |||
| + | Motor Vibratii: 26 (iesire digitala catre tranzistor). | ||
| + | |||
| + | Buzzer: 32 (iesire digitala pentru tonuri PWM). | ||
| ===== Justificarea utilizarii functionalitatilor ===== | ===== Justificarea utilizarii functionalitatilor ===== | ||
| - | *Intreruperi: Folosite pentru encoder (attachInterrupt pe pinul 27) pentru a detecta rotirea imediat, fara a bloca procesorul. | + | 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). | + | SPI: Folosit pentru comunicatia de mare viteza cu display-ul E-Ink. |
| + | |||
| + | GPIO: Utilizate pentru citirea butoanelor si controlul perifericelor de feedback (vibratii/buzzer). | ||
| + | ===== Hardware Vizualizare ===== | ||
| + | {{:pm:prj2026:ionut.otelea:pm2.jpeg?200|}} | ||
| + | {{:pm:prj2026:ionut.otelea:pm4.jpeg?200|}} | ||
| + | {{:pm:prj2026:ionut.otelea:pm3.jpeg?200|}} | ||
| + | {{:pm:prj2026:ionut.otelea:pm1.jpeg?200|}} | ||
| ====== 5. Implementare software ====== | ====== 5. Implementare software ====== | ||
| ===== Biblioteci folosite ===== | ===== Biblioteci folosite ===== | ||
| - | *GxEPD2_BW: Aleasa pentru eficienta in gestionarea buffer-ului E-Ink. | + | GxEPD2_BW: Aleasa pentru eficienta in gestionarea buffer-ului E-Ink. |
| - | *SPI.h: Esentiala pentru comunicatia hardware cu display-ul. | + | SPI.h: Esentiala pentru comunicatia hardware cu display-ul. |
| - | *PROGMEM: Folosita pentru a stoca textele cartilor direct in Flash, economisind RAM-ul ESP32-ului. | + | PROGMEM: Folosita pentru a stoca textele cartilor direct in Flash, economisind RAM-ul ESP32-ului. |
| ===== Schelet proiect ===== | ===== Schelet proiect ===== | ||
| - | *Proiectul foloseste o masina de stari (enum StareKindle {MENIU, LECTURA}). | + | 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. | + | 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. | + | Validare: Validarea interactiunii se face prin feedback haptic (vibratii la fiecare apasare OK) si vizual pe display. |
| ====== 6. Calibrare, optimizari si validare ====== | ====== 6. Calibrare, optimizari si validare ====== | ||
| Line 78: | Line 92: | ||
| ===== Calibrarea elementelor ===== | ===== Calibrarea elementelor ===== | ||
| - | *Encoder: Am implementat o logica de debounce hardware si software pentru a elimina zgomotul la rotire. | + | 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. | + | 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. | + | Debounce Butoane: Utilizarea unui prag de 300ms (DEBOUNCE_MS) in loop() pentru a evita trigger-ul multiplu la o singura apasare. |
| ===== Optimizari ====== | ===== Optimizari ====== | ||
| - | *Memorie RAM: Stocarea tuturor cartilor in Flash prin PROGMEM in loc de variabile String in RAM. | + | 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. | + | 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. | + | Consum: Eliminarea delay()-urilor blocante si utilizarea millis() pentru gestionarea timpului, ceea ce permite ESP32 sa ramana receptiv in orice moment. |
| ====== 7. Functionarea sistemului ====== | ====== 7. Functionarea sistemului ====== | ||