Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:amocanu:ball_maze [2021/06/02 15:39]
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/qwfbzq5YlqgVideoclip cu jocul]] jucat de mine.+[[https://www.youtube.com/watch?​v=FRgoBYZ7KT0Prezentarea unui demo al jocului.]] 
 + 
 +Afisarea timpilor la interfata seriala dupa fiecare joc inregistrat:​ 
  
-Afisarea timpilor la interfata seriala dupa fiecare joc: 
 {{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}}
pm/prj2021/amocanu/ball_maze.1622637585.txt.gz · Last modified: 2021/06/02 15:39 by rares.badita
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0