This shows you the differences between two versions of the page.
pm:prj2022:rstanescu:mihai.blacioti [2022/05/15 23:32] mihai.blacioti created |
pm:prj2022:rstanescu:mihai.blacioti [2022/05/29 22:50] (current) mihai.blacioti [Bibliografie/Resurse] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Bomb Mini-game 💣 ====== | ====== Bomb Mini-game 💣 ====== | ||
+ | |||
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul are la bază dezamorsarea unei ”bombe” introducând un cifru/o combinație (apăsarea butoanelor într-o anumită ordine pentru a forma fie un cuvânt simplu, fie un nume etc.). Timpul până la detonare va fi contorizat de un LED care v-a pâlpâi din ce în ce mai tare asemănător unei bombe reale. Intrucțiunile de descifrare vor fi afișate pe un LCD, iar fiecare greșeală va fi taxată prin reducerea timpului de dezamorsare rămas. | + | Proiectul are la bază dezamorsarea unei ”bombe” introducând un cifru/o combinație (apăsarea butoanelor într-o anumită ordine pentru a forma cod simplu. Timpul până la detonare va fi contorizat de un LED care v-a pâlpâi acompaniat de un bipait asemănător unei bombe reale. Intrucțiunile de descifrare vor fi oferite de către mine, iar introducerea unui cifru incorect va duce la pierderea jocului. |
- | + | ||
- | Am decis să implementez 3 cifruri (unul ușor, unul mediu și unul dificil); schimbarea între acestea se va face printr-un buton. Am ales acest proiect, deoarece mi-a plăcut ideea de a face un puzzle-game și de a vedea câți oameni vor reuși să dezamorseze bomba în toate cele 3 nivele. | + | |
+ | Am ales acest proiect, deoarece mi-a plăcut ideea de a face un puzzle-game și de a vedea câți oameni vor reuși să dezamorseze bomba. | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Jucătorul va interacționa cu cele 4 butoane de pe board și cu LCD-ul, iar cele 2 LED-uri vor reprezenta reușita sau înfrângerea. Primul buton va alege dificultatea cifrului, iar celelate 3 vor fi folosite pentru ”scrierea” propriu-zisă a acestora. LCD-ul are rolul de a oferi indicații despre cifru. | + | Codul ce trebuie introdus este dinamic, adică poate fi schimbat la începutul fiecărui joc (nu este necesară modificarea codului). Timpul până la detonare este static (fiind declarat în cod). |
- | ==== Schema bloc: ==== | + | Jocul funcționează astfel: se începe prin introducerea unui cod de ghicit (constituit din 4 cifre). Ulterior, după o mică perioadă de acomodare și de confirmare a codului introdus anterior, jucătorul va interacționa cu un keypad și cu LCD-ul (citirea instrucțiunilor de pe acesta), iar LED-urile vor reprezenta reușita sau înfrângerea (împreună cu afișarea unui mesaj pe LCD). Există posibilitatea de a șterge caracterele introduse (folosind tasta *), însă odată introduse 4 caractere plăcuța va verifica în totalitate codul (deci ultima cifră trebuie aleasă atent). Pentru a face lucrurile mai interesante, am adăugat un buzzer care va scoate sunete odată cu interacțiunea cu keypadul. |
- | {{:pm:prj2022:tinkercad.png?500|}} | + | ==== Schema Tinkercad: ==== |
+ | |||
+ | {{:pm:prj2022:rstanescu:tcad_projecy.png?500|}} | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 21: | Line 23: | ||
* Arduino UNO Rev.3 | * Arduino UNO Rev.3 | ||
- | * LCD | + | * LCD (I2C) |
- | * Rezistente | + | * Rezistențe |
- | * Diverse tipuri de LED-uri | + | * LED-uri |
* Fire | * Fire | ||
- | * Butoane | + | * Keypad (4x3, nu 4x4) |
* Breadboard | * Breadboard | ||
+ | * Buzzer | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | * Mediu de dezvlotare: Arduino IDE | ||
+ | |||
+ | * Librării şi surse 3rd-party: | ||
+ | * Tone.h -> [[https://github.com/bhagman/Tone|Tone]] | ||
+ | * Keypad.h ->[[https://github.com/Chris--A/Keypad|Keypad]] | ||
+ | * LiquidCrystal_I2C.h -> [[https://www.arduinolibraries.info/libraries/liquid-crystal-i2-c|LCD_I2C]] | ||
+ | * Algoritmi și structuri: | ||
+ | * Timer -> [[https://create.arduino.cc/projecthub/hugonator/simple-lcd-timer-with-arduino-uno-ff3376|Timer]] | ||
+ | * Keypad -> [[https://www.optimusdigital.ro/en/others/11396-sparkfun-qwiic-keypad-12-button.html?search_query=keypad&results=20|Keypad_Col/Row Usage]] | ||
- | <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> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | În urma finalizării proiectului am decis să îmi pun la încercare colegii, rugându-i să ghicească diverse cifruri (după ce le-am oferit instrucțiui). |
+ | Aceste teste au dus la setarea timlului de ghicire la un standard de 2 minute și la crearea unei legende pentru cifrele simple (de exemplu pentru cifra 6 avem hint-ul ... din 49). | ||
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Acest proiect are rolul de a dovedi că îmbinând concepte simple de Arduino se poate crea un joc destul de interesant. De asemenea, evidențiează interacțiunea dintre componente simple precum: buzzer + LED, Keypad + LCD; astfel făcându-l un proiect bun de început pentru toți pasionații de Arduino. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | Codul este disponibil în următoarea arhivă: {{:pm:prj2022:rstanescu:bomb_mini-game.zip|Boom_Boom}} |
- | 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 ===== | ||
- | |||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | Listă cu documente, datasheet-uri, resurse Internet folosite. |
</note> | </note> | ||
+ | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab2-2022|Laboratorul nr. 2 PM]] | ||
+ | * [[https://ocw.cs.pub.ro/courses/pm/lab/lab6-2022|Laboratorul nr. 6 PM]] | ||
+ | * [[https://arduinogetstarted.com/tutorials/arduino-keypad|Keypad Tutorial]] | ||
+ | * [[https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/|Buzzer]] | ||
+ | * [[https://www.youtube.com/watch?v=CwImS9wPHOk|CS_GO Bomb]] | ||
+ | * [[https://www.instructables.com/Arduino-defuseable-bomb-perfect-for-airsoft-games-/|Easy Bomb Project]] | ||
+ | * [[https://www.circuitbasics.com/arduino-basics-controlling-led/#:~:text=To%20turn%20on%20an%20LED,wired%20to%20digital%20pin%2013.|LED basics]] | ||
<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> | ||