This shows you the differences between two versions of the page.
pm:prj2024:sseverin:andra_ioana.stoica [2024/04/28 17:10] andra_ioana.stoica [Descriere generală] |
pm:prj2024:sseverin:andra_ioana.stoica [2024/05/27 23:30] (current) andra_ioana.stoica [Rezultate Obţinute] |
||
---|---|---|---|
Line 25: | Line 25: | ||
* Dacă utilizatorul a selectat o poziție cu bombă sau a descoperit toate celulele fără bombe, jocul se încheie. | * Dacă utilizatorul a selectat o poziție cu bombă sau a descoperit toate celulele fără bombe, jocul se încheie. | ||
* Se afișează un mesaj corespunzător pe display și se dezactivează buzzer-ul pentru a marca sfârșitul jocului. | * Se afișează un mesaj corespunzător pe display și se dezactivează buzzer-ul pentru a marca sfârșitul jocului. | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:stoicaandrapm.png |}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | |||
+ | Listă componente necesare: | ||
+ | * Arduino UNO (sau echivalent) x 1 | ||
+ | * Display (I2C) x 1 | ||
+ | * Buzzer x 1 | ||
+ | * LED-uri x 2 | ||
+ | * Butoane x 4 | ||
+ | * Joystick analog x 1 | ||
+ | * Cabluri | ||
+ | * Breadboard x 1 | ||
+ | * Rezistori | ||
<note tip> | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | + | În imaginile ce urmează, am folosit 2 potențiometre în locul joystick-ului care se ocupă de mișcările pe sistemul de axe xOy. |
- | * listă de piese | + | |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | |
- | * diagrame de semnal | + | |
- | * rezultatele simulării | + | |
</note> | </note> | ||
+ | |||
+ | Model Tinkercad: | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:andrastoica-tinkercad.jpg?500 |}} | ||
+ | |||
+ | Schematic: | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:andrastoica-schematic.jpg?500 |}} | ||
+ | |||
+ | Cum arată acum: | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:andrastoica-hardware.jpg?500 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | === Mediu de Dezvoltare === | ||
- | <note tip> | + | * **Platformă de Dezvoltare:** Arduino IDE |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | === Biblioteci folosite === |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | 1. **Wire Library (`Wire.h`):** |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | - **Descriere:** Bibliotecă standard care facilitează comunicarea I2C între Arduino și alte dispozitive I2C. |
- | * (etapa 3) surse şi funcţii implementate | + | - **Link:** [[https://www.arduino.cc/en/Reference/Wire|Wire Library]] |
- | </note> | + | 2. **LiquidCrystal_I2C Library (`LiquidCrystal_I2C.h`):** |
+ | - **Descriere:** Utilizată pentru a controla afișajele LCD I2C. | ||
+ | - **Link:** [[https://github.com/johnrickman/LiquidCrystal_I2C|LiquidCrystal I2C Library]] | ||
+ | |||
+ | === Algoritmi şi Metode Implementate === | ||
+ | 1. //setup()// | ||
+ | * **Descriere:** Inițializează toate componentele utilizate în joc, inclusiv LCD-ul, butoanele, LED-urile și buzzer-ul. Afișează un mesaj de întâmpinare pe LCD și pornește sunetul de start. Setează timerul inițial și pregătește tabla de joc. | ||
+ | |||
+ | 2. //loop()// | ||
+ | * **Descriere:** Bucla principală a programului care verifică starea jocului. Actualizează afișajul și poziția cursorului în funcție de intrările joystick-ului și butoanelor. Dacă jocul nu s-a terminat, permite selectarea celulelor și resetarea jocului prin butoane. Dacă jocul s-a terminat, afișează un mesaj de final și permite resetarea jocului. | ||
+ | |||
+ | 3. //generate_board()// | ||
+ | * **Descriere:** Inițializează tabla de joc cu celule acoperite (`#`). Aceasta pregătește tabla pentru jocul nou. | ||
+ | |||
+ | 4. //initialize_game()// | ||
+ | * **Descriere:** Inițializează jocul cu o configurație predefinită a minelor pe tablă. Copiază configurația minelor într-o variabilă globală. | ||
+ | |||
+ | 5. //display_board()// | ||
+ | * **Descriere:** Afișează tabla de joc și timpul curent pe LCD. Afișează două rânduri din tablă și timpul de joc în format mm:ss în partea dreaptă a ecranului. | ||
+ | |||
+ | 6. //position_cursor()// | ||
+ | * **Descriere:** Poziționează cursorul pe baza intrării joystick-ului. Permite deplasarea cursorului în sus, jos, stânga și dreapta pe tablă. | ||
+ | |||
+ | 7. //select_cell()// | ||
+ | * **Descriere:** Selectează o celulă și dezvăluie conținutul acesteia. Dacă celula conține o mină, jocul se termină. Dacă celula conține `0`, dezvăluie și celulele adiacente care conțin `0`. | ||
+ | |||
+ | 8. //reveal_connected_zeros()// | ||
+ | * **Descriere:** Descoperă celulele adiacente care conțin `0` și celulele învecinate fără mine. Utilizează o coadă pentru a explora recursiv celulele adiacente. | ||
+ | |||
+ | 9. //check_win()// | ||
+ | * **Descriere:** Verifică dacă toate celulele non-mină au fost descoperite. Dacă toate celulele non-mină sunt descoperite, jucătorul câștigă. | ||
+ | |||
+ | 10. //display_win_message()// | ||
+ | * **Descriere:** Afișează mesajul de câștig pe LCD pentru 2 secunde. | ||
+ | |||
+ | 11. //display_game_over_message()// | ||
+ | * **Descriere:** Afișează mesajul de game over pe LCD pentru 2 secunde. | ||
+ | |||
+ | 12. //scroll_message()// | ||
+ | * **Descriere:** Afișează un mesaj pe LCD care se derulează pentru a încuraja jucătorul să reînceapă jocul. Este utilizat după terminarea jocului. | ||
+ | |||
+ | 13. //reveal_final_state()// | ||
+ | * **Descriere:** Dezvăluie starea finală a jocului cu bombele clipind timp de 3 secunde. Aceasta este utilizată atât pentru câștig, cât și pentru pierdere. | ||
+ | |||
+ | 14. //playStartSound()// | ||
+ | * **Descriere:** Redă un sunet de început specific atunci când jocul începe. Utilizează un buzzer pentru a reda o melodie predefinită. | ||
+ | |||
+ | 15. //playWinningSound()// | ||
+ | * **Descriere:** Redă un sunet specific de câștig atunci când jucătorul câștigă jocul. Utilizează un buzzer pentru a reda o melodie predefinită de câștig. | ||
+ | |||
+ | 16. //playLosingSound()// | ||
+ | * **Descriere:** Redă un sunet specific de pierdere atunci când jucătorul pierde jocul. Utilizează un buzzer pentru a reda o melodie predefinită de pierdere. | ||
+ | |||
+ | 17. //reset_game()// | ||
+ | * **Descriere:** Resetează toate variabilele și starea jocului pentru a începe un joc nou. Afișează un mesaj de inițializare pe LCD și redă sunetul de început. Resetează timerul, LED-urile și cursorul. | ||
+ | |||
+ | === Surse şi Funcţii Implementate === | ||
+ | |||
+ | **Codul Principal:** [[https://github.com/andraioanastoica/Minesweeper-Game-Arduino.git|GitHub link]] | ||
+ | === Laboratoare utilizate === | ||
+ | - [[pm:lab:lab3-2023-2024|]] | ||
+ | - [[pm:lab:lab4-2023-2024|]] | ||
+ | - [[pm:lab:lab6-2023-2024|]] | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | ** Demo Youtube**: [[https://youtu.be/H7WNXmb3Qjk|Link]] |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
+ | Câteva poze cu carcasa finală: | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:rezultat3stoicaandra.jpeg?nolink&400 |}} | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:rezultat2stoicaandra.jpeg?nolink&400 |}} | ||
+ | |||
+ | {{ :pm:prj2024:sseverin:rezultat1stoicaandra.jpeg?nolink&400 |}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Proiectul a fost o oportunitate excelentă de a învăța și de a aplica cunoștințe despre programarea microcontrolerelor, integrarea componentelor hardware și dezvoltarea unui joc complet funcțional. A fost un exemplu clar de cum se poate combina hardware-ul și software-ul pentru a crea o experiență interactivă și captivantă. | ||
+ | |||
+ | Consider că acest proiect m-a ajutat să vizualizez mai bine ce anume vreau să fac pe viitor. | ||
+ | |||
+ | Per total, proiectul este unul mai mult bazat pe software, dar care a avut și dificultăți hardware pentru a obține rezultatele corecte. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | Descărcare arhivă: |
- | 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ă ;-). | + | {{:pm:prj2024:sseverin:andra-ioana_stoica_332ca.zip|}} |
- | 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**. | + | ===== Bibliografie/Resurse ===== |
- | </note> | + | ==== Software Related ==== |
- | ===== Jurnal ===== | + | 1. [[https://stackoverflow.com/questions/15984707/when-i-use-lcd-setcursor0-3-with-a-20x4-i2c-lcd-it-prints-to-line-2-is-this-a|Stack Overflow]] |
- | <note tip> | + | 2. [[https://forum.arduino.cc/t/lcd-i2c-display-questions/915523/4|LCD I2C Display Questions - Arduino Forum]] |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
- | ===== Bibliografie/Resurse ===== | + | 3. [[https://forum.arduino.cc/t/bi-color-led-red-green-and-yellow-green/412556/3|Bi-color LED (red/green and yellow/green) - Arduino Forum]] |
- | <note> | + | 4. [[https://projecthub.arduino.cc/semsemharaz/interfacing-rgb-led-with-arduino-b59902|Interfacing RGB LED with Arduino - Project Hub]] |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | 5. [[https://forum.arduino.cc/t/piezo-buzzer-win-and-fail-sound/133792/5|Piezo Buzzer Win and Fail Sound - Arduino Forum]] |
+ | |||
+ | 6. [[https://forum.arduino.cc/t/testing-joystick/469429|Testing Joystick - Arduino Forum]] | ||
+ | |||
+ | 7. [[https://www.circuitbasics.com/how-to-use-active-and-passive-buzzers-on-the-arduino/|How to Use Active and Passive Buzzers on the Arduino - Circuit Basics]] | ||
+ | |||
+ | 8. [[https://exploreembedded.com/wiki/Analog_JoyStick_with_Arduino|Analog Joystick with Arduino - Explore Embedded]] | ||
+ | |||
+ | 9. [[https://lastminuteengineers.com/i2c-lcd-arduino-tutorial/?utm_content=cmp-true|I2C LCD with Arduino Tutorial - Last Minute Engineers]] | ||
+ | |||
+ | 10. [[https://www.geeksforgeeks.org/cpp-implementation-minesweeper-game/|C++ Implementation of Minesweeper Game - GeeksforGeeks]] | ||
+ | |||
+ | ==== Hardware Related ==== | ||
+ | |||
+ | 1. [[https://www.optimusdigital.ro/ro/index.php?controller=attachment&id_attachment=29|I2C Controller - Optimus Digital]] | ||
+ | |||
+ | 2. [[https://www.optimusdigital.ro/ro/index.php?controller=attachment&id_attachment=31|LCD Display - Optimus Digital]] | ||
+ | |||
+ | 3. [[https://www.optimusdigital.ro/ro/index.php?controller=attachment&id_attachment=143|Placa de Dezvoltare - Optimus Digital]] | ||
+ | |||
+ | 4. [[https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/742-modul-joystick-ps2-biaxial-negru-cu-5-pini.html?search_query=joystick&results=42|Joystick - Optimus Digital]] | ||
<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> | ||