Upload
enrique-acedo-dorado
View
72
Download
5
Embed Size (px)
Citation preview
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
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].