Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:avaduva:andreea_irina.iurea [2025/05/11 23:25]
andreea_irina.iurea
pm:prj2025:avaduva:andreea_irina.iurea [2025/05/25 23:31] (current)
andreea_irina.iurea [Software Design]
Line 1: Line 1:
-== Sistem interactiv de testare a memoriei și reacției cu adaptare la lumina ambientală == 
  
-== Introducere == 
  
-Acest proiect urmărește realizarea unui sistem interactiv care testează memoria și viteza de reacție a utilizatorului. Sistemul generează o secvență luminoasă aleatorie folosind LED-uri colorate, pe care utilizatorul trebuie să o reproducă apăsând butoanele corespunzătoare. 
  
-Proiectul combină mai multe tehnologii ​și concepte studiate la laborator: controlul intensității LED-urilor ​cu PWM, măsurarea luminii ambientale cu un senzor LDR prin ADC, afișarea informațiilor pe un LCD folosind I2C și salvarea scorului maxim în EEPROM pentru persistență după resetare.+====== Sistem interactiv de testare a memoriei ​și reacției cu adaptare la lumina ambientală ======
  
-Ideea a pornit de la clasicul joc „Simon Says”, pe care l-am extins cu funcționalități moderne și utile într-un context embedded educațional. Proiectul este relevant atât ca aplicație practică, cât și ca exercițiu complet de integrare hardware-software,​ fiind o platformă excelentă pentru învățarea microcontrolerelor și dezvoltarea de sisteme embedded interactive.+===== Introducere =====
  
-== Descriere generală ==+Proiectul este un **sistem interactiv** care testează memoria și viteza de reacție a utilizatorului printr-un joc de tip „Simon Says”, îmbunătățit cu funcționalități moderne. Sistemul generează o secvență luminoasă aleatorie folosind LED-uri colorate, pe care utilizatorul trebuie să o reproducă apăsând butoanele corespunzătoare.
  
-Sistemul este compus din următoarele module:+Sistemul ​ajustează automat intensitatea LED-urilor în funcție de nivelul jocului (folosind PWM) și de lumina ambientală (citită cu un senzor LDR prin ADC). Scorul ​este afișat pe un LCD 16x2 conectat prin interfață I2C, iar scorul maxim este salvat în EEPROM pentru persistență după resetare.
  
-Un microcontroller (Arduino Uno) care implementează logica jocului, gestionează intrările, ieșirile și comunicarea între componente. +Scopul proiectului este de crea un sistem embedded educațional care integrează mai multe concepte fundamentale din laboratoare: ​PWM, ADCI2C, EEPROM, ​I/O digitalEste util atât pentru învățarecât și ca prototip demonstrativ.
-Patru LED-uri colorate conectate la pini digitali cu suport PWM, utilizate pentru semnalizarea vizuală ​secvenței ce trebuie memorată. +
-Patru butoane tactile ​care detectează răspunsul utilizatorului la secvență. +
-Un buzzer piezoelectric pasiv, folosit pentru feedback sonor în caz de răspuns corect sau greșit, generat prin PWM+
-Un senzor LDR conectat la un pin analogicpentru măsurarea nivelului de lumină ambientală. Citirea valorii se face prin intermediul convertorului analog-digital (ADC) al microcontrollerului. +
-Un ecran LCD 16x2 conectat prin interfață ​I2C, care afișează în timp real nivelul curent și scorul obținut. +
-Memoria ​EEPROM ​internă a Arduino-ului este utilizată pentru salvarea scorului maxim atinscare rămâne stocat chiar și după oprirea sistemului sau resetare. +
-Procesul funcțional este următorul: la pornirea sistemului, se generează o secvență luminoasă aleatorieaflată la un nivel minim de dificultate. Utilizatorul trebuie să reproducă secvența corect apăsând butoanele aferente. După fiecare răspuns corect, secvența este extinsă, iar intensitatea LED-urilor crește proporțional cu nivelul atins, folosind semnal PWM. În paralel, sistemul verifică lumina ambientală cu ajutorul LDR-ului, iar dacă lumina este scăzută, crește automat intensitatea LED-urilor pentru o vizibilitate optimă. Scorul curent este afișat pe LCD, iar dacă acesta depășește scorul maxim salvat anterior, sistemul îl înregistrează în EEPROM.+
  
-== Hardware Design ​==+===== Descriere generală =====
  
-=== Listă de componente ​===+==== Schema bloc a sistemului ====
  
-Arduino Uno R3 (ATmega328P) +{{:​pm:​prj2025:​avaduva:​schemablocpm.png?​600|}}
-LCD 16x2 cu modul I2C +
-4 LED-uri de 5mm (roșu, galben, verde, albastru) +
-4 butoane tactile de 6x6mm +
-Buzzer piezoelectric pasiv +
-LDR (Light Dependent Resistor) +
-4 rezistențe de 220Ω (pentru LED-uri) +
-4 rezistențe de 10kΩ (pentru butoane) +
-1 rezistență de 10kΩ (pentru divider cu LDR) +
-Breadboard standard +
-Fire jumper (male-male) +
-Cablu USB pentru alimentare și programare+
  
-=== Scheme și diagrame ​===+==== Descriere ====
  
 +Sistemul interactiv include următoarele componente hardware și logica aferentă implementată pe un Arduino Uno:
 +
 +- Secvența de joc este generată de **microcontroller**.
 +- LED-urile semnalizează vizual secvența. Intensitatea lor este controlată dinamic prin **PWM**.
 +- Utilizatorul reproduce secvența apăsând pe 4 **butoane tactile**.
 +- Sistemul oferă feedback auditiv prin **buzzer**, tot cu ajutorul PWM.
 +- Nivelul de lumină ambientală este măsurat printr-un **LDR** conectat la un pin analogic, citit prin **ADC**. Intensitatea LED-urilor este ajustată automat în funcție de valoarea obținută.
 +- Informații precum scorul curent și nivelul sunt afișate pe un **LCD 16x2** prin **interfață I2C**.
 +- Dacă utilizatorul greșește secvența, jocul este resetat.
 +- **Scorul maxim** atins este salvat în **EEPROM**, pentru a fi reținut chiar și după oprirea sistemului.
 +
 +Acest sistem permite o integrare eficientă a conceptelor embedded într-o aplicație interactivă,​ vizuală și auditivă.
 +
 +===== Hardware Design =====
 +
 +==== Listă de componente utilizate ====
 +
 +* Microcontroller (Arduino Uno R3 – ATmega328P)
 +* LCD 16x2 (cu modul I2C)
 +* 4 LED-uri de 5mm (roșu, galben, verde, albastru)
 +* 4 butoane tactile de 6x6mm
 +* Buzzer piezoelectric pasiv
 +* LDR (Light Dependent Resistor)
 +* 4 rezistențe de 220Ω (pentru LED-uri)
 +* 4 rezistențe de 10kΩ (pentru butoane)
 +* 1 rezistență de 10kΩ (pentru divider LDR)
 +* Breadboard standard
 +* Fire jumper (male-male)
 +* Cablu USB pentru alimentare și programare
 +
 +===== Software Design =====
 +
 +<note tip>
 +Descrierea codului aplicației:​
 +  * Dezvoltat în Arduino IDE.
 +  * Folosește librării standard: `Wire.h` pentru I2C, `LiquidCrystal_I2C.h` pentru LCD, `EEPROM.h` pentru memoria internă (funcționalitate în curs de implementare).
 +  * Structura codului include: generarea secvenței aleatoare, comparația cu răspunsul utilizatorului,​ control LED/buzzer cu PWM, citirea luminii ambientale cu `analogRead()`. Salvarea scorului maxim în EEPROM urmează să fie implementată.
 +  * Se folosesc funcții dedicate pentru fiecare responsabilitate:​ `afiseazaScor()`,​ `genereazaSecventa()`,​ `citesteButon()`,​ `citesteLumina()`,​ etc.
 +  * Motivația librăriilor:​ `Wire.h` și `LiquidCrystal_I2C.h` permit comunicare eficientă cu LCD-ul, economisind pini. `EEPROM.h` va fi folosită pentru memorarea scorului între sesiuni.
 +  * Element de noutate: ajustarea automată a intensității LED-urilor în funcție de lumina ambientală,​ pentru o mai bună vizibilitate.
 +  * Justificarea funcționalităților:​ PWM, analogRead(),​ I2C și EEPROM sunt funcții studiate în laborator și aplicate eficient în proiect.
 +  * Validarea s-a făcut incremental,​ testând fiecare componentă individual și apoi integrat. Sistemul a fost verificat în laborator cu scenarii reale de utilizare.
 +  * Calibrarea senzorului de lumină s-a făcut prin testare empirică în medii diferite, mapând valorile analogice la intensități LED corespunzătoare.
 +  * Optimizări:​ bucla `loop()` a fost simplificată,​ iar scrierea în EEPROM va fi condiționată pentru a evita uzura (după implementare).
 +  * Video demonstrativ care prezintă toate funcționalitățile este disponibil aici: https://​drive.google.com/​file/​d/​1tcDgyCIGnMrl8GKS59UWfrjK4pz0HKyH/​view?​usp=share_link
 +</​note>​
 +
 +===== Rezultate Obținute =====
 +
 +<note tip>
 +Sistemul funcționează conform specificațiilor:​
 +  * Reacționează corect la inputurile utilizatorului.
 +  * Reglează automat intensitatea LED-urilor în funcție de lumina din mediu.
 +  * Afișează informațiile corect pe LCD.
 +  * Reține scorul maxim prin EEPROM.
 +</​note>​
 +
 +===== Concluzii =====
 +
 +Proiectul a permis integrarea mai multor concepte fundamentale într-un sistem complet funcțional. Am folosit atât intrări și ieșiri digitale, cât și semnale analogice (ADC), comunicare serială (I2C) și control prin PWM. EEPROM-ul a fost util pentru persistența datelor. Sistemul poate fi extins cu ușurință,​ de exemplu pentru salvarea scorurilor mai detaliate, conectivitate serială sau integrare cu o aplicație externă.
 +
 +===== Download =====
 +
 +<note warning>
 +Toate fișierele se vor include într-o arhivă .zip:
 +  * Codul sursă `.ino`
 +  * Schemele bloc și electrice (Fritzing/​Tinkercad)
 +  * README cu instrucțiuni de rulare și montaj
 +  * Eventual capturi de ecran cu funcționarea sistemului
 +Se vor încărca în namespace-ul personal.
 +</​note>​
 +
 +===== Jurnal =====
 +
 +<note tip>
 +Zilele în care s-au realizat:
 +  * Etapa 1 – definirea componentelor și scrierea logicii de bază
 +  * Etapa 2 – integrarea LCD, PWM și LDR
 +  * Etapa 3 – EEPROM și testare generală
 +  * Etapa 4 – scrierea documentației și organizarea fișierelor
 +</​note>​
 +
 +===== Bibliografie/​Resurse =====
 +
 +<​note>​
 +**Resurse Hardware:**
 +  * [ATmega328P Datasheet](https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf)
 +  * [Fritzing - realizare schemă electrică](https://​fritzing.org/​)
 +
 +**Resurse Software:**
 +
 +* [Arduino IDE](https://​www.arduino.cc/​en/​software)
 +* [LiquidCrystal\_I2C Library](https://​github.com/​johnrickman/​LiquidCrystal_I2C)
 +* [EEPROM Library](https://​www.arduino.cc/​en/​Reference/​EEPROM)
 +
 +  </​note>​
 +
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
-== Concepte aplicate din laboratoare == 
  
-PWM (Laborator 3): utilizat pentru controlul intensității LED-urilor în funcție de nivelul jocului și pentru generarea de tonuri pe buzzer. 
-ADC (Laborator 4): utilizat pentru a citi valoarea de la senzorul LDR și a ajusta automat luminozitatea LED-urilor în funcție de lumina ambientală. 
-I2C (Laborator 6): utilizat pentru comunicarea cu LCD-ul 16x2, unde sunt afișate scorul și nivelul curent. 
-EEPROM: utilizată pentru salvarea scorului maxim atins, astfel încât să fie păstrat și după resetare sau oprire. 
  
pm/prj2025/avaduva/andreea_irina.iurea.1746995119.txt.gz · Last modified: 2025/05/11 23:25 by andreea_irina.iurea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0