This shows you the differences between two versions of the page.
pm:prj2024:sseverin:ioan.popescu1910 [2024/05/18 11:17] ioan.popescu1910 [Hardware Design] |
pm:prj2024:sseverin:ioan.popescu1910 [2024/05/27 05:23] (current) ioan.popescu1910 [Bibliografie/Resurse] |
||
---|---|---|---|
Line 37: | Line 37: | ||
* LED-uri | * LED-uri | ||
* breadboard | * breadboard | ||
- | {{:pm:prj2024:sseverin:schema_electrica_dez.png?800 |}} | + | {{:pm:prj2024:sseverin:schematic_final.png?800 |}} |
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | Proiectul include un joc de labirint și un joc cu LED-uri, ambele controlate prin butoane, precum și un timer de bombă cu funcționalitate de alertă sonoră. Codul folosește diverse biblioteci pentru a facilita interfațarea cu hardware-ul și implementează algoritmi de debounce pentru citirea butoanelor, amestecarea secvențelor de butoane și LED-uri și desenarea grafică a labirintului pe afișajul OLED. Aplicația gestionează starea jocului și a bombei, oferind feedback utilizatorului prin intermediul afișajelor și al sunetelor buzzer-ului. | ||
+ | |||
+ | * Mediu de dezvoltare folosit: Arduino IDE | ||
+ | * Librării şi surse 3rd-party: | ||
+ | <code c>#include <Wire.h> // Biblioteca pentru comunicare I2C. </code> | ||
+ | <code c>#include <MPU6050.h> // Biblioteca pentru interfațarea cu senzorul MPU6050. </code> | ||
+ | <code c>#include <Adafruit_GFX.h> // Biblioteca grafică pentru afișaje. </code> | ||
+ | <code c>#include <Adafruit_SSD1306.h> // Biblioteca pentru afișajul OLED SSD1306. </code> | ||
+ | <code c>#include <LiquidCrystal_I2C.h> // Biblioteca pentru afișajul LCD 1602 cu modul I2C. </code> | ||
+ | |||
+ | * Funcții implementate | ||
+ | |||
+ | <code c>void setup() // Inițializează sistemul, afișajele și senzorii</code> | ||
+ | <code c>void loop() // Rulează în mod continuu pentru a verifica starea butoanelor, actualizează poziția jucătorului, gestionează starea bombei și labirintului</code> | ||
+ | <code c>void displaySetup() // Configurează afișajul OLED și inițializează pinurile butoanelor</code> | ||
+ | <code c>void updatePlayerPosition() // Actualizează poziția jucătorului pe baza intrărilor de la butoane</code> | ||
+ | <code c>void drawMaze(int mazeIndex) // Desenează labirintul pe afișajul OLED</code> | ||
+ | <code c>void buzzerSetup() // Configurează pinul pentru buzzer</code> | ||
+ | <code c>void bombTick() // Gestionează sunetul buzzer-ului pentru tick-ul bombei</code> | ||
+ | <code c>void explosionSound() // Redă sunetul exploziei</code> | ||
+ | <code c>void playGameWinningSound() // Redă sunetul de câștig</code> | ||
+ | <code c>void timeTick() // Actualizează timpul rămas și afișează pe LCD</code> | ||
+ | <code c>void gyroSetup() // Inițializează senzorul MPU6050 și afișajul LCD</code> | ||
+ | <code c>void gyroReadings() // Citește valorile de la senzorul MPU6050 și detectează mișcările bruște</code> | ||
+ | <code c>void ledGameSetup() // Configurează jocul LED</code> | ||
+ | <code c>void ledGameTick() // Gestionează starea jocului LED</code> | ||
+ | <code c>void lose() // Funcția apelată când explozia are loc</code> | ||
+ | <code c>void displayOkSign() // Desenează un semn "OK" pe afișajul OLED</code> | ||
+ | <code c>void win() // Funcția apelată când jocul este câștigat</code> | ||
- | <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> | + | Cu toate că proiectul final a avut o formă diferită față de cea inițial imaginată (unele piese fiind înlocuite sau eliminate complet, iar altele noi fiind adăugate pe parcurs), am reușit să obțin un joc destul de interesant de care sunt mulțumit. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | În concluzie, mi-a plăcut să lucrez la acest proiect. Am întâmpinat multe probleme neașteptate, dar acestea m-au ajutat să învăț foarte multe, atât pe partea de software, cât și pe cea de hardware. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | {{:pm:prj2024:sseverin:ioanpopescu_proiect_pm.zip|}} |
- | 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**. | + | |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 77: | Line 94: | ||
</note> | </note> | ||
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | + | Resurse Hardware: |
+ | * https://docs.sunfounder.com/projects/esp32-starter-kit/en/latest/_images/esp32_pinout.jpg | ||
+ | * http://ucapps.de/midibox_ng_manual_lcd.html | ||
+ | |||
+ | Resurse Software: | ||
+ | * https://edukits.co/lesson/noise-bomb/ | ||
+ | * https://www.electronicshub.org/esp32-oled-display/ | ||
+ | * https://lastminuteengineers.com/esp32-i2c-lcd-tutorial/?utm_content=cmp-true |