This shows you the differences between two versions of the page.
pm:prj2021:amocanu:ball_maze [2021/06/02 15:40] rares.badita [Rezultate obtinute] |
pm:prj2021:amocanu:ball_maze [2021/06/02 18:21] (current) rares.badita [Rezultate obtinute] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Ball Maze ====== | + | ====== Ball Maze🏀 ====== |
===== Autor ===== | ===== Autor ===== | ||
[[rares.badita@stud.acs.pub.ro|Badita Rares-Octavian]] | [[rares.badita@stud.acs.pub.ro|Badita Rares-Octavian]] | ||
Line 6: | Line 6: | ||
Proiectul implementeaza un joc format dintr-un labirint ce trebui parcurs cu o minge. | Proiectul implementeaza un joc format dintr-un labirint ce trebui parcurs cu o minge. | ||
Imputul este dat printr-un joystick ce controleaza inclinatia labirintului. | Imputul este dat printr-un joystick ce controleaza inclinatia labirintului. | ||
- | Scopul jocului este de aduce migea din punctul A in punctul B folosind doar inclinatia labirintului. | + | Scopul jocului este de aduce migea din punctul A in punctul B si inapoi in A folosind doar inclinatia labirintului. |
===== Descrierea Generala ===== | ===== Descrierea Generala ===== | ||
Line 21: | Line 21: | ||
Senzorul de lumina este folosit pentru a calcula durata parcurgerii labirintului. | Senzorul de lumina este folosit pentru a calcula durata parcurgerii labirintului. | ||
+ | |||
+ | Un joc complet inseama plecarea de langa senzorul de lumina, parcurgerea intr-un sens al labirintului si intoarecerea inapoi langa senzorul de lumina in sens invers. | ||
======Hardware Design====== | ======Hardware Design====== | ||
- Arduino Mega2560 | - Arduino Mega2560 | ||
Line 32: | Line 34: | ||
{{pm:prj2021:amocanu:poza-deasupra-baditarares.jpeg?800|800}} | {{pm:prj2021:amocanu:poza-deasupra-baditarares.jpeg?800|800}} | ||
+ | |||
+ | Designul este unul modular (labirintul poate fi dat jos usor prin desfacerea celor 2 piulite si desurubarea senzorului de lumina), ceea ce face ca labirintul sa poata fi inlocuit usor cu designuri noi. | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Un ciclu in functia loop() are urmatorii pasi: | ||
+ | * Citirea inputului analogic de la joystick; | ||
+ | * Transformarea inputului in output pentru servo motoare; | ||
+ | * Transmiterea datelor catre servo motoare; | ||
+ | * Citirea inputului de la senzorul de lumina si schimbarea starii jocului (daca este nevoie); | ||
+ | |||
+ | Inputul primit de la joystick este analogic si are valori cuprinse in intervalul [0-1023] pe fiecare din cele 2 axe. | ||
+ | Outputul cate servo este dat sub forma unghiurilor de in clinare. Am ales ca inclinarea maxima sa fie 15 grade pe fiecare dintre cele 4 directii. | ||
+ | Asadar am ales functia de gradul 1 : //f(x) = 30 / 1024 * x//, unde x este valoare de la joystick pe una dintre cele 2 axe, pentru a transforma inputul in output pentru servo motoare. | ||
+ | Intucat outputul este de formt int, functia nu este discreta si se comporta defapt ca //parte_intreaga_inferoara( 30 / 1024 * x )//. | ||
+ | |||
+ | Pentru a inregistra timpul de parcurgere al jocului, variabila //game_state// se poate afla in 2 stari posibile: //ongoing// sau //finished//. | ||
+ | Starea //ongoing// este asociata citirii valorii 0 de la senzorul de lumina (lumina nu este blocata de bila), iar starii //finished// ii este asociata valoarea 1. | ||
+ | |||
+ | Un joc nou este terminat daca //game_state// este //ongoing// iar de la senzor se citeste starea //finished//. | ||
+ | Un nou joc este inceput daca //game_state// este //finished// iar la senzor se citeste //ongoing// timp de minim 5 secunde consecutive. | ||
+ | Timpul in joc este calculat ca diferenta intere valorii millis() la finalul si inceputul jocului. | ||
===== Rezultate obtinute ===== | ===== Rezultate obtinute ===== | ||
- | [[https://youtu.be/qwfbzq5Ylqg| Videoclip cu jocul]] jucat de mine. | + | [[https://www.youtube.com/watch?v=FRgoBYZ7KT0| Prezentarea unui demo al jocului.]] |
Afisarea timpilor la interfata seriala dupa fiecare joc inregistrat: | Afisarea timpilor la interfata seriala dupa fiecare joc inregistrat: | ||
Line 41: | Line 62: | ||
{{pm:prj2021:amocanu:timpibaditarares.png?800|800}} | {{pm:prj2021:amocanu:timpibaditarares.png?800|800}} | ||
===== Concluzie ===== | ===== Concluzie ===== | ||
+ | Montajul tehnic a fost cea mai grea parte a proiectului. | ||
+ | |||
+ | Din punct de vedere al softwareului am ajuns la concluzia ca 30 de grade de miscare pe fiecare axa este alegerea optima. | ||
===== Resurse ===== | ===== Resurse ===== | ||
+ | Linkuri utile: | ||
+ | * [[https://lastminuteengineers.com/joystick-interfacing-arduino-processing/#:~:text=To%20read%20whether%20the%20joystick,GND%20terminal%20of%20the%20Arduino.&text=That's%20it| Cum sa citesc inputul de la joystick]] | ||
+ | * [[https://www.instructables.com/Arduino-Servo-Motors/| Cum sa lucrez cu servo moturul]] | ||
+ | {{:pm:prj2021:amocanu:proiectpm_baditarares.zip|Codul sursa}} |