This shows you the differences between two versions of the page.
pm:prj2025:avaduva:andreea_irina.iurea [2025/05/11 23:18] 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 == | ||
- | Proiectul este un sistem interactiv care testează memoria și viteza de reacție a utilizatorului, combinând afișajul vizual cu feedback sonor. Sistemul generează o secvență luminoasă aleatorie, pe care utilizatorul trebuie să o reproducă corect apăsând butoanele corespunzătoare. | ||
- | Pe măsură ce nivelul de dificultate crește, LED-urile își modifică intensitatea folosind semnal PWM. În plus, intensitatea LED-urilor este ajustată automat în funcție de lumina ambientală, măsurată printr-un senzor LDR conectat la un pin analogic. Scorul și nivelul atins sunt afișate pe un LCD 16x2 prin comunicare I2C. Scorul maxim atins de utilizator este salvat în EEPROM și păstrat chiar și după resetare. | + | ====== Sistem interactiv de testare a memoriei și reacției cu adaptare la lumina ambientală ====== |
- | Scopul proiectului este de a crea o aplicație educativă și interactivă care integrează concepte fundamentale de la laboratoarele de microprocesoare: PWM, ADC, I2C și EEPROM. Este o platformă excelentă pentru învățarea programării microcontrolerelor și interacțiunii cu periferice multiple. | + | ===== 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 construit în jurul plăcii Arduino Uno (ATmega328P) și este format din mai multe componente conectate logic: | + | 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. |
- | * LED-uri colorate ce indică o secvență aleatorie. | + | 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. |
- | * Butoane pentru introducerea secvenței de către utilizator. | + | |
- | * Buzzer pasiv pentru semnal sonor în caz de succes sau greșeală. | + | |
- | * LCD 16x2 cu I2C pentru afișarea nivelului și scorului. | + | |
- | * Senzor LDR pentru detectarea luminii ambientale. | + | |
- | * Memorie EEPROM internă pentru salvarea scorului maxim. | + | |
- | == Descriere funcțională == | + | ===== Descriere generală ===== |
- | Sistemul pornește prin generarea unei secvențe aleatorii de aprindere a LED-urilor. Utilizatorul trebuie să memoreze această secvență și să o reproducă corect folosind cele patru butoane. | + | ==== Schema bloc a sistemului ==== |
- | La fiecare nivel reușit, secvența se prelungește și intensitatea LED-urilor crește proporțional, controlată prin PWM. În același timp, în funcție de lumina din mediu, citită cu ajutorul senzorului LDR (prin ADC), sistemul ajustează automat luminozitatea LED-urilor pentru vizibilitate optimă. | + | {{:pm:prj2025:avaduva:schemablocpm.png?600|}} |
- | În caz de răspuns greșit, buzzer-ul emite un semnal sonor și jocul este resetat. Dacă scorul atins este mai mare decât scorul maxim salvat anterior, acesta este înregistrat în EEPROM pentru a fi reținut permanent. | + | ==== Descriere ==== |
- | == Hardware Design == | + | Sistemul interactiv include următoarele componente hardware și logica aferentă implementată pe un Arduino Uno: |
- | == Listă de componente utilizate == | + | - 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. | ||
- | * **Microcontroller:** Arduino Uno R3 (ATmega328P) | + | Acest sistem permite o integrare eficientă a conceptelor embedded într-o aplicație interactivă, vizuală și auditivă. |
- | * **Afișaj:** LCD 16x2 cu adaptor I2C | + | |
- | * **LED-uri:** 4 LED-uri colorate de 5mm (roșu, galben, verde, albastru) | + | |
- | * **Butoane:** 4 butoane tactile 6x6mm | + | |
- | * **Buzzer:** buzzer piezoelectric pasiv (pentru PWM) | + | |
- | * **Senzor lumină:** LDR (Light Dependent Resistor) | + | |
- | * **Rezistențe:** | + | |
- | * 4x 220Ω (pentru LED-uri) | + | ===== Hardware Design ===== |
- | * 4x 10kΩ (pentru butoane) | + | |
- | * 1x 10kΩ (pentru divider cu LDR) | + | |
- | * **Memorie:** EEPROM internă (ATmega328P) | + | |
- | * **Altele:** Breadboard, fire jumper, cablu USB | + | |
- | == Concepte din laborator aplicate == | + | ==== Listă de componente utilizate ==== |
- | * **PWM (Lab 3):** utilizat pentru controlul intensității LED-urilor și generarea tonurilor cu buzzer-ul. | + | * Microcontroller (Arduino Uno R3 – ATmega328P) |
- | * **ADC (Lab 4):** citirea valorii analogice de la senzorul LDR pentru reglarea luminii în funcție de mediul ambiental. | + | * LCD 16x2 (cu modul I2C) |
- | * **I2C (Lab 6):** comunicare cu LCD-ul pentru afișarea nivelului și a scorului. | + | * 4 LED-uri de 5mm (roșu, galben, verde, albastru) |
- | * **EEPROM:** salvarea scorului maxim în memorie persistentă internă. | + | * 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 | ||
- | == Concluzie == | + | ===== Software Design ===== |
- | Proiectul propus integrează concepte esențiale din domeniul microprocesoarelor într-o aplicație practică, interactivă și educativă. Prin combinarea mai multor periferice și tehnologii (PWM, ADC, I2C, EEPROM), proiectul demonstrează capacitatea de a construi un sistem embedded complet, cu feedback vizual și auditiv, adaptabil condițiilor de mediu. | + | <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> | ||