This shows you the differences between two versions of the page.
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 a crea un sistem embedded educațional care integrează mai multe concepte fundamentale din laboratoare: PWM, ADC, I2C, EEPROM, I/O digital. Este util atât pentru învățare, cât și ca prototip demonstrativ. |
- | Patru LED-uri colorate conectate la pini digitali cu suport PWM, utilizate pentru semnalizarea vizuală a 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 analogic, pentru 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 atins, care 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ă aleatorie, aflată 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. | ||