trabajo final de grado - arctic

81
ARCTIC: aplicación móvil para la toma de datos y obtención de resultados en el esquí alpino. Convocatoria: 19 de Julio de 2016 Alumno: Enrique Acedo Dorado Tutores: Dr. Boni García Gutiérrez Dr. José María Font Fernández Grado: Ingeniería en Desarrollo de Contenidos Digitales

Upload: enrique-acedo-dorado

Post on 15-Apr-2017

73 views

Category:

Engineering


5 download

TRANSCRIPT

ARCTIC:aplicaciónmóvilparalatomadedatosyobtenciónderesultadosenelesquíalpino.

Convocatoria:19deJuliode2016

Alumno:EnriqueAcedoDorado

Tutores:Dr.BoniGarcíaGutiérrezDr.JoséMaríaFontFernández

Grado:IngenieríaenDesarrollodeContenidosDigitales

Agradecimientos

Agradezcoatodaslaspersonasquemehanayudadoenlaconsecucióndeesteproyecto,especialmenteaJoséMaríaFontporladedicaciónyelapoyoenlarealizacióndeestedocumento,aBoniGarcíaporlaayudaentodoeldesarrollodelaaplicación,aIreneLunaporlacreaciónyeldiseñodeARCTICyaCarlotaMaestroporsuayudacomotesterdelproducto.

Tabladecontenido

1. Resumen...................................................................................................................6

2. Abstract.....................................................................................................................7

3. Introducción..............................................................................................................8

4. AppsyDesarrolloenAndroid....................................................................................9

4.1. HistoriayActualidaddeAndroid...................................................................10

4.2. Versiones.......................................................................................................12

4.3. Arquitectura...................................................................................................13

4.4. Apps...............................................................................................................15

4.4.1. AppsdeSaludyBienestar..................................................................16

5. Arduino....................................................................................................................18

5.1. Introducción...................................................................................................18

5.2. Sketch............................................................................................................19

5.3. AplicacionesdeArduino................................................................................21

5.4. IMUduino.......................................................................................................22

6. Bluetooth................................................................................................................24

7. Planteamientodelproblema..................................................................................25

8. Soluciónpropuesta.................................................................................................28

8.1. Desarrollodelsensor.....................................................................................30

8.2. Desarrollodelaaplicación.............................................................................34

8.2.1. Entornoyconfiguración.....................................................................34

8.2.2. Requisitosdelaaplicación.................................................................36

8.2.3. Diagramadecomponentes................................................................37

8.2.4. Almacenamientodedatos.................................................................38

8.2.4.1. SQLite...................................................................................38

8.2.5. Arquitectura.......................................................................................40

8.2.6. ComunicaciónBLE............................................................................43

8.2.7. InterfazdeUsuario.............................................................................44

8.2.7.1. Formulariodealtadeusuario............................................44

8.2.7.2. NavigationDrawer.............................................................46

8.2.7.3. Inicio..................................................................................48

8.2.7.4. Emparejamientodedispositivos........................................50

8.2.7.5. NuevaActividad.................................................................51

8.2.7.6. FormulariodeNuevaActividad.........................................52

8.2.7.7. DetalledeActividad...........................................................54

8.2.7.8. Perfil...................................................................................56

8.2.7.9. Ajustes...............................................................................56

8.2.7.10. Idioma................................................................................57

8.2.7.11. EstructuraUI......................................................................58

8.2.8. Análisisdelosdatos...........................................................................59

8.2.8.1. Númerodegiros................................................................59

8.2.8.2. Puntuación.........................................................................60

8.2.9. PublicaciónenGooglePlay................................................................62

9. ¿PorquéARCTIC?....................................................................................................64

10. Resultados...............................................................................................................65

11. Conclusionesylíneasfuturas..................................................................................76

11.1.Conclusiones..................................................................................................76

11.2. Líneasfuturas.................................................................................................76

12. Referencias..............................................................................................................78

Capítulo1.Resumen

6

1. Resumen

EnesteTrabajoFinaldeGradosepresentaARCTIC,unaapppara latomadedatosyobtenciónde resultados enel deportede esquí alpino. Lohacemedianteun sensoracopladoal esquíque lee losdatos y la aplicaciónmóvilque trasprocesar losdatosfacilitaalusuariolavisualizacióndelosresultados.

ARCTICsehadesarrolladousandolatecnologíaArduinoencuantoalaimplementacióndel sensor y la tecnología Android para la implementación de la aplicación. Para lacomunicaciónentreellossehautilizadolaúltimatecnologíaBluetooth,BluetoothLowEnergy,quepermiteunaconexióneficienteyóptimaentrelosdosdispositivos.

Para su desarrollo se han seguido los principios de diseño S.O.L.I.D. y de CleanArchitecturequehanpermitidoobteneruncódigodecalidad.AdemásparaeldiseñodelaaplicaciónsehautilizadoMaterialDesign,laguíadeestilodeGoogleparaaplicacionesnativasdeAndroid.

ElresultadoesunaaplicaciónAndroidcombinadoconunsensorArduino,quepermitealesquiadorevaluarsunivelenunabajadadeunamanerarápidaysencilla.

Capítulo2.Abstract

7

2. Abstract

ThisEnd-of-DegreeProjectsubmitsARCTIC,anappthatcollectsdataandobtainresultsinalpineskiing.Itisformedbyasensorattachabletoskiandamobileapplicationthatprocessesdataandshowstheresultstotheuser.

ARCTIChasbeendevelopedusingArduinotechnologyintermsofthedevelopmentofthesensorandAndroidtechnologyintermsofthedevelopmentoftheapp.BluetoothLowEnergy,thelastBluetoothversion,hasbeenusedforthecommunicationbetweenthesensorandtheappbecauseitisthebestwaytocommunicatethemefficientlyandoptimally.

ForitsdevelopmentithasbeenusedtheS.O.L.I.D.andCleanArchitectureprinciplesthathaveprovidedaqualitycode.Besidesthat,fortheapp’sdesignithasbeenusedMaterialDesign,theGooglestyleguideforAndroidapps.

TheresultisanAndroidappcombinedwithanArduinosensor,thatprovidesskiersanevaluationofitsdownhillrunquicklyandsimply.

Capítulo3.Introducción

8

3. Introducción

EnesteTrabajodeFindeGradosecombinadosdelaspasionesdelautor.Elesquíalpinoylatecnología.Seentiendequeconloavanzadoqueestáelmundodelatecnologíaylosavancesquesepuedenverdíaadíaenesemundo,enelesquíalpinonosehavistoningunamejoratecnológicaaplicadaenlosúltimosaños.

Como antiguo corredor de esquí alpino y actual entrenador en un equipo decompeticiónasícomoestudiantedelGradoenIngenieríadeDesarrollodeContenidosDigitalestengolasensacióndequeelesquíalpinoesuncampoquenoestáexplotadotecnológicamente hablando y que puede ofrecermuchas ventajas para esquiadoresamateursyparaentrenadoresycorredores.Aunosporelsimplehechodepodermedirloquehacenycompartirlo,quehoyendíaestámuydemoda,aotrosporelpoderobtenercondetalleunosdatosnoapreciablesconlavistayasítrabajardeunamaneramáseficienteyóptimaparalaconsecucióndeunosresultadosdeportivosexitosos.

Esporesoquesevaatratardedarunasoluciónatravésdeunproductomínimoviableaplicandotecnologíasdeúltimageneración.Paraellosehandefinidounosrequisitospensadosparaqueelproyectoseaabarcable.Conestosepretendeabrirelcaminodelas tecnologías en elmundo del esquí alpino y en general en el de deportesmenospopulares.

Paraelloseexplicarálaactualidaddelastecnologíasutilizadasdelapartado3al5conelfindeentenderporquesehanutilizadoesastecnologíasyquéaportanalproyecto.

Enlosapartados6y7seexplicaráelproblemaquesehaplanteadoyqueseabordaráenelapartado9,dóndeseexplicarálasoluciónquesehadadoysepodráentenderendetalleelproductomínimoviableobtenido.

Porúltimo,enelapartado9,sedescribiránlaspruebasrealizadasqueevaluaránsisecumplenlasexpectativasdeltrabajo.

Capítulo4.AppsyDesarrolloenAndroid

9

4. AppsyDesarrolloenAndroid

En los últimos años los dispositivosmóviles han sufrido un gran avance, llegando aconvertirseenordenadoresyllegandoamillonesdeusuarios.

DeahínaceAndroid,unsistemaoperativoyplataformasoftwarebasadoenLinuxparadispositivosmóviles(teléfonos,tablets,smartwatches,etc.).Pertenecea lacompañíadeGoogleyesopen-source(decódigoabierto)porloquecualquierapuedecrearsuspropiasaplicaciones,widgetseinclusomodificarelsistemaoperativo.

Adíadehoyeselsistemaoperativoparadispositivosmóvilesdemayoréxitollegandoaestarencasiel75%dedispositivosmóvilesdelmercado.Apple,coniOS,eslasegundaquemáséxitotieneconel17%.[1]

Las aplicaciones Android se programanmediante el lenguaje de programación Java.Google nos ofrece el SDK (Software Development Kit) de Android necesario paradesarrollarlasaplicacionesyejecutarelemuladorytambiénnosofreceelentornodedesarrollo Android Studio basado en IntelliJ IDEA de JetBrains. También se puedenutilizarotrosIDEscomoEclipsehaciendousodeextensiones.[2]

AcontinuaciónseverámásafondoalgunosaspectosdeAndroidquesonnecesariosparatenerunamejorvisióndelsistemaoperativo.

Figura3:AndroidylasdistintasaplicacionesdeGoogledisponiblesenAndroid[44]

Capítulo4.AppsyDesarrolloenAndroid

10

4.1. HistoriayActualidaddeAndroid

EnestecapítulosepresentaelsistemaoperativoAndroid,cuyahistoriaseremontaalmomentoenelqueAndyRubin,RichMiner,NickSearsyChrisWhiteafinalesde2003fundaronAndroid Inc., una empresaque se dedicaba al desarrollo de softwareparateléfonosmóviles.[3]

Mientrastanto,elgiganteGoogleestabaempezandoainvertirenstartups(“unastartupesunaempresaquetrabajapararesolverunproblemacuyasoluciónnoesobviaycuyoéxitonoestágarantizado”-NeilBlumenthal,cofundadoryco-CEOdeWarbyParker)yfueen2005cuandodecidióapostarporAndroid Inc.ycomprarlapor50millonesdedólares y empezar a desarrollar lo que sería el sistema operativo número uno delmundo.[4]

OtromomentoadestacarfueelnacimientodeOpenHandsetAlliance,afinalesde2007,unaalianzade84compañías(78ensusinicios)queseencargadedesarrollarestándaresabiertos para dispositivos móviles [5]. Algunas de las compañías miembro sonTelefónica,Google,Samsung,Acer,Dell[6].Hastaestaalianza,GooglehabíallevadoensecretotodoelproyectoAndroid.

Elmomentomás importante fue, enOctubre de 2008, cuando publican el proyectoOpenSourceAndroid(bajolalicenciaApache),HTClanzaelprimermóvilquefuncionaconAndroid,bajolaversióndeAndroid1.0yempiezaelAndroidMarket(apartirde2012conocidocomoGooglePlay).[5]

A partir de ahí, todo lo relacionado con Android va acompañado de la palabracrecimiento. A finales de 2009 se produce un aumento significativo de la venta dedispositivosmóvilesconelsistemaoperativoAndroidyseconsolidaelAndroidMarketycontinúaconuncrecimientoexponencialhastallegaralos1,4billonesdeusuariosafinalesde2015.[5]

Comparándolo con otros sistemas operativos para móviles, Android es el sistemaoperativomáspopular y el quemayor crecimientoha tenidodesde su lanzamiento.Cuando empezó tenía competidores de alto prestigio como Symbian (Nokia), RIM(Blackberry),iOS(Apple)yMicrosoft.EléxitodeAndroidvienedadoporlapluralidaddedispositivosalosquepuedellegar.SymbianhamuertoconlacaídainesperadadeNokia[7]. Lo mismo le ha pasado a RIM con la caída de Blackberry aunque sin llegar adesaparecer [8]. iOS,que tieneelmismoproblemaque losanteriores(sólo sepuedeutilizarendispositivosApple),nohamuertoysemantienevivograciasaléxitoindudabledeliPhoney,mientrassigaeseéxito,iOSsiempreestaráahí.EsciertoqueApplesehadadocuentadeesadesventajarespectoaAndroidyestátendiendoasacarmodelosdeiPhonemenospotentesyquepuedanseraccesiblesporunmercadomásamplio[1].Porejemplo,enSeptiembrede2015sacaroneliPhoneSEporunpreciode489€,precio

Capítulo4.AppsyDesarrolloenAndroid

11

reducidosi locomparamosconeldel iPhone6de639€,yconunasespecificacionesmenospotentesquelasdeliPhone6.[9]

En laFigura4sepuedevercómohan idoevolucionando,porcuotademercado, losdiferentessistemasoperativosparamóviles.EstosexitososnúmerostienenrepercusiónenelmercadodelasApps.Enfebrerode2016,GooglePlayllegabahastalos2millonesdeaplicaciones.

Figura5:Cuotademercadomundialdelosprincipalessistemasoperativosmóviles[22]

Capítulo4.AppsyDesarrolloenAndroid

12

4.2. Versiones

En cuanto a las versiones de Android, hastamayo de 2015 han sacado 11 grandesactualizacionesdelsistemaoperativo.

EnlaFigura6sepuedeveruncronogramatemporaldelasversionesdeAndroid.

ComoseobservaenlaFigura7,laversiónquemásdispositivosabarcaesAndroid5.0‘Lollipop’ casi igualada con Android 4.4 ‘KitKat’. La última versión, AndroidMarshmallow,notieneeléxitodelasotrasporquetodavíanoessoportadaportodoslosdispositivosydependedecadafabricante.

CadafabricantetienelaposibilidaddemodificarAndroidparadarsutoquepersonalalsistemaoperativoquetenganlosdispositivosmóvilesdesumarcayasídiferenciarlodelrestodelasmarcas.LohacenmediantecapasdepersonalizaciónquemodificanAndroidtantoanivelvisualparaelusuario,comoaniveldesoftwareparaelrendimientodeldispositivo.Estacapadepersonalizaciónhayvecesque,sinoestádesarrolladadeunamaneraóptima,daproblemasde rendimientoynosonmásútilesque laversióndeAndroidpura.Esporesoquelatendenciadeestascapasdepersonalizaciónesladesermáslimpiasyclaras.[10]

Figura6:CronogramatemporaldeversionesdeAndroid[15]

Figura7:NúmerodedispositivosqueejecutandeterminadaversióndeAndroid[25]

Capítulo4.AppsyDesarrolloenAndroid

13

Comocuriosidad,destacarquelosnombresdelasversionesestántodosrelacionadoscondulcesyvanenordenalfabéticoempezandoenlaCyterminandoenlaM,asíquelasiguienteempezaráporN.[11]

4.3. Arquitectura

Androidesunaplataformaparadispositivosmóvilesquecontieneunapiladesoftwaredondeseincluyeunsistemaoperativo,librerías(C,C++),frameworkparaeldesarrollodeaplicacionesyunasuitedeaplicacionesiniciales.[3]

Comosepuedeverenla,enlaarquitecturaAndroidsepuedendiferenciarlassiguientescapas:[3]

• Núcleo:utilizaelnúcleodeLinux2.6paraabstraersedelhardwaredisponibleenlosdispositivos.Enestacapaseencuentranlosdrivesparaelusodeloscomponentesdehardware.

• Librerías:enestacapaseencuentranlaslibreríasquedanaAndroidlamayorpartedesuscapacidadesmáscaracterísticas.EstánescritastantoenCcomoenC++ylasprincipalesson: libc,SurfaceManager,OpenGL/SLySGL,MediaLibraries,FreeType,SSL,SQLiteyWebKit.Juntoalnúcleo,formanlapartecentraldeAndroid.

• Entornodeejecución:sesitúaalmismonivelquelaslibreríasyestáformadoporlasCoreLibraries,quesonlibreríasconclasesJavaylamáquinavirtualDalvik,queestáespecíficamente diseñada paraAndroid e interpreta y ejecuta el código escrito enJava.Ha tenidoqueseradaptadaa laspeculiaridadesde losdispositivosmóvilesyposeecaracterísticascomomenorcapacidaddeproceso,bajamemoria,alimentaciónporbatería,etc.DalviknotrabajadirectamenteconelbytecodedeJava,sinoqueloconvierteenuncódigomáseficientequeeloriginal.Utiliza laherramientadx,quecompilalosficherosJava.classenficheros.dex,quepuedencontenervariasclases.Después,losficheros.dexsecomprimenenunarchivo.apk(AndroidPackage)queeselquesedistribuyeporlosdispositivosmóviles.Dalvikestábasadaenregistrosynoenpilacomootras,loqueimplicaquelasinstruccionessonmásreducidasysereduceel número de accesos a memoria. También nos permite crear varias instanciassimultáneasdelamáquinavirtualynopermitelacompilaciónJust-in-Time.

• Framework:apartirdeestenivelestátodoescritoenJava.Elframeworkloconstituyeel conjunto de herramientas que tienen a disposición los desarrolladores deaplicacionesAndroid.TodaaplicaciónqueseadesarrolladaparaAndroiddebeutilizarelmismoconjuntodeAPIydeframework.

Capítulo4.AppsyDesarrolloenAndroid

14

• Aplicaciones:esteeselúltimoniveldelaarquitecturadeAndroid.Enélseincluyentanto lasaplicaciones incluidaspordefectoporAndroidcomolasquecadausuariodecideañadir,yaseandetercerasempresasodesupropiodesarrollo.

Figura5:CapasdelaarquitecturadeAndroid[12]

Capítulo4.AppsyDesarrolloenAndroid

15

4.4. Apps

SedefineAppcomounsoftwarequeproporcionaunautilidadparaelusuarioenundispositivomóvil[13].Engenerallasaplicacionesutilizanrecursosquelosdispositivosmóvilesofrecenmediantelibreríasparasufuncionamiento.Recursoscomo:Bluetooth,Wifi, redmóvil,GPS, contactos y otros recursos dependientes del terminalmóvil encuestión.

Paraelusodeesosrecursosdelsistema,elusuarionecesitadarpermisosdeusoalaaplicaciónparacadarecursodelmóvilqueutilicey,silosrechaza,laaplicaciónnopuedeteneraccesoaellos.[14]

Esunade las cosasque tienenque tenerencuenta losdesarrolladoresa lahoraderealizarunaApp,yaqueamayornúmeroderecursosutilizados,másprobabilidadhayde que el usuario rechace esos recursos. Además, cuantosmás recursos específicosutilice,menoreselnúmerodedispositivosfinalescompatiblesconlaapp(enlosquesepuede utilizar). Por ejemplo, si se crea una app que utilice recursos como la huelladactilar,sedebetenerencuentaquesonpocoslosmodelosquetienenelsensordehuelladactilar,porloquelosusuariospotencialesseránunnúmeromenor.

Para publicar una App en Android basta con tener una cuenta de desarrollador deGoogle, que en la actualidad cuesta 25$, y cumplir con una serie de requisitos queimponeGoogleparaqueteapruebenlaaplicaciónantesdesersubidaaGooglePlay[15].EsinevitablenonombraraquíaApple,yaquelalicenciadedesarrolladordeApple[16] cuesta 99$ anuales y si eres empresa 299$ [17],por lo que los desarrolladoresprefierendesarrollarparaAndroidqueparaiOS.

Figura8:PlataformasmóvilesqueutilizanlosdesarrolladoresenDiciembrede2015[28]

Capítulo4.AppsyDesarrolloenAndroid

16

Enlaactualidad,lacifradeaplicacionesdisponiblesenGooglePlayasciendealos2,2millonesycomosepuedeverenlaFigura9,elcrecimientocadavezseproducemásrápido.

Figura9:NúmerodeaplicacionesdisponiblesenGooglePlay[18]

Cadaappdebeestarenunacategoríadependiendodelasfuncionesquerealiceyparaloquelesirvaalusuario.Hayuntotalde24categoríasseleccionabasenGooglePlay.Las más populares son: Educación, Estilo de vida, Ocio, Economía, Personalización,Herramientas,Librosyobrasdeconsulta,Músicayaudio,ViajesyguíasyJuegos.Losjuegostienenluegodistintascategoríasatendiendoasusgéneros,comoArcade,Puzzle,Multijugador,etc.[19]

4.4.1. AppsdeSaludyBienestar

Lasappsdesaludybienestarestánenlaposición11delrankingtotaldeaplicacionesdelasdistintascategorías.Ysiquitamoslosjuegos,quetienencategoríasdiferentes,entraneneltop10.[20]

Lasappsdesaludybienestarsonlasqueaportanalusuariofuncionesparafacilitarelseguimientodeejercicios,dietas,bienestarpersonal,saludyseguridad,etc.[19]

Estasappsestánteniendocadavezmásprotagonismoporlanecesidaddelasociedaddeteneruncontrolportodo loquesehaceysobretodopor lapreocupaciónpor lasaluddelaspersonas[21].Cadavezsonmásloswearables(unwearableescualquiertecnología que llevamos puesto en forma de prenda o complemento como lossmartwatches o las Google Glass [22]) que miden constantemente la actividad del

Capítulo4.AppsyDesarrolloenAndroid

17

usuarioygraciasaesosetienendatosquealalargapuedensermuyinteresantesparaelseguimientomédicodelosusuarios.

Dentrodeestacategoría, lasaplicacionesquenosayudanallevarunseguimientodeejercicios sonmuy numerosas.Muchas de ellas utilizan sensores delmóvil o de undispositivoexternoparamedirlosdatosconmayorprecisiónquesecomunicanconeldispositivomóvilatravésdeBluetoothoWifi.Esosdatosqueserecogennospuedenservirparamejorar la técnicaendistintosdeportescomorunning, futbol, tenis,golf,béisbol,etc.

Porejemplo, lamarcaGarminhacreadounaccesorioqueseacoplaalpalodegolfyhacemedicionesdelosgolpesqueserealizan.[23]

Cada vez son más los accesorios que se venden para una toma de datos precisa,facilitandodatosymedicionesqueundispositivomóvilnopuedeofrecer.Porejemplo,lossensoresdelamarcaZeppqueaportandatosmuyútilesparalosdeportesdetenis,golf,béisbolysoftbol.[24]

Tambiénhaymarcasdeartículosdeportivosqueestánintegrandolossensoresenlosartículosquevenden.Porejemplo,Babolat,marcade raquetasde tenis, ya tieneunmodeloderaquetaqueseconectaconelmóvilytepermitevisualizardiferentesdatos[25].

Figura10:RaquetaBabolatconsensoresintegrados[25]

Capítulo5.Arduino

18

5. Arduino

LaplataformaArduinoesunodelosproductosmáspopularesdeelectrónicadecódigoabierto (open-source). Desarrollado porMassimo Banzi y David Cuartielles en 2005,Arduino es una plataforma de prototipos electrónica de código abierto basada enhardwareysoftwareflexiblesyfácilesdeusar.[26]

5.1. Introducción

Para programar el microcontrolador de la placa se utiliza Arduino ProgrammingLanguage basado enWiring y el IDE Arduino Development Environment basado enProcessing. Los proyectos de Arduino pueden ser autónomos o pueden estarcomunicándoseconotrosoftwareejecutándoseindependientemente.[26]

ElsoftwaresepuededescargargratuitamenteparaWindows,MacOSXyLinuxyhaydiseñosdereferenciadelhardware(archivosCAD)disponiblesbajolicenciaopen-sourceparaadaptarlosatusnecesidades.[27]

Arduino está compuesto por una placa principal que contiene insertado elmicroprocesadoryporelrestodecontroladoresycomponenteselectrónicos.[26]

Arduino tiene una gran variedad de placas con distintas características en suscomponentesprincipalesydiferentestamañosparapoderadaptarseadistintostiposdeproyectos.[26]

Figura11:PlacaArduino[26]

Capítulo5.Arduino

19

5.2. Sketch

SketcheselnombrequeArduinoledaalosprogramasquesepuedencargaryejecutarensusplacas.[26]

Seprogramanenun lenguajedeprogramaciónmuy similaraCy tienen la siguienteestructura:[28]

• Comentarios:Todosketchsueleempezarconunaexplicaciónde loquehaceyparaquésirveelsketch.Comoen lamayoríade lenguajes,puedenocuparunalínea(//)ovariaslíneas(/**/).

• Declaraciones: En esta parte se realizan las declaraciones de librerías y de lasvariablesqueseutilizaráalolargodelprogramaporloquesueleestardespuésdelaexplicaciónparaquesealaprimeraparteencompilarse.

• Funciones:comotodoprogramasecreanfuncionesparaconelfindeutilizarlasduranteelprogramayhaceruncódigolimpioyordenado.Hayquedestacardosfuncionesprincipalesque tienenqueestaren todo sketchdeArduinoque sonsetup()yloop().

• setup():esllamadaunasolavezcuandoelsketchempiezaaejecutarseyesdondeserealizaninicializacióndelibreríasyvariables.Esútilparaasignarvaloresquenovan a cambiar durante la ejecución del programa.Un sketch puede ejecutarsecuandoseenciendeoseresetealaplacadeArduino.

• loop():comosunombredice,seejecutaunayotravezhastaqueseresetealaplacaoseapaga.Aquíesdondevatodotodalalógicadelprograma.

Porhacerunacomparaciónconotroslenguajes,elsetup()esunconstructorouninityelloop()eselmaindelprograma.

TambiénsedebetenerencuentalalibreríaSerialquepermitelacomunicaciónentrelaplaca Arduino y un ordenador u otros dispositivos. El IDE Arduino DevelopmentEnviromenttienelaherramientaSerialMonitorquepermiteseleccionarelpuertoporel que se realizará la comunicación. Para la utilización del Serial hay que tenerconocimientodelassiguientesfunciones:[29]

• Serial.begin(port):parainicializarelSerialysedebeindicarelpuertoporelqueserealizaránlascomunicaciones.Suelehacerseenelsetup().ParafinalizarlounavezsetermineelprogramaseutilizalafunciónSerial.end().[30]

• Serial.write(): sirve para enviar datos a través del puerto establecido. Se puedeenviarbytes,stringsounarrayindicandosulongitud.[31]

Capítulo5.Arduino

20

• Serial.readBytes(buffer,length):leelosdatosquesonenviadosporelpuertoylosalmacenaenelbufferqueselepasaporparámetroylalongitudquetambiénselepasaporparámetro.[32]HayotrasfuncionesparalalecturacomoreadBytesUntil(),readString()oreadStringUntil().[29]

Para cargarunSketchaunaplacadeArduinohayquecompilarel Sketchy sinodaerroresseleccionarlaplacaalaquequeremoscargarloen:HerramientasàPuerto.UnavezlatengamosseleccionadabastacondarleaSubirylaconsolanosdaráuninformedelasubida.

En la Figura 12 se puede ver un ejemplo de Sketch de Arduino así como la simpleaparienciadelIDEdeArduino.

Figura12:EjemplodeSketchdeArduinoenelIDEArduinoDevelopment

Capítulo5.Arduino

21

5.3. AplicacionesdeArduino

AlagranvariedaddeplacasquenosofreceArduinose lesumaungranconjuntodecomponentesqueacoplar a susplacas. [33] Esa gran variedadabreunabanicomuygrandedeaplicacionesparaArduino.

AlfinyalcaboArduinoesunminiordenadorquerealizaunafunciónmuyespecíficayqueesmuyadaptable.Porejemplo,sepuedealojarunbootparaTelegram[34],ocrearunArduinoquehagafotosylaspubliqueautomáticamenteenTumblr[35].

Otras aplicaciones deArduino se centran en el Internet de las cosas (IoT) comoporejemplo un collar de gato que nos dice cuando está dormido. Solo hace falta unacelerómetro, una placa de Arduino y una batería recargable. El mini ordenadorrecogerálosdatosyenfuncióndelosresultadosharáunacosauotra.Cuandodetecteque esté dormido, utilizará la aplicación IFTTT, que permite realizar acciones comopublicaruntweetautomáticamenteomostrarunanotificaciónenelmóvil,paraavisaraldueñodequeelgatosehadormido.

Este es sólo un ejemplo de aplicación de Arduino y nos da una visión de la ampliavariedaddeproductosquesepuedencreargraciasaArduino.

Otro ejemplo algomás complicado es un termostato que se puede controlar con laaplicación de mensajería de Telegram. En este caso se necesita un sensor detemperatura,unapantallaLCDybotónquehagade interruptoryelcódigoparaquefuncione la aplicación se complicaunpocomásqueel anterior peroel resultadoesincreíble ya que además de saber la temperatura a través de la pantalla, permite acualquierusuariodeTelegramqueuseelboot,conocerlatemperaturadellugardóndeseencuentreeltermostatoconunasimplepreguntaenunaaplicacióndemensajería.

Figura13:DiseñoconlaplacadeArduinoysuscomponentedeSmartThermostat

Capítulo5.Arduino

22

5.4. IMUduino

ElIMUduino(Figura14)esunmicrocontrolador(ATMEGA32u4)de16x42milímetrosyaproximadamente2,7gramosquetieneuntransmisorNordicnRF8001BluetoothLowEnergy,ungiroscopioyacelerómetrode6ejes(MPU6050),uncompásdigitalde3ejes(HMC5883) y un barómetro/altímetro (MS561101BA03-50) [36]. Es una copia delArduino Leonardo. Para su funcionamiento necesita estar conectado a una bateríaexternaysepuedeconectaralordenadorvíamicroUSB.[36]

IMUduino utiliza un sistema de comunicaciones serie UART, acrónimo deUniversalAsynchronousReceiver-Transmitter.Esunchipintegradoenlaplacaqueseencargaderecibir losdatosde lossensoreseformatoparaleloyconvertirlosaunformatoserieparaenviarlosmedianteBluetooth.[37]

Despuésdeestadescripcióntécnica,creoqueesnecesarioexplicarlodeunaformamásclara.Paraesohayque tenerdosconceptosclaros: IMUyArduino.Esteúltimoestáexplicadoenelapartadoanterior.

IMUsonlassiglasdeUnidaddeMediciónInercial(InertialMeasurementUnit)yesunsistemacerradoqueseusaparacalcularlaorientación,localizaciónymovimiento.Estánformados por una combinación de acelerómetros y de giroscopios (sensores develocidadangular)parasabercómosemueveyenquéposiciónestá.

UnaIMUdetectaencadainstantelaorientaciónyloscambiosdedirección(i.e.ángulosderoll,pitchyyaw)yademáslosintegraparasaberelcambiosobrelaposicióninicial.EstesistemaseoponealsistemaGPSqueutilizasatélitesparacalcularlaposición.

LasIMUs,comotodosloscomponentesdemedida,tienenerroresdemedición.Enestecaso,alircalculandoconstantementeloscambiosdetectadosenlaposiciónelerrorse

Figura14:PlacaIMUduino[33]

Capítulo5.Arduino

23

vaacumulando.Estosellamaerroracumuladoo“deriva”queesladiferenciaentrelaposiciónrealylaposiciónhalladaporlaIMU.

Suelensercomponentesdesistemasdenavegacióncomobarcos,avionesysueleniracompañadosdeotrossistemascomoGPS,sistemabarométricoocompásmagnéticoparacompensarlaslimitacionesquetieneunaIMU.[38]

ElprimerusodeunaIMUfueenunbarcoalrededorde1930ydesdeentoncessehaidoperfeccionando por diferentes instituciones llegando a crear el primer Sistema deNavegaciónInercial.LanavegaciónInercialhahechoposiblemuchosviajesespacialescomoelprogramaApolo[39]enelqueelhombrepisóporprimeravezlaLunaen1969[40].Hoyendíacasitodaslascosasquecalculendeformaelectrónicasuaceleración,orientacióny/ovelocidadllevanintegradasunaIMU.[38]

VolviendoaladefiniciónIMUduino,eslaintegracióndeunsistemaIMUenunaplacaArduinoquetieneuntransmisorBluetoothLowEnergy.EstohaceposibletransmitirlosdatosrecogidosporlaIMUaundispositivoexternoparaelprocesadoyvisualizacióndelosmismosmedianteunsistema.

Capítulo6.Bluetooth

24

6. Bluetooth

Bluetooth®esunatecnologíaconcebidacomoalternativainalámbricaalasconexionesporcablemedianteelintercambiodedatosporondasderadio.[41]Fuecreadaen1994porlaempresaEricssonymásadelanteseformóBluetoothSIG(SpecialInterestGroup)cuandootrasempresascomoIntel,IBM,Nokia,etc.sesumaronalproyectodeEricsson.Sunombreestá inspiradoenun reydeDinamarcaHaraldBlåtand, en inglés,HaroldBluetooth.Segúnlahistoria,afinalesdelsigloX,elreyHaraldayudóenlaconversióndevariastribusvikingasa lareligióncristianayrepresenta launión[42].Deahívieneelnombre, ya que la tecnología Bluetooth fue creada como un estándar global decomunicacióninalámbricaquepermitelaconectividad(launión)ycolaboraciónentrelosproductosylasindustriasdispares.[43]

Figura15:LogodeBluetooth®

Bluetoothutilizaondasderadioenvezdecablespararealizarlaconexiónentrevariosdispositivos. Un producto Bluetooth (unmóvil, un reloj, un ratón, etc.) contiene unpequeñochipconuntransmisorBluetoothyunsoftwarequefacilitasuuso.Paraquehaya comunicación entre dos dispositivos vía Bluetooth deben haberse emparejadopreviamente.ElrangodedispositivosdeunaconexiónBluetoothesde2a8dispositivosysedenominapiconetalaredcreadacuandoserealizaunaconexióndedispositivospormediodelatecnologíaBluetooth.Cuandosecreaunaredpiconetyseestabiliza,automáticamenteundispositivoadquiereelroldemasterylosdemásdispositivosdelared toman el rol de esclavos. Las redes piconet se estabilizan dinámicamente yautomáticamentesegúnvanentrandoysaliendodispositivosdelradiodealcance.[43]

LatecnologíaBluetoothpermiteconectarsincablesvariosdispositivos.Hastahacepocolonormaleraconectarelteléfonoconelordenador,conelcoche,conunoscascosoconotroteléfono.PerocadavezmásseestáintegrandoBluetoothcondispositivoscomotelevisiones, las luces de casa o una pelota de fútbol. El futuro del Bluetooth esinimaginable.

Enlaactualidad,haymuchostiposdeBluetooth(diferentesversiones)perolosdostiposdeBluetoothmáscomunessonBluetoothBR/EDR(versión2.1)yBluetoothLowEnergy(BLE)oBluetoothSmart(versión4.0).Sehabladeunanuevaversión5.0quedoblarálavelocidadycuadriplicaráelrango.LaúltimaversióndeBluetoothestádiseñadaparaelinternetdelascosas(IoT[44]).LaeficienciaenergéticadeestaversióndeBluetoothlohaceperfectoparadispositivosqueseejecutandurantelargosperiodosdetiempoconpequeñasfuentesdeenergíacomopilasdebotónofuentesdeenergíasalternativas.

Capítulo7.Planteamientodelproblema

25

7. Planteamientodelproblema

Viendoqueloswearablessonherramientasdelfuturoquenosfacilitaneltrabajo[45]ysabiendo que una de las tendencias tecnológicas es el uso del Smartphone comoordenador personal [46] se ha tratado de integrarlo y de aplicarlo a un dominio deaplicaciónrelevante:eldeportey,parasermásexactos,elmundodelesquíalpino.Enesedeporteúltimamenteseestánintroduciendomejorastecnológicascómocascos[47]ogafasdeesquiarinteligentes[48].Estosdispositivospermitenlacomunicaciónentrevariosdispositivosigualesytedanalgúndatorespectoalavelocidad,lalocalización,laaltitudyelnúmerodegiros.

Figura16:VisionconlasgafasOakleyAIRWAVE[48]

Por otra parte existen aplicacionesmóviles quemidendatos algomás precisos.HayalgunasgenéricasquenosecentranenelesquícomoRuntastic[49]quedandatoscómovelocidadmáxima y media, elevación ganada, elevación perdida y la distancia totalrecorrida.

En la Figura17 sepuede verunejemplode losdatosquemuestra a losusuarios laaplicaciónRuntasticdespuésdegrabarunabajadadeesquí.

Capítulo7.Planteamientodelproblema

26

Hayotrasaplicacionesquesísonespecíficasparaelesquíqueademásdelosdatosdelasaplicacionesmásgenéricas,nosdanmayorinformacióncómoelnúmerodepistasbajadas,elnúmeroderemontescogidos,lainclinacióndelaspistasademásdeunmapaconelrecorridorealizadoyunasgráficasdelaaltitudylavelocidadcomosepuedeverenlaFigura18.[50]

Figura18:CapturasdepantalladelaaplicaciónSkiTrackparaiPhonedóndesepuedeverlosdatosquemuestradespuesdeunagrabacion.

Figura17:EjemplodebajadadeesquígrabadaconlaaplicacionRuntastic

Capítulo7.Planteamientodelproblema

27

Esosavancessonsignificativosperoenestetrabajosehatratadodeirunpocomásalláconlaconviccióndequesepuedentomardatosmásprecisosymásvaliososparaqueelusuariopuedavisualizarcómodebienesquía.Ademástieneespecialinterésparaelesquídecompeticiónobteneresosdatosmástécnicosparapodercorregirymejorarciertos detalles que son importantes en el ámbito de la competición para alcanzarmejoresresultados.

Paraesoenestetrabajoseproponeutilizarunsensorquevayaacopladoalesquíyquese comunique con un dispositivomóvil de una forma eficiente y rápida para que elusuario pueda ver los resultados lo más rápido y cómodo posible. Se propone unamezcladeloswearablesexistentesconlatecnologíamóvilactual.

Capítulo8.SoluciónPropuesta

28

8. Soluciónpropuesta

Lasoluciónalproblemaplanteadoesunsistemaformadoporundispositivoquetomedatosyhagadeemisordeesosdatosyotrodispositivoquehagadereceptorde losdatosylosproceseparasuvisualización.EnlaFigura19sepuedeverunesquemamuysimplificadodelasolución.

Figura19:Esquemadelsistemadelasoluciónpropuesta.

Laeleccióndelosdispositivosqueactuaráncomoemisoryreceptorhasidounadecisiónimportanteydecisivaentodoeldesarrollo.

Enlaeleccióndelemisorsehantenidoencuentalossiguientesrequisitos:

• Medición de datos como orientación, aceleración, etc. que sean útiles paraobtenerdatosquenosindiquencómodebienesquíaelusuario.

• UsodeBluetoothLowEnergy(deahoraenadelanteBLE)paraelenvíodelosdatosquetomaparaunusoreducidodeenergía.

• Tamañopequeñoparaunfácilacople.

• Pesoreducidoparaquenoseamolestoparaelusuarioelutilizareldispositivo.

• Queseaopen-sourceparapoderacoplarloanuestrasnecesidades.

Yenlaeleccióndelreceptorsehantenidoencuentalossiguientesrequisitos:

• UsodeBLEparaunconsumoreducidodeenergía.

• Poderprocesaryguardarlosdatos.

• Podervisualizarlosdatos.

• Queseaaccesibleporelmayornúmerodeusuariosposible.

Capítulo8.SoluciónPropuesta

29

ConesosrequisitosparaeldispositivoemisoryparaeldispositivoreceptorsehahechounabúsquedaexhaustivaysehallegadoalaconclusióndequelasoluciónmásóptimaeselusodeunsensorIMUduinobasadoenArduinoquetomelosdatosylosenvíevíaBluetoothLowEnergy(apartirdeahora,BLE)yelusodeunaaplicaciónAndroidqueprocese los datos y losmuestre al usuario. Esta elección significa que el dispositivoreceptornoesunosólo,sinoque,comoyaseexplicóenelapartado1,sonun75%delosdispositivosmóvilesdelmundo.Aunqueenrealidadseránmenosporquenotodoslos dispositivos móviles que utilicen Android tendrán Bluetooth, pero sí una granmayoría.

EnlaFigura20semuestraunesquemadeloscomponentesutilizadosparalasolucióndelproblema.

Figura20:Esquemadecomponentesdelasolución

Acontinuaciónseexplicarácómosehallevadoacaboeldesarrollodecadaunadelaspartesporseparadoyaquesontotalmenteindependientesaunquesíquehayquetenerencuentaquédatosqueseenvíanyenquéformatoseenvíanparaqueel receptorpueda procesarlos correctamente. Esta independencia se piensa que es buena paraposiblescambiosoincorporacionesenunfuturoyaquesepuedecrearunaaplicaciónparaiOSsintocarnadadeladeAndroidnidelsensory/osepuedecambiarelsensorsiempre y cuando que se envíen losmismos datos en elmismo formato que se haelegido.

Capítulo8.SoluciónPropuesta

30

8.1. Desarrollodelsensor

ParaelemisorsehautilizadounIMUduinoquecomobiensehaexplicadoenelapartado5.4esunArduinodepequeñasdimensionesconunaseriedesensoresyqueutilizaBLEparacomunicarseconotrosdispositivos.

SehatrabajadoprincipalmenteeneldesarrollodelsoftwareparaelIMUduinoaunquetambiénsehatenidoquetrabajarenunapequeñapartedelhardware.

IMUduinonovieneconbateríaintegradaasíquesenecesitaunafuentedeenergíaparasu uso. IMUduino puede coger la energía a través del puerto Micro-USB que llevaintegradoopormediodeunospinesdestinadosparaconectarlabatería.ComosoluciónsehapensadoenunabateríaLiPo(bateríadepolímerodelitio),quesonrecargables,conectadodirectamentealaentradamicro-usb.Paraesosehautilizadolossiguientescomponentes:

• BateriaLiPo3.7Vy680mAh.

• ConectorMicro-JSPhembra

• ConectorMicro-USBmacho

• CargadorbateríaLiPo

Figura21:ComponentesparasuministarenergiaaIMUduino

Ha sido necesario soldar los cables del conector JSP hembra al conectorMicro-USBmachoparapoderllevarlaenergíadelabateríaLiPoalIMUduinoyaquenohabíaningúnconectorJSPmacho–Micro-USBmacho.Paraellohasidonecesariounsoldadorde40Wespecialparacomponenteselectrónicosehilodeestañoparasoldaduraelectrónica.Elcargadornovaincluidoenelsistema,simplementeseutilizaparacargarlabatería.

Se ha decidido no incorporar el cargador de la batería a lo que es el sensor que seacoplaráalesquíparareducireltamaño.ParacargarlabateríahabráquedesenchufarelcablequeloconectaalIMUduinoyenchufarloalcargador.

Capítulo8.SoluciónPropuesta

31

EnlaFigura22sepuedeverelresultadodesoldarloscablesdelconectorJSPalconectormachoMicro-USB.

Figura22:conexiónJSPmachosoldadoamachoMicro-USB

EnlaFigura23sepuedeverelacopledelabateríaalIMUduino.Comosepuedeobservarse ha buscado una batería lo más pequeña posible coincidiendo en el largo con elIMUduinoysiendounpocomásancha.

Figura23:IMUduinoconectadoalabateriaatravésdelconectorMicro-USB

Y por último se puede observar en la Figura 24 cómo quedaría bien acoplado yapreparadopararealizarpruebas.Sepuedevereltamañorespectoaunamonedade50céntimosdeeuroparaqueseaprecieloreducidoqueeselsensor.

Figura24:IMUduinoacopladoalabateria

Capítulo8.SoluciónPropuesta

32

Solucionadoelproblemadelabatería,sehatrabajadoenelsketchdeArduinoquesevaacargarenIMUduino.IMUduinoofreceunalibrería“FreeIMU.h”quedalaopcióndeleerlossiguientesdatos:

• Aceleración

• Rotación

• Ángulosdenavegación(YawPitchRoll)

• Temperatura

• Altitudrespectoalniveldelmar

• Presión

Seríamuy interesantepoder leertodosesosdatospero laplaca IMUduinotieneunamemoriade28.672bytes,loquelimitaeltamañodelsketchylacantidaddedatosquepodemosleer.

Paraestetrabajosehadecididoutilizarlosdatosdeaceleración,rotación,ángulosdenavegación,temperaturaypresión,yaqueseránútilesparasabercómosemueveelusuarioyasípoderanalizarsuformadeesquiaryparaotrosdatosadicionales.Elsketchque seha creadopara cogeresosdatosocupaun98%de lamemoriadisponible. Siincluyésemoslaaltitudseocuparíael101%deltamañoporloquenopermitesubirloalaplacadel IMUduino.Tampocoesmuchoproblemaporqueviendo las libreríasqueofreceIMUduino,lafunciónquedevuelvelaaltitudutilizalatemperaturaylapresiónademásdeotrasconstantes,asíqueparacalcularlaaltitudrespectoalniveldelmarseutilizaraeldispositivoquerecibelosdatosylosprocesa.

Comoseexplicóenelapartado5.2,en todosketchdeArduino tienequehaberdosmétodosobligatoriamentequesonsetupyloop.ParaelsketchquesehadesarrolladoparaestetrabajoenelsetupseinicializanloscomponentesIMUytambiénseinicializaelcomponenteBluetoothLowEnergy.TambiénsecambiaelnombredeldispositivoBLEpara que cuando se haga el emparejamiento aparezca el nombre que se desee. ElnombretieneunalongitudmáximadesietecaracteresasíquesehadecididoutilizarelnombredeARCTIC,elmismoqueeldelaaplicacióndeAndroid.

Enlaotrafunciónimprescindible,lafunciónloop,haremosusodefuncionesdeclaradasenelsketchpararealizarelenvíodelosdatosporseparado.Porlotantosehancreadotresfunciones:writeAccel,writeGyro,writeYPRywriteTemPres.CadaunaenvíaporBLElosdatoscorrespondientesmedianteunbufferdebytesqueesloleendelossensoresIMU.EsasfuncionesseránllamadassielestadodedelBLEesconectado.ElBLEpuedetenertresestadosdiferentes:

Capítulo8.SoluciónPropuesta

33

• ACI_EVT_DEVICE_STARTED:Eldispositivo sehaencendidoyes visibleaotrosdispositivos.

• ACI_EVT_CONNECTED:Sehaestablecidounaconexiónconotrodispositivo.

• ACI_EVT_DISCONNECTED:Sehaterminadolaconexiónconotrosdispositivos.

Tambiénsellamaráalafunción“pollACI()”quehacequeelenvíodedatosatravésdelBLEsehagadeunamaneraordenadayconstanteporesosellamasiemprealprincipiodelloop.

Elenvíodedatossehaceatravésdeunbufferdebytesasíqueelreceptorrecibiráarraysdebytesquetendráquedecodificar.Paraqueelreceptorsepaquedatorecibecadavezy losguardeyprocesecorrectamentesehadecididoutilizarunseparadorparacadadatoqueseenvía.

Paralosdatosdelaaceleración,rotaciónyángulosdenavegaciónsiempreseenviarántriplasconlosdatosdelosejesX,YyZ.Acadaejeseledestinan5bytesyentrecadaunodeellosseinsertaráuncarácterespecial,quelosdiferencieentreellos,detamaño1byteporloqueeltotaldebytesenviadosesde17.

Enelcasodelafunciónqueenvíalatemperaturaylapresión,envíaunaduplaconlosdatosdetemperaturaypresiónseparadosporundelimitador.Enestecasoeltamañodelbytesenviadosesde11bytes.

La elección de los delimitadores no ha sido fácil pues no todos los caracteres sonaceptados, por ejemplo, el carácter \ y el carácter # daba problemas. Al final se hadecididoutilizar:

• “/”paralaaceleración.

• “%”paralarotación.

• “@”paralosángulosdenavegación.

• “_”paralatemperaturaylapresión.

ConelsketchdeArduinoterminadoycargadosobrelaplacadeArduinoyelIMUduinofuncionando de un modo wireless (sin cables), se puede empezar a trabajar en eldispositivoquerecibirá losdatosy losprocesaráparadaralusuariounainformaciónútil.

Capítulo8.SoluciónPropuesta

34

8.2. Desarrollodelaaplicación

Paraelreceptoryprocesadordelosdatos,asícomolavisualizacióndelosresultadossehadecididodesarrollarunaaplicaciónAndroid.

Se ha desarrollado con el IDE Android Studio que Google pone a disposición a losdesarrolladoresdeAndroidfacilitandolascosas.AndroidStudiopermiteconfigurarelentornodeejecución,visualizar losarchivosdeunproyectoasícomoeditarlosentremuchasotrascosas.Esespecialmenteútilparalaedicióndelosarchivos.xml(pantallasdelaaplicación)yaquepermiteeditarloporcódigooatravésdeunainterfazgráficaysencillasintocarnadadecódigocómosepudeverenlaFigura25.

Figura25:CapturadepantalladelIDEAndroidStudio

8.2.1. Entornoyconfiguración

Google también pone a disposición de los usuarios unas herramientas de desarrollo(SDK)yunconjuntodelibrerías.ParaestaaplicaciónsehadecididousarelSDK24,ylaversiónmínimade laAPI con laque funcionaránuestraaplicaciónes con la21,quecorrespondeaAndroid5.0(Lollipop).Estohacequeelnúmerodedispositivosdóndesepuedeinstalarlaaplicaciónseade3060.Esacifranorepresentaelnúmeromáximodeusuariosquepuedetenerlaaplicación,representaelnúmerodedispositivosquehayenelmercadoendóndesepodráinstalarlaaplicación.EsenúmeronosloproporcionaGooglealsubirelapkdenuestraaplicaciónaGooglePlay.Tambiénnospermiteexcluirlosdispositivosquequeramos(p.e.sisabemosqueenundeterminadomodelodemóvilnofuncionanuestraaplicación).

Capítulo8.SoluciónPropuesta

35

ParaeldesarrollodeAndroidexistendiferentesherramientasparalaautomatizacióndetareascomocompilación,testing,empaquetado,etc.yparalagestióndedependencias.SehadecididoutilizarGradleporsufacilidaddeusoysuintegraciónconAndroidStudio.Consiste en varios archivos en los que se establecen algunos parámetros deconfiguracióndelprograma.Laúltimaversiónesla2.1.2yeslaquesehautilizado.

EnunodelosarchivosdeGradleseindicalaconfiguraciónpordefecto,queincluye:

• applicationId"com.quique.u_tad.arctic"• minSdkVersion21• targetSdkVersion24• versionCode2• versionName"1.0"

CadavezquesesubeunapknuevoaGooglePlayhayquecambiarlaversióndelcódigoyaquesinonodejaráactualizarlaaplicación.

En ese mismo archivo se definen también las posibles distintas configuraciones decompilación.Paraesteproyectosehandefinidodosdistintasconfiguraciones:releaseydebug.Enestaconfiguraciónsepuedendefinirvariablesqueluegosepuedenutilizarenelcódigodelaaplicaciónypuedeserútilparahacerunascosasdependiendodesiestasendebugoenreléase.Tambiénsedefinenlasopcionesdefirmadodelaaplicaciónqueexige Google Play para poder publicar una aplicación. La de debug se ha utilizadomientras se ha estado desarrollando y testando la aplicación y la de reléase se hautilizadoalahoradesubirlaaGooglePlay.

Yporúltimo,elarchivoGradlenospermitegestionarlaslibreríasydependenciasqueseutilizará en el programa. Cabe destacar que las versiones de las librerías de GoogledebendecoincidirconelnúmerodeversióndelSDKqueseestáutilizando,asípues,sisehatrabajadoconelSDK24,laslibreríasdeGoogleson24.X.X.

LosarchivosdeGradlesonlosprimerosquemiraráAndroidStudiocuandoseintenteejecutarocompilarlaaplicaciónparadefinirlaconfiguraciónsobrelaqueseejecutaráo compilará el código por lo que es importante tenerlo bien configurado desde elprincipio y simplemente ir añadiendo dependencias y librerías según se vayanrequiriendo.

Una vez se tiene el entorno definido y configurado se procede al desarrollo de laaplicaciónyparaesosehandefinidounosrequisitosquedebedecumplirlaaplicación.

Capítulo8.SoluciónPropuesta

36

8.2.2. Requisitosdelaaplicación

Sehandefinidounaseriederequisitosmínimosquedebedecumplirlaaplicación.

• Creacióndeunacuentaconnombreyemail.

• ConexiónvíaBluetoothalsensorIMUduino.

• Guardarelsensorparafuturasconexiones.

• Registrodeactividadyguardadodelosdatosenlocal.

• Opcióndeborraractividad.

• Visualizacióndelosdatosyresultados.

• Ediciónyborradodeperfil.

• Contactoconeldesarrolladordelaaplicaciónparaquejasy/osugerencias.

• Compartirelenlacededescargadelaaplicación.

Enunprincipiosedefinieronmásrequisitosperoconvertíaelproyectoenunproyectodemasiadograndeasíquesedecidióminimizarlosrequisitosparaqueelproyectofuesealcanzable.

Con esos requisitos de la aplicación se han creado unas historias de usuario queayudaránenladistribucióndetareasalahoradedesarrollarlaaplicación.

• Usuarioiniciaaplicaciónporprimeravez.

• Usuariosedadealtaenlaaplicación.

• Usuariohacelogoutdelaaplicación.

• Usuariotienealgunadudaocomentario.

• Usuarioquieregrabarunaactividad.

• Usuarioquiereborrarunaactividad.

• Usuarioquierecancelarunaactividad.

• Usuarioquiereguardarunaactividad.

• Usuarioquiereverlasactividadesguardadas.

• Usuarioquiereverunaactividadguardada.

Capítulo8.SoluciónPropuesta

37

• Usuarioquiereemparejarelsensor.

• Usuario quiere guardar sensor para no tener que emparejarlo cada vez quequiereutilizarlo.

• Usuarioquiereeliminarelsensorguardado.

• Usuarioquiererecomendarlaaplicaciónaalguien.

Despuésdeanalizarlashistoriasdeusuarioylosrequisitossehandefinidolosdiferentescomponentesqueformaránpartedelsistema.

8.2.3. Diagramadecomponentes

Para visualizar la estructura de alto nivel del sistema y el comportamiento de loscomponentessehadecididorealizarundiagramadecomponentesquesepuedeverenlaFigura26.

Figura26:Diagramadecomponentesdelsistema

Cómo se puede observar en el diagrama, se requiere de una base de datos para elalmacenamientodelosdatos.

Capítulo8.SoluciónPropuesta

38

8.2.4. Almacenamientodedatos

Paraguardarlosdatosqueseleendelsensorparasuvisualizaciónylosdatosdelusuarioseutilizarálabasededatoslocaldeldispositivoendóndeesteinstaladalaaplicación.Androidofrecevariossistemasdealmacenarinformaciónalasaplicaciones:

• SQLiteesel sistemaqueutilizaAndroidparagestionarbasesdedatos. Esungestor de bases de datos relacional, de dominio público y muy ligero. Lainformaciónseguardaenunarchivodentrodelacarpetadelaaplicación.

• Content Providers son unos componentes que ofrece Android para guardardatosyponerlosadisposicióndeotrasaplicacionesdelsistema.

• SharedPreferences sonpreferenciasde laaplicación.Seguardande la formaclave-valoryseutilizaparaguardardatosespecíficos.

ParaestaaplicaciónseutilizarálabasededatosSQLiteparatodoslosdatosdelusuarioyparalosdatosrecibidosporelsensorylasSharedPreferencesparaguardarladirecciónBluetoothdelsensor.

8.2.4.1. SQLite

Delusuariosóloseguardanelnombre,losapellidosyelcorreoelectrónico.Apesardeserpocosdatosydesólopermitirunusuario,sehaoptadoporutilizarSQLiteparalosdatosdeusuarioparatenerlaopcióndeguardarlosenunabasededatosremotaenunfuturo.

ParalosdatosqueserecibendelsensortienemuchomássentidoguardarlosutilizandoSQLiteporquesonmuchosdatosypara suprocesadose filtrarány seordenaranenfuncióndelasnecesidades.Cómonosóloseguardanlosdatosrecibidosdelsensor,sinoquetambiénseguardacuandosehaempezadoaleerdatos,cuándosehaparado,cómoestabalanieve,cómosehasentidoelusuario,losgirosquehahechoyunapuntuacióndelabajadadelusuario,laestructuradelabasededatossecomplicaunpoco.EnlaFigura27sepuedeobservarelesquemadelabasededatosutilizadaparaguardarlasactividadesqueregistraelusuarioylosdatosquerecibedelsensor.

Losdatossonnormalizadosa100unavezsonrecibidosparapoderhaceroperacionesconellos.Paraeso,despuésdeinsertarlosenlabasededatosseejecutaunupdatedetodas las tablas dividiéndolo por el máximo valor absoluto de cada fila. Con estanormalización no sólo se facilita el hacer operaciones con ellos sino que mejora lavisualizacióndelosdatosenlasgráficas.

Capítulo8.SoluciónPropuesta

39

Para utilizar SQLite con Android se deben de crear clases que extiendan de la claseSQLiteOpenHelper.CadaclasequeextiendadeSQLiteOpenHelperdeberásobrescribirlosmétodosonCreateyonUpdate.Elprimeroseejecutarálaprimeravezqueseejecutelaaplicaciónasíquesecrearántodaslastablasysihayquemeteralgúndatopordefectoséharáenesemomento.ElmétodoonUpdaterecibeporparámetro laversiónde labasededatosactualylaantiguaparasabersitienequerealizaralgúncambioenlabasededatos.Enesamismaclasesecreanlosmétodosqueejecutanlasqueriesdelectura,escriturayborradodedatos.

Figura27:Esquemadelabasededatosutilizadaenlaaplicación

LacargadedatosrecibidosdelsensorseejecutaensegundoplanomedianteunaclasequeextiendedelaclaseAsynctaskquenosponeadisposiciónAndroidparaelmanejodethreadsylastareasensegundoplano.Estohacequeelrendimientoylausabilidaddelaaplicaciónseanmejores,evitandoencasodeunacargamuygrandededatos,queelusuariotengaqueesperaraqueserealice lacargade losdatosymientraspuederealizarotrastareas.

Capítulo8.SoluciónPropuesta

40

8.2.5. Arquitectura

A lahoradeprogramarydecrearel softwareseha intentadocrearunsoftwaredecalidad y de conseguir un código que fuese robusto, mantenible, modulable y losuficientementeflexibleparaqueestuvieseabiertoalcambioyaquelosrequisitosnoestabancerradosypensandotambiénenundesarrollofuturo.

Para eso se tuvieron en cuenta lo principios de Clean Architecture [51]. No es unaarquitectura en sí, más bien son un conjunto de condiciones que hacen que laarquitectura se considere “clean” y que hace que se consiga un software demayorcalidad.

AdemásCleanArchitecture respeta losprincipiosS.O.L.I.D.queestánorientadosa laprogramaciónorientadaobjetose intentanqueen lenguajesorientadosaobjetossepongan en práctica los conceptos de herencia, composición, abstracción,encapsulamientoopolimorfismoynosequedenensimplesdefiniciones.

LosprincipiosS.O.L.I.D.seresumenen:

• SingleResponsibility:cadaobjetodebetenerunaúnicaresponsabilidad

• Open-Closed:abiertoparalaextensión,clausuradoantecambios.

• LiskovSubstitution: las claseshijasdebenpoder ser tratadas como las clasespadre.

• Interface Segregation: es preferiblemuchas interfaces con pocosmétodos apocasinterfacesconmuchosmétodos.

• DependencyInversion:loscomponentesdebendependerdeabstracciones,nodeimplementacionesconcretas.

Cómosepuedeobservar,S.O.L.I.D.correspondealasinicialesdesusprincipios,deahíelnombre.

VolviendoaCleanArchitecture,losprincipiosquelodefinenson:

• IndependientedeFrameworks.

• Testeable.

• IndependientedelaUI.

• IndependientedelaBBDD.

• Independientedecualquieragenteexterno.

Capítulo8.SoluciónPropuesta

41

CómosepuedeverenlaFigura28,CleanArchitectureestructuraelcódigoencapas.Enelejemploaparecen4capas,perosepuedeadaptaracadasoftwareincluyendolascapasqueseannecesariassiempreycuandosecumplalaregladedependencia:lasdependenciasdelcódigosolodebenapuntarhaciadentroynadadentrodeuncírculodebesaberalgoacercadelmundoexterior.

Figura28:EsquemadeloscomponentesdeCleanArchitecture[52]

EnlaFigura28sepuedendiferenciarlossiguienteselementosquesonclavesdentrodeCleanArchitecture:

• Entities:objetosquerepresentanelmodelodenegocio.

• UseCases:seencargandecomunicarlacapaentitiesconlasdemáscapas.

• Interface Adapters: se encargan de prearar los datos y darles un formatoadecuadoparapasarlosaloscasosdeuso.PresentersyControllerspertenecenaestacapa.

• FrameworksyDrivers:UI,herramientas,frameworks,etc.

EnAndroidloqueseintentaessepararalmáximolascapasdenegociodelascapasquemásdependendeAndroidparaqueelcódigoseportableyfaciliteeltesteo.Seproponedividirloentrescapas:presentation,domainydatatalycomosepuedeverenlaFigura29. Además cada capa tiene su propio modelo de datos para que las capas seantotalmenteindependientesynoguardenningunadependencia.

Capítulo8.SoluciónPropuesta

42

Figura29:RepresentacióndecómoseaplicaCleanArchitectureenunaaplicaciónAndroid[53]

EnesteproyectosehaseguidoalmáximolosprincipiosdeCleanArchitectureyademássehaintentadogestionarlasdependenciasdeunaformaóptima.ParaesosehacreadounaclaseprincipalApp.javaquegestionalasdependenciasmássignificativasycadavezquesehaceusodeellas,sehaceatravésdeesaclase.Deestaformaevitamoselusoexcesivode“new”.

ContodoloanterioraplicadoanuestroproyectoquedaunaestructuradearchivosquesepuedeverrepresentadaenlaFigura30.

Figura30:EstructuradelproyectoARCTIC

Capítulo8.SoluciónPropuesta

43

8.2.6. ComunicaciónBLE

LacomunicaciónconelsensorvíaBluetoothLowEnergyesmuyimportanteyaqueencasodefalloodepérdidadeconexiónlaaplicaciónnoseríaútil.SerealizamedianteunserviciodeAndroid.LosserviciosenAndroidpermitenejecutarlargastareasensegundoplano.ComonosesabecuántovaadurarlaconexiónsehadecididoutilizarunservicioenvezdeunAsynctask,queesmásaconsejableparatareascortas.

SehausadoelejemplocreadoypublicadoporlaempresaNordicSemiconductor[54]paraentenderelfuncionamientodelacomunicaciónyadaptarlaanuestroejemplo.

ParafacilitarlacomunicaciónconelsensorsehadecididoguardarladirecciónBluetoothdel sensor una vez se realice la primera conexión con éxito de tal forma que lassiguientesveces,cuandosepretendagrabarunabajadadeesquí,semuestrelapantalladeempezaragrabarynolapantalladeemparejardispositivo.Siempreestálaopcióndeolvidardispositivodesdelaopcióndeajustes.

En laFigura31sepuedeverelmodeladodelprocesodeconexiónconel sensorvíaBluetooth.

Figura31:ModeladoBPMNdelaconexiónconelsensorvíaBluetooth.

Capítulo8.SoluciónPropuesta

44

8.2.7. InterfazdeUsuario

La interfazdeusuario sehahechosiguiendo laspautasqueGoogleproponeparaeldiseñodeaplicacionesAndroidmedianteMaterialDesign.

Paraempezar,sehacreadounapantalladepresentacióndelaaplicaciónenlaqueserealizantareasensegundoplanocómolacargadedatosolacomprobacióndeusuario.Enestapantallasepuedeverellogodelaaplicaciónconelnombreyelsloganqueseha elegido. También aparece un círculo de estado animado indicando que se estánejecutandoaccionesensegundoplano.Eltiempomáximodeestapantallaesdetressegundos.

Figura32:CapturadepantalladesplashscreendelaaplicaciónARCTIC.

UnadelasaccionesensegundoplanoqueseejecutanenlapantalladelaFigura32,esladecomprobarsiexisteunusuariologeadopreviamente.Encasonegativolasiguientepantallaesunformularioparacrearunusuario.EncasopositivonosdirigealapantalladeIniciodelaaplicación.

8.2.7.1. Formulariodealtadeusuario

Parapoderempezarausarlasaplicaciónyhacerusodetodaslasfuncionesdisponibleshacefaltarellenarunformulariodealtadeusuarioqueconstadenombre,apellidosy

Capítulo8.SoluciónPropuesta

45

email.Esosdatosseguardanenunabasededatoslocalyporlotantonosirvenmásqueparacomprobarsihayalgúnusuariologeadoyparautilizarelnombreyelcorreoparaaccionesconcretos,eslarazónporlaquenosepidenmásdatoscomocontraseña,fechadenacimientoodirección.

Sienunfuturosedeseasecomercializarlaaplicaciónytenerunabuenabasededatosdeusuarioenunservidorexternosedeberámodificareste formularioparausuariosnuevos,ypedirlosdatosadicionalesalosusuariosqueyaesténutilizandolaaplicación.Elformulariocuentaconunacomprobacióndecamposyenelcasodeestarincorrectoste dice que campos se deben modificar y rellenar correctamente. Para nombre yapellidospermiteutilizarpalabrasnormalesyparaelemailpermiteingresarunacadenadetextodelaforma:[email protected].

EnlaFigura33sepuedeverunejemplodeformularioincorrectamenterellenadoyelmensaje que semuestra al usuario. También se ha utilizado una animación para elnombredeloscampos.Sielcampoestávacío,elnombresaledentrodelcampoenuncolormássuavequeeltextonormal.Cuandosepulsaenelcampoparaintroduciruntexto,elnombresesitúaenpequeñoenlapartesuperiorizquierda.Deestaforma,sepuedesaberentodomomentoelnombredecadacampo.

Cabe destacar que los datos introducidos en este formulario no son definitivos y sepuedenmodificarenunfuturo.Enestapantallatambiénsepuedeverelnombredelaaplicaciónenlapartesuperior.

Capítulo8.SoluciónPropuesta

46

Figura33:CapturadepantalladelformulariodealtadeusuariodelaaplicaciónARCTICdeAndroid

8.2.7.2. NavigationDrawer

Todaslaspantallasdelaaplicaciónunavezelusuarioestalogeadoestáncompuestasporunabarradeherramientas(Toolbar)enlapartesuperioryelrestodepantallasededica a un contenedor de contenido (content layout). Dependiendo de la pantallacambia el contenido del contenedor y el título y las herramientas disponibles en eltoolbar. Cómo recomienda Google con elMaterial Design, el toolbar debe estar endiferente altura al contenedor ya que es un elemento más importante y se puedeobservarqueeltoolbarcreaunapequeñasombrasobreelcontenedor.

Enlaaplicaciónhaytrespantallasprincipalesdesdelascualessepuedenrealizartodaslas funcionesque tiene laaplicación.Parapodernavegarentreesaspantallas, sehautilizado unNavigationDrawer, o unmenú lateral deslizante. Este tipo demenú esaccesiblemedianteunbotóndemenúenlabarradeherramientasomediantelaaccióndedesplazareldedodesdelaparteizquierdadelapantallahaciaelladoopuesto.ComosepuedeverenlaFigura34,enelNavigationDrawermuestraunabreveinformacióndelusuarioenlapartesuperior,formadaporelnombreyporelmaildelusuarioysepuedeaccederalapantalladeInicio,lapantalladePerfilylapantalladeAjustes.

Capítulo8.SoluciónPropuesta

47

Tambiénsepuedenrealizaraccionescómoenviaruncorreocondudasocomentariosdelaaplicaciónocompartirmediantecorreooredessocialesunenlaceparaladescargadelaaplicación.

Figura34:CapturadepantalladelnavigationdrawerdelaaplicaciónARCTICdeAndroid

Capítulo8.SoluciónPropuesta

48

8.2.7.3. Inicio

Lapantalladeinicioeslamásimportantepuesesdesdedóndeserealizanlasaccionesdegrabarnuevaactividadodevisualizarunaactividadguardadapreviamente.

Paraesosehaincluidounalistacontodaslasactividadesguardadasdelusuario.ParalalistasehanutilizadouncomponentequeGooglenosofreceensuslibrerías,lascards.Lascardsnospermitenpersonalizarquésevaaverencadaelementodelalista.Enestecaso,sehadecididoponerinformaciónútilparaqueelusuariopuedaseleccionarbienlabajadaquequiereverendetalle.Lascards,comosepuedeverenlaFigura35,estánformadasporuniconodeunesquiador(sienunfuturoseincluyenotrosdeportesconlos que se puedan utilizar el sensor como snow, patines en línea o surf, ese iconocambiaría), la duraciónde la bajada guardada, unabrevedescripciónque el usuariopuedeañadirparacadabajada,yuntextoen lapartederechaque indicacuándoserealizólabajada.Esevalorpuedeserdesde“haceunmomento”hasta“hace2días”.

Figura35:CarddeunabajadadelalistadebajadasdelapantalladeiniciodelaaplicacionARCTICdeAndroid.

Sehaimplementadounaopciónenlascardspararealizarlaaccióndeborraractividadqueconsisteenunanimaciónmediantelacualapareceunmenúconelbotóndeborrar.Paraesosedebearrastrarlacardhacialaizquierdadelapantalla,gestoconocidocomoswipe. Para saber sobre qué card se ha realizado la acción, la card seleccionada seoscurece para destacar sobre el resto. Si se pulsa en el botón de borrar la carddesapareceráyseborrarálaactividaddelabasededatos.Sepuedenseleccionarvariascardsalavez.Paravolveralestadoinicialydeseleccionarlasedeberealizarelswipeensentidocontrario,esdecir,hacialaderechadelapantalla.EnlaFigura36sepuedenverdistintascardsseleccionadasyconelmenúadicionalvisibleparapoderrealizarlaaccióndeborrar. En el casode realizar la accióndeborrar, se informará al usuario conunmensajedequelaactividadsehaeliminadocorrectamente.

Capítulo8.SoluciónPropuesta

49

Figura36:CapturadepantalladeinicioconvariascardsseleccionadasdelaaplicaciónARCTICdeAndroid.

Enlalistadeactividadesguardadassepuedehacerscrollverticaldebidoaqueenunapantallanosepuedenvisualizarmuchasactividades,deestamanerasepuedenaccederatodasdesdelamismapantallasinmuchacomplicación.

EnlaFigura36tambiénsepuedeobservarunFloatingActionButtonenlaparteinferiorderecha. Ese botón especial también es una recomendación de Google. Comocaracterísticaprincipalesqueno semueve si sehace scroll en la listapor loqueesaccesiblesiempreenesapantalla.Seutilizaparaaccionesdestacadas,yenestecaso,seutilizarparagrabarunanuevaactividad.Sehautilizadouncolordestacadoalrestoparallamarlaatencióndelusuario.Sisepulsaenélsepuedeobservarunaanimacióndeliconodelesquiadorquecontiene.

Capítulo8.SoluciónPropuesta

50

8.2.7.4. Emparejamientodedispositivos

AestapantallaseaccederátraspulsarelFloatingActionButttondelapantalladeinicioyeslaprimeravezquesehaceosisehaeliminadoeldispositivoBluetoothenajustes.ApareceráunapantallaparaemparejardispositivoscomoladelaFigura37.

Figura37:CapturadepantalladelemparejamientoBluetoothconelsensor.

Como se puede observar, aparece el sensor ARCTIC que previamente habíamosdesarrollado.Tambiéncabedestacarladiferenciaeneltoolbar,yaqueahoraapareceuniconodiferentequerealizalaaccióndeiralapantallaanteriorenvezdemostrarelNavigationDrawer.

También hay un icono en el toolbar secundario que indica cuándo está escaneandodispositivos Bluetooth y cuando no. Cuando deja de escanear, aparece un icono deactualizarparaquevuelvaaescanearenelcasodequenoaparezcaelsensorARCTICalaprimera.

Pararealizarelenlace,bastaconpulsarsobreeldispositivoBluetoothARCTIC.Sisepulsasobreotrodispositivonocompatibleconlaaplicación,mostraráunmensajeinformandoalusuariodequehaelegidoundispositivonocompatible.Sisepulsasobreeldispositivocorrecto, nos llevará a la pantalla de grabar actividad y aparecerá un mensaje queindicaráqueeldispositivoestáguardadoparafuturasconexiones.

Capítulo8.SoluciónPropuesta

51

8.2.7.5. NuevaActividad

Aestapantallaseaccederábiendespuésdeemparejareldispositivoosi sepulsaelbotóndelapantalladeinicio.

Esunapantallasimplequeestácompuestaporunbotóndestart/stopydeunaimagenquetiene lamismafuncióndestart/stop(Figura38).Sisepulsa,elbotóncambiadestartastopy la imagenseanimayeldispositivoempiezaa recibirdatosdelsensor.Además,porprecaución,serealizaunbloqueodelasfuncionesparaevitarquesepauselaactividadporaccidente.Enesebloqueodepantalla,elbotónyeliconocambiandecolor indicando que no están activos. Para poder desbloquear la pantalla y parar laactividad,sehacreadounbotóndedesbloquear.Estebotóncambiasisepulsaparapodervolverabloquear lapantallaencasodequenosequieraparar.TodoestosepuedeverclaramenteenlascapturasdepantalladelaFigura39.

Figura38:CapturadepantalladenuevaactividaddelaaplicaciónARCTICdeAndroid

Capítulo8.SoluciónPropuesta

52

Figura39:CapturasdepantallabloqueadaydesbloqueadaunaveziniciadalaactividaddelaaplicaciónARCTICdeAndroid

Sisepulsaelbotóndestopoeliconoestandodesbloqueadalapantalla,laactividadsedaráporfinalizadayseiraaunformularioparaqueelusuarioañadadatosquenosepuedenmedir conel sensor cómoel estadode lanieveo cómo seha sentidoen labajada.

Sisequierecancelarlabajadaporcualquiermotivo,bastaconpulsarelbotóndeatrásdeltoolbar,deesamaneranoseguardaráningúndatoenbasededatosyporlotantonoapareceráenellistadodeactividadesdelapantalladeinicio.

8.2.7.6. FormulariodeNuevaActividad

Paraqueelusuariopuedacompletarlosdatosdelabajadayqueenunfuturopuedacomparary/oanalizar resultados, seha creadounbreve formulariopara completarjustodespuésdelabajada.Eneseformulariosepidenlossiguientesdatos:

• Estadodelanieve,importanteyaqueesmásfácilhacerunabuenabajadaconnieve en buen estado que hacerla con una nievemuy dura o excesivamenteblanda.Losvalorespuedenser:Hielo,Dura,Perfecta,BlandaoAgua(esutilizado

Capítulo8.SoluciónPropuesta

53

frecuentementeporesquiadoresparaindicarquelanieveestáexcesivamenteblanda).

• Feelingsquehatenidoelusuarioenesabajada.Sehapensadoquepuedeserimportanteparaversirealmentelapuntuacióncorrespondealoquesienteelusuario.Enelcasodehaberseencontradogenialyquelapuntuaciónseabajasignificaráqueestácometiendoerroresyquedebetrabajarenellos.Losvaloresquepuedetomarson:Miedo,Mal,Normal,BienoGenial.

• Comentarios.Estopermitealusuariohaceralgunaanotaciónextracomolapistaenlaquesehahecho,sieraaprimerahoradeldíaocualquierotracosaqueseleocurraparapoderidentificarla.Estecomentarioeselqueluegoapareceráenlacarddelapantalladeinicio.

Para validar el formulario y guardarlo hay un Floating Action Button en la esquinainferiorderechaquellamarálaatencióndelusuario.

Esteformularionoesobligatorioporloquesepuededejarenblancoydarleaenviarosepuedepulsarelbotóndeatrásdeltoolbarsinpreocuparsedeperderlosdatosyaqueestosseguardarán.

Figura40:CapturadepantalladelformulariodenuevaactividaddelaaplicaciónARCTICdeAndroid

Capítulo8.SoluciónPropuesta

54

ComosepuedeobservarenlaFigura40,paralaseleccióndelestadodelanieveydelfeelingdelusuariosehautilizadounabarraconbotonesdeselección.Estohacequesolosepuedaelegirunaopcióna lavez.Encasodeseleccionaralguna,cambiarádecolorindicandoqueestáseleccionada.

Cuandosepulsealbotóndevalidar,seredirigiráalapantalladeinicioyyaaparecerálanuevaactividadguardada.

8.2.7.7. DetalledeActividad

Cuando se pulsa una actividad de la lista de actividades de la pantalla de inicio, semostraráunainformacióndetalladadelaactividadenestapantalla.Semostraránlossiguientesdatos:

• Númerodegiros,quesecalculanconlosdatosrecogidosconelsensor.

• DuracióndelabajadaenelformatoMIN:SEG.

• Feeling,queeselqueindicóelusuarioenelformulariodenuevaactividad.Encaso de no haberlo completado, el estado será: Normal. Dependiendo delestado,apareceunemoticonorepresentadoelestado.

• Estadodelanievequetambiénindicóenusuarioenelformulario.Encasodenohaberlocompletado,elestadodelanieveserá:Blanda.

• Puntuación,quesecalculaconunalgoritmoaplicadoa losdatostomados.Serepresentagráficamenteconestrellas,de1a5pudiendotomarvaloresmedioscomo3,5estrellas,enesecaso,sepintaránlastresprimerasestrellasnegras,lacuartamitadnegramitadvacía,ylaquintavacíaentera.

• Unasgráficasquesedibujanconlosdatostomadosporelsensor.Aparecentresgráficas:Aceleración,RotaciónyYawPitchRolloángulosdenavegación.Paraunusuarioestándarnodicemucho,peroparaalguienquesepainterpretarlosdatospuede resultarmuy útil. Para podermostrar las tres gráficas con un tamañoaceptableenlamismapantallasintenerquehacerscrollvertical,sehaoptadoporutilizarunsistemadepestañasenlasquecadaunacontieneungráfico.Sepuedecambiardepestañaohaciendoswipehacia los ladosopulsandoen lapestañaquesequieravisualizar.Losgráficossoninteractivos,esdecir,quesepuedenampliarymoverparaverlomásendetalle.Cuandoseseleccionaunagráfica,losdatossedibujandeformaanimada.

Se puede ver un ejemplo depantalla en la Figura 41. En ese ejemplo, el usuario harealizado4giros,en35segundos,sehasentidogenialylanieveestabaexcesivamente

Capítulo8.SoluciónPropuesta

55

blanda.Haobtenidounapuntuaciónde5estrellas.YtambiénseaprecialagráficadeYawPitchRoll.

Paravolveralapantalladeinicioyvertodaslasactividadesbastaconpulsarelbotóndeatrásdeltoolbar.

Figura41:CapturadepantalladeactividaddetalladadelaaplicaciónARCTICdeAndroid

Capítulo8.SoluciónPropuesta

56

8.2.7.8. Perfil

EstapantallaesaccesibledesdeelNavigationDrawerypermitealusuariomodificarlosdatos introducidos en el formulario de alta de usuario. Cuando se abre, aparece elmismoformularioqueeneldealtadeusuarioperoestavezconlosdatosdelusuarioenloscamposcorrespondientesenvezdevacíos.

Elfuncionamientoeselmismoqueeldelformulariodealtadeusuario,peroestavezenvezdeunbotóndeenviar,apareceunbotóndeguardar.Pulsandoenélseguardaránloscambiosysenotificaráalusuariomedianteunmensajequesehanguardado losdatoscorrectamentecomosepuedeapreciarenlaFigura42.

Tambiéncuentaconunacomprobacióndecamposquenotificaráalusuarioencasodenoestarrellenostodosodeestarincorrectos.

Figura42:CapturadepantalladeperfildelaaplicaciónARCTICdeAndroid

8.2.7.9. Ajustes

Por último, está la pantalla de ajustes de la aplicación que están divididos en dosapartados,BluetoothyCuenta.Estádiseñadoparaqueenunfuturo,sisedeseaagregar

Capítulo8.SoluciónPropuesta

57

otroapartadoconsusajustes,sehagaconrelativafacilidad.Enestasdoscategoríassepermitealusuariorealizarlassiguientesacciones:

• Olvidar dispositivo Bluetooth emparejado. En caso de haber realizado elemparejamientoconelsensor,apareceráladirecciónBluetoothdelsensoryunbotóndeeliminar.Alserunaacción importante,cuandosepulsaelbotóndeborrar aparece una alerta informando de las consecuencias de la acción ypreguntandosideseaolvidareldispositivoBluetooth.SepuedeapreciarenlaFigura43.ParamostraresaalertasehautilizadounAlertDialog.Estánpensadosparaconfirmareinformardeaccionesqueconllevaráncambiosenlaaplicación.

• Cerrarsesiónyborrardatosdelacuentadeusuario.AlsertambiénunadecisiónimportantesemostraráunAlertDialogcomosepuedeapreciarenlaFigura43.

Figura43:CapturadepantalladelAlertDialogparaconfirmarborradodedispositivoBluetoothyparaconfirmarellogoutdelaaplicaciónARCTICdeAndroid

8.2.7.10. Idioma

Sehadecididodesarrollartodalaaplicacióntantoparaingléscomoparaespañol.Paraeso se utiliza un archivo “strings.xml” para cada idioma. Ese archivos contendrá los

Capítulo8.SoluciónPropuesta

58

stringsqueluegoseutilizaránenelprograma.Seencuentranenlacarpetavaluesdelosrecursos. Para cada idioma se crea una carpeta de values-CODIGO_IDIOMA quecontendrá su archivo strings. Es necesario que todos los archivos strings tengan lasmismasvariables.Seusaráunarchivouotroenfuncióndelaconfiguracióndeidiomadelmóvil.Encasodenotenerunacarpetadedicadaaeseidioma,seutilizaráeldelacarpetavalues,quesuelesereldeinglés.

8.2.7.11. EstructuraUI

Laestructuradelainterfazgráficasedivideencarpetaycadacarpetacontienerecursosque se utilizarán para la interfaz gráfica. En la figura se pueden ver las diferentescarpetasqueformanpartedelaestructura.

Lascarpetasdedrawablecontienenlosdistintosiconoseimágenes utilizados. Hay varias carpetas drawable enfuncióndelaresolucióndelapantallaendóndeseutilicenlosrecursos.

Lacarpetadeanimcontienelasanimacionesutilizadasenlosiconos.

Enlacarpetalayoutestántodaslasvistasutilizadas,ahíesdondeestántodaslaspantallas.

En la carpeta menú se definen los diferentes menúsutilizados,enestecaso,eldelnaviagtiondrawer.

Las carpetasmipmapcontienenel iconode laaplicaciónque se utilizará cuando se instale la aplicación en undispositivo.

Yporúltimolacarpetavaluesqueademásdecontenerelarchivostrings.xml,sepuedendefinirotrosarchivoscómocolors.xml,dimens.xml,styles.xml,etc..Sepuedeverquehay varias carpetas values en función del idioma del dispositivo para el archivostrings.xml y otras en función de la versión del dispositivo o de la resolución de lapantalladeldispositivo.

Capítulo8.SoluciónPropuesta

59

8.2.8. Análisisdelosdatos

Con los datos tomados por el sensor del acelerómetro, giroscopio y los ángulos denavegación,sehadecididorealizardoscálculosparamostrarelnúmerodegiroshechosenunabajadayunapuntuación.

8.2.8.1. Númerodegiros

Para calcular el número de giros se han tenido en cuenta los datos del eje X delacelerómetro.Esosdatosnosindicanquehahabidounmovimientodelsensorenesemismoeje,siendopositivohaciaunladoynegativoparaelladocontrario.Estosignificaque cada vez que la gráfica corte el eje X en 0 se estará realizando un cambio dedirección,esdecir,ungiro.ParadetectaresecortedelejeXconlosdatostomadosehacreadoelsiguientealgoritmoenJava:

El algoritmo detecta cuándo la gráfica empieza a tomar datos positivos y cuándoempiezaatomardatosnegativos.Cuandosedenesasdoscondiciones,seaumentaelnúmero de giros y se ponen los detectores a false. Después de muchas pruebas,modificacionesyoptimizacionessehallegadoaunalgoritmobastantepreciso.

int giros = 0; boolean corte_subida = false; boolean corte_bajada = false; for(int i = 1; i < data_acc_x.size(); i++){ if(data_acc_x.get(i) > 0){ if(!corte_subida){ corte_subida = true; }//if }else if(!corte_bajada){ corte_bajada = true; }//if-else if(corte_subida && corte_bajada){ giros ++; corte_subida = false; corte_bajada = false; }//if }//for

Capítulo8.SoluciónPropuesta

60

8.2.8.2. Puntuación

Desdeelprimermomentoquesepensóenlaaplicación,setuvolaideadeincluirunapuntuaciónparaqueelusuarioobtuviesealgúndatosencilloyútilparainterpretarelresultado. Tras un análisis del esquí, aplicando conocimientos de profesionales ycontandoconlosdatosdelsensor,sellegóaunalgoritmobasadoenlapendientedelapistaylaangulacióndelesquí.

Paralapendientedelapista,sehautilizadounafunciónquecalculalapendientemediadelapista.ParaellosehacalculadolamediadelosvaloresdelejeYdelacelerómetroqueestánnormalizadosa1,porlotantolosdatosestánenelintervalo[-1,1]yluegosehahecholaconversiónatantoporciento.1=100%,0.5=50%.

Figura44:Imagenaclarativadelainclinacióndelapista.

Seentiendeangulacióndelesquícomoelánguloqueformarespectoalejehorizontal.La angulacióndel esquí es fundamental a la hora de realizar unbuen giro. Amayorangulación del esquí,menor será el radio de giro por lo tanto se hará un giromáscerrado.Estoesdebidoaquecuantomayorsealaangulacióndelesquímáspresiónseejercesobreélyporlotantomássedoblaycuantomásdobladoesté,elradiodegiroesmenor.EnlaFigura45sepuedeverclaramentequéeslaangulacióndelesquí.

Porotrolado,elcontactodelasueladelesquíconlanieveinfluyeenlavelocidaddelesquiadorpuescuantamayorsuperficiedesuelaestéencontactoconlanievemayorserálavelocidadquesegana.Losesquiadoresprofesionalesaplicancerafluoradaalasuelaparadisminuirlafricciónyganaraceleración.

ParacalcularlaangulaciónmediadelesquísehanutilizadolosvaloresquetomabaelacelerómetroenelejeXnormalizadosa1yluegosehaexpresadoentantoporciento.

Capítulo8.SoluciónPropuesta

61

Figura45:Imagenrepresentativadelaangulacióndelosesquís.

Despuésdelanálisisrealizadoyteniendoencuentalaexperiencia,sehadecididotenerencuentalossiguientescasosparaanalizarypuntuarunabajada:

• Sielesquiadorestárealizandounabajadaporunapistaconmuchapendienteydifícil,necesitarárealizargiroscortosycontroladosparatenerentodomomentoelcontrolyllevarunavelocidadadecuadaalapistayparaesonecesitararealizarunamayorangulacióndeesquís.

• Encambio,sielesquiadorestárealizandounabajadaporunapistasencillaconpoca pendiente, le interesará realizar giros más amplios y más suaves paramaximizarelcontactodelasuelaconlanieveynoperdervelocidad.

Teniendoencuentaesasdospremisas,sehallegadoalasiguientefórmulaparaobtenerunapuntuaciónsobre100.

!"#$"%&'(# = 100 − !.#/'.#$.01234 − %#5"6%&'(#01234

Seutilizael valorabsolutode ladiferenciaentre lapendientemediay laangulación

mediapuestoqueamayorpendientesenecesitarámayorangulaciónpor lotanto la

diferenciaserámenorylapuntuaciónserámásalta.Porelcontrario,amenorpendiente

se necesitará una menor angulación y por lo tanto la diferencia será menor y la

puntuaciónserámásaltatambién.

Tambiénsehanhechovariaspruebasymuchasmodificacionesyoptimizacionesyalfinallosresultadosobtenidosparecenbastanteóptimos.

Capítulo8.SoluciónPropuesta

62

8.2.9. PublicaciónenGooglePlay

Sehadecididollevaracabounapublicaciónbetaparaeltesteodelaaplicación.Paraello sehautilizado laplataformadedistribucióndeaplicacionesGooglePlay, lamáspopulardentrodelmercadodelosdispositivosAndroid.ExistenotrasplataformascomoSamsung Galaxy Apps, sólo para dispositivos Samsung, o Aptoide, una plataformaindependientedeappsparaAndroid.

Para que fuese aceptada en Google Play se han tenido que cumplir una serie derequisitosquesevanaexplicaracontinuación.

• Clasificación del contenido: mediante esa clasificación se permite al usuarioconocer sobre diferentes clasificaciones populares y relevantes a nivel localorientandoelcontenidoalaaudienciaadecuada.Esnecesariocontestaruntestsobreelcontenidodetuaplicaciónyautomáticamentetecalculalaclasificacióndeloscontenidos.Enelcasodelaaplicaciónhansalidolossiguientesresultados:

Figura46:ClasificacióndelcontenidoparalaaplicaciónARCTIC

• Precio y distribución. Se ha elegido ponerla gratuita ya que lo que daríabeneficiossisesacaseamercadoeslaventadelsensoryladistribuciónsehanseleccionadotodoslospaísesposibles.

Capítulo8.SoluciónPropuesta

63

• APK,sehasubidoelapkgeneradoconAnroidStudiodelaramareleasefirmadaconunafirmadigitalcreadaconlosdatosdelautordeestetrabajo.

• FichadelPlayStore.Estafichaesunaespeciededescripcióndelaaplicaciónenlaquehayquerellenarlossiguientescampos:

o Título:ARCTIC

o Descripciónbreve:Guardayanalizatodastusbajadasdeesquíconunsoloclick!

o Descripcióncompleta:ARCTICpermite,juntoaunsensoracopladoalesquí,analizarlosdetallesdetubajadadeesquíyvisualizarlosresultados.

o Capturasdepantalla:Sehansubidolasmismasquesehanutilizadoenestetrabajo.

o Iconodealtaresolución:

Figura47:Iconodealtaresolucion512x512deARCTIC

o Imagendestacada:

Figura48:ImagendestacadadelaaplicaciónARCTICdeAndroid

o Categoría:Saludybienestar.

o Clasificacióndelcontenido:Paratodos

o Correoelectrónico:[email protected]

Capítulo9.¿PorquéARCTIC?

64

9. ¿PorquéARCTIC?

Sehaintentadoelegirunnombreoriginalydiferente,queenganchasealagenteyquetuviesetirónycreasemarca.

Paraesosedispusodelaayudadeunadiseñadora,IreneLuna,quefuelaqueseencargóde la eleccióndel nombre, de la eleccióndel slogan, de la creacióndel logo y de laeleccióndeloscolores,siemprecontandoconmiopinión,miayudaymiscríticas.

Enlaeleccióndelnombresetratódebuscarunnombrefácildenombrar,cortoyquetuvieserelaciónconelmundodelanieveydelamontaña.ARCTICquesignificarelativoalÁrticopensamosqueesunnombrequediferencialamarcayquerepresentaelhielo.

Porotrapartesepensóenelsloganysellegóalasiguientefrase:“Thefutureisnow.”Escritaseentiendecomoqueelfuturoesahora.Peroleídosepuedeentendertambiéncomo:“Thefuture’ssnow”oLanievedelfuturo.Pensamosqueesasdosfrases:

• Elfuturoesahora

• Lanievedelfuturo

resumenyrepresentanelproductodelsensoryaquemezcla lanieveconlasnuevastecnológicasqueeselfuturo.

Conelnombreyelslogandefinidos,ladiseñadoraseencargóderealizarellogoyunaimagendellogoconelsloganquesepuedenapreciarenlaFigura49.

Figura49:logotipoyslogandeARCTIC

Sepuedeobservarqueha jugadocon loscoloresparaqueenelslogansediferencieclaramentelapalabraSNOW.Tambiéncabedestacarloscoloresdellogo,quesonlosusadosenlaaplicacióncomoverdemásclarocómocolorprincipal,verdeoscurocómocolorsecundario,elnegroelcolordeltextoyelblancoelfondodelaaplicación.

Capítulo10.Resultados

65

10. Resultados

Paraprobarlacalidaddeltrabajorealizadosehanrealizadodostiposdepruebas:

• Pruebas de calidad. Estas pruebas se han pensado paramedir la calidad delcódigorealizadoyverenquépuntoshayquemejorarparaconseguiruncódigode calidad en un futuro. Para estas pruebas se ha utilizado una herramientaonlinedeanálisisdelcódigollamadaKiuwan[55].ElanálisisseharealizadosobreelcódigoJavadelproyectoylosresultadoshansidobastantesatisfactorios.Enla Figura 50 se puede ver un resumen del análisis realizado. Cómo se puedeobservar, las áreas de seguridad, eficiencia, portabilidad y confiabilidad delcódigosuperaneltargetestablecido(90sobre100pordefecto).Encambioenlamantenibilidaddelcódigoestadosterciospordebajodeloesperado.

Figura50:ResumendelanálisisdecódigorealizadoconlaherramientaKiuwan.

Capítulo10.Resultados

66

• Pruebas funcionales. En este caso se ha trabajado en la funcionalidad de laaplicación,esdecir,sehacomprobadosilaaplicacióncumpleconlosrequisitosdescritosenelapartado8.2.2.yparaellosehandiseñadounaseriedepruebas:

1. Registrodeusuariocondatosnoválidosycondatosválidos.

2. Edicióndedatosdeusuariocondatosnoválidosycondatosválidos.

3. Logoutdelaaplicación.

4. EmparejamientoconundispositivoBLE.

5. Accióndeborrarelsensoryvolveraemparejarlo.

6. Emparejarconundispositivonocompatibleytratardegrabaractividad

7. Acciónderecomendaraplicación.

8. Accióndeenviarcomentarioaldesarrollador.

9. Grabación,visualizacióndenuevaactividadyborradodeunaactividad.

10. Cancelacióndeunaactividad.

11. Grabaciónyvisualizacióndeunaactividadconunapuntuaciónaltayotraconpuntuaciónbaja

Conesabateríadepruebassehaintentadoabarcartodoslosrequisitosdelaaplicación.Esta batería de pruebas se ha ido diseñando según se iban implementandofuncionalidadesconelfindeprobarlas.Ynoshanservidoparacorregirerroresymejorarlaaplicación.

Losresultadosdelaspruebasfuncionaleshansidolossiguientes:

1. Registrodeusuariocondatosnoválidosycondatosválidos:OK

Enlapantalladelformulariodenuevousuariosehaintroducidoparaelcampodenombreydeemailvalores incorrectos.En laFigura51sepuedenver lasdiferentes capturas de pantalla que se han dado en la prueba. Se puedeobservarqueeltexto“123”noesválidoparaelnombreyqueladireccióndecorreo“kike@gmail” tampocoesválida.Unavezcorregidosesoscampos, síquepermitecrearelusuariocorrectamente.

Capítulo10.Resultados

67

Figura51:Resultadosdecasodeprueba1

Capítulo10.Resultados

68

2. Edicióndedatosdeusuariocondatosnoválidosycondatosválidos:OK

En este caso de prueba se ha intentado editar el perfil con unos datos noválidos.Sehautilizadoeltexto“Acedo2”paraelcampodeapellidoyeltextode “kike. [email protected]”.Unavez corregidoel númerodel apellido yelespaciodelemail,elusuariosehaguardadocorrectamente.

Figura52:Resultadosdelcasodeprueba2

3. Logoutdelaaplicación:OK

Está situación es muy importante ya que es una acción que puede tenergrandesconsecuenciasporloqueseesperabandoscosas.Laprimeraesqueaparezcaunalertdialogquepregunteporlaconfirmacióndelaacciónyencasodeconfirmar,yelotroesqueseborrentodoslosdatos.

Enestecaso,sólosepuededemostrarsiapareceelalertdialogconlapreguntadeconfirmación.Respectoalborradodedatos,sepuedeconfirmarmedianteelLogdelaaplicaciónqueseobservaenlaFigura53.

Figura53:Logdelcasodeprueba3

Capítulo10.Resultados

69

Figura54:Resultadodelcasodeprueba3

4. Emparejamientoconsensor:OK

EnestetestsehacomprobadoqueserealiceelemparejamientoconelsensorcorrectamenteyqueseguardeladirecciónBluetoothparafuturasconexiones.

Figura55:Resultadosdelcasodeprueba4

Capítulo10.Resultados

70

Como sepuede ver en la Figura55, el sensorARCTICapareceen la listadedispositivos Bluetooth y si selecciona se realiza el emparejamientocorrectamenteyseguardaladirecciónBluetooth.

5. Accióndeborrarelsensoryvolveraemparejarlo:OK

Paraestecasodepruebaseesperaquenosaparezcaunalertdialogcuandosevayaarealizar laaccióndeborrareldispositivoyqueseborreeldispositivoqueestabaguardado.Laopcióndeolvidareldispositivodeberáestaractivasólocuandohayaundispositivopreviamenteguardado.Enlasepuedenverlosresultadosdeestaprueba.

Figura56:Resultadosdelcasodeprueba5

6. Emparejarconundispositivonocompatibleytratardegrabaractividad:OK

EnlosanteriorescasodepruebasehapuestoapruebaelemparejamientoyeldesacopleconelsensorARCTICperotambiénsehaqueridocontemplarelcasoenelqueelusuarioseequivoquededispositivoyemparejeundispositivonocompatible. En ese caso, debería dar un error cuando se pulsa el botón deempezarnuevaactividadydeberíaredirigiralapantalladeacoplamientopara

Capítulo10.Resultados

71

que se realice la conexión correcta. En la Figura 57 se puede observar elmensajedeerrorquemuestralaaplicaciónsisedaesecaso.

Figura57:Resultadodelcasodeprueba6

7. Acciónderecomendaraplicación:OK

Enestetestsecompruebaquecuandosepulsasobre“Compartir”apareceelmenúdecompartiryqueademássegeneraeltextocorrectamente.

Figura58:TextocompartidoporlaaplicaciónTelegramconelenlacededescargadeARCTIC

EnlaFigura58sepuedevereltextogeneradocompartidoatravésdelaaplicaciónTelegramdemensajeríayenlaFigura59sepuedeverelmenúconlasaplicacionesdisponiblesparacompartireltextoconelenlace.EsemenúesgeneradoporAndroidyapareceránlasaplicacionesqueelsistemaoperativodetectequesoncompatiblesconelenvíoyelalmacenajedetexto.

Capítulo10.Resultados

72

Figura59:Resultadodeltest7

8. Accióndeenviarcomentarioaldesarrollador:OK

EnestecasonopermitiráelegiraplicaciónparaenviarelmensajeasíqueseabrirádirectamenteunaaplicaciónparaenviarunemailcomoenlaFigura60.

Figura60:AplicacióndeenvíodeemailsconlaplantillageneradaparaenviaruncomentarioaARCTIC

Capítulo10.Resultados

73

Sepuedeobservarqueserellenanautomáticamentetodosloscampos:

• De:emailpordefectodelusuariodeldispositivo

• Para:emaildeldesarrollador

• Asunto:ComentariodeUSUARIO

• Cuerpo:Usuario::USEREmail::USERMAIL-------------Escribetucomentarioaquí:

Elusuario solamente tendráque redactarel comentarioquedeseeenviar aARCTIC.

9. Grabacióndenuevaactividadyborradodeunaactividad:OK

Paraestapruebasehadecididograbarvariasbajadasde testparaver si seguardacorrectamenteydespuésborrarunpardeellasparaver si funcionacorrectamente. Se han grabado cinco actividades, dándolas un título de:“BajadaX”yluegosehaborradolabajada1ylabajada4.Porlotantoenlalista de actividades guardadas deberían quedar la bajada 2, 3 y 5. En la sepuedenobservarlosresultadosobtenidos.

Figura61:Resultadosdelcasodeprueba9

Capítulo10.Resultados

74

10. Cancelacióndeunaactividad:OK

Enestecasonosepuedeevidenciarestetestmediantecapturasdepantallaperosehacomprobadoquecuandoseempiezaunaactividad,sisepulsasobreelbotóndeatrásdeltoolbar,sevuelvealapantalladeInicioynosemuestraninguna nueva actividad por lo tanto no se guarda nada y no afecta alfuncionamientodelaaplicación.

11. Grabaciónyvisualizacióndeunaactividadconunapuntuaciónaltayotraconpuntuaciónbaja:OK

Enestaúltimapruebasehaintentadoprobarlaeficaciadelalgoritmocreadoparaobtenerlapuntuacióndeunabajadaydelalgoritmoutilizadoparacalcularelnúmerodegiros.Loidealhabríasidoprobarloenunabajadadeesquírealpero la faltadeuncaparazónque loprotejaal sensordelaguay la faltadepresupuesto ha hecho que se busquen alternativas. Para la bajada conpuntuaciónaltasehaprobadoconunabajadaenpatinesenlíneaimitandoaunabajadadeesquíalpino.Paralabajadadelapuntuaciónbajasehasimuladoconlasmanosloqueseríaelmovimientodeunesquíenunabajadayaqueseintentóhacerunabajadamalaconlospatinesperoeraimposibleporelriesgodecaída,ynoeslomismocaersesobrenieveyconlaexperienciaquesetieneacaersesobreasfaltosinexperienciaenlospatinesenlínea.LasbajadashansidorealizadasporlaCarlotaMaestro,excampeonadeMadridenesquíAlpinoyactualprofesoradeesquíquehahechodetesterdeARCTIC.EnlaFigura62sepuedeveralatesterrealizandounabajadaenpatinesenlíneaimitandoalesquíysepuedeapreciarlasimilitudconelesquí.

Figura62:FotodelaprobadoradeARCTICconpatinesenlínea.

Capítulo10.Resultados

75

EnlaFigura63sepuedeobservarlascapturasdepantalladelabajadabuenaydelabajadamala.

Figura63:Resultadodelcasodeprueba11

Capítulo11.Conclusionesylíneasfuturas

76

11. Conclusionesylíneasfuturas

11.1. Conclusiones

Elaugedelmercadodelasappsesunhechoyesaplicableacualquiersectorquesepuedaimaginar.Enestetrabajosehantratadodeunirdospasionesdelautor,elesquíylatecnología,conelfindeobtenerunproductoquefueseútilparalosesquiadoresyquenoexistieseenelmercadodandountoquedeinnovación.

Con esa idea sea ha realizado un estudio exhaustivo del mercado actual y se haintentadoaplicarlasúltimastecnologíasaundeportecomoelesquíalpino.

FrutodeeseestudioydeltrabajorealizadosehaobtenidoARCTIC,unMVP(productomínimoviable)realizadoconlaúltimatecnologíaqueconstadeunsensorincorporadoalesquíysecomunicamedianteBLEconundispositivomóvildeunamaneraóptimayeficiente.

Parallegaraeseresultadosehatrabajoporunaparteeneldesarrollodeunsensorquees capaz de medir datos relativos a la aceleración, a la rotación y a la orientaciónutilizando Arduino y por otra parte en el desarrollo de una aplicación Android quepermitaalusuarioutilizarel sensorconun finespecífico.TantocomoArduinocomoAndroid son a día doy dos herramientas tecnológicas modernas que facilitan lafabricaciónyconsecucióntecnologíapuntera.

Despuésdetodoeltrabajorealizadoydehaberrealizadolaspruebasdescritasen lapágina66,sedemuestradequesehaobtenidounaaplicaciónmóvildecalidad,segura,eficiente,portableyfiablequeademáscumpleconlaguíadeestilodeMaterialDesigndeGoogle.

11.2. Líneasfuturas

Eltrabajorealizadoessólounapequeñapartedeunproyectoquepuedeserdeunasdimensionesenormes.Dehecho,alprincipiodelproyectosehablódeabarcarmásdeloconseguidoperoproblemasdetiemposeeligióobtenerunMVP.Esporesoquesisedeseaseguiradelanteconelproyectoycomercializarelproductosedebetrabajarenlossiguientesaspectos:

• Diseño de test para la aplicación Android y mejora en la mantenibilidad delcódigo.Lamantenibilidaddelcódigoesmejorable.Ladecisióndenorealizartestalrespectosetomóalprincipiodeldesarrollocuandohuboqueelegirentreunaaplicaciónconuncódigodealtacalidadounaaplicaciónqueaportaseunvaloralusuarioyseeligiólasegundaopción.Sisehubieseelegidolaprimeraopciónnohabríadadotiempoaobtenerunaaplicaciónfuncionalparaelusuario.Conlaspruebasfuncionalessehapodidodemostrarquelaelecciónfuelacorrectay

Capítulo11.Conclusionesylíneasfuturas

77

que la combinación del sensor con la aplicaciónmóvil desarrollada consigueaportar al usuario unas funcionalidades que son válidas para su uso aunquedejan abierto un abanico de mejoras aplicables para conseguir obtener unproductocomercializable.

• Mejoradelalgoritmodecálculodepuntuaciónincluyendootrasvariables.

• Migraciónde lasbasesdedatosa lanube.Estamigraciónesmuyútilendossentidos. El primero es para que el usuario pueda acceder desde cualquierdispositivo(móvil,tablet,ordenador,etc.).Elsegundoesparaelestudiodelosdatos que se obtienen de los sensores ya que los desarrolladores podríanaccedernosóloalosdatosgeneradosporellos,sinoalosdatosgeneradosporusuariosnormales.

• Creacióndeunsensorpersonalizadoalasnecesidadesdelproyectoconelfindeobtenerunmejorproductoydeabaratarcostes.

• Diseñoycreacióndeunaenvolturaresistentealaguaquehagadecaparazóndelsensor.Ademásesecaparazóndeberápoderintegrarseenelesquíconfacilidadasíquesedeberáestudiarlaformadeacoplarloalesquí.

• Expansión de la aplicación a otros dispositivos. Habría que estudiar otrasalternativas,porejemplounaaplicaciónwebyunaaplicacióniOS.Deesaformaseabarcaríamuchomásmercado.

• CreacióndeunacampañademarketingparadaraconocerlamarcaARCTICyelproductocreado.

Capítulo12.Referencias

78

12. Referencias[1] ForbesStaff,"AndroideiOSdominaránelmercado(casi)parasiempre,"15Junio

2016. [Online]. Available: http://www.forbes.com.mx/android-e-ios-dominaran-el-mercado-casi-para-siempre/.[Accessed15Junio2016].

[2] Android, "Android Studio," 1 Enero 2016. [Online]. Available:https://developer.android.com/studio/index.html.[Accessed15Junio2016].

[3] N.Benbourahla,Android4,CornelládeLlobregat,Barcelona:ENIEditions,2013.[4] J.Diez,"LacompradeAndroidIncporpartedeGoogle:“Elmejornegociodesu

vida”," 17 Abril 2013. [Online]. Available:http://www.avanteservices.com/es/blog/?p=2783.[Accessed9Junio2016].

[5] J.S.NolascoValenzuela,DesarrollodeAplicacionesMóvilesconAndroid,2nded.,Madrid:RA-MAEditorial,2015.

[6] Open Handset Alliance, "Members," [Online]. Available:http://www.openhandsetalliance.com/oha_members.html . [Accessed 9 Junio2016].

[7] NoticiasTecnológicas.com, "Symbian desaparece de Nokia," 28 Enero 2013.[Online]. Available: http://www.noticiastecnologicas.com/2013/01/28/symbian-desaparece-de-nokia/.[Accessed15Junio2016].

[8] marketingdirecto.com,"RIMsedesplomadespuésdequelasventasdeBlackBerryhayan caído un 43%," 29 Junio 2012. [Online]. Available:http://www.marketingdirecto.com/anunciantes-general/anunciantes/rim-se-desploma-despues-de-que-las-ventas-de-blackberry-hayan-caido-un-43/.[Accessed15Junio2016].

[9] Apple, "iPhone - Comparar Modelos," 1 Enero 2016. [Online]. Available:http://www.apple.com/es/iphone/compare/.

[10]M. J.Gutiérrez, "Capasdepersonalización: ¿útiles o un lastre?," 25 Julio 2015.[Online]. Available: http://www.elandroidelibre.com/2015/07/capas-de-personalizacion-utiles-o-un-lastre.html.[Accessed10Junio2016].

[11]P.Espeso,"DeCupcakeaMarshmallow,asíhansidolasversionesdeAndroidalolargo de su historia," 18 Agosto 2015. [Online]. Available:http://www.xatakamovil.com/sistemas-operativos/de-cupcake-a-marshmallow-asi-han-sido-las-versiones-de-android-a-lo-largo-de-su-historia. [Accessed 10Junio2016].

[12]Consesa, "Arquitectura de Android," 4 Julio 2011. [Online]. Available:http://androideity.com/2011/07/04/arquitectura-de-android/. [Accessed 15Junio2016].

[13]Quode, "¿Qué es una App?," 31 Octubre 2012. [Online]. Available:http://qode.pro/blog/que-es-una-app/.[Accessed10Junio2016].

[14]R. Andres, "Controla los permisos y accesos de tus aplicaciones Android," 21Diciembre 2014. [Online]. Available: http://computerhoy.com/paso-a-paso/apps/controla-permisos-accesos-tus-aplicaciones-android-22211.[Accessed10Junio2016].

Capítulo12.Referencias

79

[15]Android, "Comienza a publicar," [Online]. Available:https://developer.android.com/distribute/googleplay/start.html?hl=es.

[16]Apple, "Apple Developer Program," 1 Enero 2016. [Online]. Available:https://developer.apple.com/programs/.

[17]Apple, "Apple Developer Program," 1 Enero 2016. [Online]. Available:https://developer.apple.com/support/purchase-activation/.

[18]Statista,"Numberofavailableapplications inGooglePlayStore,"Febrero2016.[Online]. Available: www.statista.com/statistics/266210/number-of-available-applications-in-the-google-play-store/.[Accessed10Junio2016].

[19]Google, "Seleccionar una categoría para tu aplicación o juego," 2016. [Online].Available: https://support.google.com/googleplay/android-developer/answer/113475?hl=es.[Accessed14Junio2016].

[20]AppBrain,"TopCategories-MostpopularGooglePlaycategories,"14Junio2016.[Online]. Available: http://www.appbrain.com/stats/android-market-app-categories.[Accessed15Junio2016].

[21]ABC,"El«boom»delas«apps»desalud,"16Septiembre2013.[Online].Available:http://www.abc.es/tecnologia/moviles-aplicaciones/20130914/abci-apps-salud-crecimiento-2018-201309131500.html.[Accessed15Junio2016].

[22]Wetech,"¿Quéesunwearable? Introduccióna la tecnologíaponible.,"1Enero2016. [Online]. Available: http://wetech.es/que-es-un-wearable-introduccion-la-tecnologia-ponible/.[Accessed15Junio2016].

[23]Garmin, "Garming TruSwing," 2016. [Online]. Available:https://buy.garmin.com/en-GB/GB/sports-recreation/golfing/truswing-/prod505083.html.

[24]Zepp, "Inicio," 2016. [Online]. Available: https://www.zepp.com. [Accessed 14Junio2016].

[25]Babolat,"Inicio,"2016.[Online].Available:https://es.babolatplay.com.[Accessed14Junio2016].

[26]Arduino, "¿Qué es Arduino?," 1 Enero 2016. [Online]. Available:http://arduino.cl/que-es-arduino/.[Accessed16Junio2016].

[27]Arduino, "Download the Arduino Software," 1 Enero 2016. [Online]. Available:https://www.arduino.cc/en/Main/Software.[Accessed16Junio2016].

[28]Arduino, "Sketch," 1 Enero 2016. [Online]. Available:https://www.arduino.cc/en/Tutorial/Sketch.[Accessed16Junio2016].

[29]Arduino, "Arduino - Serial," 1 Enero 2016. [Online]. Available:https://www.arduino.cc/en/Reference/Serial.[Accessed16Junio2016].

[30]Arduino, "Serial - begin()," 1 Enero 2016. [Online]. Available:https://www.arduino.cc/en/Serial/Begin.[Accessed16Junio2016].

[31]Arduino, "Serial - write()," 1 Enero 2016. [Online]. Available:https://www.arduino.cc/en/Serial/Write.[Accessed16Junio2016].

[32]Arduino, "Serial - readBytes()," 1 Enero 2016. [Online]. Available:https://www.arduino.cc/en/Serial/ReadBytes.[Accessed16Junio2016].

[33]Adafruit, "Arduino," [Online]. Available: https://www.adafruit.com/category/17.[Accessed19Junio2016].

Capítulo12.Referencias

80

[34]A.Martí,"LleganlosbotsaTelegram:cómocreareltuyopropio,"25Junio2015.[Online]. Available: http://www.xatakamovil.com/aplicaciones/llegan-los-bots-a-telegram-como-crear-el-tuyo-propio.[Accessed19Junio2916].

[35]Arduino, "Photo2tumblr," [Online]. Available:https://create.arduino.cc/projecthub/Arduino_Genuino/photo2tumblr-9c3e92.[Accessed19Junio2016].

[36]Femtoduino, "IMUduino," 1 Enero 2016. [Online]. Available:https://femto.io/products/imuduino.[Accessed16Junio2016].

[37]M.Rouse,"UART(UniversalAsynchronousReceiver/Transmitter),"Febrero2011.[Online]. Available: http://whatis.techtarget.com/definition/UART-Universal-Asynchronous-Receiver-Transmitter.[Accessed5Julio2016].

[38]M. Rivas Gil, "Unidad de Medida Inercial. Algoritmo de estimación eimplementacióndesoftware,"Sevilla,2006.

[39]NASA, "The Apollo Missions," [Online]. Available:http://www.nasa.gov/mission_pages/apollo/missions/index.html. [Accessed 16Junio2016].

[40]Vector Nav, "Inertial Measurement Units and Inertial Navigation," [Online].Available:http://www.vectornav.com/support/library/imu-and-ins.[Accessed16Junio2016].

[41]Bluetooth,"Bluetooth,"[Online].Available:https://www.bluetooth.com/what-is-bluetooth-technology/bluetooth.[Accessed16Junio2016].

[42]P. G. Bejerano, "Por qué la tecnología bluetooth tiene el nombre de un reyvikingo," 5Diciembre2014. [Online].Available: http://blogthinkbig.com/harald-bluetooth/.[Accessed17Junio2016].

[43]Bluetooth, " Bluetooth technology basics," [Online]. Available:https://www.bluetooth.com/what-is-bluetooth-technology/bluetooth-technology-basics.[Accessed16Junio2016].

[44]the internet of things, "The Internet of Things," [Online]. Available:http://www.theinternetofthings.eu.[Accessed17Junio2016].

[45]ForbesStaff, "Wearables, ¿herramientas laboralesdel futuro?,"22Enero2015.[Online]. Available: http://www.forbes.com.mx/wearables-herramientas-laborales-del-futuro/.[Accessed19Junio2016].

[46]C.Bueno,"Las10tendenciastecnológicasparael2016:delBigDataalarealidadvirtual," 20 Enero 2016. [Online]. Available:http://www.eleconomista.es/tecnologia/noticias/7290845/01/16/Las-10-tendencias-para-el-2016-mas-alla-del-Big-Data-y-la-realidad-virtual.html.[Accessed19Junio2016].

[47]TheForciteAlpine,"Inicio," [Online].Available:http://forcite.com.au. [Accessed19Junio2016].

[48]Oakley, "AIRWAVE™," [Online]. Available:http://es.oakley.com/es/mens/goggles/snow-goggles/airwave/product/WGOO7049.[Accessed19Junio2016].

[49]Runtastic,"Runtastic,"[Online].Available:https://www.runtastic.com.[Accessed2016Enero2016].

Capítulo12.Referencias

81

[50]CoreCoders, "Ski Tracks," [Online]. Available:http://www.corecoders.com/applications/ski-tracks/.[Accessed23Junio2016].

[51]S. Castillo and J. Martin, "Introducción a Clean Architecture," 26 Marzo 2015.[Online]. Available: http://www.tempos21.com/web/blog/introduccion-clean-architecture/.[Accessed29Junio2016].

[52]D.Gómez,Arquitecturadeaplicaciones: S.O.L.I.D&CleanArchitecture,Madrid,2016.

[53]E. J. Rey, "Aplicando Clean Architecture en Android," 28 Enero 2016. [Online].Available: https://erikcaffrey.github.io/2016/01/28/clean-architecture/.[Accessed29Junio2016].

[54]Nordic Semiconductor, "Nordic Semiconductor," [Online]. Available:https://github.com/NordicSemiconductor/Android-nRF-UART. [Accessed 5 Julio2016].

[55]Kiuwan,"Kiuwan,"[Online].Available:https://www.kiuwan.com.[56]M.Abraham,"Android1.0toAndroidM:ThestoryofAndroidEvolution,"27Julio

2015. [Online]. Available: http://cubettech.com/blog/android-1-0-to-android-m-the-story-of-mobile-evolution/.[Accessed13Junio2016].

[57]Statista,"Globalmarketshareheldbytheleadingsmartphoneoperatingsystemsin sales toendusers from1stquarter2009 to1stquarter2016,"Marzo2016.[Online]. Available: http://www.statista.com/statistics/266136/global-market-share-held-by-smartphone-operating-systems/.[Accessed10Junio2016].

[58]Statista,"DevelopersMostPopularMobilePlatforms,"Noviembre2015.[Online].Available: http://www.statista.com/statistics/515099/developers-most-popular-mobile-platforms/.[Accessed10Junio2016].

[59]Android, "Dashboards," 6 Junio 2016. [Online]. Available:https://developer.android.com/about/dashboards/index.html. [Accessed 10Junio2016].

[60]S.Hoeprich,"Tempo-SensingFeedbackSystemforStudentConductors,"14Marzo2016. [Online]. Available: http://muse.union.edu/2016capstone-hoeprics/files/2016/03/Final-Design-Report-Double-Spaced-2.pdf.

[61]Arduino, "Arduino Leonardo," 1 Enero 2016. [Online]. Available:https://www.arduino.cc/en/Main/ArduinoBoardLeonardo. [Accessed 16 Junio2016].

[62]Google, "Aplicaciones de Google para Android," [Online]. Available:https://www.google.es/mobile/android/.[Accessed16Junio2016].

[63]Arduino, "If This Then Cat," [Online]. Available:https://create.arduino.cc/projecthub/Arduino_Genuino/if-this-then-cat-3a64b6.[Accessed19Junio2016].

[64]J.Hruska, "NewBluetooth5 specwill double speedsandquadruple range,"16Junio 2016. [Online]. Available:http://www.extremetech.com/electronics/230369-new-bluetooth-5-spec-will-double-speeds-and-quadruple-range.[Accessed23Junio2016].