-
Notifications
You must be signed in to change notification settings - Fork 2
Systemarkitektur
Slik arkitekturen bak Arduinomon er satt opp, så har vi fem agenter som kommuniserer med hverandre:
-
Arduino WiFi Rev2: Vår mikrokontroller for prosjektet. Dette er hjernen til Pokéballen, og håndterer all logikken og trafikken som foregår mellom modulene. Denne har en innebygget WiFi chip kalt ECC608 som tillater oss å kommunisere på nettverk gjennom TCP/IP.
-
MPU-6050: Akselmorometer -og gyroskop som registrerer bevegelse. Hovedfunksjonen til denne modulen er å oppdage (gjenkjenne) ett kast gjennom kalkuleringer. Når et gyldig kast er registrert vil Arduino'en først generere ett tilfeldig tall mellom 1 og x (x = maksimum Pokémon ID vi ønsker å generere. F.eks 151 er hele generasjon 1, 251 er generasjon 1 + generasjon 2), og sende en GET request til vår lokale API.
-
Webserver (lokal API): Ett RESTful API som komprimerer data fra PokéAPI; kjører på vår lokale Nginx webserver. Denne dataen er essensiell for å hente og validere informasjon om en generert Pokémon. Vi har ikke mulighet å hente direkte fra PokéAPI på grunn av begrenset kapasitet i minnet til Arduino'en. I tillegg bruker vi det lokale API'et i den lokale webserveren for å enklere bruke data om Pokémon. Når MPU-6050'en registrerer et gyldig kast vil Arduino'en sende en GET request til vår lokale API med ID'en til den genererte Pokémon'en som parameter. Dersom API'et vårt returnerer en HTTP response = 200, returneres det data om Pokémon. En HTTP response som != 200 vil avbryte kallet til API'et, og fortsette å lytte etter gyldige kast fra MPU-6050'en. Data vi henter fra API'et:
-
id
- Dette er en Pokémon sin unike ID. Alle Pokémon har en unik identifikator, og denne bruker vi for å verifisere om den genererte Pokémon'en er gyldig. -
name
- Nesten alle Pokémon har et unikt navn. Denne verdien er stort sett brukt for testing og debugging; eventuelt for annet bruk i framtiden. -
capture_rate
- Dette nummeret definerer hvor sannsynlig det er for at du klarer å fange en Pokémon. Nummeret skalerer mellom 1-255, der hvor en capture rate på 255 er 100% sjanse for å bli fanget. Arduino'en bruker denne verdien for å kalkulere om du klarer å fange en Pokémon etter et kast. Dersom forsøket på å fange en Pokémon er gyldig, vil Arduino'en lagre identifikatoren til Pokémon'en i databasen, og spilleren har klart å fange en Pokémon!
-
-
PokéAPI: Ett RESTful API som inneholder absolutt all data om hver enkelte Pokémon. Vårt lokale API henter data fra ulike API aksesspunkter, og komprimerer dette i ett enkelt API for Arduino'en å bruke.
-
Lokal database: Her lagres hvert vellykkede Pokémon fangst. Vi har for øyeblikket en tabell med tre attributer:
catches:
-
id
- Primærnøkkelen. -
pokemon_id
- Dette er den fangede Pokémon'en sin unike identifikator. -
catch_date
- Dato for når spilleren fanget Pokémon.
-