Professional Documents
Culture Documents
PAC2 - Disseny D'interacció
PAC2 - Disseny D'interacció
Projecte Arduino:
La bola esbojarrada
Marc Acosta Basagañas
Disseny d’interacció - Multimèdia
A més de tot això, s’ha fet servir el programari d’Arduino per a programar
el circuit i Processing per a la creació del videojoc.
L’esquema elèctric
Enllaç a demostració
https://youtu.be/sXswA98NlCI
Pas a pas
El codi
} else{
Arduino digitalWrite(2,LOW);
noTone(8);
}
En l’apartat de declaració de variables globals només en creem una que delay(100);
l’utilitzarem quan es produeixi la connexió entre Arduino i Processing. }
Aquesta variable és l’encarregada d’emmagatzemar les dades enviades des
del joc.
Processing
char val;
Fem servir el programari de Processing per a crear el videojoc, la part amb
la qual l’usuari podrà interactuar amb la nostra aplicació.
En la secció de Setup() inicialitzem la comunicació amb el serial port i
configurem el pin número 2 de sortida (és el pin on tenim connectat el El primer que fem és carregar la llibreria que ens permetrà comunicar-nos
LED. amb l’Arduino.
void loop() La bola serà l’objecte que és mou per tota la pantalla i que l’usuari ha
{ d’evitar que xoqui.
if (Serial.available())
val = Serial.read(); La bola constarà d’unes propietats i uns mètodes. Les propietats defineixen
} els atributs que li volem donar, així com la definició del seu moviment,
if (val == ‘1’) cap a on i amb quina velocitat es mouen. Amb els mètodes, podem crear
digitalWrite(2,HIGH); la bola, fer que es mogui per la pantalla, canviant la direcció i o sentit,
tone(8, 260); controlar la seva velocitat i determinar si la ha xocat amb els límits de la
finestra.
Marc Acosta Basagañas
Disseny d’interacció - Multimèdia
boolean guanyaPartida(){
}
if (this.nivell>4) {
}
return true;
return comprovaXoc;
}
}
return false;
} }
}
El jugador
Creem una altra classe anomenada Jugador la qual té dues propietats; vides
i nivell i diferents mètodes que ens permetran el control d’aquestes. Po-
drem restar una vida cada cop que la bola xoca amb un límit de la finestra, El temporitzador
puja el nivell de dificultat del joc, comprovar si el jugador ha perdut totes
El temporitzador és un cronòmetre que ens permet controlar el temps que
les vides o si, per contra, ha superat els 4 nivells del que disposa el joc.
discorre des del començament de la partida. Com les altres dues classes
disposa de propietats i mètodes per a controlar-lo.
class Jugador{
int vides; class Cronometro{
int nivell; int crono;
boolean paratCrono;
Jugador(int videsJugador, int nivellJugador){
vides=videsJugador; Cronometre (boolean parat) {
nivell=nivellJugador; paratCrono=parat;
} }
Passem a la creació de funcions que més tard necessitarem. Primer una En l’apartat setup() fem les configuracions inicials necessàries, configu-
funció per mostrar text per pantalla, com per exemple, les vides que li rem mida de la pantalla, creem els objectes basats en les classes e indi-
resten al jugador. Seguidament, la funció que ja està definida de keyPres- quem a l’objecte Serial quin és el port amb al que ha d’enviar dades.
sed(), amb la qual fem que l’usuari pugui moure la bola mitjançant les
tecles de moviment. void setup()
{
void mostraDadesPantalla(int tamanyLletra, int posicioX, int posicioY, size(1500, 1000);
String cadena, int numero){ String portName = Serial.list()[1];
textSize(tamanyLletra); myPort = new Serial(this, portName, 9600);
text(cadena, posicioX, posicioY); bola= new Bola(random(50,1400),random(50,900), 40, 2.0,int(ran
if(numero!=0){ dom(1,4)),205);
text(numero, posicioX +90 ,posicioY); jugador=new Jugador(3,1);
} temps=new Cronometre(false);
} }
void keyPressed(){
switch(keyCode){ Finalment, arribem a l’apartat draw(). El primer que hem de fer és netejar
case 37: la pantalla. Una vegada fet això comprovem que la partida no està acaba-
bola.moureBola(1); da. Els motius que podem fer que una partida s’acabi són dos; o el jugador
break; ha perdut totes les vides o ha superat tots els nivells del joc. En qualsevol
case 38: d’aquestes situacions ens apareix un missatge en pantalla, sigui anunciant
bola.moureBola(3); que hem perdut o donant-se l’enhorabona.
break;
case 39: Si no es dona cap d’aquestes situacions la partida pot continuar.
bola.moureBola(2);
break;
case 40: void draw(){
bola.moureBola(4); background(0,0,0);
break; if (jugador.gameOver()) {
background(0,0,0);
default:
mostraDadesPantalla(50,width/3 +100,height/2,”GAME OVER”,0);
break;
} else if (jugador.guanyaPartida()){
}
background(0,0,0); // Netejem pantalla.
} mostraDadesPantalla(50,width/3 +100,height/2,”ENHORABO
NA”,0);
}
Marc Acosta Basagañas
Disseny d’interacció - Multimèdia
A partir d’aquí tot son crides a la funció (que hem creat) per a mostrar da-
Reflexions i millores
des en pantalla o a mètodes dels objectes. Passo a detallar l’ordre:
Iniciem el cronòmetre. Al principi no tenia cap idea clara de quin seria el meu projecte, a més els
meus coneixements en electrònica són molt bàsics; llei d’Ohm i reconeixe-
• Mostrem dades en pantalla; vides, temps, etc. ment de components electrònic, no tant el seu funcionament.
• Dibuixem la bola. Així doncs, vaig començar amb els projectes del llibre que venia amb el
• Li donem velocitat en funció del temps transcorregut. kit Arduino. No sé en quin projecte exactament va ser, imagino que vaig
anar sumant una mica d’un i una del següent, vaig tenir la idea d’intentar
• Movem la bola en la direcció pertinent. fer que quan una bola rebotés contra els límits de la finestra s’encengués
un LED i sonés un piezoelèctric. Però, no hi havia interacció.
else { Després de donar-hi una volta, vaig pensar en el joc del Pong. Pels que no
temps.iniciarCrono();
el conegueu o no el recordeu, és el joc on hi ha dues barres enfrontades que
mostraDadesPantalla(20,55,50,”Temps:”,temps.crono);
han de fer rebotar una bola per intentar anotar un punt. Però, com no dis-
mostraDadesPantalla(20,1350,50,”Nivell:”,jugador.nivell);
mostraDadesPantalla(20,1350,100,”Vides:”,jugador.vides); posaria del temps necessari per fer-ho correctament, vaig acabar derivant
bola.crearBola(); cap a la creació d’aquest projecte: La bola esbojarrada.
bola.modificarVelocitat(temps.crono);
El primer de tot, va ser muntar el circuit, tot seguit, vaig fer una petita pro-
bola.moureBola(bola.direccio);
va amb Arduino per veure que funcionava i que no hi havia cap problema.
Apunts:
https://campus.uoc.edu/webapps/aulaca/classroom/Niu.ac-
tion?s=5ac033a5e0014db73ba44643e32971a7c3285d4c6cca9ec-
ce99e068fb2b8e9626ae0d7d364b2ecb541a78cbd0171eb2d6ff28e-
1f24f2e3ab5eb2d6c902e37e63&classroomId=931134&subjectI-
d=926955&javascriptDisabled=false&niuId=38445&langNiu=a
Llibre de projectes:
https://candy-ho.com/Drivers/librodeproyectosdearduinostarter-
kit-151212174250.pdf
https://learn.sparkfun.com/tutorials/connecting-arduino-to-processing/all
Drets d’imatge
https://www.freepik.es/
Programari
Processing
Arduino
Lucidchart.