12
 VIDEOGIOCHI E ISTRUZIONE Jensen Davide Anno scolastico 2014-2015 Classe 5^ Tel. A ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 1

Tesina_videogiochi e istruzione.pdf

Embed Size (px)

Citation preview

  • VIDEOGIOCHIE

    ISTRUZIONE

    Jensen DavideAnno scolastico 2014-2015

    Classe 5^ Tel. A

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 1

  • INDICE

    1 Introduzione pg 31.1 I videogiochi pg 31.2 I videogiochi e la storia pg 31.3 I videogiochi e l'informatica pg 41.4 I videogiochi e l'attivit fisica pg 41.5 I videogiochi nel tempo libero pg 4

    2 OF Run pg 52.1 Il gioco pg 52.2 Hardware pg 52.3 Software pg 7

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 2

  • 1 INTRODUZIONE

    1.1 I videogiochi: i videogiochi sono ormai da tempo presenti nella vita di numerosi ragazzi, ma ultimamente anche in quella di un sempre maggior numero di adulti.Sono sovente molto criticati perch vengono visti come una perdita di tempo, uno svago inutile, associato ad immagini violente o volgari.Ma non sono solo questo, una grossa parte di videogiochi trattano di argomenti filosofici, storici o letterali, fisici, scientifici e matematici.

    1.2 I videogiochi e la storia: il primo videogioco realizzato si chiamava Cathode Ray-tube amusement device (fine seconda guerra mondiale), ed era ispirato al sistema di lancio di missili utilizzato in guerra. Non viene sempre riconosciuto come il primo videogioco in quanto non mai stato brevettato o commercializzato.Diversi videogiochi trattano argomenti storici, pi o meno recenti. Il tema pi trattato sicuramente la seconda guerra mondiale, ad esempio uno dei capitoli della saga dei Call of Duty porta il giocatore a rivivere lo sbarco in Normandia, pi precisamente la battaglia di Pointe du Hoc, nei panni di un soldato americano.Altri videogiochi, invece, trattano argomenti storici pi antichi, quali la scoperta dell'America o, nel caso del gioco Assassin's Creed Unity, ci presentano una fedele riproduzione degli eventi accaduti durante la rivoluzione Francese aggiungendo anche dei personaggi fantastici.Un ragazzo francese ha scattato delle foto di varie ambientazioni del gioco per far vedere quanto fedelmente stata replicata la citt:

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 3

  • 1.3 I videogiochi e l'informatica: Ma i videogiochi non sono solo storia, in un titolo noto come Minecraft il giocatore pu utilizzare una componente di gioco che replica il funzionamento della logica booleana, pu utilizzare porte logiche, flip-flop, pulsanti e quant'altro.Alcuni utenti del gioco hanno riprodotto orologi, programmi di videoscrittura, calcolatrici,... solo la fantasia pu porre limite all'inventiva.Ci sono varie scuole medie in giro per il mondo che gi usano questo gioco per poter insegnare le basi dell'elettronica o della programmazione ai ragazzi.Un altro titolo molto interessante Project Spark. Questo gioco pu essere completamente personalizzato dall'utente tramite linguaggio C#; possiamo creare mostri, mappe e missioni da far giocare ad altre persone. Quale metodo migliore per imparare a programmare?

    1.4 I videogiochi e l'attivit fisica: Esistono alcuni dispositivi progettati per farci allenare mentre giochiamo, la console Wii, creata dalla casa giapponese Nintendo, possiede dei controller senza fili che permettono al giocatore di simulare una partita di tennis, di golf o di ping pong, compiendo reali movimenti fisici, equiparabili a quelli che utilizzerebbe in un ambiente reale. L' Omni VR un dispositivo, ancora in fase di sviluppo, che permette al giocatore di correre sul posto grazie ad una piattaforma curva di materiale scivoloso. I passi compiuti dalla persona vengono sincronizzati con i passi del personaggio all'interno del gioco.

    1.5 I videogiochi nel tempo libero: La collocazione temporale ideale dei videogames dovrebbe rimanere confinata nel tempo libero, senza invadere eccessivamente le nostre attivit principali. Come i personaggi dei racconti di Pirandello eseguono qualche gesto al di fuori dal comune, cos noi possiamo utilizzare i videogiochi per sfuggire per un istante alla realt, interpretando un super-eroe, un dottore o qualsiasi altro personaggio la nostra fantasia ci suggerisca.

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 4

  • 2 OF RUN

    2.1 Il gioco: OF Run (optic fiber run) pu essere visto come un semplice esempio di videogioco istruttivo. Chi lo gioca si trova a comandare, tramite un guanto dotato di accelerometro, un raggio luminoso all'interno di una fibra ottica. L'obiettivo quello di giungere alla fine del percorso senza andare a sbattere contro i bordi del cavo, per poter evitare la rifrazione del raggio di luce. Inoltre, allo scorrere del tempo, la velocit di movimento del raggio aumenter e i colori cambieranno seguendo le velocit e le scale cromatiche reali.

    2.2 Hardware: La componentistica che stata utilizzata la seguente:-2 Arduino UNO, il primo utilizzato come trasmettitore e il secondo come ricevitore;

    -2 NRF24 per la trasmissione e ricezione delle informazioni via radio;

    -1 accelerometro Mpu6050 per poter misurare l'inclinazione della mano;

    L'Arduino trasmettitore stato montato sul guanto che il giocatore indosser. Sopra questo Arduino stata montata una mini-breadboard alla quale stato collegato il sensore Mpu6050; questo possiede 8 pin, dei quali sono stati utilizzati solo i primi 4:-PIN 1 Vcc: indica il pin di alimentazione, questo stato collegato direttamente al pin di alimentazione di Arduino ad un voltaggio di 5 volt;-PIN 2 Gnd: il pin di ground stato collegato al pin di ground di Arduino in

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 5

  • comune con il trasmettitore;-PIN 3 SCL: collegato al pin A5, questo viene collegato al bus utilizzato dall'Arduino per una comunicazione gestita dal protocollo I2C;-PIN 4 SDA: collegato al pin A4, questo viene collegato al bus utilizzato dall'Arduino per una comunicazione gestita dal protocollo I2C;Le informazioni di rotazione vengono inviate sulle due linee SCL ed SDA.L'accelerometro montato in posizione parallela alla mano.Andando a piegare la mano verranno modificati i valori di rotazione dell'asse x e y (espressi in gradi), questi verranno poi elaborati per effettuare i movimenti (descrizione completa nella sezione 2.3)Software).

    Sull'Arduino trasmettitore montato anche un trasmettitore NRF24, anch'esso possiede 8 pin, dei quali sono utilizzati 7:-PIN1 Vcc: il pin di Vcc, necessario per l'alimentazione, stato collegato direttamente al pin di alimentazione dell'Arduino, differentemente dall'accelerometro questo integrato lavora a 3.3 volt;-PIN2 Gnd: il pin di ground stato collegato al pin di ground di Arduino in comunecon l'accelerometro;-PIN3 CSN: questo pin permette l'invio di varie informazioni all'Arduino tramite il protocollo SPI, collegato al pin 10 dell'Arduino;-PIN4 CE: tramite il pin denominato Chip Enable si pu scegliere se porre il chipin trasmissione o in ricezione, collegato al pin 9 dell'Arduino;-PIN5 MOSI: con questo pin si indica la linea che esce dal master per andare agli slave (essendo l'SPI un master-slave based), collegato al pin 11 dell'Arduino;-PIN6 SCK: la linea di sincronizzazione sulla quale transita il segnale di clock, al pin 13 dell'Arduino;-PIN7 MISO: con questo pin si indica la linea che esce dagli slave per andare al master (essendo l'SPI un master-slave based), collegato al pin 12 dell'Arduino;

    Riguardo all'Arduino ricevitore l'unico componente collegato risulta essere un'altra scheda NRF24, essendo il pin-out lo stesso i collegamenti sono stati effettuati analogamente a quelli del trasmettitore.

    L'utente pu scegliere il metodo di alimentazione del trasmettitore, questo pu essere sia collegato al computer tramite cavo USB, oppure alimentato da un supporto esterno quale una PowerBank oppure una batteria da 9 volt.Per poter fissare il dispositivo trasmettitore al guanto o alla mano basta adoperare un tessuto di velcro.

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 6

  • 2.2 Software: Di seguito verr presentato il codice presente sulle due schede Arduino e la parte di acquisizione delle informazioni all'interno del software Unity.Sulla scheda utilizzata come trasmettitore il codice che troviamo il seguente:

    #include #include #include #include #include #include #define CE_PIN 9 #define CSN_PIN 10

    const uint64_t pipe = 0xE8E8F0F0E1LL;

    MPU6050 mpu;int16_t ax, ay, az;int16_t gx, gy, gz; int val_assi[2];

    RF24 radio(CE_PIN, CSN_PIN);

    void setup(){ Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipe); Wire.begin(); mpu.initialize(); }

    void loop(){ mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); val_assi[0] = map(ax, -17000, 17000, 0, 179); val_assi[1] = map(ay, -17000, 17000, 0, 179); val_assi[1] *= -1; radio.write( val_assi, sizeof(val_assi)); }

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 7

  • Le librerie che sono state importate sono, in ordine, quelle di definizione delle funzioni relative al protocollo SPI, al protocollo I2C, alle funzioni relative all'NRF24 e all'accelerometro MPU6050.Viene da subito dichiarata la pipeline di trasmissione, ovvero il canale sul quale verranno inviati i dati via radio.Nella funzione di setup viene inizializzata la velocit seriale a 9600 baud al secondo, viene in seguito inizializzato il collegamento radio aprendo il canale di scrittura sulla pipeline precedentemente definita, viene poi inizializzata la lettura dei valori forniti dall'accelerometro.Nella funzione di loop vengono acquisiti i valori di rotazione dell'accelerometro sugliassi x, y e z (vengono acquisiti anche i valori del gyroscopio che, per, non verranno utilizzati).Il sensore fornisce i valori acquisiti in un range da -17000 a +17000. E' necessaria, dunque, una ri-mappatura dei valori in un range appropriato da 0 a 179.I valori di rotazione di x e y vengono salvati in un vettore, successivamente vengono separati dai valori successivi da una variabile.Il vettore contenente i valori viene poi inviato via radio.

    Per quanto riguarda il trasmettitore le librerie utilizzate e le variabili dichiarate risultano essere le stesse, cos come anche la funzione di setup, nella funzione di loop, invece, troviamo il seguente codice:

    void loop(){ if ( radio.available() ) { bool lettura = false; while (!lettura) { lettura = radio.read( val_assi, sizeof(val_assi) ); Serial.println(val_assi[0]); Serial.println(val_assi[1]); delay(80); } }}

    Inizialmente viene effettuato un controllo per verificare che la sessione di comunicazione radio sia avviabile e correttamente funzionante, se si allora pone il valore booleano di lettura a falso, effettuando cos la prima lettura dei valori inviati via radio, questi vengono posti all'interno del vettore, che viene poi inviato serialmente al computer. Prima di effettuare una nuova acquisizione delle informazioni viene atteso un ritardo di 80 milli-secondi per evitare una saturazione della memoria.

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 8

  • All'interno del gioco, che stato sviluppato con il motore grafico Unity, la parte principale del codice risiede in due script, uno utilizzato per l'acquisizione delle informazioni, il secondo per l'esecuzione delle informazioni stesse.Viene di seguito riportato e descritto il primo codice:

    SerialPort stream = new SerialPort("COM4", 9600);public int x_0 = 0 , y_0 = 0;public int value_int;private string value;

    void Start () {int value_i;stream.ReadTimeout = 80;stream.Open(); stream.ReadTimeout = 80; while(x_0 == 0 || y_0 == 0){

    value = stream.ReadLine();if(value != ""){

    value_i = int.Parse(value);if(value_i>=0){

    x_0 = value_i;}else{

    y_0 = Mathf.Abs(value_i);}

    }}

    }void Update () {

    value = stream.ReadLine();if(value != "") {

    value_int = int.Parse(value,System.Globalization.NumberStyles.AllowLeadingSign);

    stream.BaseStream.Flush(); }

    }

    Viene dichiarata la porta seriale dalla quale verranno letti i valori inviati dal ricevitore, viene utilizzata la seriale COM4 ad un baud rate di 9600 baud al secondo. Le due variabili intere x_0 e y_0 verranno in seguito utilizzate per poter calibrare la ricezione dei valori. Vengono poi dichiarate due variabili che terranno in

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 9

  • memoria i singoli valori ricevuti, prima in forma di stringa e poi convertiti a interi.Nella funzione di start viene aperta la lettura dello stream delle informazioni, affinchsi eviti una ricezione parziale si attende che vengano ricevuti almeno una volta entrambi i valori di rotazione in asse x e in asse y, essendo che questi sono forniti conil segno pi nel caso in cui siano valori x e con il segno meno nel caso in cui siano valori y necessario renderli senza segno dopo averli identificati.Nella funzione di update, chiamata ad ogni frame visivo, viene costantemente letto lo stream e, i valori, vengono trasformati uno ad uno da tipo stringa a tipo intero.In seguito alla lettura di ogni valore viene pulito lo stream per evitare una saturazionedi informazioni con conseguente rallentamento del programma.

    Per quanto riguarda l'esecuzione dei comandi ricevuti il codice il seguente:

    private ValoriSeriali valori;private GameObject player, maincam;private Vector3 posizione, posizione_camera;private int x,y;

    void Start(){valori = GetComponent();player = GameObject.FindGameObjectWithTag("Player");maincam = GameObject.FindGameObjectWithTag("MainCamera");posizione = player.transform.position;posizione_camera = maincam.transform.position;

    }

    void FixedUpdate(){float speed = PlayerPrefs.GetFloat("Speed");if(valori.value_int >= 0){

    x = valori.value_int;}else{

    y = valori.value_int;y = y * -1;

    }

    if( x>100 && x130 && x

  • if( x>150 && x100 && y130 && y150 && y50 && x30 && x0 && x50 && y30 && y0 && y
  • La variabile di tipo ValoriSeriali necessaria per creare un collegamento allo scriptdi acquisizione delle informazioni. Le due dichiarazioni di tipo GameObject indicano rispettivamente l'oggetto del giocatore e della camera mentre i due vettori ditre spazi indicano le rispettive posizioni. Con le due variabili intere x e y indichiamo ivalori che andremo a salvare. Nella funzione di start vengono creati tutti i collegamenti necessari, ovvero il collegamento allo script di acquisizione, i collegamenti fra variabili e oggetti all'interno del gioco e viene eseguita la definizionedelle posizioni degli oggetti.All'interno della funzione di update vengono letti i valori acquisiti nello script nominato ValoriSeriali, viene nuovamente analizzato se i valori sono positivi o negativi per identificare se appartengono ad una rotazione sull'asse x o y. In base ai valori salvati, tramite gli if a cascata, viene incrementata o decrementata la posizione del giocatore in base a quanto l'accelerometro risulta inclinato, avendo degli if a cascata nel caso in cui pi condizioni siano vere vengono eseguiti pi if, rendendo cos possibile un movimento in obliquo nel caso in cui venga effettuato con un movimento del trasmettitore. Vengono, infine, modificate le posizioni con i valori scelti, incrementando costantemente il valore dell'asse z dando l'effetto di un movimento in avanti continuo. All'interno del progetto sono disponibili gli script sopracitati ed altri interamente commentati.

    ISIS A.Malignani A.S. 2014/2015 Relazione di Jensen Davide 12