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> | ||