This shows you the differences between two versions of the page.
|
pm:prj2024:amocanu:denis.zamfirescu [2024/05/05 21:53] denis.zamfirescu Diagrama |
pm:prj2024:amocanu:denis.zamfirescu [2024/05/27 11:43] (current) denis.zamfirescu GATA |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Rhythm Game ====== | + | ====== Ball in a Maze Puzzle ====== |
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | Acest proiect reprezinta implementarea unui joc de tipul Rhythm Game pe o placuta arduino. Jucatorul va fi nevoit sa puna mana deasupra inputurilor in ritmul afisat pe ecranul LCD. Jocul se termina atunci cand jucatorul face 3 greseli, sau daca reuseste sa termine intregul nivel(sper sa fi destul de greu =)). | + | Acest proiect reprezinta implementarea unui joc de tip labirint pe o placuta Arduino Mega 2560. Jucatorul are rolul de a ghida o bila printr-un labirint, folosindu-se de cei 4 senzori de proximitate pe care ii are la dispozitie. Fiecare senzor roteste labirintul intr-o anumita directie, astfel incat bila sa se poata rostogoli. |
| - | Ideea a pornit de la faptul ca mereu jocurile de genul de pe telefon/PC mi s-au parut amuzante, asa ca am zis sa incerc si eu sa creez unul, sper ca fun(si nu frustrant din cauza senzorilor :-(). | + | Ideea acestui proiect mi s-a parut interesanta si parea un joc distractiv de jucat :-D |
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| - | *Un display LCD va afisa un meniu si va astepta un input de la user, moment in care va incepe sa afiseze pe ecran secventa de inputuri pe care o voi pune eu cap la cap (probabil off-beat si super grea fara motiv = limit testing). | + | *Jucatorului ii sunt prezentati 4 senzori de proximitate, fiecare corespunzand unei directii in care labirintul poate fi rotit |
| - | *Senzorii vor fi folositi de catre jucator pentru a trimite inputuri sistemului, fiecare corespunzand unui anumit tip de input de pe display. | + | *Senzorii vor fi folositi de catre jucator pentru a trimite inputuri sistemului si pentru a activa cele 2 servomotoare. |
| - | *De fiecare data cand jucatorul rateaza timingul unui input, un led se va aprinde. Dupa 3 leduri aprinse, jucatorul pierde si se afiseaza pe display un alt meniu, care reflecta performanta acestuia. | + | *Cele 2 servomotoare au rolul de a roti labirintul pe o anumita axa, astfel incat biluta din acesta sa se poata rostogoli in directia dorita |
| - | {{:pm:prj2024:amocanu:diagraaama.png?nolink800|}} | + | {{:pm:prj2024:amocanu:diagramanoualabirint.jpeg?nolink800|}} |
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | *placuta arduino | + | *Placa Arduino Mega 2560 |
| - | *display | + | *4 x Senzori Infrarosu HW-201 |
| - | *4 x senzori | + | *2 x ServoMotor SG90 |
| - | *difuzor(pentru muzica) | + | *Fire de legatura |
| - | *fire | + | *1 x Breadboard |
| - | *rezistente | + | |
| + | Schema electrica a circuitului este urmatoarea: | ||
| + | |||
| + | {{:pm:prj2024:amocanu:diagramalabirint.png?nolink800|}} | ||
| + | ===== Software Design ===== | ||
| <note tip> | <note tip> | ||
| - | Aici puneţi tot ce ţine de hardware design: | + | Mediul de dezvoltare folosit: Arduino IDE |
| - | * listă de piese | + | Librarii folosite: Servo, New Ping (Instalate direct in IDE) |
| - | * 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> | ||
| - | ===== Software Design ===== | + | Descrierea implementarii: |
| + | Implementarea consta in verificarea periodica a semnalelor primite de la senzori. Daca unul dintre acestia detecteaza ca jucatorul si-a apropiat mana de el, algoritmul trimite un semnal servomotorului corespunzator si il roteste cu un anumit numar de grade. | ||
| + | Functii definite: | ||
| + | *setup: aici sunt definite starile pinilor si sunt atasate porturi servomotoarelor, folosind functia attach din libraria Servo. De asemenea, este pornita comunicarea seriala, cu un baud de 9600 | ||
| + | *loop: aici se seteaza starea initiala a servomotoarelor(in cadrul primului loop), iar apoi se citesc datele de la senzori. Daca unul dintre senzori este activat, se roteste servomotorul corespunzator acestuia cu un anumit numar de grade. | ||
| <note tip> | <note tip> | ||
| - | Descrierea codului aplicaţiei (firmware): | + | Am folosit variabile globale pentru a defini in cod servomotoarele si pentru a retine unghiurile la care acestea se afla, pentru a nu permite jucatorului sa roteasca excesiv labirintul. Am folosit macrouri pentru a tine minte atribuirea pinilor de pe placuta Arduino. |
| - | * 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> | </note> | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| + | Rezultatul obtinut in urma proiectului este un joculet complet functional, pe care utilizatorul il poate controla. | ||
| - | <note tip> | + | Link catre demo-ul proiectului: https://youtube.com/shorts/4bMITtU0Oek |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
| - | </note> | + | Poze cu circuitul (fara si cu labirint, respectiv): |
| + | |||
| + | {{:pm:prj2024:amocanu:mazeball2.jpg?nolink500|}} | ||
| + | {{:pm:prj2024:amocanu:mazeball1.jpg?nolink500|}} | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| + | |||
| + | Acest proiect mi s-a parut foarte amuzant de facut, si chiar mai greu de implementat decat mi s-a parut initial. Am invatat sa programez pe Arduino si sa folosesc diferite tipuri de senzori si servomotoare. :> | ||
| ===== Download ===== | ===== Download ===== | ||
| - | + | Arhiva cu diagrame/codul sursa pentru proiect:{{:pm:prj2024:amocanu:labirint.zip}} | |
| - | <note warning> | + | |
| - | 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 63: | Line 64: | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | <note> | + | *Documentatie librarie Servo.h: https://www.arduino.cc/reference/en/libraries/servo/ |
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | *Pinout Arduino Mega 2560: https://store-usa.arduino.cc/products/arduino-mega-2560-rev3 |
| - | </note> | + | |
| <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> | ||