This shows you the differences between two versions of the page.
pm:prj2025:vstoica:lucabotez [2025/05/14 04:26] luca.botez [Descriere generală] |
pm:prj2025:vstoica:lucabotez [2025/05/30 05:40] (current) luca.botez [Introducere] |
||
---|---|---|---|
Line 5: | Line 5: | ||
Proiectul consta in implementarea un calculator touch screen care permite efectuarea operatiilor aritmetice de baza. Acesta ajusteaza automat luminozitatea ecranului in functie de lumina ambientala si intra in modul sleep dupa o perioada de inactivitate, fiind reactivat prin interactiunea cu el. | Proiectul consta in implementarea un calculator touch screen care permite efectuarea operatiilor aritmetice de baza. Acesta ajusteaza automat luminozitatea ecranului in functie de lumina ambientala si intra in modul sleep dupa o perioada de inactivitate, fiind reactivat prin interactiunea cu el. | ||
- | Scopul proiectului este de a integra concepte esentiale din domeniul sistemelor embedded, precum utilizarea ecranelor TFT cu interfata SPI, comunicarea cu senzori digitali prin I2C, gestionarea intreruperilor si optimizarea consumului energetic prin moduri de repaus. | + | Scopul proiectului este de a integra concepte esentiale din domeniul sistemelor embedded, precum utilizarea ecranelor TFT, comunicarea cu senzori digitali prin I2C, gestionarea intreruperilor si optimizarea consumului energetic prin moduri de repaus. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 28: | Line 28: | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | **Functionalitati implementate:** | ||
+ | |||
+ | __1. Calculator touch-screen cu patru operatii aritmetice de baza__ | ||
+ | |||
+ | Proiectul implementeaza un calculator functional, cu interfata grafica pe un ecran TFT LCD de 2.4” cu touch, conectat direct la Arduino UNO printr-o interfata paralela pe 8 biti. Touchscreen-ul utilizeaza pini analogici (A1, A2) si digitali (D6, D7) pentru detectia coordonatelor X/Y. | ||
+ | |||
+ | Partea hardware permite: afisarea tastaturii virtuale pe ecran, cu simboluri tactile precise; citirea atingerilor prin touchscreen rezistiv conectat direct la Arduino si procesarea comenzilor complet integrata, fara componente externe fizice. | ||
+ | |||
+ | __2. Reglare automata a modului de afisare in functie de lumina ambientala__ | ||
+ | |||
+ | Pentru o experienta adaptabila, sistemul include un senzor digital de lumina TSL2561, conectat la Arduino prin magistrala I2C (pinii A4 - SDA si A5 - SCL). Senzorul este alimentat de la pinul 5V si are un consum energetic foarte redus. | ||
+ | |||
+ | Partea hardware asigura: citirea valorii lux din mediul inconjurator cu rezolutie ridicata; conexiune I2C stabila si eficienta, fara a ocupa resurse suplimentare si posibilitatea comutarii dinamice a temei vizuale in functie de lumina reala. | ||
+ | |||
+ | **Schema electrica:** | ||
+ | |||
+ | {{:pm:prj2025:vstoica:schema_touch_screen_calc.jpeg?800|}} | ||
+ | |||
+ | **Bill of Materials:** | ||
+ | |||
+ | ^ Nume componenta ^ Link ^ Cantitate ^ Pret unitar (RON) ^ | ||
+ | | Arduino UNO | [[https://www.optimusdigital.ro/ro/compatibile-cu-arduino-uno/1678-placa-de-dezvoltare-compatibila-cu-arduino-uno-atmega328p-i-ch340.html?search_query=Placa+de+dezvoltare+compatibila+cu+Arduino+UNO+%28ATmega328p+%C8%99i+CH340%29&results=7|Link]] | 1 | 34,99 | | ||
+ | | LCD TFT Screen | [[https://www.optimusdigital.ro/ro/shield-uri-pentru-arduino/2025-shield-pentru-arduino-lcd-rosu-de-24-cu-touchscreen.html?search_query=Shield+pentru+Arduino+LCD+Rosu+de+2.4%27%27+cu+Touchscreen&results=3|Link]] | 1 | 39,99 | | ||
+ | | Senzor de Intensitate a luminii | [[https://www.optimusdigital.ro/ro/senzori-senzori-optici/137-senzor-de-intensitate-a-luminii.html?search_query=Modul+Senzor+de+Intensitate+a+luminii+TSL2561&results=1|Link]] | 1 | 22,99 | | ||
+ | | Breadboard HQ | [[https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/44-breadboard-400-points.html?search_query=%09Breadboard+HQ+%28400+Points%29&results=1|Link]] | 2 | 4,56 | | ||
+ | | Fire tata-tata | [[https://www.optimusdigital.ro/ro/fire-fire-mufate/890-set-fire-tata-tata-40p-30-cm.html?search_query=Fire+Colorate+Tata-Tata+%2840p%2C+30+cm%29&results=10|Link]] | 1 | 7,98 | | ||
+ | ^ Pret total: ^^^ 110,51 ^ | ||
+ | |||
+ | **Pini Arduino utilizati:** | ||
+ | ^ Componenta ^ Pini Arduino ^ Interfata ^ Functie principala ^ | ||
+ | | LCD TFT Touch-Screen | D2-D9 | Paralela 8 biti | Linii de date pentru ecran | | ||
+ | | LCD TFT Touch-Screen | D10 | Digital | Reset hardware pentru ecran | | ||
+ | | LCD TFT Touch-Screen | A0 | Digital | Semnal de citire (RD) | | ||
+ | | LCD TFT Touch-Screen | A1 | Digital | Semnal de scriere (WR) | | ||
+ | | LCD TFT Touch-Screen | A2 | Digital | Comanda / Date (CD) | | ||
+ | | LCD TFT Touch-Screen | A3 | Digital | Chip select (CS) | | ||
+ | | Touchscreen - XP | D6 | Digital | Coordonata X+ (linie de intrare touch) | | ||
+ | | Touchscreen - XM | A2 | Analog | Coordonata X− (linie de masurare) | | ||
+ | | Touchscreen - YP | A1 | Analog | Coordonata Y+ (linie de masurare) | | ||
+ | | Touchscreen - YM | D7 | Digital | Coordonata Y− (linie de intrare touch) | | ||
+ | | TSL2561 Light Sensor | A4 (SDA) | I2C | Linie de date pentru comunicare | | ||
+ | | TSL2561 Light Sensor | A5 (SCL) | I2C | Linie de ceas pentru sincronizare | | ||
+ | | Alimentare LCD si senzor | 5V, GND | — | Alimentare comuna pentru ecran si senzor | | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | === 1. Stadiul actual al implementarii software === | ||
+ | |||
+ | Proiectul este finalizat si include urmatoarele componente functionale: | ||
+ | * Afisaj pe ecran TFT 2.4" controlat prin biblioteca SPFD5408_Adafruit_TFTLCD. | ||
+ | * Interfata completa touch cu butoane desenate grafic si interpretate prin coordonate. | ||
+ | * Operatori aritmetici: adunare, scadere, inmultire, impartire. | ||
+ | * Gestionare corecta a operatiilor multiple in lant (ex: 2 + 2 + 3). | ||
+ | * Senzor de lumina TSL2561 pentru comutare automata intre dark mode si light mode. | ||
+ | * Mod Sleep activat dupa 30 secunde de inactivitate, cu revenire prin atingere. | ||
+ | |||
+ | === 2. Motivarea alegerii bibliotecilor === | ||
+ | |||
+ | Bibliotecile utilizate sunt: | ||
+ | |||
+ | * **SPFD5408_Adafruit_GFX / TFTLCD / TouchScreen** - control complet asupra graficii si inputului de la touchscreen. | ||
+ | * **Adafruit_TSL2561_U** - biblioteca oficiala Adafruit pentru senzorul de lumina TSL2561. | ||
+ | |||
+ | Acestea sunt compatibile cu platforma Arduino UNO si foarte bine documentate. | ||
+ | |||
+ | === 3. Elementul de noutate al proiectului === | ||
+ | |||
+ | * Comutare automata intre teme Light/Dark in functie de lumina ambientala. | ||
+ | * Gestionare avansata a starii de Sleep cu ecran negru si revenire prin touch. | ||
+ | * Tratare impartiri la 0, conversie la float si trunchiere automata a zecimalelor. | ||
+ | * Limitarea afisarii la maxim 9 caractere pentru a evita overflow pe ecran. | ||
+ | |||
+ | === 4. Justificarea utilizarii functionalitatilor din laborator === | ||
+ | |||
+ | * Comunicare pe interfata I2C cu senzorul de intensitate a luminii TSL2561. | ||
+ | * Timer hardware pentru numararea secundelor trecute de la ultima interactiune cu ecranul fara ca sistemul sa isi piarda responsiveness-ul. | ||
+ | * Intreruperi (ISR) generate de timer la fiecare secunda pentru a incrementa timpul scurs. | ||
+ | * Afisare la interfata USART a operatiilor si cifrelor alese pentru debugging. | ||
+ | |||
+ | === 5. Scheletul proiectului si validarea functionalitatilor === | ||
+ | |||
+ | **Structura:** | ||
+ | * `setup()` - initializeaza senzorul, ecranul, timerul. | ||
+ | * `loop()` - logica principala: mod lumina, detectare touch, operatii, sleep. | ||
+ | * `wait_touch()` - citeste touch si reseteaza timerul. | ||
+ | * `detect_buttons()` - identifica butonul apasat. | ||
+ | * `handle_operation()` - proceseaza operatiile aritmetice. | ||
+ | * `display_result()` - afiseaza input sau rezultat. | ||
+ | * `enter_sleep_mode()` - afiseaza "SLEEP" si asteapta atingere. | ||
+ | |||
+ | **Validare:** | ||
+ | * Testare butoane. | ||
+ | * Monitorizare valori lux prin `Serial.println()`. | ||
+ | * Testarea ISR pentru inactivitate. | ||
+ | * Verificare overflow caractere pe ecran. | ||
+ | |||
+ | === 6. Calibrarea senzorului de lumina === | ||
+ | |||
+ | * Prag de 5 lux stabilit experimental. | ||
+ | * Verificari cu lanterna si lumina naturala/artificiala. | ||
+ | * Afisare valoare lux prin Serial pentru testare. | ||
+ | * Comutare vizuala confirmata in ambele sensuri. | ||
+ | |||
+ | === 7. Optimizari realizate === | ||
+ | |||
+ | * Redesenare a interfetei doar la schimbare de mod. | ||
+ | * Mod Sleep cu revenire eleganta si restaurare afisaj. | ||
+ | * Trunchiere zecimale si eliminare zerouri inutile. | ||
+ | * Logica non-blocanta pentru citirea atingerii. | ||
+ | * Separare clara intre interfata, logica si input. | ||
- | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | ||
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | ||
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | ||
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | ||
- | * (etapa 3) surse şi funcţii implementate | ||
- | </note> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | {{:pm:prj2025:vstoica:dark_mode_calc.jpeg?294|}} |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | {{:pm:prj2025:vstoica:light_mode_calc.jpeg?300|}} |
- | </note> | + | |
+ | Video: SOON! | ||
- | ===== Concluzii ===== | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | ||
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Toate fisierele se pot gasi aici: [[https://github.com/lucabotez/touch-screen-calculator|Link]]. |
- | </note> | + | |
- | ===== Jurnal ===== | + | ===== Bibliografie/Resurse ===== |
+ | |||
+ | [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Arduino UNO]] | ||
+ | |||
+ | [[https://github.com/JoaoLopesF/SPFD5408|TFT LCD Display]] | ||
+ | |||
+ | [[https://www.kicad.org/|KiCad EDA]] | ||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
- | ===== Bibliografie/Resurse ===== | ||
- | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
- | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||