Sei sulla pagina 1di 451

byYako1976 identi.

io

Descargado en: eybooks.com


Director Editorial
Marcelo Grillo Giannetto Datos catalográficos
mgrillo@alfaomega.com.mx Oliva Ramos, Rubén / Oliva Ramos, Juan Tomás
Arduino y Android. Proyectos wearable para smart
Jefe de Ediciones
watches, smart TV y dispositivos móviles
Francisco Javier Rodríguez Cruz
jrodriguez@alfaomega.com.mx Primera Edición
Alfaomega Grupo Editor, S.A. de C.V. México
Fotografías de la portada: Dreamstime
ISBN: 978-607-538-403-0
Formato: 17 x 23 cm Páginas 584
Arduino y Android. Proyectos wearable para smart
watches, smart TV y dispositivos móviles
Rubén Oliva Ramos y Juan Tomás Oliva Ramos
Derechos reservados © Alfaomega Grupo Editor, S.A. de C.V., México

Primera edición: Alfaomega Grupo Editor, México, mayo 2019

© 2019 Alfaomega Grupo Editor, S.A. de C.V. México


Dr. Isidoro Olvera (Eje 2 sur) No. 74, Col. Doctores, C.P. 06720, Cuauhtémoc, Ciudad de México

Miembro de la Cámara Nacional de la Industria Editorial Mexicana


Registro No. 2317

Pág. Web: http://www.alfaomega.com.mx


E-mail: atencionalcliente@alfaomega.com.mx

ISBN: 978-60-538-403-0

Derechos reservados:
Esta obra es propiedad intelectual de su autor y los derechos de publicación en lengua española han sido legalmente
transferidos al editor. Prohibida su reproducción parcial o total por cualquier medio sin permiso por escrito del propie-
tario de los derechos del copyright.

Nota importante:
La información contenida en esta obra tiene un fin exclusivamente didáctico y, por lo tanto, no está previsto su aprove-
chamiento profesional o industrial. Las indicaciones técnicas y programas incluidos han sido elaborados con gran cui-
dado por el autor y reproducidos bajo estrictas normas de control. ALFAOMEGA GRUPO EDITOR, S.A. de C.V. no será
jurídicamente responsable por: errores u omisiones; daños y perjuicios que se pudieran atribuir al uso de la información
comprendida en este libro, ni por la utilización indebida que pudiera dársele. Los nombres comerciales que aparecen en
este libro son marcas registradas de sus propietarios y se mencionan únicamente con fines didácticos, por lo que AL-
FAOMEGA GRUPO EDITOR, S.A. de C.V. no asume ninguna responsabilidad por el uso que se dé a esta información, ya
que no infringe ningún derecho de registro de marca. Los datos de los ejemplos y pantallas son ficticios, a no ser que
se especifique lo contrario. d e s c a r g a do en: e y b o oks. c o m

Edición autorizada para venta en todo el mundo.


Impreso en México. Printed in Mexico.

Empresas del grupo:

México: Alfaomega Grupo Editor, S.A. de C.V. – Dr. Isidoro Olvera (Eje 2 sur) No. 74, Col. Doctores, C.P. 06720,
Del. Cuauhtémoc, Cd. de Méx.
Tel.: (52-55) 5575-5022 – Fax: (52-55) 5575-2420 / 2490. Sin costo: 01-800-020-4396
E-mail: atencionalcliente@alfaomega.com.mx
Colombia: Alfaomega Colombiana S.A. – Calle 62 No. 20-46, Barrio San Luis, Bogotá, Colombia
Tels.: (57-1) 746 0102 / 210 0415 – E-mail: cliente@alfaomega.com.co
Chile: Alfaomega Grupo Editor, S.A. – Av. Providencia 1443. Oficina 24, Santiago, Chile
Tel.: (56-2) 2235-4248 – Fax: (56-2) 2235-5786 – E-mail: agechile@alfaomega.cl
Argentina: Alfaomega Grupo Editor Argentino S.A. - Av. Córdoba 1215 Piso 10 - C.P. 1055
Ciudad Autónoma de Buenos Aires, Argentina
Tel./Fax: (54-11) 4811-0887 – E-mail: ventas@alfaomegaeditor.com.ar
www.alfaomegaeditor.com.ar
Acerca de los autores

Mtro. Rubén Oliva Ramos

Es ingeniero en sistemas computacionales por el Ins-


tituto Tecnológico de León y maestro en ingeniería
de sistemas electrónicos y computacionales por la
Universidad de La Salle Bajío en León Guanajuato. Es
autor de varios libros relacionados con la programa-
ción Arduino y JavaScript. Es especialista en desarro-
llo de software para Arduino y Raspberry Pi con .NET
y plataformas de uso libre, desarrollo de aplicacio-
nes para control y monitoreo de procesos a distan-
cia, aplicaciones móviles para monitoreo y control,
Sistemas SCADA, tecnologías Android, iOS, Windows
Phone, sitios y servicios web para plataformas de de-
sarrollo de Arduino y Raspberry Pi, con diferentes
frameworks y aplicaciones para la nube (cloud ser-
vices). Es docente de bachillerato, licenciatura y pos-
grado en las áreas relacionadas.

Mtro. Juan Tomás Oliva Ramos

Es ingeniero ambiental por la Universidad de Gua-


najuato y maestro en administración y en ingeniería
administrativa y calidad por la Universidad de La Sa-
lle Bajío. Es especialista en el diseño de laboratorios
de emprendimiento para el sector educativo, arqui-
tectura de proyectos para visualizar el futuro de las
organizaciones y crear mecanismos de protección de
invenciones; trabaja en el desarrollo de tecnologías
vigentes con un potencial para mejorar procesos y
productos y de aplicaciones estadísticas para el aná-
lisis de datos.
Dedicatoria
A Dios por darme la sabiduría y el ejemplo para seguir y cumplir mis sueños, sin Él no los
podría llevar a cabo; gracias por darme todo lo que tengo y lo que soy. A mi esposa Mayte
y a mis hijos Rubén y Darío, gracias por sus vidas, por su comprensión y amor ¡los amo! A
mis papás, Rubén y Rosalía, por su gran ejemplo y dedicación. A mis hermanos, Tomás y
Rosalía, gracias por su comprensión y apoyo.

Rubén Oliva Ramos

A Dios, por brindarme sabiduría y humildad para colaborar en el desarrollo de esta obra.
A Rubén, mi hermano, por invitarme a emprender esta aventura. A mi esposa, Brenda Lilia-
na, por su compañía, respaldo y amor al integrarme a este proyecto. A mis hijas, María Re-
gina, María Renata y a mi hijo Ángel Tadeo, que con cada sonrisa y espontaneidad detonan
mi felicidad y compromiso por buscar cada día lo mejor para ellos ¡Los amo! A Rosalía, mi
hermana, por su valioso apoyo y sugerencias en cada proyecto. A mis padres, Rubén y Ro-
salía; por cada cosa que han hecho para que sea la persona que soy.

Juan Tomás Oliva Ramos


Mensaje del editor
Una de las convicciones fundamentales de Alfaomega es que los conocimientos son esen-
ciales en el desempeño profesional, ya que sin ellos es imposible adquirir las habilidades
para competir laboralmente. El avance de la ciencia y de la técnica hace necesario actua-
lizar continuamente esos conocimientos, y de acuerdo con esto Alfaomega publica obras
-
pectiva más destacados.

Consciente del alto nivel competitivo que debe de adquirir el estudiante durante su for-
mación profesional, Alfaomega aporta un fondo editorial que se destaca por sus lineamien-
tos pedagógicos que coadyuvan a desarrollar las competencias requeridas en cada profe-


-
tenido de esta obra, cada capítulo inicia con el planteamiento de los objetivos del mismo
y con una introducción en la que se plantean los antecedentes y una descripción de la es-
tructura lógica de los temas expuestos, asimismo, a lo largo de la exposición se presentan
ejemplos desarrollados con todo detalle y cada capítulo concluye con un resumen y una se-
rie de ejercicios propuestos.

Los libros de Alfaomega están diseñados para ser utilizados en los procesos de enseñan-
za aprendizaje, y pueden ser usados como textos en diversos cursos o como apoyo para re-
forzar el desarrollo profesional, de esta forma Alfaomega espera contribuir a la formación
-
pañera profesional en este viaje de por vida por el mundo del conocimiento.
Contenido

Introducción ........................................................................................................... X

Capítulo 1
Introducción a Android Studio y preparación del workspace .................................... 1
Introducción ............................................................................................................. 2
1.2 Requerimientos de software ............................................................................ 2
1.3 Creación del primer proyecto en Android Studio .............................................. 9
 ...................................... 12
 ........................................................................... 14
1.6 Cómo aprender a utilizar la librería aREST ..................................................... 14
Resumen ................................................................................................................ 21

Capítulo 2
Introducción a los dispositivos wearable ................................................................ 23
2.1 Introducción .................................................................................................. 24
2.2 Introducción a los dispositivos wearable Android ......................................... 27
Resumen ................................................................................................................ 35

Capítulo 3
Conectividad con Bluetooth .................................................................................... 37
3.1 Introducción .................................................................................................. 38
3.2 Comunicación Android-Arduino (maestro-esclavo) ........................................ 51
 ................................................................... 52
Resumen ................................................................................................................ 94

Capítulo 4
 ............................................................................................. 95
  ................. 96
4.2 Desarrollo de aplicación en Android Studio .................................................. 104
4.3 Cómo mejorar la aplicación .......................................................................... 114
 ..................................... 115
Resumen .............................................................................................................. 127

Capítulo 5
Control mediante Ethernet ................................................................................... 129
5.1 Introducción a los servicios web Restful ....................................................... 130
5.2 App Inventor ................................................................................................ 135
5.3 Proyectos de aplicaciones entre APP Inventor y Arduino .............................. 138
Resumen .............................................................................................................. 159

· Rubén & Juan Tomás Oliva Ramos · VII


Contenido

Capítulo 6
Aplicaciones de control para smartwatches .......................................................... 161
6.1 Android wear ............................................................................................... 162
  ...................................................... 164
  ............................. 167
Resumen .............................................................................................................. 186

Capítulo 7
Aplicaciones de control para Smart Tv .................................................................. 187
7.1 Creación de interfaces para Android TV ....................................................... 188
7.2 Introducción al led infrarrojo IR ................................................................... 190
7.3 Control remoto de dispositivos infrarrojos IR ............................................... 206
Resumen .............................................................................................................. 224

Capítulo 8
Estadística para adquirir datos de un sensor de pulso cardíaco ............................ 225
8.1 Introducción ................................................................................................ 226
8.2 El análisis estadístico ................................................................................... 226
8.3 Uso de estadística descriptiva para lecturas de sensores
de pulso cardíaco ......................................................................................... 241
8.4 Control estadístico de procesos en lecturas censadas por el pulso
de ritmo cardíaco ......................................................................................... 260
Resumen .............................................................................................................. 266

Capítulo 9
Integración de aplicaciones: Proyectos wearable .................................................. 267
9.1 Un vistazo al Internet de las cosas ................................................................ 268
9.2 Uso del Internet de las Cosas en ciudades inteligentes e industria
automotriz ................................................................................................... 274
9.3 El Internet de las Cosas y el rol del Bluetooth Low Energy ............................ 276
9.4 El Futuro del Internet de las Cosas ............................................................... 277
9.5 Desarrollo de proyectos wearable ................................................................ 280
9.6 Podómetro o contador de pasos ................................................................... 344
Resumen .............................................................................................................. 375

Capítulo 10
Integración con dispositivos industriales .............................................................. 377
10.1 Introducción ................................................................................................ 378
10.2 Protocolo RS485 y módulos ......................................................................... 378
10.3 Conexión de un termopar a Arduino ............................................................. 389
10.4 Modbus RTU ................................................................................................ 400
10.5 Aplicaciones Android para control y monitoreo de dispositivos
industriales .................................................................................................. 426
Resumen .............................................................................................................. 439

VIII Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Contenido

Capítulo 11 (Contenido web)


Proyectos de aplicación Android Primera parte .................................................... 441
11.1 Introducción ................................................................................................ 442
Resumen .............................................................................................................. 457

Capítulo 12 (Contenido web)


Proyectos de aplicación Android Segunda parte .................................................... 459
12.1 Introducción ................................................................................................ 460
12.2 Particle Core ................................................................................................ 460
Resumen .............................................................................................................. 510

Capítulo 13 (Contenido web)


Proyectos de aplicación Android Tercera parte ..................................................... 511
13.1 Futuras aplicaciones .................................................................................... 524
13.2 Ir hacia adelante: El futuro del Internet de las Cosas
y de Bluetooth Low Energy .......................................................................... 564
13.3 El futuro de BLE (Bluetooth Low Energy) ..................................................... 568
Resumen .............................................................................................................. 569

Índice analítico ................................................................................................... 570

· Rubén & Juan Tomás Oliva Ramos · IX


Introducción
En el mundo actual el ser humano tiene la necesidad de utilizar dispositivos electrónicos que
le hagan la vida más fácil. La tecnología informática ahora incide en cada detalle de la vida co-

en una caminata o en qué posición nos encontramos al estar en el automóvil; los requerimien-
tos solicitados son vastos, máxime si se aprovecha su portabilidad pues muchos dispositivos
se pueden poner en la ropa y monitorear desde un móvil. En esta propuesta están basadas las
aplicaciones que se desarrollan en la presente obra por medio de la placa Arduino.

Capítulo 1: Es una introducción a Android Studio y a la preparación del workspace; el lector


pondrá en marcha y preparará el entorno de desarrollo IDE de Android Studio para trabajar
proyectos que se presentarán en los siguientes capítulos. Cubrirá todos los requerimientos pa-
ra realizar la integración entre Arduino y Android Studio y con ello el desarrollo de aplicacio-
nes; además, podrá crear y simular dispositivos virtuales en el entorno de Android Studio con
la herramienta del AVD Manager dentro del mismo IDE que después podrá utilizar.

Capítulo 2: Se trata de una introducción a los dispositivos wearable. En este capítulo el lector
conocerá los conceptos clave y las características de la plataforma de dichos dispositivos, los
antecedentes y aplicaciones en los entornos tecnológicos, además de la relación que existe en-
tre dispositivos actuales, entorno y los Android Wear; las tarjetas de desarrollo y dispositivos
compatibles con Arduino que se pueden implementar en dispositivos wearable respecto de
proyectos de aplicación y desarrollo tecnológico.

Capítulo 3: Trata de lo relacionado con la conectividad de bluetooth. En este capítulo el lector


conocerá los aspectos fundamentales de la tecnología bluetooth para desarrollar aplicaciones
de control y monitoreo entre la plataforma de Arduino y Android; implementará los princi-
pios de comunicación entre varios dispositivos para desarrollar proyectos propios.

Capítulo 4: 
-
vo es conocer los aspectos fundamentales en el desarrollo de proyectos de aplicación mediante
las tarjetas de Arduino CC3000 y Arduino YUN, además de cubrir las partes esenciales y reque-


Capítulo 5: Trata sobre el control mediante Ethernet. En este capítulo se utilizará el shield
ethernet para interactuar desde una aplicación Android; se desarrollarán aplicaciones para
monitorear y controlar la tarjeta Arduino desde un teléfono móvil a través de comunicación de
red Ethernet; se explicarán los aspectos fundamentales de los servicios web para interactuar
entre las plataformas Arduino y Android. El lector realizará varios proyectos con la integración
de ambas tecnologías.

Capítulo 6: Es acerca de aplicaciones de control para smartwatches. En este capítulo se crea-


-

X Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Introducción

rá un dispositivo virtual simulado en el AVD Manager de Android Studio. Se integrarán ambas


aplicaciones para la comunicación entre la tarjeta Arduino, un dispositivo móvil y un smar-
twatch para tener como base los fundamentos para el desarrollo de proyectos por medio de
estas tecnologías.

Capítulo 7: Es sobre aplicaciones de control para smart TV. En este capítulo el lector conoce-
rá los aspectos fundamentales y la arquitectura de una aplicación para smart TV y Android TV,
con el objetivo de desarrollar aplicaciones de control y monitoreo para televisiones con An-
droid. Se realizará un ejemplo de aplicación en el ambiente de Android Studio, además de algu-
nos proyectos con dispositivos electrónicos y Arduino para lograr el control y automatización
de una televisión e integrarla a un esquema de conectividad; para ello, se usará como medio de
control una tarjeta Arduino y una aplicación Android desde un smartphone.

Capítulo 8: Se describe la estadística para adquirir datos de un sensor de pulso cardíaco. En


este capítulo el lector integrará las herramientas estadísticas para el análisis y registro en la
adquisición de datos de un sensor de pulso cardíaco; ello con el objetivo de obtener lecturas
tomadas y guardadas en un microSD conectado a la tarjeta Arduino. Asimismo, se analizará y
aplicará la estadística para el correcto estudio de la información para uso futuro en aplicacio-
nes para medicina y dispositivos wearable, a través de la integración de la plataforma Arduino
a efecto de una correcta toma de decisiones.

Capítulo 9: Es sobre la integración de aplicaciones: proyectos wearable. En este capítulo el


lector aplicará y desarrollará proyectos para dispositivos wearable con el uso de herramien-
tas estudiadas en los capítulos anteriores. Asimismo, se integrarán las plataformas relativas a
-
ble: desde el análisis de la idea, el desarrollo, hasta la integración. Esto te permitirá impulsar la
creatividad para nuevos productos de esta índole.

Capítulo 10: Es acerca de la integración con dispositivos industriales. En este capítulo se de-
sarrollarán las habilidades para utilizar y crear aplicaciones en la plataforma de Android para
monitoreo y control de equipos industriales, tales como controladores lógicos programables
(PLC) y la integración de Arduino en el ámbito industrial; lo cual a su vez permitirá emplearlo
en redes y protocolos industriales. Asimismo, esta herramienta añadirá convergencia transpa-
rente a equipos de comunicación, como variadores de velocidad, actuadores y sensores, con lo
-
rará y realizará el software requerido en esta placa a través del uso de shield Ethernet y módu-
-
tegrar una gran cantidad de aplicaciones con las herramientas vistas en este capítulo.

Capítulo 11 (en la web): Contiene proyectos de aplicación Android. En este capítulo se pon-
drá en práctica lo aprendido en los anteriores, además de conocer qué tipo de aplicaciones An-
droid se pueden realizar con las plataformas actuales de Android Studio y Arduino. Se desarro-

· Rubén & Juan Tomás Oliva Ramos · XI


Introducción

llarán aplicaciones para control de sensores del teléfono Android y su integración con Arduino;
además, en cada proyecto se podrá interactuar con los elementos del celular, por ejemplo, el
uso del dispositivo de comunicación NFC y el control por voz.

Capítulo 12 (en la web): Contiene la segunda parte de los proyectos de aplicación Android.
En este capítulo se abordará una serie de trabajos por medio de la plataforma Android con
aplicaciones hacia el desarrollo de dispositivos de tecnología aplicada, integrando Arduino y
Android.

Capítulo 13 (en la web): Contiene la tercera parte de proyectos de aplicación Android. En este
capítulo se practicará la integración de las herramientas Android con Arduino y se menciona-
rán algunas tecnologías que marcarán el futuro de las aplicaciones móviles con el entorno de
desarrollo hacia diferentes tipos.

Material web de libre acceso


Para tener acceso al material de apoyo en la web del libro Arduino y Android. Proyectos
wearable para smart watches, smart tv y dispositivos móviles, siga los siguientes pasos:

1. Ir a la página: http://libroweb.alfaomega.com.mx

2. Ir a la sección Catálogo y seleccionar la imagen de la portada del libro, al dar doble clic sobre
ella, tendrá acceso al material descargable.

Nota: Se recomienda respaldar los archivos descargados de la página web en un soporte .ísico.

XII Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Capítulo

ANDROID STUDIO
1
Introducción a

y preparación del workspace

Contenido Objetivo
1.1 Introducción En este capítulo el lector pondrá en marcha
1.2 Requerimientos de software y preparará el entorno de desarrollo IDE de
Android Studio para la elaboración de los
1.3 Creación del primer proyectos planteados, además de cubrir
proyecto en Android Studio
los requerimientos necesarios para reali-
1.4 Instalación de la app en el zar la integración entre Arduino y Android
dispositivo físico Android Studio y con ello desarrollar aplicaciones.
1.5 Configuración del hardware Además, podrá crear y simular dispositivos
virtuales en el entorno de Android Studio,
1.6 Cómo aprender a utilizar la
con la herramienta del AVD Manager dentro
librería aREST
del mismo IDE que posteriormente se po-
Resumen drá utilizar.
Capítulo 1 · Introducción a Android Studio y preparación del workspace


Este primer capítulo establecerá los fundamentos de Arduino y desarrollo de Android para
contar con los elementos básicos en el manejo de tutoriales avanzados, mostrados en el resto
de la obra.

Se construirá un proyecto simple con un módulo de relé (un interruptor que se puede ma-
nejar con Arduino) y un sensor de temperatura y humedad. También se verán los fundamentos
del IDE (Entorno de Desarrollo Integrado) de Arduino y los comandos de aREST. Se utilizará
esta biblioteca en varios capítulos del libro para facilitar el control de la placa Arduino desde
un dispositivo Android.

Además, se probarán los comandos de aREST con dicha tarjeta conectada a la computadora
a través del puerto USB. Para lograr lo anterior, se deberá asegurar que el equipo y el disposi-
tivo Android estén listos para el proceso. Se realizará una sencilla aplicación de Android que
muestra el famoso programa Hello World.

Android Studio es un entorno de desarrollo integrado basado en IntelliJ(IDE), totalmente


compatible con el equipo de desarrollo de Android, que proporciona las herramientas y recur-
sos necesarios para asegurar un sistema funcional y estético.

Android Studio está en versión beta, pero el software se actualiza de forma frecuente y regu-
lar, hecho que lo convierte en la opción natural para nuestros proyectos de Android.


La siguiente lista de comprobación le guiará en lo esencial para el diseño y desarrollo de esta
aplicación, así como para cualquier otro proyecto:

 Java Developer Kit Version 6 (o una versión posterior)


 Android Studio
 Android Software Development Kit
 Android Device with Bluetooth SMART Technology

1.2.1 Instalación de Java Developer kit


Android Studio no funcionará sin Java Developer Kit (JDK); por lo tanto, es necesario saber
cuál versión de Java se ha instalado (en este caso en particular, Java Runtime Environment no


Verificar la versión en Windows

Abrir el prompt de MS-DOS y teclear el siguiente comando:

Java –versión

2 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.2 · Requerimientos de software

Esta es la pantalla donde aparece la versión:

byYako1976 identi.io
Pantalla de versión Windows

Instalación de Java
Si no tiene instalado Java, o si su versión está por debajo de 6.0, instale Java JDK con un clic en
el siguiente enlace personalizado y abreviado, elija la versión que se aplica para su sistema.

http://j.mp/javadevkit-download

Enseguida se abrirá la siguiente ventana:

Ventana de instalación Java

· Rubén & Juan Tomás Oliva Ramos · 3


Capítulo 1 · Introducción a Android Studio y preparación del workspace

La principal recomendación para estos proyectos es que instale una versión de JDK 6.0 o su-
perior.

En el caso de Windows, para ver si su computadora ejecuta una versión de 32-bit o 64-bit,
debe hacer lo siguiente:

1. Hacer clic en el botón Inicio


2. 
si es de 32 o 64 bits, debajo de sistema.

1.2.2 Instalación de Android Studio


Cómo instalar el IDE de Android Studio en Windows:

1. Ir al sitio de desarrolladores de Android en http://developer.android.com


Se mostrarán las siguientes opciones:

Sitio de desarrolladores Android

2. Dar clic en Android Studio. Se dirigirá a la página de destino donde se detectará automá-
ticamente la versión del sistema operativo, como se muestra en la siguiente captura de
pantalla:

4 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.2 · Requerimientos de software

Direccionamiento a la página de destino

3. Acepte los términos y condiciones del acuerdo de uso de software:

Acuerdo de uso

Windows

de Android Studio para completar el proceso de instalación:

· Rubén & Juan Tomás Oliva Ramos · 5


Capítulo 1 · Introducción a Android Studio y preparación del workspace

Asistente de conguración



enormemente con la introducción de Android Studio, ya que los últimos SDK vienen preinstala-
-
guientes, sería muy útil comprender cómo se puede instalar (o incluso desinstalar) SDK den-
tro de Android Studio.

Hay varias maneras de acceder al SDK Manager. El más directo es a través de la siguiente ba-
rra principal de herramientas de Android Studio:

Barra de herramientas Android Studio

6 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.2 · Requerimientos de software

Otra forma es a través del menú de lanzamiento, donde se mostrarán las siguientes opciones:

Menú de lanzamiento de Android Studio


muestra abajo. A continuación debe hacer clic en SDK Manager:

Ventana donde se muestra SDK Manager

· Rubén & Juan Tomás Oliva Ramos · 7


Capítulo 1 · Introducción a Android Studio y preparación del workspace

La pantalla anterior muestra cómo es SDK Manager. Para instalar cualquier paquete, se nece-
sita comprobar la marca del mismo en particular, para esto se deberá hacer clic en Instalar pa-


Aceptación de licencias


A continuación, se enlistan los tres pasos que se deben ejecutar para habilitar el dispositivo An-
-
rato, y es importante descargar primero los drivers de comunicación para que el sistema ope-
rativo Windows reconozca el dispositivo Android:

1. Habilitar las opciones de desarrollador en el dispositivo Android


2. Habilitar USB Debugging
3. La computadora debe tener la depuración USB segura (dispositivos con Android 4.4.2 o
una versión posterior).

Habilitar las opciones de desarrollador en el dispositivo Android


Dependiendo del dispositivo esta opción puede variar ligeramente, pero desde Android 4.2 y
superiores, la pantalla Opciones de desarrollador se oculta de forma predeterminada. Para ha-

Las opciones de desarrollador se activarán al volver a la pantalla anterior.

8 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.3 · Creación del primer proyecto en Android Studio

Habilitar USB Debugging


La depuración USB permite al IDE comunicarse con el dispositivo a través del puerto USB. Esto
se puede activar después de habilitar las opciones de desarrollador y se realiza comprobando
-


La computadora debe tener la depuración USB segura (dispositivos con


Android 4.4.2 o una versión posterior)

Se debe aceptar la tecla RSA en el teléfono o tableta antes de transmitir cualquier dato en el
dispositivo a través de Android Debug Bridge (ADB). Esto se logra conectando el dispositivo a

debe seleccionar Permitir siempre desde este equipo, luego hacer clic en Aceptar.


-
-


Creación del nuevo proyecto

· Rubén & Juan Tomás Oliva Ramos · 9


Capítulo 1 · Introducción a Android Studio y preparación del workspace

Primero, es preciso establecer la versión de la API:

Establecimiento de la versión API



Pantalla de opción Blank Activity

10 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.3 · Creación del primer proyecto en Android Studio

Luego, escribir el nombre de la actividad y del layout:

Pantalla para escribir nombre de actividad

Una vez realizados los pasos anteriores, aparecerá la bienvenida al espacio de trabajo, lo que
da una buena visión general del árbol del proyecto, editor de código principal, y el dispositi-
vo que muestra una vista previa de la interfaz de usuario (UI), como se observa en la siguiente
captura de pantalla:

Pantalla de bienvenida al espacio de trabajo

· Rubén & Juan Tomás Oliva Ramos · 11


Capítulo 1 · Introducción a Android Studio y preparación del workspace


-
co Android.

fl
          
-

principal, como se muestra en la siguiente barra:

Barra de herramientas principal

Posteriormente, se debe dar un clic en Android Application y activar la opción USB device, lue-
go presionar el botón OK:

Pantalla Android Application


aplicación sobre la que se ha trabajado y se presiona el botón Play (triángulo verde), como se
muestra en la siguiente captura de pantalla:

12 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.4 · Instalación de la app en el dispositivo físico Android

Botón Play


Sin embargo, en este momento no hay emuladores virtuales que soporten Bluetooth, los cua-
les se requieren para la serie de proyectos mencionados en este libro. Así que sólo se realizará
-


Elección de dispositivo físico

-
vo Android:

Aparición de leyenda

· Rubén & Juan Tomás Oliva Ramos · 13


Capítulo 1 · Introducción a Android Studio y preparación del workspace



conectado a la placa Arduino.

Conexiones del sensor



Conexiones nales

fl
Ahora que el hardware ya se encuentra montado, se verán los fundamentos del Ambiente de
-



14 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.6 · Cómo aprender a utilizar la librería aREST

Sin esta biblioteca, se tendrá que reescribir el mismo código varias veces para todos los ca-
pítulos del libro; para encontrar una documentación completa sobre la misma, se puede visitar
el sitio https://github.com/marcoschwartz/aREST.

1.6.1 Código de prueba



la comunicación serial desde el monitor. En los siguientes capítulos se utilizarán los mismos
-
liarizarse con dichos comandos.

Sketch de la librería aREST

Sketch del ejemplo demo de la librería aREST


// Libraries
#include <aREST.h>
#include “DHT.h”

// DHT sensor
#dene DHTPIN 7
#dene DHTTYPE DHT11

· Rubén & Juan Tomás Oliva Ramos · 15


Capítulo 1 · Introducción a Android Studio y preparación del workspace

// CreateaREST instance
aREST rest = aREST( );

// DHT instance
DHT dht(DHTPIN, DHTTYPE);

// Variables to be exposed to the API


int temperature;
int humidity;

void setup(void)
{
// Start Serial
Serial.begin(115200);

// Expose variables to REST API


rest.variable(“temperature”,&temperature);
rest.variable(“humidity”,&humidity);

// Give name and ID to device


rest.set_id(“001”);
rest.set_name(“arduino_project”);

// Start temperature sensor


dht.begin( );

}
voidloop( ) {

// Measure from DHT


oat h = dht.readHumidity( );
oat t = dht.readTemperature( );

temperature = (int)t;
humidity = (int)h;

// Handle REST calls


rest.handle(Serial);
}

-
rial y cambiar la velocidad de transferencia a 115200, como se muestra a continuación:

16 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.6 · Cómo aprender a utilizar la librería aREST

Pantalla de monitor serial

El siguiente paso es enviar los comandos de comunicación desde la pantalla del monitor serial.

Este comando muestra los datos del dispositivo y que se encuentra conectado:

/id

Pantalla que muestra datos del dispositivo

· Rubén & Juan Tomás Oliva Ramos · 17


Capítulo 1 · Introducción a Android Studio y preparación del workspace

Este comando muestra el valor de la temperatura:

/temperature

Pantalla donde se muestra el valor de la temperatura

Este comando muestra el valor de la humedad:

/humidity

Pantalla donde se muestra el valor de la humedad

18 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
1.6 · Cómo aprender a utilizar la librería aREST

Para controlar el módulo revelador conectado a la salida digital 8 del Arduino, es necesario




/mode/8/o

Conguración de salida

Para activar la salida 8 del módulo relevador:

/digital/8/1

Activación de salida 8

· Rubén & Juan Tomás Oliva Ramos · 19


Capítulo 1 · Introducción a Android Studio y preparación del workspace

Para desactivar la salida 8 del módulo relevador:

/digital/8/0

Desactivación de salida 8

Estos fueron los fundamentos de la biblioteca aREST que se usarán en toda la obra.

Se debe tomar en cuenta que por ahora se consideran estos comandos a través de comuni-
caciones en serie pero, más adelante, los mismos se utilizarán a través de Bluetooth y luego a


Ahora que se sabe cómo funciona la biblioteca aREST y se ha creado el primer proyecto An-
droid; cabe resaltar que en este capítulo introductorio no se conectaron ambos, pues ello se


20 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
· Resumen

RESUMEN
Se construyó un proyecto que comprende: una placa Arduino, un módulo de relé, un sensor de
temperatura y un sensor de humedad. Se conectaron estos componentes para controlar el relé
como una salida y leer los datos del sensor. También se estudiaron los fundamentos de la bi-
blioteca aREST, que se utilizarán para controlar la placa Arduino desde un dispositivo Android.

Por el lado de Android, se preparó un dispositivo IDE y Android para el desarrollo, que ser-
virá para los próximos proyectos que se han preparado en este libro y que ayudarán a tener
una experiencia satisfactoria.

También se pudo elaborar una primera aplicación y ponerla en funcionamiento en el dispo-


sitivo Android. En esta etapa, ya se pueden practicar los pasos tomados en este capítulo para
familiarizarse con el IDE de Arduino, los comandos de la biblioteca aREST y el entorno de de-
sarrollo, que serán de gran utilidad para más adelante.

· Rubén & Juan Tomás Oliva Ramos · 21


Capítulo

2
Introducción a los
DISPOSITIVOS
byYako1976 identi.io
wearable

Contenido Objetivo
2.1 Introducción En este capítulo el lector conocerá los con-
2.2 Introducción a los ceptos clave y las características de la pla-
dispositivos wearable taforma de los dispositivos wearable, los
Android antecedentes y su relación con los entornos
tecnológicos respecto de los dispositivos
Resumen
actuales y los Android Wear, las tarjetas de
desarrollo y aquellos que son compatibles
con Arduino para implementar en los dispo-
sitivos wearable cuando se hacen proyectos
de aplicación y desarrollo tecnológico.
Capítulo 2 · Introducción a los dispositivos wearable


En este capítulo se analizará la evolución de la computación portátil y su relación con otros ele-
mentos, como las computadoras de escritorio, móviles y ubicuas. Además, se abordarán algu-
nos aspectos de la nueva era de los dispositivos wearable y sus aplicaciones en ambientes para
Android y, por último, se describirán las plataformas electrónicas wearable para la construc-
ción de proyectos de este tipo.


La computación portátil, aunque ampliamente considerada como la última innovación tecno-
lógica, había existido incluso durante los días del ábaco, una herramienta tipo calculadora que
se usó durante siglos por comerciantes. Según el sitio Chinaculture.org se cree que un ábaco
incrustado en un anillo fue utilizado como calculadora durante la dinastía Qing.

Un tipo relativamente reciente de dispositivos de computación portátiles es el Casio Data-


bank: se trata de una serie de relojes de pulsera electrónicos fabricados por Casio, en sus ini-
cios tenían funciones como: calculadora, temporizador, reloj mundial, administración de con-
tactos y también un mando a distancia para TV y VCR.

Fue muy popular y se consideró una maravilla tecnológica, en comparación con los relojes
digitales manuales o sencillos disponibles en ese momento. No sólo se utilizó para ver la hora
-
cuperar información del contacto almacenada en la memoria.

Reloj Casio

Los innovadores siempre han encontrado fascinación en nuevos accesorios, por ejemplo, en
la chaqueta Burton Amp, primer dispositivo para vestir que controla iPods, o en el último ar-
tefacto llamado Whistle utilizado por los propietarios de mascotas para el seguimiento de la
ubicación y de su actividad. Los dispositivos wearable son ya algo común y son utilizados en
diversos lugares.

24 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
2.1 · Introducción


Como antecedente, Gordon Moore (1929), cofundador de Intel, predijo hace cincuenta años que
el número de transistores montado en circuitos integrados más pequeños se duplicaría por un
lapso aproximado de cada dos años. Ese era el punto de partida para el crecimiento explosivo
de las potencias informáticas. El tamaño de los componentes electrónicos se redujo lentamente
y el poder de procesamiento de los dispositivos se hizo más fuerte con el paso del tiempo.

Los ordenadores mainframe, utilizados durante las décadas de los sesenta y setenta del siglo
pasado para dirigir empresas y corporaciones, ocupaban el tamaño de una sala de estar. Pos-
teriormente, se redujeron a rangos medios los servidores y computadoras de escritorio. Los
chips de circuitos integrados, los microprocesadores y las computadoras se hicieron cada vez
más poderosas, el tamaño de los dispositivos de almacenamiento se hizo mucho más pequeño
y el tamaño de la capacidad de almacenamiento aumentó.

Las computadoras de escritorio se transformaron lentamente en portátiles, las cuales están


equipadas con una batería recargable que permite a los usuarios trabajar en cualquier sitio
donde se encuentren. Por su parte, el Personal Digital Assistant (PDA) se utiliza como el dis-
positivo de computación móvil para gestionar contactos y realizar algunas tareas básicas rela-
cionadas con negocios.

Luego llegó la era de los teléfonos inteligentes. Cuando Steve Jobs (1955-2011) introdujo el
iPhone en 2007, otros smartphones ya estaban disponibles en el mercado. Sin embargo, la in-
troducción de iPhones de Apple y el posterior lanzamiento de la plataforma Android de Goo-
gle condujeron a una fuerte y sana competencia en la industria de los teléfonos inteligentes.

Lo que se ve ahora en la tendencia de los dispositivos portátiles es la historia repitiéndose.


En 2014, Google tomó una ventaja en el lanzamiento de la plataforma Android Wear mientras
que Apple anunció su primer reloj portátil en abril de 2015. Las principales empresas como
Samsung, LG, Pebble y Jawbone han saltado a este bandwagon con las variedades del dispositi-
vo wearable ya disponible en el mercado.


La   es un paradigma computacional donde la interacción humana con
una computadora pasa en cualquier lugar y a través de cualquier dispositivo a su alrededor.
Se observa por ejemplo que se está trabajando en una importante propuesta de negocio en

escuela y llevarla a la práctica de natación. Mientras ella practica, usted continúa trabajando en
la oferta de negocio en su teléfono inteligente a partir de donde se quedó, envía el documento
al cliente justo antes de terminar la práctica de la natación.

Mientras conduce a casa, usted recibe un correo electrónico de respuesta del cliente. La compu-
tadora integrada en el automóvil está equipada con una aplicación o sistema como Siri o Alexa,

· Rubén & Juan Tomás Oliva Ramos · 25


Capítulo 2 · Introducción a los dispositivos wearable

que lee el mensaje de correo electrónico recibido en voz alta. Cuando llega a casa, responde a
la propuesta comercial del cliente utilizando su smartwatch e incluso establece una fecha y lu-
gar para la próxima reunión.

Este ejemplo puede sonar un tanto exagerado, pero lo importante es notar que la tecnología
no se hace cargo de las vidas humanas, sino que los humanos hacen lo que necesitan en cual-

de la computación ubicua.

La interacción humana con un dispositivo de computación puede ser omnipresente y sucede


casi de una forma imperceptible.

Tecnologías como cloud computing y protocolos de comunicación inalámbrica y estándares


tales como Bluetooth, energía baja de Bluetooth (BLE), comunicaciones de campo cercanas
(NFC), Radio Frequency Identications (RFID), y ZigBee hacen tales interacciones con dispositi-
vos mediante la formación de la infraestructura necesaria para conectarlos entre sí y construir
los contextos requeridos.

Los desarrolladores, diseñadores y proveedores de servicios deben crear sus aplicaciones y


servicios para que los usuarios puedan interactuar con ellos en cualquier lugar. Cada dispositi-
vo tiene su propio factor de forma y está construido para ciertas necesidades.

Una vez entendido el contexto del usuario y la necesidad de interacción con el dispositivo, es
muy importante crear aplicaciones que proporcionen grandes experiencias al usuario. Por ejem-
plo, puede no ser práctico tener un componente de interfaz de usuario similar al teclado en una
aplicación de reloj debido a su tamaño y factor de forma, mientras que puede ser factible utilizar
la entrada de voz mediante una función de texto a voz proporcionada por las plataformas.


Durante la última década, los teléfonos inteligentes se han convertido en una parte integral
de la vida cotidiana. Son ya una extensión casi natural y nos han hecho llevarlos a todas par-
tes en nuestros bolsillos, bolsos de mano, o monederos, para ayudarnos a cumplir con tareas
cotidianas. Se utilizan para tareas sencillas o relevantes. Las labores que antes se realizaban
mediante computadoras personales o portátiles, ahora se realizan principalmente a través de
dispositivos de bolsillo como smartphones o tabletas.

La razón por la que los teléfonos inteligentes han alcanzado un alto nivel de aceptación y
popularidad se debe a su portabilidad. Son ligeros en relación con las computadoras portáti-
les, más fácil de transportar y los usuarios pueden utilizarlos prácticamente en cualquier sitio.

Aunque los teléfonos móviles y las tabletas pueden satisfacer la mayoría de las necesidades
informáticas, existen situaciones en las que no son convenientes. Por ejemplo, requerir las ma-
nos para realizar otras tareas, o bien que no se está en el medio adecuado para sacar el disposi-

26 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
2.2 · Introducción a los dispositivos wearable Android

tivo del bolsillo donde esté guardado. Es por eso que los dispositivos wearable pueden ayudar
a hacer las tareas con mayor rapidez por medio de interacciones más simples.

El cómputo portátil es la próxima gran frontera en la innovación informática. Tiene todo tipo
de posibilidades y ventajas. Aunque los teléfonos inteligentes se consideran dispositivos muy
personales, no son tan íntimos como otros, tipo smartwatches o rastreadores de actividad de
ejercicio, que tienen la ventaja de estar sobre el cuerpo todo el tiempo y tienen funciones im-
portantes, por ejemplo, medir el ritmo cardíaco, número de pasos dados y la temperatura cor-
poral. Tienen un enorme potencial en el mercado de la salud, donde pueden controlar los sig-
nos cada minuto y guían a los usuarios para llevar un estilo de vida más saludable.

Los dispositivos wearable también se pueden utilizar para la autenticación biométrica. Por
ejemplo el innovador Nymi band, que utiliza un lector del corazón y genera un electrocardio-


¿Qué tal si fuera posible dejar de llevar tarjetas de acceso basadas en RFID para entrar en

necesidad de recordar todo tipo de contraseñas para varios sitios web en línea y, en su lugar, se
podrían usar datos biométricos como el corazón y el reconocimiento del iris, es decir, construir


 

Cuando Google anunció Android Wear en su conferencia de Google I/O en marzo de 2014, los
desarrolladores estaban entusiasmados y adoptaron esta tecnología para ver qué tipos de apli-
caciones podrían crear para comunicarse entre el dispositivo portátil y Android wearable, que
lograra realizar las tareas del día a día de un modo más sencillo.

Los dispositivos wearable de Android brindan un toque personal al permitir a los consumi-
dores interactuar con los mismos en un nivel diferente; tienen como objetivo reducir el uso de
los teléfonos móviles. Esto podría incluir la recepción de un simple mensaje que recuerde re-
coger algo en el camino del trabajo a casa, o recordar una próxima cita. Incluso hay capacidad
para recibir mensajes de la aplicación de redes sociales favoritas, por ejemplo Facebook.

Android Wear es una versión especial del sistema operativo Android básico, que se ha diseña-
do para dispositivos informáticos portátiles tales como smartwatches. Estos dispositivos cuen-
tan con una nueva interfaz de usuario, la cual es resultado del trabajo de Google con sus clientes
para entender cómo usan sus teléfonos hoy y así puedan tener más contacto con su entorno.

Android Wear ofrece a los consumidores una interacción más personal con sus dispositivos.
Estas diminutas supercomputadoras pueden mostrar información y dar sugerencias cuando
se necesite.

· Rubén & Juan Tomás Oliva Ramos · 27


Capítulo 2 · Introducción a los dispositivos wearable


-
nos de velocidad, distancia y duración en tiempo real de su paseo o ciclo. Todo esto posible en
un dispositivo llevado en la muñeca.

Android Wear también permite acceder y controlar otras máquinas desde el dispositivo en
la muñeca mediante una instrucción de voz como OK Google, por ejemplo, para activar una lis-
ta de reproducción de música en el teléfono o proyectar una película directamente en el tele-

dando a la tarea de hacer algunas aplicaciones impresionantes que serán de gran utilidad en
un futuro inmediato.

Un ejemplo de un dispositivo portátil Android se puede ver en la siguiente captura de pantalla:

Dispositivo portátil Android


Android Wear es el puerto de Google del sistema operativo Android diseñado para dispositivos
portables como smartwatches. En el momento de escribir este texto, hay más de una docena
de fabricantes, como: LG, Motorola, Huawei, Asus, Fossil y TAG Heuer, por nombrar algunos,
que fabrican relojes Android Wear.

Relojes Android Wear

28 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
2.2 · Introducción a los dispositivos wearable Android

La principal diferencia entre la plataforma de Android Wear y su competidor Apple WatchOS


es el soporte de dispositivos y tamaños de pantalla.

A diferencia de Apple Watch, que actualmente está disponible sólo en 42 mm y 38 mm en ta-


maños de pantalla rectangular, Android Wear viene en las formas de pantalla redonda, cuadra-
da y rectangular. Dicho tamaño es distinto al de los estándares de 42 mm y 38 mm. Otro dato
clave para tomar en cuenta es que los dispositivos Android Wear pueden ser compatibles con
aplicaciones para plataformas Android e iOS.


Los 
el cuerpo, los cuales pueden hacer cálculos de cualquier tipo. Algunos consideran que los relo-

los wearables han estado a nuestro alrededor por siglos. Los relojes de bolsillo fueron inven-
tados en el siglo XVI, y un reloj es básicamente un pequeño dispositivo que calcula el tiempo.

Los lentes son también un ejemplo de la tecnología wearable que se puede usar en el rostro,


los materiales y adaptado sus cuerpos para obtener nuevas funcionalidades.

Si tenemos frío nos vestimos para mantenernos calientes, si nos rompemos una pierna usa-
mos muletas para movernos, o incluso si un órgano falla se puede implantar un dispositivo que
replique su actividad. El hombre tiene una larga tradición en el desarrollo de tecnología para
extender la funcionalidad del cuerpo humano y el cuidado de la salud, así como herramientas
para áreas deportivas y militares.

En los últimos años, muchos dispositivos han sido desarrollados para el mercado de consu-
mo. Actualmente, hay relojes, gafas y diferentes tipos de ropa. En esta obra se describirán tales
aplicaciones y se desarrollarán algunos proyectos para aprender sobre electrónica y progra-


El conocimiento explicado en cada capítulo se sustenta en el anterior. Se iniciará con un


ritmo lento y los capítulos serán gradualmente más complejos respecto de la información
proporcionada en términos de hardware y software. Si ya existe familiaridad con Arduino, se
-
pítulo que precede.


Las plataformas portátiles de código abierto han impulsado en gran medida el avance del desa-
rrollo de hardware y software en el campo de la electrónica. Además de ser dispositivos inno-


· Rubén & Juan Tomás Oliva Ramos · 29


Capítulo 2 · Introducción a los dispositivos wearable

de baja potencia, que pueden utilizarse en otras aplicaciones, algunas de las cuales incluyen el
registro de datos de sensores, entre otros.

Plataformas portátiles

Hay varias plataformas portátiles de código abierto, pueden ser fabricadas por diferentes em-
presas, pero su funcionamiento casi es el mismo. Además, se basan en una popular platafor-
ma de programación de código abierto: Arduino. Sin embargo, esto no los hace completamente
idénticos. Hay varios elementos que los separan. Aquí una revisión de algunas de las platafor-
mas portables más comunes de código abierto.

Flora
Flora es una popular plataforma de electrónica portátil diseñada por la industria Adafruit. Es un
tablero redondo compatible con Arduino que puede ser cosido sobre ropa y otras piezas texti-
les. Varias características hacen a Flora ideal para los proyectos wearable, como son: su tama-
ño de 1,8 pulgadas de diámetro, lo que permite que se pueda adjuntar a una prenda de vestir.

Placa Flora

Tiene una forma redonda que permite que las espigas se extiendan alrededor del tablero para
evitar la congestión. El aumento de espacio entre los pines asegura pastillas grandes que faci-

30 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
2.2 · Introducción a los dispositivos wearable Android

litan una conexión de hilo de acero inoxidable a la junta. Esto elimina la necesidad de cables y
soldadura. Así que no se requiere utilizar otros métodos de adhesión, como pegamento o velcro.

Flora se ejecuta en el microcontrolador ATMega 32U4 que tiene 28k de memoria Flash y
2.5kb de SRAM. Esto lo hace ideal para proyectos grandes. Además, tiene 8 pines de E/S que
le permiten conectar varios sensores Flora-compatibles; por ejemplo, las placas que incluyen
sensor GPS, de movimiento y de luz, así como pixeles LED direccionables, entre otros. Por lo
que puede usarse para diversas aplicaciones.

La alimentación de Flora se realiza a través de un regulador de potencia integrado. Esto le da


una amplia gama de voltaje de entrada, entre 3v y 16v. También tiene un interruptor de encen-
dido conectado a un FET de potencia de 2A para una conexión segura ON/OFF. Por lo tanto, no
hay que preocuparse por el fallo del switch.

Gemma
Gemma es como el hermano pequeño de Flora. También está diseñado por las industrias Ada-
fruit y tiene un diámetro de 1 pulgada. Es alimentado por el microcontrolador ATtiny85 y es
compatible con Arduino; en cuanto al tamaño, es de 1,1 pulgadas de diámetro. Al igual que la
mayoría de plataformas portátiles de código abierto, Gemma es redonda en su forma y esto le
da un gran espacio para sus pines. Las almohadillas son grandes, lo que facilita el uso de su hilo
de acero inoxidable. Debido a su pequeño tamaño, tiene 3 pines de E/S, por lo que sólo puede
adjuntar algunos componentes electrónicos adicionales.

Placa Gemma

Como se dijo anteriormente, Gemma se ejecuta en el microcontrolador ATtiny85 que tiene 8k



para aplicaciones sencillas.

En el aspecto negativo, Gemma sólo puede soportar algunos sensores simples como el ve-

puede contener bocetos pequeños, lo que limita el número de aplicaciones que puede hacer.

· Rubén & Juan Tomás Oliva Ramos · 31


Capítulo 2 · Introducción a los dispositivos wearable

Además, Gemma no tiene un puerto serie, no puede enviar datos a la computadora a través
de USB; por lo tanto, debe utilizar otra tarjeta con un puerto serie para calibrar sus valores de
sensor antes de transferir el código a la tarjeta Gemma; además, su cargador de arranque no es
reconocible cuando la placa está conectada a puertos USB v3.

Otro aspecto es que no tiene un interruptor de alimentación a bordo; sin embargo, tiene un
regulador de voltaje y polaridad inversa, límite de corriente y protección térmica. Por esto, no
debe preocupar conectar las terminales de la batería en sentido inverso. La placa puede mane-
jar hasta 16v de entrada.

Trinket
Trinket es otra plataforma portátil diseñada por Adafruit. Al igual que Gemma, tiene un micro-
controlador ATtiny85, esto lo hace muy pequeño e ideal para los proyectos wearable; es el más
barato de las tres plataformas usables abiertas de la fuente de Adafruit industries. La baratija
es de 1,2 pulgadas de largo por 0,6 pulgadas de ancho. Es de forma rectangular, los pines están
-
ble. Tiene 5 pines de E/S, algunos de ellos son de entrada y salida analógica PMW.

Trinket

El ATtiny85, que es el microcontrolador Trinkets, tiene memoria Flash de 8k y SRAM de 512


bytes. Sólo puede almacenar pequeños bocetos y soportar un número limitado de aplicaciones.
Hay dos versiones, la de 3V y la de 5V; como sugieren los nombres, ambas operan en diferentes
voltajes lógicos: 3v y 5v, respectivamente.

La versión 3v funciona a 8 MHz y es ideal para aplicaciones que involucran sensores que
operan en lógica 3v, al encender la placa de una batería lipo. Por otro lado, la versión 5v fun-
ciona a 8 MHz o 16 MHz y es ideal en aplicaciones que implican el uso de sensores que operan
en lógica 5v.

Trinket comparte las mismas desventajas que Gemma. No tiene conexión de puerto serie y
algunos puertos USB v3 de computadora no reconocen su cargador de inicio.

32 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
2.2 · Introducción a los dispositivos wearable Android

Hay un regulador de voltaje a bordo. De modo que se puede aplicar 16v a la tabla sin arries-
garse a un daño. Además del regulador de voltaje, Trinket también tiene polaridad inversa, lí-
mite de corriente y protección térmica.

LilyPad
El Arduino LilyPad es una placa redonda, sewable (que se puede coser), ejecutable en el AT-
mega328P o ATmega168 microcontrolador. Hay variaciones del tablero que se pueden utili-
zar también en proyectos wearable. Son el LilyPad Arduino Simple Board y el Lilypad Arduino
USB- Atmega32U4. Ambas tarjetas tienen menos clavijas (5 clavijas de E/S digitales y 4 clavijas
de E/S analógicas), la placa Atmega32U4 funciona con el chip ATmega32U4 y tiene un puerto
USB a bordo.

LilyPad

El Lilypad es de 2 pulgadas de diámetro, es redonda y tiene 20 pines de E/S, 14 pines digita-


les y 6 pines analógicos; tiene grandes almohadillas de conexión para que pueda utilizar hilo
y conectar sensores y actuadores a la placa. Además de esto, el LilyPad es lavable; por lo tan-
to, no se tiene que desconectar cada vez que se lave la ropa, pero sí la fuente de alimentación.

Una desventaja es que no tiene un puerto USB a bordo; por lo tanto, es preciso conectar una
tarjeta de derivación FTDI para programarla.


esto es la mitad del tamaño de la memoria Flash Flora, el LilyPad todavía puede manejar boce-
tos y aplicaciones medianamente grandes. Como es característico de la mayoría de plataformas
portátiles de fuente abierta, hay módulos de sensores y actuadores diseñados para trabajar
con esta placa. Algunos de ellos incluyen el zumbador, interruptor deslizante, pulsador, sensor
de luz y LED, entre otros.

El voltaje de funcionamiento para el LilyPad está entre 2.7v y 5.5v; la placa no tiene un re-
gulador de voltaje o circuito de protección a bordo, por lo tanto, hay que cerciorarse de que
no se encienda con más de 5.5v o conectar las terminales de la batería de forma inversa, ya
que se dañará.

· Rubén & Juan Tomás Oliva Ramos · 33


Capítulo 2 · Introducción a los dispositivos wearable

TinyLily
Ahora bien, si se busca una placa muy pequeña, TinyLily es lo que se necesita. Se trata de una
plataforma portátil de código abierto Arduino-compatible que es fabricada por la empresa Tin-
yCircuits; se asemeja al LilyPad pero es 1/12 a escala de su tamaño.

TinyLily es redonda y tiene 8 pines de E/S y 4 pines de alimentación. Tiene pequeñas almo-
hadillas en sus pasadores que hacen fácil el uso del hilo conductor para conectarlo a sensores
actuadores y otros componentes electrónicos. TinyLily también es lavable, lo cual reduce la
molestia de desconectarla cada vez que sea necesario lavar la prenda a la que se adjunta.

TinyLily

Al igual que LilyPad, carece de un puerto USB y se necesita tener una placa de breakout USB
para programarla.

Se trata de una placa de un tamaño con gran potencial, ya que cuenta con un microprocesa-
dor ATmega328p. Con los 32kb de memoria Flash y 2kb de SRAM se puede hacer mucho con
este pequeño tablero. También tiene algunos componentes compatibles como LED, un inte-
rruptor y adaptador de batería que se puede utilizar para aumentar su funcionalidad.

TinyLily no tiene regulador de potencia o circuito de protección integrado. Por lo tanto, si


se conecta más de 5.5v de potencia o se intercambian las terminales de la batería, se dañará
la placa.

34 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
· Resumen

RESUMEN
En este capítulo se analizó el paradigma de la computación portátil y se contrastó con los mó-
viles y las computadoras de escritorio. Se exploraron las características y los conceptos clave
de la plataforma Android Wear. También se dieron a conocer algunas plataformas electrónicas
de placas wearable compatibles con Arduino.

En los siguientes capítulos se construirán proyectos wearable mediante el hardware reque-


rido con aplicaciones en diferentes áreas, a través de la creación de dispositivos que se pue-
den poner sobre el cuerpo y la ropa para uso cotidiano o de diversión; algunos de ellos esta-
blecerán la conexión con dispositivos que posean sistema operativo Android, con el uso de
medios y protocolos de comunicación a través de la interacción con teléfonos móviles, relojes
y Smart TV.

El siguiente capítulo comenzará con la implementación de proyectos Android con Arduino


para el control y monitoreo de dispositivos bluetooth.

· Rubén & Juan Tomás Oliva Ramos · 35


Capítulo

3
ConeCtividad
con Bluetooth

Contenido Objetivo
3.1 Introducción En este capítulo el lector conocerá los aspec-
3.2 Comunicación Android- tos fundamentales de la tecnología bluetooth
Arduino (maestro-esclavo) para desarrollar aplicaciones de control y mo-
nitoreo entre la plataforma de Arduino y
3.3 Configuración de App en
Android; implementará los principios de comu-
Android
nicación entre varios dispositivos para desa-
3.4 Desarrollo de aplicaciones rrollar proyectos propios con esta tecnología.
con Android vía bluetooth
Resumen
Capítulo 3 · Conectividad con Bluetooth

3.1
-
rarlo para enlazarlo a otros dispositivos wearable que manejan el mismo tipo de comunica-
ción; esto con el objetivo de construir dispositivos que se puedan conectar con otros de la mis-
ma manera para enviar y recibir datos entre sí.

Para realizar lo anterior, es necesario tener una tarjeta Arduino y el módulo de comunica-
ción bluetooth; con ello se elaborarán varios ejemplos de conexión entre tarjetas Arduino UNO
y también con un dispositivo móvil. Se estudiarán las tarjetas Bluno Beetle y Bluno Nano que

permitirá realizar aplicaciones de monitoreo y control con dispositivos.

Bluetooth
-
-

Ericsson, realizaron un consorcio para profundizar en el estudio de dicha conexión y formaron


3.1.1Bluetooth de bajo consumo de energía (Bluetooth Low Energy)


-
ye el clásico, de alta velocidad y los protocolos de bajo consumo. El bluetooth de alta velocidad





enlaces sencillos. Como alternativa a los protocolos estándar que se introdujeron en Bluetooth

Diversos diseños de chips permiten dos tipos de implementación: de modo dual y de modo úni-


 En implementaciones de modo único sólo se incluye la pila de protocolo de baja





 

 




 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.1 · Introducción

La arquitectura resultante comparte la radio y funcionalidades del bluetooth clásico,


que derivó en un incremento de coste.

Al comparar con módulos anteriores de bluetooth, los módulos BLE tienen bajo consumo de



3.1.2 Módulo bluetooth


El módulo bluetooth es un estándar de comunicación inalámbrica que permite la transmisión
 -

que son muy económicos y fáciles de encontrar en el mercado. Son módulos pequeños y con
-
dulos contienen el chip con una placa de desarrollo con los pines necesarios para la comuni-
cación serie.




Módulo bluetooth HC-05 como esclavo


-
-


Módulo bluetooth HC-05 como maestro


-
-

esto se explicará más adelante.


en modo maestro es el módulo el que se conecta con un dispositivo.




 
 
 
 

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

 

 

Módulos HC-06 y HC-05



de vinculación, velocidad y otros parámetros.



 
 
 
 



Desconectado

 Entra a este estado tan pronto se alimenta el módulo, y cuando no se ha establecido



 El LED del módulo parpadea rápidamente.
 

Conectado o de comunicación

 Entra a este estado cuando se establece una conexión con otro dispositivo bluetooth.
 El LED hace un doble parpadeo.

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.1 · Introducción

 

transparente.

Modo AT 1

 Para entrar a este estado después de conectar y alimentar el módulo es necesario



 
 

Modo AT 2

 Es necesario tener presionado el botón al momento de alimentar el módulo, después


de encenderlo se puede soltar y permanecerá en ese estado.
 

 El LED del módulo en este estado parpadea lentamente.

3.1.3 Comandos AT


instrucciones que permiten cambiar los baudios del módulo, el pin, el nombre, etc.

-
-



Descripción de los comandos AT


Test de comunicación



Enviar:
Recibe: OK

-
car las conexiones o los pasos anteriores.

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Cambiar nombre del módulo HC-05



Enviar:
Respuesta: OK

Cambiar código de vinculación

-


Enviar
Respuesta: OK

-
mando: AT+ PSWD?






Enviar
Respuesta: OK

Donde:

 


 



 
Para aplicaciones comunes no se usa paridad, por lo que se recomienda dejar este


Ejemplo:

Enviar
Respuesta: OK

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.1 · Introducción

     -


do: AT+UART?





Enviar:
Respuesta: OK






AT+ ROLE?



            -
ta saber si se conectará con un dispositivo en particular o con cualquiera que esté disponible.

Enviar:
Respuesta: OK






AT+ CMODE?



-
-
ticular.



Enviar
Respuesta: OK

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Donde:

-
ma: 1234,56,ABCDEF

Ejemplo:

Enviar
Respuesta: OK

AT+ BIND?

3.1.4 Otros comandos AT de utilidad:




Enviar
Respuesta

Obtener la dirección del módulo bluetooth:

Enviar
Respuesta

Resetear el módulo y salir del MODO AT

Enviar
Respuesta: OK

Restablecer valores por defecto

Enviar
Respuesta: OK

Al hacer esto, todos los parámetros del módulo se restablecen a los valores por defecto de fá-




-
-


 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.1 · Introducción

Conexión a Arduino




-


Programación de Arduino
#include <SoftwareSerial.h>
#dene RxD 11
#dene TxD 10
#dene KEY 9

SoftwareSerialBTSerial(RxD, TxD);
void setup( )
{
pinMode(KEY, OUTPUT);
digitalWrite(KEY, HIGH); // Como se mencionó en conguración colocar a KEY
en estado alto.

delay(500);

BTSerial.ush( );
delay(500);
BTSerial.begin(38400); // comunicación directa al módulo.
Serial.begin(9600); // comunicación directa al monitor.
Serial.println(“Enter AT commands:”);

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

BTSerial.print(“AT\r\n”);
delay(100);

}
void loop( )
{
if (BTSerial.available( ))
Serial.write(BTSerial.read( ));

if (Serial.available( ))
BTSerial.write(Serial.read( ));
}

 
serial.
 

 
 

Pantalla Enter AT commands

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.1 · Introducción

 


 



 En caso contrario, se debe revisar la conexión; usualmente puede ser un error con los


ódulo con las características

 
 Nombre: Slave
 
 

Establecer el Role como esclavo









Establecer el pin de vinculación











Enviar:





· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Respuesta:


OK

OK

OK

Resetear el módulo:





mismo orden en que se realizaron los pasos anteriores.

Secuencia de datos

-
clavo, el cual estará siempre en espera de una conexión por parte de un dispositivo bluetooth
maestro.


-


 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.1 · Introducción

 
 
 
 
 Dirección del dispositivo esclavo con el que se desea conectar: 


Establecimiento del Role como maestro:

Enviar:
Respuesta: OK



Enviar:
Respuesta: OK

Establecimiento del pin de vinculación

Enviar
Respuesta: OK



Enviar
Respuesta: OK



Enviar:
Respuesta: OK



Enviar98D3,31,203AD0
Respuesta: OK



Enviar:





· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth




Respuesta


OK

OK

OK

OK

OK

Reseteo del módulo

Enviar
Respuesta: OK

-
-
nectarse. Para que el maestro pueda conectarse con el dispositivo esclavo, ambos deben tener


Código de vinculación

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.2 · Comunicación Android-Arduino (maestro-esclavo)



-
lará a un dispositivo Android con bluetooth y se enviarán datos al Arduino mediante la apli-
-
            
desde https://play.google.com/store/apps/details?id=es.pymasde.blueterm&hl=es



Conexión del módulo HC-05

Programa para control y descarga en el Arduino:


#include<SoftwareSerial.h>

charvalorleido;
int salida = 4;
int salida1 = 5;
int salida2 = 6;

SoftwareSerialblue(6,7); //declaramos los pines RX y TX

void setup( ) {
blue.begin(9600); // initialization

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

pinMode(salida, OUTPUT);
pinMode(salida1,OUTPUT);
pinMode(salida2,OUTPUT);
}
void loop( ) {
if (blue.available( ) > 0) { // if the data came
valorleido = blue.read( ); // read byte

switch(valorleido){
case ‘0’:
digitalWrite(salida,HIGH);
delay(500);
blue.println(“Salida 4 prendida”);
break;
case ‘1’:
digitalWrite(salida1,HIGH);
delay(500);
blue.println(“Salida 5 prendida”);
break;
case ‘2’:
digitalWrite(salida2,HIGH);
delay(500);
blue.println(“Salida 6 prendida”);
break;
case ‘3’:
digitalWrite(salida,LOW);
digitalWrite(salida1,LOW);
digitalWrite(salida2,LOW);
delay(500);
blue.println(“Salida 4, 5 y 6 apagadas”);
break;
default:
delay(500);
blue.print(valorleido);
blue.println(“ No es una orden válida. Introduzca la opción correcta”);
}
}
}



un dispositivo.

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.3 ·Conguración de app en Android

Conexión a un dispositivo

-


Elección de módulo bluetooth

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth



byYako1976 identi.io

Inserción de pin

-
tá asociado al dispositivo Android con el módulo bluetooth y el led de éste dejará de parpadear


Fijación de módulo

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.3 ·Conguración de app en Android


-
ve a escribir.


Este proyecto consiste en aplicar lo aprendido en los puntos anteriores: por un lado se tiene




módulo esclavo y de forma automática se conectan entre sí.









Sketch maestro

#include<SoftwareSerial.h>

// se dene al Pin2 como RX, Pin3 como TX


SoftwareSerialmySerial(2,3);// RX,TX

void setup( )
{//inicializa la comunicación serial
Serial.begin(9600);
mySerial.begin(9600);
}
void loop( )
{
mySerial.write(‘1’); Serial.println(“LED: on”);
delay(2000);
mySerial.write(‘0’); Serial.println(“LED: off”);
delay(2000);
}

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Sketch esclavo

intledPin = 12; // usamos un pin de salida al LED


int state = 0; // Variable lectura serial

void setup( ) {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(9600);
}

voidloop( ) {
//si el módulo a manda dato, guardarlo en estado.
if(Serial.available( ) > 0){
state = Serial.read( );
} // esta parte del código es solo para 1 carácter o
unidad.

// si el estado es 0 ese sería Apagado “OFF”


if (state == ‘0’) {
digitalWrite(ledPin, LOW);
Serial.println(“LED: off”);
}
// si el estado es 1 ese sería Encendido “ON”
else if (state == ‘1’) {
digitalWrite(ledPin, HIGH);
Serial.println(“LED: on”);
}
}

Descarga de dispositivo

Termómetro inalámbrico
-



Topología de conectividad

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.3 ·Conguración de app en Android



Resultado de la conexión de un sensor



Dispositivo maestro

#include <SoftwareSerial.h>
#include “DHT.h”

// se dene al Pin2 como RX, Pin3 como TX


SoftwareSerialmySerial(2,3);// RX,TX

#dene DHTPIN 7
#dene DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

voidsetup( )
{//inicializa la comunicación serial
Serial.begin(9600);
mySerial.begin(9600);
dht.begin( );
}
void loop( )
{
oat temperature = dht.readTemperature( );
mySerial.print(temperature);
delay(500);
}

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Dispositivo esclavo

#include <LiquidCrystal.h>

LiquidCrystallcd(12, 11, 5, 4, 3, 2);


Intdato;

void setup( ) {
lcd.begin(16, 2);
Serial.begin(9600);
lcd.setCursor(0,0);
lcd.print(“Temperatura:”);
}

void loop( ) {
if(Serial.available( ) > 0){
dato = Serial.parseInt( );
lcd.setCursor(12,0);
lcd.print(dato);
lcd.print(char(223));
lcd.print(“C”);
}
}

Códigos de dispositivos

Otras aplicaciones

inalámbrica mediante las bases aprendidas en este apartado, y con ello se puedan usar sobre
-
den realizar dicha función:

 Bocinas-bluetooth
 Anillo para control de acceso
 Playera interactiva
 
 Cuidador de niños para cuna
 
 
 Collar rastreador
 
 

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

 Detección de humedad en un calzado


 Sensor de pulso cardíaco
 Dispositivo para acceso controlado
 
 
 

3.4

En este apartado se estudiarán las aplicaciones directamente elaboradas con Android median-
-
nitoreo en los que se utiliza la comunicación bluetooth, donde la tarjeta Arduino será el esclavo


Control de salidas digitales desde Android a través de bluetooth








 
 
 Cables macho-hembra para conectar el módulo al Arduino



     


Amarino en el celular para interconectar y encontrar los dispositivos bluetooth en el teléfono


http://www.amarino-toolkit.net/index.php/download.html



Primero, es necesario activar el dispositivo bluetooth en el teléfono móvil.

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Resultado de la conexión de un sensor

Posteriormente, se requiere añadir un nuevo dispositivo. La aplicación detecta los dispositivos.

Adición de un dispositivo

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

Detección de dispositivo



Conguración nal del dispositivo

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth



Captura de código

Creación de una aplicación en Android Studio




Interfaz de Android Studio

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth





<LinearLayoutxmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“ll_parent”
android:layout_height=“ll_parent”
android:orientation=“vertical” >

<ScrollView
android:id=“@+id/scrollView1”
android:layout_width=“match_parent”
android:layout_height=“wrap_content” >

<LinearLayout
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“vertical”>

<ImageView
android:id=“@+id/imageView1”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:src=“@drawable/conector” />

<TextView
android:id=“@+id/textView1”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:gravity=“center”
android:text=“Android - Arduino”
android:textSize=“15pt” />

<Button
android:id=“@+id/button3”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:onClick=“conectar”
android:text=“Connect...”
android:textSize=“15pt” />

<TextView
android:id=“@+id/textView2”
android:layout_width=“match_parent”

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

android:layout_height=“wrap_content”
android:gravity=“center”
android:textSize=“15pt”
android:text=“Enespera....” />

<ImageView
android:id=“@+id/imageView2”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:gravity=“center”
android:src=“@drawable/off” />
<Button
android:id=“@+id/button4”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:onClick=“desconectar”
android:textSize=“15pt”
android:text=“Disconnect” />

<TextView
android:id=“@+id/textView3”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:background=“#FFFF33”
android:textAppearance=“?android:attr/textAppearanceLarge” />

<Button
android:id=“@+id/button1”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:onClick=“encender”
android:text=“ON Pin 8”
android:textSize=“15pt” />

<Button
android:id=“@+id/button2”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:onClick=“apagar”
android:textSize=“15pt”
android:text=“OFF Pin 8” />

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

</LinearLayout>
</ScrollView>
</LinearLayout>



packageror.meetandroid;

importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.graphics.Color;
importandroid.view.Menu;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.ImageView;
importandroid.widget.TextView;
importat.abraxas.amarino.Amarino;



private static nal String DEVICE_ADDRESS = “98:D3:31:50:0F:B6”;

leds = (ImageView) ndViewById(R.id.imageView2);


prender = (Button) ndViewById(R.id.button1);
apagar = (Button) ndViewById(R.id.button2);
txtstatus = (TextView) ndViewById(R.id.textView2);

public void conectar(View view){


Amarino.connect(this, DEVICE_ADDRESS);
leds.setImageResource(R.drawable.on);
txtstatus.setTextColor(Color.GREEN);
txtstatus.setText(“Connected”);
}

public void desconectar(View view){


Amarino.disconnect(this, DEVICE_ADDRESS);
leds.setImageResource(R.drawable.off);
txtstatus.setTextColor(Color.RED);
txtstatus.setText(“Disconected”);
}

public void encender(View view) {

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Amarino.sendDataToArduino(this, DEVICE_ADDRESS,’A’,on);
}

public void apagar(View view) {


Amarino.sendDataToArduino(this, DEVICE_ADDRESS,’B’,off);
}



#include<MeetAndroid.h>

MeetAndroidmeetAndroid;

intonboardLed = 8;

void setup( )
{
// use the baud rate your bluetooth module is congured to
// not all baud rates are working well, i.e. ATMEGA168 works best with 57600
Serial.begin(9600);

// register callback functions, which will be called when an associated


event occurs.
// - the rst parameter is the name of your function (see below)
// - match the second parameter (‘A’, ‘B’, ‘a’, etc...) with the ag on
your Android application

meetAndroid.registerFunction(on, ‘A’);
meetAndroid.registerFunction(off, ‘B’);

pinMode(onboardLed, OUTPUT);
}

void loop( )
{
meetAndroid.receive( ); // you need to keep this in your loop( ) to receive
events
}

void on(byte ag, byte numOfValues)


{
digitalWrite(onboardLed,HIGH);
}

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

void off(byte ag, byte numOfValues)


{
digitalWrite(onboardLed,LOW);
}

A continuación se muestran los resultados:

Resultados del proyecto

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Control de led RGB con desarrollo de una aplicación en Android Studio


Interfaz en Android Studio en modo preview

Interfaz en Android Studio en modo preview



packageror.rgb;

importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.graphics.Color;
importandroid.view.Menu;
importandroid.view.View;
importandroid.widget.SeekBar;
importandroid.widget.SeekBar.OnSeekBarChangeListener;
importandroid.widget.TextView;
importat.abraxas.amarino.Amarino;

// se declara la clase y se implementa el seek bar


public class MainActivity extends Activity implements
OnSeekBarChangeListener{

private static nal String DEVICE_ADDRESS = “00:12:08:07:12:46”;


//declaramos las variables

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

SeekBar rojo;
SeekBar verde;
SeekBar azul;
TextViewpwmrojo;
TextViewpwmverde;
TextViewpwmazul;

//valor inicial del pwm del color rojo

intvalor_inicial_rojo= 0;
intvalor_inicial_verde= 0;
intvalor_inicial_azul= 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

pwmrojo = (TextView) ndViewById(R.id.txtrojo);


rojo = (SeekBar) ndViewById(R.id.barra);

pwmverde = (TextView) ndViewById(R.id.txtverde);


verde = (SeekBar) ndViewById(R.id.barra2);

pwmazul = (TextView) ndViewById(R.id.txtazul);


azul = (SeekBar) ndViewById(R.id.barra3);

//se registra el metodo de escucha del seekbar


rojo.setOnSeekBarChangeListener(this);
verde.setOnSeekBarChangeListener(this);
azul.setOnSeekBarChangeListener(this);

@Override
publicbooleanonCreateOptionsMenu(Menu menu) {
// Inate the menu; this adds items to the action
bar if it is present.
getMenuInater( ).inate(R.menu.main, menu);
return true;
}

@Override
public void onProgressChanged(SeekBarseekBar,
intprogress,booleanfromUser) {
// TODO Auto-generated method stub

//pwmrojo.setText(“Valor PWM Rojo: “+progress);

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

valor_inicial_rojo = rojo.getProgress( );

//pwmverde.setText(“Valor PWM Verde: “+progress);


valor_inicial_verde = verde.getProgress( );

//pwmazul.setText(“Valor PWM Azul: “+progress);


valor_inicial_azul = azul.getProgress( );

Amarino.sendDataToArduino(this, DEVICE_
ADDRESS,’r’,valor_inicial_rojo);
Amarino.sendDataToArduino(this, DEVICE_
ADDRESS,’v’,valor_inicial_verde);
Amarino.sendDataToArduino(this, DEVICE_
ADDRESS,’a’,valor_inicial_azul);

@Override
public void onStartTrackingTouch(SeekBarseekBar) {
// TODO Auto-generated method stub

@Override
public void onStopTrackingTouch(SeekBarseekBar) {
// TODO Auto-generated method stub

}
public void conectar(View view){

Amarino.connect(this, DEVICE_ADDRESS);

rojo.setProgress(valor_inicial_rojo);
verde.setProgress(valor_inicial_verde);
azul.setProgress(valor_inicial_azul);

public void desconectar(View view){


Amarino.disconnect(this, DEVICE_ADDRESS);
}
}



#include <MeetAndroid.h>
MeetAndroidmeetAndroid;

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

void setup( )
{
Serial.begin(9600);

meetAndroid.registerFunction(red,’r’);
meetAndroid.registerFunction(verde,’v’);
meetAndroid.registerFunction(azul,’a’);
}
void loop( )
{
meetAndroid.receive( );
}

void red(byte ag, byte numOfValues)


{
analogWrite(11, meetAndroid.getInt( ));
}

voidverde(byte ag, byte numOfValues)


{
analogWrite(9, meetAndroid.getInt( ));
}

voidazul(byte ag, byte numOfValues)


{
analogWrite(10, meetAndroid.getInt( ));
}

Conexión de led RGB

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Control de motor de DC desde una aplicación en Android




-


Diagrama de circuito integrado



Conexiones nales con Arduino

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

Código en Arduino:
#include<MeetAndroid.h>
#include<LiquidCrystal.h> // incluir la libreria para LCD

LiquidCrystallcd(12,11,5,4,3,2);
MeetAndroidmeetAndroid;

//conguracion de pines del arduino


int EN1 = 9;
int IN1 = 7;
int IN2 = 8;
int pin = 13;
intpwm;

void setup( )
{
delay(500); // pausa requerida para inicializar el LCD
lcd.begin(16, 2); // selecciona el número de renglones y columnas
Serial.begin(9600);

lcd.setCursor(0, 0);
lcd.print(“ Motor CD ”);
lcd.setCursor(0, 1);
lcd.print(“Arduino-Android”);

meetAndroid.registerFunction(Izquierda, ‘i’); //funcion se mueve motor


adelante
meetAndroid.registerFunction(Derecha, ‘d’); //funcion se mueve motor atras
meetAndroid.registerFunction(Detener, ‘s’); //funcion se detiene motor
meetAndroid.registerFunction(Velocidad, ‘v’); //control de velocidad motor

// Conguramos las terminales del arduino


// EN1 pin 1 del puente H va conectado al pin 11 del arduino (PWM) para
control de la velocidad
// IN1 y IN2 son los pines del arduino (7 y 8) el 7 se conecta al 7 del
puente H
// el pin No. 8 se conecta al 2 del puente h para control del giro
// van conectados y congurados como salidas todos

pinMode(pin,OUTPUT);
pinMode(EN1,OUTPUT);

pinMode(IN1,OUTPUT);

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

pinMode(IN2,OUTPUT);
digitalWrite(pin,LOW);
}

void loop( )
{
meetAndroid.receive( );
}
voidVelocidad(byte ag, byte numOfValues)
{
//Con esta instrucción le estamos diciendo al Arduino
//Que va a recibir el valor enviado desde Android
//Por el pin No. 9 va a enviar el valor PWM recibido

pwm = meetAndroid.getInt( );
analogWrite(EN1,pwm);
lcd.clear( );
lcd.setCursor(0, 0);
lcd.print(“ Motor -ON- “);
lcd.setCursor(0, 1);
lcd.print(“ PWM = “);
lcd.print(pwm);
}

void Izquierda(byte ag, byte numOfValues)


{
pwm = meetAndroid.getInt( );
analogWrite(EN1,pwm);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
lcd.clear( );
lcd.setCursor(0, 0);
lcd.print(“ Motor -ON- “);
lcd.setCursor(0, 1);
lcd.print(“ PWM = “);
lcd.print(pwm);
}

voidDerecha(byte ag, byte numOfValues)


{
pwm = meetAndroid.getInt( );
analogWrite(EN1,pwm);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

lcd.clear( );
lcd.setCursor(0, 0);
lcd.print(“ Motor -ON- “);
lcd.setCursor(0, 1);
lcd.print(“ PWM = “);
lcd.print(pwm);
}

voidDetener(byte ag, byte numOfValues)


{
pwm = meetAndroid.getInt( );
analogWrite(EN1,pwm);
lcd.clear( );
lcd.setCursor(0, 0);
lcd.print(“ Motor OFF “);
lcd.setCursor(0, 1);
lcd.print(“ PWM = “);
lcd.print(pwm);
delay(3000);

lcd.setCursor(0, 0);
lcd.print(“ Motor CD “);
lcd.setCursor(0, 1);
lcd.print(“Arduino-Android”);
}

Funciones de control realizadas en Android Studio:


publicvoid Izquierda(View view) {

vel = control.getProgress( );

intcontrolbarra = vel;
control.setProgress(vel);
pwm.setText(“Value PWM: “+controlbarra);

giro.setTextColor(Color.GREEN);
adelante.setTextColor(Color.GREEN);
giro.setText(“Motor: Left”);

control.setEnabled(true);
Conectar.setEnabled(false);
  

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

atras.setTextColor(Color.BLACK);
detener.setTextColor(Color.BLACK);

Amarino.sendDataToArduino(this, DEVICE_ADDRESS,’i’,vel);
}

public void Derecha(View view) {


vel = control.getProgress( );

intcontrolbarra = vel;
control.setProgress(vel);

pwm.setText(“Value PWM: “+controlbarra);


giro.setTextColor(Color.BLUE);
atras.setTextColor(Color.BLUE);
giro.setText(“Motor: Right”);

Conectar.setEnabled(false);
detener.setEnabled(true);
control.setEnabled(true);

adelante.setTextColor(Color.BLACK);
detener.setTextColor(Color.BLACK);

Amarino.sendDataToArduino(this, DEVICE_ADDRESS,’d’,vel);
}
public void Detener(View view) {

intvel = 0;
intcontrolbarra = 0;
control.setProgress(vel);
pwm.setText(“Value PWM: “+controlbarra);
giro.setTextColor(Color.RED);
detener.setTextColor(Color.RED);
giro.setText(“Motor: Stopped”);
Amarino.sendDataToArduino(this, DEVICE_ADDRESS,’s’,vel);

Desconectar.setEnabled(true);
detener.setEnabled(false);
control.setEnabled(false);

adelante.setTextColor(Color.BLACK);
}

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth



Interfaz nal



Conexiones nales

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Monitoreo de temperatura con sensor LM35DZ desde Android


           -
droid; a continuación se muestra la interfaz creada en Android Studio:

Código en Arduino:

#include<LiquidCrystal.h>// incluir la librería para LCD


#include <MeetAndroid.h>

MeetAndroidmeetAndroid;
LiquidCrystallcd(12,11,5,4,3,2);

oatanalogico = 0;

void setup( )
{
delay(500); // pausa requerida para inicializar el LCD
lcd.begin(16, 2); // selecciona el número de renglones y columnas
Serial.begin(9600);
}
void loop( )
{
meetAndroid.receive( );
analogico = analogRead(0);
oat volts = (5.00 * analogico) / 1024;
lcd.setCursor(0, 0);
lcd.print(“ Volts = ”);
lcd.print(volts,2);

oatcentigrado = (analogico * 500)/1024; // operación matemática de escala-


do en grados
Serial.print(centigrado);
Serial.println(“ Degrees Celsius, ”);

lcd.setCursor(0, 1); // Posiciona el cursor en la


col.0,ren.0
lcd.print(“ Temp = ”); // muestra mensaje en LCD
lcd.print(centigrado,1);
lcd.write(223); // muestra el ASCII 223 (símbolo de
grados)
lcd.print(“C ”);

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

Serial.print( (centigrado * 9) / 5 + 32 ); // conversion a Fahrenheit


Serial.println(“ Degrees Fahrenheit”);
Serial.print(“Temperature at room: ”);
meetAndroid.send(centigrado); // envía el valor de la temperatura
delay(2000); //cada segundo envía el dato
}

Código de la aplicación en Android:


Se manda a llamar el receiver

public void conectar(View view){


Amarino.connect(this, DEVICE_ADDRESS);
//se registra el arduino Receiver
registerReceiver(arduinoReceiver, new IntentFilter
(AmarinoIntent.ACTION_RECEIVED));
}

public class ArduinoReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
String data = null;
// the device address from which the data was sent, we don’t need it here
but to demonstrate how you retrieve it

nal String address = intent.getStringExtra(AmarinoIntent.EXTRA_DEVICE_


ADDRESS);

// the type of data which is added to the intent


nalintdataType = intent.getIntExtra(AmarinoIntent.EXTRA_DATA_TYPE,0);

// we only expect String data though, but it is better to check if really


string was sent
// later Amarino will support differnt data types, so far data comes always
as string and
// you have to parse the data to the type you have sent from Arduino, like
it is shown below

if (dataType == AmarinoIntent.STRING_EXTRA){
data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA);

if (data != null){

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

temp.setText(data);

}
}
}
}
}

A continuación, se muestra la interfaz de la aplicación:

Interfaz de la aplicación

Los resultados de las conexiones del sensor:

Resultados de la conexión del sensor

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

Envío de SET POINT para control de temperatura


En este proyecto se desarrollará todo lo relativo a los proyectos anteriores. Se muestra la panta-
lla elaborada en Android Studio.

Pantalla en Android Studio

Código de la aplicación en Arduino:


#include<MeetAndroid.h>
#include<LiquidCrystal.h> // incluir la librería para LCD
#include <Servo.h>

LiquidCrystallcd(12,11,5,4,3,2);
MeetAndroidmeetAndroid;
Servo miservo;

int sensor = 0;
oattemp = 0;
oat temp1;
oattemp_prom = 0; // resultado de la temperatura promedio.
oat valor1 = 0;
oatspt = 30.0;

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

int valor;
intval;

voidsetup( )
{
delay(500); // pausa requerida para inicializar el LCD
lcd.begin(16, 2); // selecciona el número de renglones y columnas
Serial.begin(9600);
lcd.setCursor(0, 1);
lcd.print(“SP: “);
lcd.print(spt,1);

//SALIDAS RELEVADORES
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(13,OUTPUT);

meetAndroid.registerFunction(Servomotor, ‘v’); //control de Servomotor


meetAndroid.registerFunction(uno, ‘l’); //control de PWM led1
meetAndroid.registerFunction(sp, ‘c’); //recepción de mensaje
meetAndroid.registerFunction(s7on, ‘d’); //salida s7 on
meetAndroid.registerFunction(s7off, ‘e’); //salida s7 off
meetAndroid.registerFunction(s8on, ‘f’); //salida s8 on
meetAndroid.registerFunction(s8off, ‘g’); //salida s8 off

miservo.attach(10);
}

void loop( )
{
meetAndroid.receive( );
leertemperatura( );
}

void s7on(byte ag, byte numOfValues)


{
digitalWrite(7,HIGH);
}
void s7off(byte ag, byte numOfValues)
{
digitalWrite(7,LOW);
}
void s8on(byte ag, byte numOfValues)
{

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

digitalWrite(8,HIGH);
}
void s8off(byte ag, byte numOfValues)
{
digitalWrite(8,LOW);
}
voiduno(byte ag, byte numOfValues)
{
analogWrite(6, meetAndroid.getInt( ));
}
voidsp(byte ag, byte numOfValues)
{
spt = meetAndroid.getFloat( );
lcd.setCursor(0, 1);
lcd.print(“SP: “);
lcd.print(spt,1);
lcd.print(“ “);
}

void Servomotor(byte ag, byte numOfValues)


{
valor = meetAndroid.getInt( );
val = map(valor,0,1023,0,180);
miservo.write(val);
delay(15);
}

//Rutina para realizar la lectura de temperatura desde el sensor LM35 conec-


tado en el canal 0.
//Realiza un promedio de la lectura para una mayor estabilidad.

voidleertemperatura( ){
temp1 = analogRead(sensor);
temp1 = (temp1 * 0.0048) * 100;

// promedio del valor para lograr mayor estabilidad


valor1 = valor1 + 1; // incrementa esta variable de 1 en 1
temp = temp + temp1;
if (valor1 == 1000) // aquí se establece el máximo de valores a promediar.
Para este ejemplo son 1000 lecturas.
{
temp_prom = temp / 1000; // realiza la operación para el promedio

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

meetAndroid.send(temp_prom); // envía el valor de la temperatura


lcd.setCursor(0,0); // posiciona el cursor col.0, ren.0
lcd.print(“Temp = ”);
lcd.print(temp_prom,1); // muestra el valor de la temperatura con 1 decimal
en el LCD
lcd.write(223);
lcd.print(“C ”);

// restablece valores
valor1 = 0;
temp = 0;
delay(200);

alertatemp( );
}
}

//rutina para vericar si se excedió la temperatura deseada y mande una alerta


voidalertatemp( ){
if (temp_prom>spt){
digitalWrite(13,HIGH);
lcd.setCursor(9, 1);
lcd.print(“S13=ON ”);
}
else
{
digitalWrite(13,LOW);
lcd.setCursor(9, 1);
lcd.print(“S13=OFF”);
}
}

Código de la aplicación de Android:


public void s7(View view) {

if (((ToggleButton)toggles7).isChecked( ))
{
intval = 0;
s7.setImageResource(R.drawable.ons7);
Amarino.sendDataToArduino(this, DEVICE_
ADDRESS,’d’,val);
}

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

else {
intval = 1;
s7.setImageResource(R.drawable.offs7);
Amarino.sendDataToArduino(this, DEVICE_
ADDRESS,’e’,val);
}
}

public void s8(View view) {

if (((ToggleButton)toggles8).isChecked( ))
{
intval = 0;
s8.setImageResource(R.drawable.ons8);
Amarino.sendDataToArduino(this, DEVICE_
ADDRESS,’f’,val);
}
else {
intval = 1;
s8.setImageResource(R.drawable.offs8);
Amarino.sendDataToArduino(this, DEVICE_
ADDRESS,’g’,val);
}
}

Código del botón Enviar setpoint a Arduino:


El dato enviado desde Android se mostrará en la pantalla LCD conectada al Arduino.

public void Enviar(View view) {


//código para enviar un número otante

String mensaje;
mensaje = Enviar.getText( ).toString( );
sp = Float.parseFloat(mensaje);
Amarino.sendDataToArduino(this, DEVICE_ADDRESS,’c’,sp);
}

public class ArduinoReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {

String data = null;


nal String address = intent.getStringExtra

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

(AmarinoIntent.EXTRA_DEVICE_ADDRESS);
nalintdataType = intent.getIntExtra(AmarinoIntent.
EXTRA_DATA_TYPE, -1);

if (dataType == AmarinoIntent.STRING_EXTRA){
data = intent.getStringExtra(AmarinoIntent.EXTRA_DATA);

if (data != null){

temp.setText(data);

doubletemperatura = Double.
parseDouble(data);

if (temperatura>sp)
{
mensajetemp.setText(“STATUS
TEMPERATURE: HIGH”);
mensajetemp.setTextColor
(Color.RED);
mVibrator.vibrate(5000);

else
{
mensajetemp.setText(“STATUS
TEMPERATURE: LOW”);
mensajetemp.setTextColor
(Color.BLACK);
mVibrator.cancel( );
}
}
}
}
}
}

Código del control del setpoint


<?xml version=“1.0” encoding=“utf-8”?>
<manifest xmlns:android=“http://schemas.android.com/apk/res/android”
package=“ror.androidcontrol”
android:versionCode=“1”

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

android:versionName=“1.0” >

<uses-sdk
android:minSdkVersion=“8”
android:targetSdkVersion=“18” />
<uses-permissionandroid:name=“android.permission.VIBRATE”/>

<application
android:allowBackup=“true”
android:icon=“@drawable/android”
android:label=“@string/app_name”
android:theme=“@style/AppTheme” >

<activity
android:name=“ror.androidcontrol.MainActivity”
android:label=“@string/app_name” >

<intent-lter>
<action android:name=“android.intent.action.MAIN” />
<category android:name=“android.intent.category.LAUNCHER” />
</intent-lter>
</activity>

<receiver android:name=“MyReceiver”>
<intent-lter>
<action android:name=“android.AmarinoIntent.ACTION_CONNECT”>
</action>
</intent-lter>
</receiver>
</application>
</manifest>



3.4.1 Bluno Beetle


           

           

en el diseño del proyecto. Es totalmente compatible con Bluno en instrucciones y procedimien-


· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

-
-
     

-
da, es conveniente atornillar el conductor en él, pues podría ser una buena opción en el mer-
cado wearable.

Tarjeta de desarrollo Bluno Beetle

Pines

Terminal Pin digital Canal PWM Canal analógico UART I2C


RX 0
Serial1
TX 1

SDA A4 SDA

SCL A5 SCL

D2 2

D3 3 3

D4 4

D5 5 5

A0 A0 A0
A1 A1 A1

A2 A2 A2

A3 A3 A3

Características:

 
 

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

 Puerto micro USB


 
 
 
 

Características de alimentación

Terminal Descripción

VIN Voltaje de alimentación externo < 8V

5V 5 volts positivo

GND GND

Conexiones y pines de la tarjeta Bluno Beetle

3.4.2 Bluno Nano






diarios y se convierten en sociales; los complementos de la cámara controlados por el teléfono
-

-






· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth


convierte en una plataforma de prototipos ideal para desarrolladores de software y hardwa-









proyecto hecho con él puede ser directamente inalámbrico. Además, se desarrolló la App para
-
llar una plataforma propia de hardware y software.



 
 
 
 
 
 Comunicación transparente a través de puerto serial
 
 
 
 Bootloader: Arduino Uno
 Compatible con pines del Arduino UNO
 
 

Bluno Nano

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth



Conguración de los pines

Demo de prueba con Bluno Nano:




 
 
 Cable micro USB
 https://play.google.com/
store/apps/details?id=com.redrobe.robotremote&hl=es

Pasos requeridos:

 
 

voidsetup( ) {
Serial.begin(115200); //initialthe Serial
}

voidloop( ) {
if (Serial.available( )) {

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Serial.write(Serial.read( ));//send what has been received


Serial.println( ); //print line feed character
}
}

 
placa Arduino UNO
 



En Android:

 

A continuación se presentan las pantallas del ejemplo realizado:

Detección de dispositivo bluetooth:

Detección de bluetooth

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
3.4 ·Desarrollo de aplicaciones con Android vía Bluetooth

Ejecución de aplicación:

Ejecución de aplicación

Dar clic en el botón Scan para buscar el dispositivo; aparece el encontrado, se selecciona y aho-
ra se habrá de conectar.

Conexión de dispositivo

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 3 · Conectividad con Bluetooth

Aparece el botón Connected, el dispositivo se encuentra pareado; ahora se realiza la prueba de


datos enviados desde el móvil y se captura el dato que se mandará; presionar el botón Send.

Botón Connected

RESUMEN
En este capítulo se estudiaron aspectos de la comunicación bluetooth, sus bases y las formas
de configuración. Asimismo, se realizó una serie de proyectos donde se empleó la comunica-
ción entre dispositivos para construir equipos que utilizan conectividad bluetooth, para el mo-
nitoreo y control. Se destacó el uso de estos dispositivos en la vida cotidiana para ponerlos
sobre la ropa o como accesorios, mediante el uso de los sensores requeridos. Asimismo, se
comprobó la conectividad entre la tarjeta Arduino y una aplicación realizada en Android Studio
para el envío de datos a un dispositivo móvil y la recepción de los mismos.

En los siguientes capítulos se construirán distintos tipos de dispositivos wearable para diver-
sos usos, con esta forma de conectividad y la integración de tecnología, con el fin de desarro-
llar un dispositivo inteligente que permita al usuario concentrar en él diversas cuestiones como
la salud, el deporte, diversión o trabajo.

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Capítulo

4
ConeCtividad
por Wi

Contenido Objetivo
4.1 Switch controlado por Wifi y En este apartado se desarrollarán proyec-
monitoreo de consumo de tos con la integración de la plataforma de
corriente Arduino y Android a través del enlace por
4.2 Desarrollo de aplicación en Wifi; el objetivo es conocer los aspectos
Android Studio fundamentales en el desarrollo de proyec-
tos de aplicación mediante las tarjetas de
4.3 Cómo mejorar la aplicación
Arduino CC3000 y Arduino YUN, además
4.4 Monitoreo de cámara de de cubrir las partes esenciales y requeri-
seguridad remota por Wifi das de configuración para la correcta inte-
4.4.1 Cómo ir más allá con gración con Android.
Android
Resumen
Capítulo 4 · Conectividad por Wifi



En este capítulo se creará una versión de código abierto de un dispositivo, es decir, un enchufe
-


-

-






Creación de switch
Requerimientos de hardware y software

-


Módulo de relé

-



96 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.1 · Switch controlado por Wifi y monitoreo de consumo de corriente

Placa

-


Shield Wi



Conexión del módulo Wi al Arduino

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi








Conexiones del módulo Wi a Arduino





Conexiones del relevador

98 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.1 · Switch controlado por Wifi y monitoreo de consumo de corriente




Resultado



-


Router inalámbrico



// Code for the wireless smart lamp project

// Import required libraries


#include <Adafruit_CC3000.h>
#include <SPI.h>
#include <aREST.h>
#include <avr/wdt.h>

· Rubén & Juan Tomás Oliva Ramos · 99


Capítulo 4 · Conectividad por Wifi

// Relay state
constintrelay_pin = 8;

// Dene measurement variables


oatamplitude_current;
oateffective_value;
oateffective_voltage = 110;
oatzero_sensor;
oateffective_power;

// These are the pins for the CC3000 chip if you are using a breakout board
#dene ADAFRUIT_CC3000_IRQ 3
#dene ADAFRUIT_CC3000_VBAT 5
#dene ADAFRUIT_CC3000_CS 10

// Create CC3000 instance


Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_
IRQ, ADAFRUIT_CC3000_VBAT,SPI_CLOCK_DIV2);

// CreateaREST instance
aREST rest = aREST( );

// Your WiFi SSID and password


#dene WLAN_SSID “NombredelaredWi”
#dene WLAN_PASS “PassworddelaredWi”
#dene WLAN_SECURITY WLAN_SEC_WPA2

// The port to listen for incoming TCP connections


#dene LISTEN_PORT 80

// Server instance
Adafruit_CC3000_Server restServer(LISTEN_PORT);

// Variables to be exposed to the API


int power;

void setup(void)
{
// Start Serial
Serial.begin(115200);

// Init variables and expose them to REST API


rest.variable(“power”,&power);

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.1 · Switch controlado por Wifi y monitoreo de consumo de corriente

// Set relay pin to output


pinMode(relay_pin,OUTPUT);

// Calibrate sensor with null current


zero_sensor = getSensorValue(A0);

// Give name and ID to device


rest.set_id(“001”);
rest.set_name(“smart_lamp”);

// Set up CC3000 and get connected to the wireless network.


if (!cc3000.begin( ))
{
while(1);
}

if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {


while(1);
}

while (!cc3000.checkDHCP( ))
{
delay(100);
}

// Display connection details


displayConnectionDetails( );

// Start server
restServer.begin( );
Serial.println(F(“Listening for connections...”));

// Enable watchdog
wdt_enable(WDTO_4S);
}

void loop( ) {

// Perform power measurement


oatsensor_value = getSensorValue(A0);
wdt_reset( );

// Convert to current
amplitude_current = (oat)(sensor_value-zero_sensor)/1024*5/185*1000000;

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi

effective_value = amplitude_current/1.414;
effective_power = abs(effective_value*effective_voltage/1000.);
power = (int) effective_power;

// Handle REST calls


Adafruit_CC3000_ClientRef client = restServer.available( );
rest.handle(client);

// Check connection
if(!cc3000.checkConnected( )){while(1){}}
wdt_reset( );

// Function to display connection details


booldisplayConnectionDetails(void)
{
uint32_tipAddress, netmask, gateway, dhcpserv, dnsserv;

if(!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv))


{
Serial.println(F(“Unable to retrieve the IP Address!\r\n”));
return false;
}
else
{
Serial.print(F(“\nIPAddr: ”)); cc3000.printIPdotsRev(ipAddress);
Serial.print(F(“\nNetmask: ”)); cc3000.printIPdotsRev(netmask);
Serial.print(F(“\nGateway: ”)); cc3000.printIPdotsRev(gateway);
Serial.print(F(“\nDHCPsrv: ”)); cc3000.printIPdotsRev(dhcpserv);
Serial.print(F(“\nDNSserv: ”)); cc3000.printIPdotsRev(dnsserv);
Serial.println( );
return true;
}
}
// Get the reading from the current sensor
oatgetSensorValue(int pin)
{
intsensorValue;
oatavgSensor = 0;
intnb_measurements = 100;
for (uint8_t i = 0; i<nb_measurements; i++) {
sensorValue = analogRead(pin);
avgSensor = avgSensor + oat(sensorValue);

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.1 · Switch controlado por Wifi y monitoreo de consumo de corriente

}
avgSensor = avgSensor/oat(nb_measurements);
returnavgSensor;
}


-



Monitor serie

-




http://192.168.1.101/digital/8/1





{“message”: “Pin D8 set to 1”, “id”: “001”, “name”: “smart_lamp”,”connected”: true}



http://192.168.1.101/digital/8/0

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi



http://192.168.1.101/power



{“power”: 0, “id”: “001”, “name”: “smart_lamp”, “connected”: true}




4.2 
-




 -
         



-



Creación de diseño

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.2 · Desarrollo de aplicación en Android Studio












@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Declare our View Variables and assign them to the layout elements
Button checkPowerButton = (Button) ndViewById(R.id.checkPowerButton);
Button openTheGateButton = (Button) ndViewById(R.id.openGateButton);
Button switchOnButton = (Button) ndViewById(R.id.switchOnButton);
Button switchOffButton = (Button) ndViewById(R.id.switchOffButton);

checkPowerButton.setOnClickListener(new View.OnClickListener( ) {
@Override
public void onClick(View v) {
if (isNetworkAvailable( )) {
checkPowerTaskgetPowerTask = new checkPowerTask( );
getPowerTask.execute( );
}
}
});

openTheGateButton.setOnClickListener(new View.OnClickListener( ) {
@Override
public void onClick(View v) {
if (isNetworkAvailable( )) {
SwitchOpenTaskswitchOpenTask = new SwitchOpenTask( );
switchOpenTask.execute( );
}
}
});

switchOnButton.setOnClickListener(new View.OnClickListener( ) {

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi

@Override
public void onClick(View v) {
if (isNetworkAvailable( )) {
SwitchOnTaskswitchOnTask = new SwitchOnTask( );
switchOnTask.execute( );
}
}
});

switchOffButton.setOnClickListener(new View.OnClickListener( ) {
@Override
public void onClick(View v) {
if (isNetworkAvailable( )) {
SwitchOffTaskswitchOffTask = new SwitchOffTask( );
switchOffTask.execute( );
}
}
});
}

-

-




-


public static nal String URL = “direcciónIP”;

-


private class SwitchOpenTask extends AsyncTask<Object,Void,String> {


@Override
protected String doInBackground(Object... arg0) {
intresponseCode = -1;
try {
URL restApiUrl = new URL(“http://” + URL + “/mode/8/o”);
HttpURLConnection connection = (HttpURLConnection) restApiUrl.
openConnection( );
connection.connect( );

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.2 · Desarrollo de aplicación en Android Studio

responseCode = connection.getResponseCode( );
Log.i(TAG, “Code” + responseCode);
}
catch(MalformedURLException e) {
Log.e(TAG, “Malformed Exception Caught:”, e);
}
catch(IOException e) {
Log.e(TAG, “IO Exception Caught:”, e);
e.printStackTrace( );
}
catch(Exception e){
Log.e(TAG, “Generic Exception Caught:”, e);
}
return “Code: “ + responseCode;
}
}

private class SwitchOnTask extends AsyncTask<Object,Void,String> {

@Override
protected String doInBackground(Object... arg0) {

intresponseCode = -1;

try {
URL restApiUrl = new URL(“http://” + URL + “/digital/8/1”);
HttpURLConnection connection = (HttpURLConnection) restApiUrl.
openConnection( );
connection.connect( );

responseCode = connection.getResponseCode( );
Log.i(TAG, “Code” + responseCode);
}
catch(MalformedURLException e) {
Log.e(TAG, “Malformed Exception Caught:”, e);
}
catch(IOException e) {
Log.e(TAG, “IO Exception Caught:”, e);
e.printStackTrace( );
}
catch(Exception e){
Log.e(TAG, “Generic Exception Caught:”, e);
}
return “Code: “ + responseCode;

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi

}
}

private class SwitchOffTask extends AsyncTask<Object,Void,String> {

@Override
protected String doInBackground(Object... arg0) {

intresponseCode = -1;

try {
URL restApiUrl = new URL(“http://” + URL + “/digital/8/0”);
HttpURLConnection connection = (HttpURLConnection) restApiUrl.
openConnection( );
connection.connect( );

responseCode = connection.getResponseCode( );
Log.i(TAG, “Code” + responseCode);
}
catch(MalformedURLException e) {
Log.e(TAG, “Malformed Exception Caught:”, e);
}
catch(IOException e) {
Log.e(TAG, “IO Exception Caught:”, e);
e.printStackTrace( );
}
catch(Exception e){
Log.e(TAG, “Generic Exception Caught:”, e);
}

return “Code: “ + responseCode;


}
}

private class checkPowerTask extends AsyncTask<Object,Void,String> {

@Override
protected String doInBackground(Object... arg0) {

intresponseCode = -1;
String result = null;

try {
URL restApiUrl = new URL(“http://” + URL + “/power”);

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.2 · Desarrollo de aplicación en Android Studio

HttpURLConnection connection = (HttpURLConnection) restApiUrl.


openConnection( );
connection.connect( );
responseCode = connection.getResponseCode( );

InputStream is = null;

//http post
try{
String postQuery = “http://” + URL + “/power”;
HttpClienthttpclient = new DefaultHttpClient( );
HttpPosthttppost = new HttpPost(postQuery);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity( );
is = entity.getContent( );

}catch(Exception e){
Log.e(“log_tag”, “Error in http connection “+e.toString( ));
}

//convert response to string


try{
BufferedReader reader = new BufferedReader(new InputStreamReader
(is,”UTF-8”),8);
StringBuildersb = new StringBuilder( );
String line = null;

while ((line = reader.readLine( )) != null) {


sb.append(line + “\n”);
}

is.close( );

result=sb.toString( );
Log.v(TAG,result);

} catch(Exception e){
Log.e(“log_tag”, “Error converting result “+e.toString( ));
}

//parse json data


try {

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi

JSONObjectuserObject = new JSONObject(result);


nal String powerOutputText = userObject.getString(“power”);

activity.runOnUiThread(new Runnable( ) {
@Override
public void run( ) {
TextViewpowerOutput = (TextView) ndViewById(R.id.powerOutput);
powerOutput.setText(powerOutputText + “W”);
}
});
} catch(JSONException e){
Log.e(TAG, “JSON Exception Caught:”, e);
}
}
catch(MalformedURLException e) {
Log.e(TAG, “Malformed Exception Caught:”, e);
}
catch(IOException e) {
Log.e(TAG, “IO Exception Caught:”, e);
e.printStackTrace( );
}
catch(Exception e){
Log.e(TAG, “Generic Exception Caught:”, e);
}
return “Code: “ + responseCode;
}
}

-


privatebooleanisNetworkAvailable( ) {
ConnectivityManager manager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfonetworkInfo = manager.getActiveNetworkInfo( );

booleanisAvailable = false;
if (networkInfo != null &&networkInfo.isConnected( )) {
isAvailable = true;
}
returnisAvailable;
}

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.2 · Desarrollo de aplicación en Android Studio




<uses-permissionandroid:name=“android.permission.INTERNET”/>
<uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE” />
<uses-permission android:name=“android.permission.ACCESS_WIFI_STATE” />


<RelativeLayout
android:layout_width=“ll_parent”
android:layout_height=“ll_parent”
xmlns:android=“http://schemas.android.com/apk/res/android”
android:background=“#ffff2722”>

<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“Prender”
android:id=“@+id/switchOnButton”
android:layout_marginBottom=“100dp”
android:layout_alignParentBottom=“true”
android:layout_alignRight=“@+id/openGateButton”
android:layout_alignEnd=“@+id/openGateButton”
android:layout_marginRight=“66dp”
android:background=“@drawable/button”
android:textColor=“#ffe22e1a”
android:textSize=“15sp”
android:textStyle=“bold”/>

<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“Apagar”
android:id=“@+id/switchOffButton”
android:layout_alignTop=“@+id/switchOnButton”
android:layout_alignLeft=“@+id/openGateButton”
android:layout_alignStart=“@+id/openGateButton”
android:layout_marginLeft=“75dp”
android:background=“@drawable/button”
android:textColor=“#ffe22e1a”
android:textSize=“15sp”
android:textStyle=“bold”/>

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi

<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“Potencia”
android:id=“@+id/checkPowerButton”
android:layout_below=“@+id/switchOffButton”
android:layout_centerHorizontal=”true”
android:background=“@drawable/button”
android:textSize=“15sp”
android:layout_marginTop=“25dp”
android:layout_marginBottom=“25dp”
android:textColor=“#ffe22e1a”
android:textStyle=“bold”/>

<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“100W”
android:textSize=“100sp”
android:id=“@+id/powerOutput”
android:textAlignment=“center”
android:layout_alignParentTop=“true”
android:layout_centerHorizontal=“true”
android:layout_marginTop=“78dp”
android:textColor=“#ffe22e1a”
android:background=“#ff000000” />

<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“Abrir compuerta”
android:id=“@+id/openGateButton”
android:layout_above=“@+id/switchOffButton”
android:layout_centerHorizontal=“true”
android:background=“@drawable/button”
android:textSize=“15sp”
android:layout_marginTop=“25dp”
android:layout_marginBottom=“25dp”
android:textColor=“#ffe22e1a”
android:textStyle=“bold”/>
</RelativeLayout>

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.2 · Desarrollo de aplicación en Android Studio


<?xml version=“1.0” encoding=”utf-8”?>
<shape xmlns:android=“http://schemas.android.com/apk/res/android”>
android:shape=“rectangle” >
<corners
android:radius=“30dp”
/>
<solid
android:color=“#ff000000”
/>
<padding
android:left=“0dp”
android:top=“0dp”
android:right=“0dp”
android:bottom=“0dp”
/>
<size
android:width=“120dp”
android:height=“60dp”
/>
<stroke
android:width=“2dp”
android:color=“#4A90E2”
/>
</shape>

Pantalla de interfaz en referencia al código XML

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi

Para obtener la lectura de la potencia del dispositivo, se deberá primero hacer clic sobre el bo-
-



Interfaz del teléfono

4.3 

-

-
  


-

-


-



 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.4 · Monitoreo de cámara de seguridad remota por Wifi

4.4 
-

-









Requerimientos de hardware y software


Tarjeta Arduino Yun



   

-

 Arduino Yun
 
 
 

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi


-






http://192.168.240.1



http://arduino.local



Pantalla de bienvenida



Conguración de la tarjeta

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.4 · Monitoreo de cámara de seguridad remota por Wifi




Pantalla de comandos



Solicitud de usuario

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi



Solicitud de password



Menú principal de Linux

-


 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.4 · Monitoreo de cámara de seguridad remota por Wifi

Conexión



Ejecución de comando

 
 
 

-


· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi


-



Inserción de tarjeta microSD



Conexión de la cámara USB

-



 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.4 · Monitoreo de cámara de seguridad remota por Wifi






mjpg_streamer -i “input_uvc.so -d /dev/video0 -r 640x480 -f 25” -o


“output_http.so -p 8080 -w /www/webcam” &





opkg install nano



nano /etc/cong/mjpg-streamer



congmjpg-streamer core
option enabled “1”
option device “/dev/video0”
option resolution “640x480”
option fps “30”
option www “/www/webcam”
option port “8080”



/etc/init.d/mjpg-streamer enable
/etc/init.d/mjpg-streamer stop
/etc/init.d/mjpg-streamer start



-


http://arduino.local:8080

http://192.168.1.108:8080 para cambiar la direc-




· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi



Pantalla Stream




<?xml version=“1.0” encoding=”utf-8”?>


<manifest xmlns:android=“http://schemas.android.com/apk/res/android”
package=“com.arduinoandroid.androidyunsecurity” >

<uses-permissionandroid:name=“android.permission.ACCESS_WIFI_STATE”/>
<uses-permissionandroid:name=“android.permission.INTERNET”/>

<application
android:allowBackup=“true”
android:icon=“@drawable/ic_launcher”
android:label=“@string/app_name”
android:theme=“@style/AppTheme” >
<activity
android:name=“.StreamActivity”
android:label=“@string/app_name” >
<intent-lter>
<action android:name=“android.intent.action.MAIN” />
<category android:name=“android.intent.category.LAUNCHER” />
</intent-lter>
</activity>
</application>
</manifest>

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.4 · Monitoreo de cámara de seguridad remota por Wifi

Clase StreamActivity.java
public class StreamActivity extends Activity {
private static nal String TAG = “MjpegActivity”;

privateMjpegView mv;

public void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);

//Cambiar la Dirección IP por la que tienen tu tarjeta Arduino YUN


String URL = “http://192.168.1.108:8080/?action=stream”;

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow( ).setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

mv = new MjpegView(this);
setContentView(mv);

newDoRead( ).execute(URL);
}
public void onPause( ) {
super.onPause( );
mv.stopPlayback( );
}
public class DoRead extends AsyncTask<String, Void, MjpegInputStream> {
protectedMjpegInputStreamdoInBackground(String... url) {
//TODO: if camera has authentication deal with it and don’t just
not work
HttpResponse res = null;
DefaultHttpClienthttpclient = new DefaultHttpClient( );
Log.d(TAG, “1. Sending http request”);
try {
res = httpclient.execute(new HttpGet(URI.create(url[0])));
Log.d(TAG, “2. Request nished, status = “ + res.getStatusLine( ).getStatus-
Code( ));
if(res.getStatusLine( ).getStatusCode( )==401){
//You must turn off camera User Access Control before this
will work
return null;
}
return new MjpegInputStream(res.getEntity( ).getContent( ));
} catch (ClientProtocolException e) {
e.printStackTrace( );

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi

Log.d(TAG, “Request failed-ClientProtocolException”, e);


//Error connecting to camera
} catch (IOException e) {
e.printStackTrace( );
Log.d(TAG, “Request failed-IOException”, e);
//Error connecting to camera
}
return null;
}
protected void onPostExecute(MjpegInputStream result) {
mv.setSource(result);
mv.setDisplayMode(MjpegView.SIZE_BEST_FIT);
mv.showFps(true);
}
}
}

Clase MjpegInputStream.java

public class MjpegInputStream extends DataInputStream {


private static nal String TAG = “MjpegInputStream”;

private nal byte[ ] SOI_MARKER = { (byte) 0xFF, (byte) 0xD8 };


private nal byte[ ] EOF_MARKER = { (byte) 0xFF, (byte) 0xD9 };
private nal String CONTENT_LENGTH = “Content-Length”;
private nal static int HEADER_MAX_LENGTH = 100;
private nal static int FRAME_MAX_LENGTH = 40000 + HEADER_MAX_LENGTH;
privateintmContentLength = -1;

publicMjpegInputStream(InputStream in) {
super(new BufferedInputStream(in, FRAME_MAX_LENGTH));
}

privateintgetEndOfSeqeunce(DataInputStream in, byte[ ] sequence) throws


IOException {
intseqIndex = 0;
byte c;
for(inti=0; i< FRAME_MAX_LENGTH; i++) {
c = (byte) in.readUnsignedByte( );
if(c == sequence[seqIndex]) {
seqIndex++;
if(seqIndex == sequence.length) {
returni + 1;
}

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
4.4 · Monitoreo de cámara de seguridad remota por Wifi

} else {
seqIndex = 0;
}
}
return -1;
}

privateintgetStartOfSequence(DataInputStream in, byte[ ] sequence) throws


IOException {
int end = getEndOfSeqeunce(in, sequence);
return (end < 0) ? (-1) : (end - sequence.length);
}
privateintparseContentLength(byte[ ] headerBytes) throws IOException,
NumberFormatException {
ByteArrayInputStreamheaderIn = new ByteArrayInputStream(headerBytes);
Properties props = new Properties( );
props.load(headerIn);
returnInteger.parseInt(props.getProperty(CONTENT_LENGTH));
}
public Bitmap readMjpegFrame( ) throws IOException {
mark(FRAME_MAX_LENGTH);
intheaderLen = getStartOfSequence(this, SOI_MARKER);
reset( );
byte[ ] header = new byte[headerLen];
readFully(header);
try {
mContentLength = parseContentLength(header);
} catch (NumberFormatExceptionnfe) {
nfe.getStackTrace( );
Log.d(TAG, “catch NumberFormatException hit”, nfe);
mContentLength = getEndOfSeqeunce(this, EOF_MARKER);
}
reset( );
byte[ ] frameData = new byte[mContentLength];
skipBytes(headerLen);
readFully(frameData);
returnBitmapFactory.decodeStream(new ByteArrayInputStream(frameData));
}
}


           
está disponible en http://git.io/_Mu_Gw



· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 4 · Conectividad por Wifi

-

-





Resultado del proyecto

4.4.1 

incluir la capacidad de tomar una foto instantánea cuando se detecta movimiento delante de
-


http://opencv.org/platforms/android.html

Además, la interfaz de usuario podría mejorarse para incluir la capacidad de tomar una imagen
-
-


 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Resumen

RESUMEN
Se ha creado una versión DIY de un interruptor de alimentación inteligente basado en Ardui-
no y controlado por una aplicación de Android vía Wifi. Se conectaron todos los componentes
necesarios, se escribió un boceto de Arduino para aceptar comandos vía Wifi y, finalmente, se
creó una aplicación de Android para controlar el switch de forma remota.

Se aprendió cómo conectar una cámara USB a la tarjeta ArduinoYun, a configurar la tarjeta
Arduino para que transmita el video a la red Wifi local. Luego se creó una nueva aplicación
de Android para verificar la secuencia de video de la cámara en el teléfono o tablet Android;
por lo tanto, se creó una sencilla cámara de seguridad Wifi basada en Arduino y Android.

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo

MEDIANTE
5
byYako1976 identi.io
Control

Ethernet

Contenido Objetivo
5.1 Introducción a los servicios web En este capítulo se utilizará el shield ether-
RESTful net para interactuar desde una aplicación
5.1.1 Los cuatro principios de Android; se desarrollarán aplicaciones pa-
REST ra monitorear y controlar la tarjeta Arduino
desde un teléfono móvil a través de comu-
5.1.2 aREST framework en
nicación de red ethernet, se explicarán los
aplicaciones para Arduino
aspectos fundamentales de los servicios
5.2 App Inventor web para interactuar entre las plataformas
5.2.1 Código en forma de Arduino y Android, el lector realizará varios
bloques proyectos de aplicación con la integración
de ambas tecnologías.
5.2.2 Descarga de App Inventor
5.3 Proyectos de aplicaciones entre
APP Inventor y Arduino
Resumen
Capítulo 5 · Control mediante Ethernet


La Transferencia de Estado Representacional (REST-Representational State Transfer) ganó
amplia aceptación en toda la web como una alternativa más simple a SOAP y a los servicios
web basados en el Lenguaje de Descripción de Servicios Web (Web Services Descripcion Lan-
guage-WSDL). Actualmente grandes proveedores de Web 2.0 migran a esta tecnología, como
Yahoo, Google y Facebook, quienes marcaron como obsoletos a sus servicios SOAP y WSDL, y
ahora usan un modelo más fácil orientado a los recursos.





la web que prácticamente desplazó a SOAP y a las interfaces basadas en WSDL, ello por tener
un estilo más simple de usar.


-
damentales:

 Utiliza los métodos HTTP de manera explícita


 No mantiene estado
 Expone URL con forma de directorios
 

JSON

-
nas es fácil interpretarlo y generarlo. Está basado en un subconjunto del Lenguaje de Progra-


 -




Este lenguaje está constituido por dos estructuras:

 Una colección de pares de nombre/valor. En varios lenguajes esto se conoce como


un objeto, registro, estructura, diccionario, tabla hash, lista de claves o un arreglo
asociativo.

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.1 · Introducción a los servicios web RESTful

 Una lista ordenada de valores. En la mayoría de los lenguajes, esto se implementa


como arreglos, vectores, listas o secuencias.


las soportan de una forma u otra. Es razonable que un formato de intercambio de datos que es
independiente del lenguaje de programación se base en estas estructuras.



Un  es un conjunto desordenado de pares nombre/valor. Un objeto comienza



puntos) y los pares nombre/valor están separados por , (coma).

Objeto

Un 
(corchete derecho). Los valores se separan por, (coma).

Arreglo

Un  puede ser una cadena de caracteres con comillas dobles o un número, o bien, true, fal-
se, null, un objeto o un arreglo. Estas estructuras pueden anidarse.

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

Valor

Una  es una colección de cero o más caracteres Unicode, encerrados


-
presenta por una cadena de un único carácter. Toda la cadena es parecida a una de caracteres


Cadena de caracteres

Un -
males.

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.1 · Introducción a los servicios web RESTful

Número

Los espacios en blanco pueden insertarse entre cualquier par de símbolos.




AREST fue creado para comunicar a través de servicios RESTful varias tarjetas y dispositivos
embebidos y plataformas. En pocas palabras, la librería permite enviar comandos a una tabla
dada donde se ejecutan aREST, provocan una acción (o simplemente obtienen algunos datos),


               
-
vía el comando:




{“Mensaje”: “Pin D6 establece en 1”, “id”: “1”, “name”: “Arduino”,


“conectado”: true}

Funciones básicas

el estado de los pines, etc., a continuación se explican las funciones para cada caso:

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet



/{device_id}/mode/{pin_number}/o
/{device_id}/mode/{pin_number}/i

:

-




/{device_id}/digital/{pin_number}/1
/{device_id}/digital/{pin_number}/0

:

192.168.1.104/digital/6/1




/{device_id}/digital/{pin_number}



192.168.1.104/digital/6




/{device_id}/analog/{pin_number}



192.168.1.104/analog/0




/{device_id}/analog/{pin_number}/{value}

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · App Inventor



192.168.1.104/analog/6/200




Para la lectura de variables ligada a una lectura de un sensor o cualquier dato.

Se expone el nombre de la variable:

rest.variable(“temperature”, &temperature);



Para acceder al valor:

192.168.1.104/temperatura
donde: temperatura es la variable que se publicó con el valor asignado.


 es un entorno de desarrollo de software creado por Google Labs para la elabo-
ración de aplicaciones destinadas al sistema operativo Android. El usuario puede, de forma vi-
sual y a partir de un conjunto de herramientas básicas, enlazar una serie de bloques para crear
la aplicación.

El sistema es gratuito y se puede descargar fácilmente de la Web. Las aplicaciones creadas


con App Inventor están limitadas por su simplicidad, aunque permiten cubrir un gran número
-
mento importante en el número de aplicaciones para Android debido a dos grandes factores: la
simplicidad de uso, que facilitará la aparición de un gran número de nuevas aplicaciones y Goo-
gle Play, el centro de distribución de aplicaciones para Android donde cualquier usuario puede
distribuir sus creaciones libremente.

-
ciones como si fueran piezas de un rompecabezas. Se utilizará App inventor para realizar pro-
gramas propios. Lo que sí es necesario es estar conectado a Internet para utilizar App inventor.


En la siguiente imagen se hace referencia a la manera en que se lleva a cabo la programación
por bloques:

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

Código en forma de bloques

A continuación se presentan los bloques de programación:

Bloques y sus colores



Representa los bloques de las instrucciones de control como condiciones, ciclos:


for, while, cierre de la aplicación, inicialización de la pantalla, etc.

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · App Inventor

 Sirve para realizar operaciones lógicas, true y false, AND, OR, Not.
 Realiza operaciones matemáticas.
 Realiza operaciones con caracteres y cadenas de texto.

Permite establecer colores.
 Permiten guardar el estado de un valor, se asigna un valor o se obtiene.



App Inventor no es un programa que se tenga que bajar de la computadora. Funciona en cloud
computing mediante la conexión a Internet: se trabaja con el programa conectado directamen-
te al servidor de App Inventor. Es una especie de página web y en ella se realizan las operacio-



Servidor de App Inventor

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet



A continuación se desarrollarán algunos proyectos con base en lo visto en el presente y ante-
riores apartados.


Desde un dispositivo móvil se realizará el control de un relevador conectado a la tarjeta Ardui-
no a través de la red Ethernet.



 Tarjeta Arduino UNO


 Shield Ethernet
 
 Router inalámbrico

Aplicación en App Inventor


Para realizar la conexión entre el dispositivo móvil y la tarjeta Ethernet shield es necesario uti-
lizar el objeto connectivity llamado Web:

Objeto Connectivity

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

Algunos bloques principales del objeto Web son:

Estos bloques permiten obtener in-


formación desde un archivo o a tra-
vés de texto.

Realiza la petición HTTP GET.


Manda llamar a Web y toma el valor
en formato html.
Manda llamar a Web y toma el valor
en formato json.

Permite asignar al objeto Web una


URL, previamente identificada.
Sirve para especificar una URL
directamente después de to.
El objeto Web es asignado a otro
bloque requerido.
Serie de bloques

Interfaz de control
Se tienen dos botones que se agregaron a la pantalla.

Botones de la interfaz

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

Diagrama a bloques de la aplicación



el comando correspondiente para escribir sobre la placa Arduino a través de Ethernet:

Bloque setweb1



// Libraries
#include <SPI.h>
#include <Ethernet.h>
#include <aREST.h>
#include <avr/wdt.h>

// Libraries
#include “DHT.h”

// DHT sensor
#dene DHTPIN 7
#dene DHTTYPE DHT11

// DHT instance
DHT dht(DHTPIN, DHTTYPE);

// Enter a MAC address for your controller below.


byte mac[ ] = { 0x90, 0xA2, 0xDA, 0x00, 0x0A, 0xC2 };

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

// IP address in case DHCP fails


IPAddress ip(192,168,1,50);

// Ethernet server
EthernetServer server(80);

// Create aREST instance


aREST rest = aREST( );

// Variables to be exposed to the API


int temperature;
int humidity;

void setup(void)
{
// Start Serial
Serial.begin(115200);

// Init DHT
dht.begin( );

pinMode(2,INPUT_PULLUP);
pinMode(7,OUTPUT);

rest.variable(“temperature”,&temperature);
rest.variable(“humidity”,&humidity);

// Function to be exposed
rest.function(“led”,ledControl);

// Give name and ID to device


rest.set_id(“008”);
rest.set_name(“dapper_drake”);

// Start the Ethernet connection and the server


if (Ethernet.begin(mac) == 0) {
Serial.println(“Failed to congure Ethernet using DHCP”);
// no point in carrying on, so do nothing forevermore:
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
}
server.begin( );
Serial.print(“server is at “);
Serial.println(Ethernet.localIP( ));

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

// Start watchdog
wdt_enable(WDTO_4S);
}

void loop( ) {

// Measure from DHT


temperature = dht.readTemperature( );
humidity = dht.readHumidity( );

// listen for incoming clients


EthernetClient client = server.available( );
rest.handle(client);
wdt_reset( );

// Custom function accessible by the API


int ledControl(String command) {

// Get state from command


int state = command.toInt( );

digitalWrite(6,state);
return 1;
}


apagarlo desde la aplicación, a continuación se muestra la pantalla del teléfono:

Pantalla del teléfono

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino


-
duino para leer la temperatura y humedad en el mismo dispositivo móvil.

Interfaz de la aplicación
Se insertaron dos botones, cada uno solicita el valor de la temperatura y humedad respectiva-
mente:

byYako1976 identi.io
Botones de temperatura y humedad

Diagrama a bloques

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet


obtener la lectura del sensor es necesario presionar los botones.

Pantalla del teléfono

Aplicación del objeto Clock


-
          
cierto lapso.

Paleta de sensores

    



recursos del teléfono y de forma automática mandar a llamar al servicio GET.

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

Conguración del objeto Clock en la pantalla

Diagrama a bloques

A continuación, se muestra la pantalla de monitoreo:

Pantalla de monitoreo

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet


En este proyecto se obtiene la lectura del estado del botón a través de la petición GET desde la
aplicación en Android, a continuación se muestra la interfaz del proyecto.

Interfaz del proyecto

Diagrama a bloques

Se muestra la pantalla cuando el botón conectado a la entrada digital 2 de la tarjeta Arduino


no está presionado:

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

Estado del botón

Se muestra la pantalla para cuando se presiona el botón:

Estado del botón al presionarse

Control de Dimmer desde una aplicación Android (deslizador)


-



Se mueve el deslizador y después de presiona el botón Enviar valor:

Botón Enviar valor

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

Diagrama a bloques
Es importante considerar que se está concatenando el valor que se envía a través de la direc-


Código de la aplicación del evento slider

La pantalla de inicio antes de enviar el valor desde la aplicación es la siguiente:

Pantalla antes del envío del valor

Se muestra la pantalla después de mover el deslizador y presionar el botón Enviar valor:

Pantalla después del envío del valor

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

Dashboard para controlar tarjeta ESP8266


En el siguiente proyecto se realizará una aplicación en Android para controlar la tarjeta
-
gen de la tarjeta a controlar.

Tarjeta ESP8266

-


Arquitectura de la tarjeta

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

Topología de comunicación
A continuación se muestra la arquitectura de comunicación entre ambos dispositivos, mismos


Arquitectura de la comunicación

Interfaz de la aplicación
En la siguiente imagen se muestra la pantalla para controlar las dos salidas de la tarjeta

dirección IP permite guardar la dirección a la que se desea conectar, mientras que la etiqueta


Pantalla de control de salidas

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

Diagrama a bloques de la aplicación


En este proyecto se utilizará un nuevo objeto TinyDB, el cual permite almacenar una base de

en la misma y, cuando se cierra el proyecto en el teléfono móvil, ese valor ya no queda almace-
-
ción IP a la que se conectará la aplicación en Android.

Objeto TinyDB

Manda llamar el objeto TinyDB con su valor previamente almacenado, en Tag se es-
cribe la variable donde se guardó el dato.

Manda llamar al objeto TinyDB y almacena lo que se pretende guardar en la variable


especificada. Donde dice Tag y en valueToStore se escribe lo que se pretende guardar.

Principales funciones del objeto TinyDB

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

A continuación se muestran los bloques de la aplicación:

a) Inicio de pantalla: cuando ésta inicia se cargan los valores almacenados.

Inicio de pantalla

b) Botón para guardar la dirección IP.

Guardar dirección

c) Botón para mostrar la dirección y capturarla.

Muestra de dirección

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

d) Botones de control.

Salida GPIO0 para encender

Salida GPIO0 para apagar

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

Salida GPIO5 para encender

Salida GPIO5 para apagar

Código de Arduino:
// Librerias a utilizar
#include <ESP8266WiFi.h>

// Parametros de red WiFi

const char* ssid = “linksys”; // nombre de la red WiFi


const char* password = “ce_acatl”; // password

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

// Crea una instancia del servidor por el puerto 80


WiFiServer server(80);
// Pin a utilizar
int output_pin = 0;
int output_pin2 = 5;

void setup( ) {
// Inicializa Serial
Serial.begin(115200);
delay(10);

// Congura GPIOS
pinMode(output_pin, OUTPUT);
digitalWrite(output_pin, 0);
pinMode(output_pin2, OUTPUT);
digitalWrite(output_pin2, 0);

// Conecta a la red WiFi


Serial.println( );
Serial.println( );
WiFi.begin(ssid, password);
// mientras espera la conexión, muestra ....
while (WiFi.status( ) != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}

// si ya se conectó:

Serial.println(“”);
Serial.println(“WiFi conectado”);

// Inicializa el servidor
server.begin( );
Serial.println(“Iniciando Servidor”);

// Muestra por el serial la IP asignada


Serial.println(WiFi.localIP( ));
}
void loop( )
{
// Checa si un cliente se ha conectado
WiFiClient client = server.available( );

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

if (!client) {
return;
}

// espera aqui hasta que el cliente envie algun dato


Serial.println(“nuevo Cliente”);
while(!client.available( )){
delay(1);
}

// Lee la primera línea de respuesta del cliente:


String req = client.readStringUntil(‘\r’);
Serial.println(req);
client.ush( );

// Compara la respuesta:
if (req.indexOf(“D1_LED_H”) != -1){
// activa el Led
digitalWrite(output_pin, 1);
}

if (req.indexOf(“D1_LED_L”) != -1){
// apaga el led
digitalWrite(output_pin, 0);
}

if (req.indexOf(“D2_LED_H”) != -1){
// activa el Led
digitalWrite(output_pin2, 1);
}

if (req.indexOf(“D2_LED_L”) != -1){
// apaga el led
digitalWrite(output_pin2, 0);
}

client.ush( ); // limpia buffer de datos del cliente

// Envía el código al cliente


delay(1);
Serial.println(“Cliente desconectado”);
}

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
5.3 · Proyectos de aplicaciones entre APP Inventor y Arduino

Después de descargar el sketch en la placa, se debe abrir el monitor serial de Arduino, presio-
nar el botón Reset y si todo se cargó correctamente, el dispositivo se conectó al router inalám-
brico por lo que debe de aparecer la pantalla siguiente:

Pantalla de resultado

La dirección IP que asignó el router de forma automática se muestra en el monitor serial, esa
dirección se debe de colocar en la aplicación de Android para conectarse.

-
ción IP es necesario hacer clic en el botón Guardar dirección IP, después se debe de capturar la


Aplicación de control

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 5 · Control mediante Ethernet

A continuación se muestra la pantalla de control donde se pueden ver las etiquetas de los esta-
dos en que se encuentran las salidas GPIO a controlar:

Pantalla de control

En la siguiente pantalla se observa la respuesta obtenida cuando se solicita una petición a la




Respuesta de petición a la tarjeta

 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Resumen

RESUMEN
En este capítulo se estudiaron los aspectos de la comunicación en Ethernet con la aplicación
de los servicios web en la plataforma de Arduino; ello con el fin de realizar aplicaciones en el
ambiente IDE de APP inventor y desarrollar proyectos para instalarlos en teléfonos móviles con
sistema operativo Android. La integración de ambas plataformas permite escalar las áreas de
oportunidad para interactuar con ambas tecnologías y luego llevar a cabo proyectos reales.

En el siguiente capítulo se estudiarán aplicaciones en Android para relojes y televisiones in-


teligentes, y su integración con la plataforma Arduino.

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo

DE CONTROL PARA
6Aplicaciones

smartwatches

Contenido Objetivo
6.1 Android Wear Identificar la arquitectura de una aplicación
6.1.1 Aplicación de Android Wear, es decir, los elementos que
Android Wearables contiene. Se creará un ejemplo en el entor-
no IDE de Android Studio, se estudiará su
6.1.2 Arquitectura de
configuración y se generará un dispositivo
Android Wear
virtual simulado en el AVD Manager de An-
6.2 Configuración del entorno droid Studio. Se integrarán ambas aplicacio-
de desarrollo nes para la comunicación entre la tarjeta Ar-
6.3 Instalación y configuración duino, un dispositivo móvil y un smartwatch.
del emulador Android (AVD) Asimismo, se conocerán los aspectos fun-
damentales para tener las herramientas y
Resumen
habilidades en el desarrollo de proyectos de
aplicación por medio de estas tecnologías.
Capítulo 6 · Aplicaciones de control para smartwatches


Una de las características importantes de la plataforma de Android Wear es la capacidad de de-
sarrollo que se puede tener con estos dispositivos; cuando Google anunció su elaboración, en
marzo de 2014, los desarrolladores se entusiasmaron pues tendrían oportunidad de compro-
bar qué tipo de aplicaciones se podrían crear para comunicar el dispositivo portátil Android y
-
vos que se pudieran añadir a la ropa y que vienen con el sistema Android, tuvieran la ventaja
de que, al estar conectados entre sí, se pudieran manejar desde un smartwatch al recibir un


-
cesarias para la plataforma Android Wear de Google, la cual permite que el dispositivo weara-
-





 Android Wear
 
 Arquitectura de Android Wear
 
 
 Creación de un proyecto Android Wear


Android y Android Wear, por lo que en las secciones siguientes se creará una aplicación de no-




-
les en el mundo de los dispositivos inteligentes basado en el sistema operativo Android, el cual
se ha diseñado para dispositivos informáticos portátiles tales como smartwatches, lo cual les


  


-
tancia e información adicional; dicho dispositivo se coloca en la muñeca del usuario para así



162 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.1 · Android Wear


Android Wear funciona mediante la comunicación inalámbrica a través de Bluetooth entre un
 -

-



-



documentos de guía de diseño que se centran principalmente en material de este tema para

para crear interacción visual y de movimiento a través de cada una de las diversas plataformas


-
sarrolladores tienen la necesidad de asegurar que al diseñar sus aplicaciones, éstas funcionan
-
te al diseñar el reloj personalizado con aplicaciones que usan la funcionalidad del servicio de



-



Arquitectura entre dispositivos

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 6 · Aplicaciones de control para smartwatches

  









              
nodos conectados o desconectados que se hayan establecido en el wearable, utiliza

-
rable al dispositivo de mano con el que está sincronizado, y con el que el usuario ha
    


 
mensajes cortos a cada uno de los nodos de red conectados entre el wearable y el disposi-



 
conectados con Android y el dispositivo de mano, y se encarga de proporcionar el me-



encuentra en modo desconectado en el teléfono inteligente emparejado, los datos son transfe-

-





  


        




164 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.2 · Configuración del entorno de desarrollo

SDK Manager

 

Paquete Android 4.4W API 20

 

Instalación de paquetes

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 6 · Aplicaciones de control para smartwatches

 

     



a su vez un conjunto diferente de características que ayudan a mejorar la apariencia de la apli-




aplicaciones aprovechar las características nuevas y mejoradas de los dispositivos con Android



 

Pestaña SDK Tools

-

-


166 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Instalación y configuración del emulador Android [AVD]



 -


Emulador de Android AVD




Ventana de conguración

 Hacer clic en el botón Create a virtual device, aparecen los diferentes tipos de dispositi-
vos en sus respectivas categorías para crear un dispositivo virtual, en este caso creare-


Tipos de dispositivos

· Rubén & Juan Tomás Oliva Ramos · 167


Capítulo 6 · Aplicaciones de control para smartwatches

 

Paquete con sistema del dispositivo virtual

 

Vericación de la conguración

168 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]

 

Dispositivos creados

Creación de una aplicación para Android Wear




Ventana principal de Android Studio

· Rubén & Juan Tomás Oliva Ramos · 169


Capítulo 6 · Aplicaciones de control para smartwatches

Start a new
Android Studio Project

Creación de nuevo proyecto

Aparece la ventana donde se crearán las aplicaciones en los dispositivos y en sus plataformas,
-



Selección de elementos

             


170 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]

Ventana para aplicación Mobile



Nombre de actividad principal

· Rubén & Juan Tomás Oliva Ramos · 171


Capítulo 6 · Aplicaciones de control para smartwatches

Creación del componente de la actividad en el proyecto Android Wear




Selección de actividad en blanco



Captura del nombre de actividad

172 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]

-


Carpetas Mobile y Wear

Clase mainactivity en el moduloWear:


packagecom.example.pc.helloandroidwear2;

importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.support.wearable.view.WatchViewStub;
importandroid.widget.TextView;
publicclassMainActivityextendsActivity {

privateTextViewmTextView;
@Override
protectedvoidonCreate(BundlesavedInstanceState) {
uper.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nal WatchViewStubstub = (WatchViewStub) ndViewById(R.id.watch_view_stub);
stub.setOnLayoutInatedListener(new WatchViewStub.OnLayoutInatedListener( )
{
@Override
publicvoidonLayoutInated(WatchViewStubstub) {
mTextView = (TextView) stub.ndViewById(R.id.text);
}
});
}
}

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 6 · Aplicaciones de control para smartwatches

Código XML de la interfaz del reloj


<?xml version=“1.0” encoding=“utf-8”?>
<LinearLayoutxmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:background=“@android:color/holo_blue_light”
android:orientation=“vertical”
tools:context=“.MainActivity”
tools:deviceIds=“wear_square”>

<TextView
android:id=“@+id/text”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“@string/hello_square”
android:textColor=“@color/black” />
</LinearLayout>



Interfaz de aplicación

174 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]

Depuración de la aplicación en el dispositivo virtual


Ahora se muestra la instalación de la aplicación en el dispositivo emulado, aparece la ventana


Instalación de la aplicación




Dispositivo de descarga

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 6 · Aplicaciones de control para smartwatches

-
bre del dispositivo emulador creado en el administrador de dispositivos virtuales de Android


Selección del emulador

Selección del dispositivo

176 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]

-
-


Ejecución del emulador



Ejecución del emulador con aplicación

Una vez que el emulador se ha lanzado y después de unos momentos, se muestra la aplicación


Aplicación de notificaciones en el dispositivo móvil y smartwatch



-




 
 

· Rubén & Juan Tomás Oliva Ramos · 177


Capítulo 6 · Aplicaciones de control para smartwatches

 
 

Funcionamiento de la aplicación



Código de aplicación

178 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]



Recepción de noticación

Actividad principal
package com.ejemplos.weardemo5;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.Uri;
import android.support.v4.app.NoticationCompat;
import android.support.v4.app.NoticationManagerCompat;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivityextends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

· Rubén & Juan Tomás Oliva Ramos · 179


Capítulo 6 · Aplicaciones de control para smartwatches

Button boton = (Button) ndViewById(R.id.boton_noticacion);


boton.setOnClickListener(new View.OnClickListener( ) {
@Override
public void onClick(View v) {
enviarNoticacion( );
}
});
}

public void enviarNoticacion( ) {


Intent actionIntent = new Intent(this, Noticacion.class);
PendingIntentactionPendingIntent = PendingIntent.getActivity(this, 0,
actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NoticationCompat.BigTextStylebigStyle = new NoticationCompat.


BigTextStyle( );
bigStyle.bigText(“Podemosmostrar un mensajeextenso, con mucho texto”);

Intent smsIntent = new Intent(Intent.ACTION_VIEW);


Uri smsUri = Uri.parse(“sms:123456789”);
smsIntent.setData(smsUri);
PendingIntentsmsPendingIntent = PendingIntent.getActivity(this, 0,
smsIntent, 0);

NoticationCompat.BuildernoticationBuilder =
new NoticationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_noticacion)
.setContentTitle(“Alerta”)
.setContentText(“Este es un avisocorto”)
.setContentIntent(actionPendingIntent)
.setStyle(bigStyle)
.addAction(android.R.drawable.ic_menu_send, “Enviar
SMS”, smsPendingIntent);

NoticationManagerCompatnoticationManager = NoticationManagerCompat.
from(this);

noticationManager.notify(500, noticationBuilder.build( ));


}
}

180 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]



Aplicación



Botón Aplicación

· Rubén & Juan Tomás Oliva Ramos · 181


Capítulo 6 · Aplicaciones de control para smartwatches



Respuesta vía SMS



Opción de envío de mensaje

182 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]



Opción de abrir



Recepción de la noticación

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 6 · Aplicaciones de control para smartwatches

-


Proyectos de aplicación (inspiración y creatividad)




 
 
 

Conexión entre Android y Android Wear y Arduino

 

 
 

Conexión Wi entre Arduino y Android

184 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
6.3 · Instalación y configuración del emulador Android [AVD]

Sistema de monitoreo ambiental






Sistema de monitoreo ambiental






 
 
 

Notificaciones:
 -
tablecido
 Cuando está lloviendo
 Cuando está nublado
 
 

Acciones de control:
 

· Rubén & Juan Tomás Oliva Ramos · 


Capítulo 6 · Aplicaciones de control para smartwatches

Otros escenarios:
 Crear una operadora de llamadas

 

 
y contestar

RESUMEN
En este capítulo se abordaron temas de suma importancia respecto de las aplicaciones en
smartwatches y su relación con los dispositivos móviles con Android, se crearon aplicacio-
nes en el ambiente de desarrollo de Android Studio y un proyecto para Android Wear, ade-
más de ciertas funciones como son: notificación de acontecimientos desde la lectura de un
sensor de temperatura, conocimiento del estado de un sensor y notificación en un dispositi-
vo Android Wear.

En el siguiente capítulo se estudiarán las aplicaciones de control para Smart TV y su uso en


el mundo real para el control y monitoreo de dispositivos a distancia.

186 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Capítulo

7
DE CONTROL
Aplicaciones

para Smart TV

Contenido Objetivo
7.1 Creación de interfaces para Android TV Conocer los aspectos fundamentales y la ar-
7.1.1 Creación de una aplicación quitectura de una aplicación para Smart TV
Android TV y Android TV, con el objetivo de desarrollar
7.2 Introducción al led infrarrojo IR aplicaciones de control y monitoreo para te-
7.2.1 ¿Qué es un led IR? levisiones con Android.
7.2.2 Aplicaciones del led IR/
Se realizará un ejemplo de aplicación pa-
comunicación IR
ra Smart TV en el ambiente de Android Stu-
7.2.3 Sensores IR
7.2.4 Programación básica de un dio, además de algunos proyectos con dis-
sensor IR positivos electrónicos y Arduino para lograr
7.3 Control remoto de dispositivos el control y automatización de una televisión
infrarrojos IR e integrarla a un esquema de conectividad;
7.3.1 Control de volumen de la para ello, se usará como medio de control
televisión infrarrojo con una tarjeta Arduino y una aplicación Android
Arduino y remoto desde un Smartphone.
Resumen
Capítulo 7 · Aplicaciones de control para Smart TV


En este capítulo se proporcionan los antecedentes y la comprensión de cómo se puede
efectivamente diseñar y personalizar interfaces de usuario para Android TV. Cuando Google
anunció la plataforma de Android TV durante su conferencia Google I/O en 2014, su visión
era crear una experiencia de televisión altamente interactiva y conectada que aprovechara
la funcionalidad existente en la plataforma de Android.

Google también proporcionó a los consumidores la opción de comprar una TV inteligente


con la plataforma incorporada o, alternativamente, añadir Android TV al televisor existente
mediante la compra de un set-top box independiente, como el Nexus Q.

Android TV esencialmente aporta aplicaciones y funcionalidades con las que los usuarios
disfrutan al trabajar en sus dispositivos Android más pequeños, pero con la capacidad adicio-
nal de descargar aplicaciones de Android TV desde Google Play Store.

También proporciona una plataforma que admite Google Cast, ello permite emitir contenido
desde el smartphone o tablet a un dispositivo Android TV para que la experiencia de visualiza-
ción sea mucho más emocionante y utilizable desde un sofá en la comodidad del hogar.


En esta sección se verá cómo crear una aplicación de Android TV con el uso de una plantilla
predeterminada que proporciona Android Studio.

En primer lugar, se debe generar un nuevo proyecto en Android Studio con los siguientes pasos:

1. Iniciar Android Studio y, a continuación, hacer clic en Archivo | Nuevo proyecto Opción
del menú.
2. Enseguida, ingresar AndroidTVInterfaces para el campo Nombre de la aplicación.
3. Luego, proporcionar el nombre del campo de dominio de la empresa.
4. Ahora, elegir la ubicación del proyecto donde se desea guardar el código de la aplicación:

Pantalla de conguración del proyecto

188 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.1 · Creación de interfaces para Android TV

5. Hacer clic en el botón Siguiente (Next).


tivos Android que la aplicación ejecutará. En esta pantalla se elegirá la versión SDK
mínima para el televisor.

6. Hacer clic en la opción TV y elegir API 21: Android 5.0 (Lollipop) para SDK mínimo:

Opción TV

7. Hacer clic en el botón Siguiente (Next).


Luego, se tendrá que añadir la actividad de Android TV a la aplicación para la sección
de TV.
8. En la pantalla Añadir una actividad a la TV, elegir la actividad de Android TV de la lista
mostrada y hacer clic en el botón Siguiente (Next) para continuar:

Añadir una actividad a la TV

· Rubén & Juan Tomás Oliva Ramos · 189


Capítulo 7 · Aplicaciones de control para Smart TV

A continuación, es necesario personalizar las propiedades de la actividad de Android TV



información de diseño, el título y archivos de fragmentos de diseño.

9. En la pantalla Personalizar la actividad, ingresar MainActivity for Activity y hacer clic en


el botón Siguiente (Next) para continuar:

byYako1976 identi.io

Pantalla Personalizar la actividad

10. Por último, hacer clic en el botón Finalizar y el asistente generará el proyecto, después de
unos momentos éste aparecerá en la ventana de Android Studio.

En la próxima sección se verá cómo crear actividad y fragmentos para personalizar la aparien-
cia de una interfaz de usuario de Android TV.


En el mundo de la tecnología inalámbrica, los led IR (infrarrojos) son comunes, de bajo costo y
fáciles de usar. Un televisor remoto utiliza led IR para enviar la señal. Como la longitud de onda
de la luz emitida por el led es más larga que la luz visible, no se puede ver a simple vista. Pero,
si se mira a través de la cámara del teléfono o de cualquier otra cámara, se puede ver la luz emi-
tida cuando se oprime cualquier tecla del mando a distancia.


Un led IR (infrarrojo), también conocido como un transmisor IR (infrarrojo), genera ondas in-
frarrojas en el rango de 875 nm a 950 nm. Por lo general, los led IR están compuestos de arse-

190 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.2 · Introducción al led infrarrojo IR

niuro de galio o arseniuro de aluminio y galio. El plomo más largo del led es el ánodo y el más
corto es el cátodo, como se muestra aquí:

Plomos de led


Además de utilizar la comunicación por infrarrojos en los mandos a distancia de la TV, hay una
serie de otras aplicaciones que también los usan para transferir datos entre dispositivos elec-
trónicos. Aunque la luz infrarroja es invisible para el ojo, las cámaras digitales y otros sensores
pueden ver esta luz por lo que la emplean para sistemas de seguridad y la tecnología de visión
nocturna. Aparte de los usos técnicos, el Departamento de Administración de Alimentos y Me-
dicamentos de los Estados Unidos aceptó varios productos con led IR para uso en algunos pro-
cedimientos médicos y cosméticos.


Se han aprendido los fundamentos de la comunicación por infrarrojos y los led de este tipo, por
lo que ahora se hará un sensor propio de infrarrojos.

Existen varios tipos de sensores IR, dependiendo de la aplicación. Los sensores de proximi-
dad, los de obstrucción y los de contraste (utilizados en el robot seguidor de línea) son algu-
nos ejemplos.


Después de entender el funcionamiento básico de un sensor IR, se aprenderá a programarlo.

Sobre la base del principio de incidencia directa, se desarrollará una alarma antirrobo.

· Rubén & Juan Tomás Oliva Ramos · 191


Capítulo 7 · Aplicaciones de control para Smart TV

Una vez conectado el circuito, como se muestra en el siguiente diagrama, se debe cargar el
código en Arduino:

Diagrama de conexión de circuito

int IRTransmitter = 8;
int IRReceiver = A0; //IR Receiver is connected to pin 5

int buzzer = 9; // Buzzer is connected with pin 9.


int output = 0; // Variable to store the value from the IR sensor
int ambientLight = 500;

void setup( )
{
pinMode(IRReceiver,INPUT);
pinMode(IRTransmitter,OUTPUT);
pinMode(buzzer,OUTPUT);
digitalWrite(IRTransmitter,HIGH);
}
void loop( )
{
output = analogRead(IRReceiver);
// If anything comes in between the IR Transmitter and IR receiver
// IR receiver will not give the output. Make an alarm.

if (output < ambientLight)


{

192 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.2 · Introducción al led infrarrojo IR

makeAlarm(50);
}
}
void makeAlarm(unsigned char time)
{
analogWrite(buzzer,170);
delay(time);
analogWrite(buzzer,0);
delay(time);
}

En el código anterior se elabora continuamente el transmisor IR ENCENDIDO. Por lo tanto, el


receptor/fotodiodo IR recibirá una señal IR. Siempre que una persona intente entrar en la casa
o en un lugar seguro, la señal IR se interrumpirá lo que a su vez reducirá la caída de tensión a
través del receptor IR y se encenderá una alarma. En este caso, en función de las condiciones,
se tendrá que cambiar el valor de la variable ambientLight en el código.

Cómo recibir datos de un control remoto de televisión


Como ya se dijo, un televisor remoto tiene un led IR que transmite luz IR con una frecuencia de
38 kHz. Por lo tanto, siempre que se detecte esa radiación en la parte del receptor del televisor


En la siguiente imagen se observa el momento en que una señal se transmite realmente des-
de el mando a distancia del televisor, es decir, se verá como una serie de ondas:

Transmisión de la señal

-
tivo TSOP38238 IC el cual se parece a un transistor, pero en realidad combina una fotocé-
-
mático. En este caso, la fotocélula sensible a infrarrojos funciona como un receptor de éstos
-
dulada recibida.

· Rubén & Juan Tomás Oliva Ramos · 193


Capítulo 7 · Aplicaciones de control para Smart TV


continuación, donde es mucho más limpia y fácil de leer:

Señal de salida por ltro

Además, TSOP38238 está cubierto en el marco del epoxi del paquete del plomo que actúa co-


-



A continuación se muestra un IC con sus tres pines. Hay dos clavijas de alimentación y un pin
para la señal de salida:

IC con sus tres pines

TSOP38238 puede alimentarse con 2,5v a 5,5v; esto lo hace adecuado para todo tipo de aplica-
ciones. Además, puede recibir señales de casi cualquier control remoto.

Para comenzar, se manipulará un solo led mediante un control IR. Para ello, se usará la bi-
blioteca IRRemote disponible en https://github.com/z3t0/Arduino-IRremote. Una vez descar-
gado y extraído el código en la carpeta de bibliotecas de Arduino, se podrán ver los ejemplos en
el IDE de Arduino. Es necesario registrar el valor de todos los botones para uso futuro.

194 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.2 · Introducción al led infrarrojo IR

Se debe conectar el primer pasador de TSOP38238 a la clavija 11 de Arduino, el segundo a la


clavija de tierra y el tercero a la clavija de 5v. Es necesario conectar Arduino a través de USB e
intentar compilar el siguiente código:

#include <IRremote.h>
const int IR_RECEIVER = 11;
IRrecv receiver(IR_RECEIVER);
decode_results buttonPressed;
void setup( )
{
Serial.begin(9600);
receiver.enableIRIn( ); // Start the receiver
}

void loop( )
{
if (receiver.decode(&buttonPressed))
{
Serial.println(buttonPressed.value); //Printing values coming from the IR
Remote
receiver.resume( ); // Receive the next value
}
delay(100);
}

Una vez eliminado el archivo duplicado, debería ser capaz de compilar correctamente el códi-
go. Después de cargar el código anterior, se debe abrir el monitor en serie. Como se pretende
manipular un solo led mediante control remoto, se tendrá que saber el valor del botón oprimi-
do. Por lo tanto, es necesario anotar los valores de todos los botones uno tras otro.

Por ejemplo, el dígito 1 tiene 54.528 códigos para un cierto control remoto. Puede ser que se
deba comprobar el telecontrol que se tiene. Ahora se controlará el led mediante el mando a dis-
tancia IR. Junto con el receptor IR se conectará un led, como se muestra en el siguiente circuito:

Conexión de led

· Rubén & Juan Tomás Oliva Ramos · 195


Capítulo 7 · Aplicaciones de control para Smart TV

Se debe actualizar el código para controlar el led con base en las lecturas del ejercicio
anterior:

#include <IRremote.h>
const int IR_RECEIVER = 11;
IRrecv receiver(IR_RECEIVER);
decode_results buttonPressed;
long int buttonValue = 0;
const long int buttonOne = 54528; //Update value one according to your readings
const long int buttonTwo = 54572; //Update value two according to your readings

int LEDpin = 9;

void setup( )
{
Serial.begin(9600);
receiver.enableIRIn( ); // Start the receiver
pinMode(LEDpin,OUTPUT);
}

void loop( )
{
if (receiver.decode(&buttonPressed))
{
buttonValue = buttonPressed.value;
Serial.println(buttonValue);
switch (buttonValue){
case buttonOne:
digitalWrite(LEDpin,HIGH);
break;
case buttonTwo:
digitalWrite(LEDpin,LOW);
break;
default:
Serial.println(“Waiting for input. “);
}
receiver.resume( ); // Receive the next value
}
delay(100);
}

Ahora se podrá manipular un solo led mediante el control remoto IR; de manera similar, se
-
trolar la retroiluminación del televisor mediante un mando a distancia IR. Se desarrollará una

196 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.2 · Introducción al led infrarrojo IR

retroiluminación de TV mediante una tira de led. Por lo tanto, ahora se verá cómo controlar
una matriz de led.

Control de tira de led desde control remoto



dos tipos básicos de tira: el “analógico” y el “digital”. Las tiras analógicas tienen todos los led
conectados en paralelo. Por lo tanto, actúan como un enorme tricolor led. En el caso de una tira

de bajo costo. Las tiras digitales funcionan de una manera diferente: se debe enviar el código
digital correspondiente a cada led.

Debido a que proporcionan más modularidad, las tiras digitales son bastante caras. Además,


Tira de leds

Internamente, los led RGB están conectados entre sí en paralelo, una sección de la tira los
contiene. Una tira de led completa está formada por una serie RGB paralelos conectados en


Conexión en bloque

· Rubén & Juan Tomás Oliva Ramos · 197


Capítulo 7 · Aplicaciones de control para Smart TV

Como una sección contiene varios led, se requiere más corriente para ejecutarse, no se pue-
de ejecutar en la corriente proporcionada desde Arduino. En el caso de blanco completo, cada
segmento requerirá aproximadamente 60 mA de corriente por bloque/sección. Así que para
ejecutar la tira de led completa, se puede necesitar una corriente de hasta 1.2 A por metro. Pa-
ra el funcionamiento de una tira de led, se requiere una fuente de alimentación externa de 12v.

Control de una tira de led con Arduino


Como se sabe, se puede extraer una corriente máxima de hasta 300 mA si se juntan todos los
pines de E/S. Sin embargo, como se requiere una corriente más alta, se tendrá que usar una
fuente de alimentación externa. Ahora viene la parte complicada: se usará Arduino para con-
trolar la tira de led y para una fuente de alimentación se usará energía externa. Para conectar
la tira de led con Arduino, se utilizará MOSFET y con ello se podrá limitar la corriente que se
extrae de Arduino.

Se usará MOSFET de canal N, que es muy económico y funciona con una lógica de 3.3v a 5v.
Estos FET pueden conmutar más de 60 A y 30v.

La conexión a la tira es relativamente fácil: es necesario soldar los alambres a los cuatro per-
nos/cojines de cobre de la tira del led; para utilizarla con Arduino, se requerirán también al-
gunas resistencias y con ello se podrá limitar la corriente, como se muestra a continuación:

Diagrama con resistencias

Se debe conectar el transistor de potencia con la resistencia entre el pin de salida PWM y la ba-
se. En el caso de los transistores NPN, el pin 1 es la base; el 2 es el colector y el 3 es el emisor.
Ahora bien, para la alimentación de Arduino y la tira de led, conectar una fuente de alimenta-
ción de 9 -12v al Arduino, de modo que Vin (entrada de voltaje en el la tarjeta Arduino) sumi-
nistre el alto voltaje al led.

198 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.2 · Introducción al led infrarrojo IR


la de Arduino/MOSFET. Conectar el pin de salida de Arduino a la base del MOSFET (pin 1) con

y conectar el pin 3 del MOSFET a tierra (GND).

Comprobar todas las conexiones y escribir el siguiente código en la ventana del editor de Ar-
duino. En este caso se utilizan las salidas 5, 6 y 3 de Arduino para controlar los led rojo, verde
y azul de la tira led respectivamente:

int redLed = 5;
int greenLed = 6;
int blueLed = 3;

int redValue = 0;
int greenValue = 0;
int blueValue = 0;

void setup( ){
randomSeed(analogRead(0));
}

void loop( ) {
redValue = random(0,256); // Randomly generate 1 to 255
greenValue = random(0,256); // Randomly generate 1 to 255
blueValue = random(0,256); // Randomly generate 1 to 255

analogWrite(redLed,redValue);
analogWrite(greenLed,greenValue);
analogWrite(blueLed,blueValue);

// Incrementing all the values one by one after setting the random values.
for(redValue = 0; redValue < 255; redValue++){
analogWrite(redLed,redValue);
analogWrite(greenLed,greenValue);
analogWrite(blueLed,blueValue);
delay(10);
}
for(greenValue = 0; greenValue < 255; greenValue++){
analogWrite(redLed,redValue);
analogWrite(greenLed,greenValue);
analogWrite(blueLed,blueValue);
delay(10);
}
for(blueValue = 0; blueValue < 255; blueValue++){

· Rubén & Juan Tomás Oliva Ramos · 199


Capítulo 7 · Aplicaciones de control para Smart TV

analogWrite(redLed,redValue);
analogWrite(greenLed,greenValue);
analogWrite(blueLed,blueValue);
delay(10);
}

//Decrementing all the values one by one for turning off all the LEDs.
for(redValue = 255; redValue > 0; redValue--){
analogWrite(redLed,redValue);
analogWrite(greenLed,greenValue);
analogWrite(blueLed,blueValue);
delay(10);
}
for(greenValue = 255; greenValue > 0; greenValue--){
analogWrite(redLed,redValue);
analogWrite(greenLed,greenValue);
analogWrite(blueLed,blueValue);
delay(10);
}
for(blueValue = 255; blueValue > 0; blueValue--){
analogWrite(redLed,redValue);
analogWrite(greenLed,greenValue);
analogWrite(blueLed,blueValue);
delay(10);
}
}

Si todo está en su lugar, se podrá ver la tira de led y su color seguirá cambiando.

Hasta ahora se ha aprendido acerca de todo lo necesario para controlar la retroiluminación del
televisor mediante el control remoto por infrarrojos, por lo que ese conocimiento se integrará.

Se pretende controlar el brillo de la tira de led también. Se utilizará el botón de encendido


para apagar y encender la retroiluminación. Con el volumen (+) y (-), se aumentará o disminui-
rá el brillo de la luz de fondo.

Como ya se hizo, es preciso conectar TSOP38238 al pin 11, 5v, y el pin de tierra de Arduino.
Una vez que se realicen todas las conexiones, se debe cargar el siguiente código en Arduino:

#include <IRremote.h>
const int IR_RECEIVER = 11; // Connect output pin of TSOP38238 to pin 11
IRrecv receiver(IR_RECEIVER);
decode_results buttonPressed;
long int buttonValue = 0;

200 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.2 · Introducción al led infrarrojo IR

// Mention the codes, you get from previous exercise


const long int POWER_BUTTON = 54572; // Power button to turn on or off the
backlight
const long int PLUS_BUTTON = 54536; // Increase brightness of the LED Strip
const long int MINUS_BUTTON = 54608; // Decrease brightness of the LED strip
const long int CHANGE_COLOR = 54584; // Decrease brightness of the LED strip

const int FADE_AMOUNT = 5; // For fast increasing/decreasing brightness in-


crease this value boolean isOn = false;

int redLed = 5;
int greenLed = 6;
int blueLed = 3;

int redValue = 0;
int greenValue = 0;
int blueValue = 0;

int colors[3];

// Power up the LED strip with random color


void powerUp(int *colors)
{
redValue = random(0, 256); // Randomly generate 1 to 255
greenValue = random(0, 256); // Randomly generate 1 to 255
blueValue = random(0, 256); // Randomly generate 1 to 255

analogWrite(redLed, redValue);
analogWrite(greenLed, greenValue);
analogWrite(blueLed, blueValue);

colors[0] = redValue;
colors[1] = greenValue;
colors[2] = blueValue;
}

// Turn off the LED


void powerDown(int *colors)
{
redValue = colors[0];
greenValue = colors[1];
blueValue = colors[2];

· Rubén & Juan Tomás Oliva Ramos · 201


Capítulo 7 · Aplicaciones de control para Smart TV

//Decrementing all the values one by one for turning off all the LEDs.
for (; redValue > 0; redValue--) {
analogWrite(redLed, redValue);
delay(10);
}
for (; greenValue > 0; greenValue--) {
analogWrite(greenLed, greenValue);
delay(10);
}
for (; blueValue > 0; blueValue--) {
analogWrite(blueLed, blueValue);
delay(10);
}
colors[0] = redValue;
colors[1] = greenValue;
colors[2] = blueValue;
}

void increaseBrightness(int *colors)


{
redValue = colors[0];
greenValue = colors[1];
blueValue = colors[2];

redValue += FADE_AMOUNT;
greenValue += FADE_AMOUNT;
blueValue += FADE_AMOUNT;

if (redValue >= 255) {


redValue = 255;
}

if (greenValue >= 255) {


greenValue = 255;
}

if (blueValue >= 255) {


blueValue = 255;
}
analogWrite(redLed, redValue);
analogWrite(greenLed, greenValue);
analogWrite(blueLed, blueValue);

colors[0] = redValue;
colors[1] = greenValue;

202 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.2 · Introducción al led infrarrojo IR

colors[2] = blueValue;
}

void decreaseBrightness(int *colors)


{
redValue = colors[0];
greenValue = colors[1];

blueValue = colors[2];

redValue -= FADE_AMOUNT;
greenValue -= FADE_AMOUNT;
blueValue -= FADE_AMOUNT;

if (redValue <= 5) {
redValue = 0;
}

if (greenValue <= 5) {
greenValue = 0;
}

if (blueValue <= 5) {
blueValue = 0;
}
analogWrite(redLed, redValue);
analogWrite(greenLed, greenValue);
analogWrite(blueLed, blueValue);

colors[0] = redValue;
colors[1] = greenValue;
colors[2] = blueValue;
}

// Randomly generates a color and make a smooth transition to that color


void changeColor(int *colors)
{
int newRedValue = random(0, 256); // Randomly generate 1 to 255
int newGreenValue = random(0, 256); // Randomly generate 1 to 255
int newBlueValue = random(0, 256); // Randomly generate 1 to 255

redValue = colors[0];
greenValue = colors[1];
blueValue = colors[2];

· Rubén & Juan Tomás Oliva Ramos · 203


Capítulo 7 · Aplicaciones de control para Smart TV

if (newRedValue > redValue) {


for (; redValue >= newRedValue; redValue++) {
analogWrite(redLed, redValue);
delay(10);
}
}
else {
for (; redValue <= newRedValue; redValue--) {
analogWrite(redLed, redValue);
delay(10);
}
}

if (newGreenValue > greenValue) {


for (; greenValue >= newGreenValue; greenValue++) {
analogWrite(greenLed, greenValue);
delay(10);
}
}
else {
for (; greenValue <= newGreenValue; greenValue--) {
analogWrite(greenLed, greenValue);
delay(10);
}
}

if (newBlueValue > blueValue) {


for (; blueValue >= newBlueValue; blueValue++) {
analogWrite(blueLed, blueValue);
delay(10);
}
}
else {
for (; blueValue <= newBlueValue; blueValue--) {
analogWrite(blueLed, blueValue);
delay(10);
}
}

colors[0] = redValue;
colors[1] = greenValue;
colors[2] = blueValue;
}

204 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.2 · Introducción al led infrarrojo IR

void setup( ) {
Serial.begin(9600);
receiver.enableIRIn( ); // Start the receiver

randomSeed(analogRead(0));

pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
}

void loop( ) {

if (receiver.decode(&buttonPressed))
{
buttonValue = buttonPressed.value;
Serial.println(buttonValue);
switch (buttonValue) {
case POWER_BUTTON:
if (!isOn) {
powerUp(colors);
isOn = true;
}
else {
powerDown(colors);
isOn = false;
}
break;
case PLUS_BUTTON:
decreaseBrightness(colors);
break;
case MINUS_BUTTON:
increaseBrightness(colors);
break;
case CHANGE_COLOR:
changeColor(colors);
break;
default:
Serial.println(“Waiting for input. “);
}
receiver.resume( ); // Receive the next value
}
delay(100);
}

· Rubén & Juan Tomás Oliva Ramos · 205


Capítulo 7 · Aplicaciones de control para Smart TV

En el código anterior se utiliza el botón de encendido para prender y apagar la luz de fondo,
y los botones de volumen hacia arriba y hacia abajo para aumentar y disminuir el brillo, res-

-
mutación.


La mayoría de los dispositivos electrónicos de consumo vienen con un control remoto de mano
con el que se puede operar el dispositivo inalámbricamente desde una distancia corta.

-
nes de botones, como Potencia, Volumen, Canal, Temperatura, etc. Sin embargo, ¿es posible ex-
tender la distancia de control entre el dispositivo y el mando a distancia? Sí es posible si se usa
Arduino IoT (Internet de las cosas) junto con algunos componentes electrónicos. A continua-
ción se explicará cómo construir de manera incremental un control remoto infrarrojo contro-
lado por Internet con Arduino.



Con Arduino y algunos componentes electrónicos básicos, se puede construir fácilmente una
grabadora de infrarrojos y control remoto, lo cual permite grabar cualquier comando de infra-
rrojos (código) enviado por un control remoto de este tipo.

Además, permite volver a enviar el comando de infrarrojos grabado a un dispositivo de des-


tino, éste tratará el comando del mismo modo que el del control remoto. Por lo tanto, se pue-
de reproducir cualquier comando de infrarrojos grabado y controlar el dispositivo respectivo.

Los usos típicos de las aplicaciones son:

 Encendido y apagado del aire acondicionado


 Ajuste de la temperatura del aire acondicionado antes de llegar a casa
 Cualquier cosa que se opere con el control remoto tradicional

A continuación se mostrará cómo construir un proyecto de este tipo.

Control remoto infrarrojo controlado por Internet


Los iguientes componentes de hardware y software son necesarios para construir un control
remoto IR básico:

206 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR



 Arduino Uno: R3
 Arduino Ethernet Shield
 Una luz LED: Infrarrojo 950 nm
 Un diodo receptor IR: TSOP38238
 Un resistor de 330 ohms
 Un botón pulsador
 Un socket IR que se puede encontrar en http://www.ebay.com/itm/IR-Infrared-
Power-Adapter-Remote-Control-AC-Power-Socket-Outlet-Switch-Plug-/311335598809,
o uno similar.



Descargar la biblioteca IR Arduino desde https://github.com/z3t0/Arduino-IRremote.

Hacer clic en el botón Descargar ZIP, extraer el archivo descargado y colocarlo en la unidad
local de la computadora. Se obtendrá la carpeta Arduino-IRremote-master; el nombre de la
carpeta puede cambiarse.

Dentro de esta carpeta, hay otra llamada Arduino-IRremote-master. Este nombre de carpe-
ta también puede ser diferente. Ahora se debe copiar y pegar esta carpeta en la de bibliotecas
Arduino.

Carpeta de bibliotecas Arduino

· Rubén & Juan Tomás Oliva Ramos · 207


Capítulo 7 · Aplicaciones de control para Smart TV

Construcción del módulo receptor infrarrojo IR


La siguiente representación esquemática de Fritzing muestra cómo conectar cada componente
junto con la placa Arduino para construir el módulo receptor IR. Se muestra la conexión entre
cada componente electrónico:

Conexión de cada componente

Codificación de los comandos IR en hexadecimal


/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup( )
{

208 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR

Serial.begin(9600);
irrecv.enableIRIn( ); // Start the receiver
}

Es preciso obtener el control remoto del televisor y apuntarlo hacia el sensor de infrarrojos
TSOP382, luego pulsar cualquier tecla del mando a distancia del televisor; aparecerá un núme-
ro hexadecimal en el monitor en serie para cada pulsación de tecla, mientras que cada una del
mando del televisor tiene un valor hexadecimal único. Los valores capturados serán requeri-
dos en el siguiente paso.

-
lo: UA24H4100) para capturar los valores de comando IR de los botones de aumento y reduc-
ción de volumen. La siguiente imagen muestra la salida capturada:

Salida capturada

Los valores de comando para subir y bajar el volumen en un formato hexadecimal son los si-
guientes:

VOLUME UP: E0E0E01F


VOLUME DOWN: E0E0D02F

Construcción del módulo emisor infrarrojo IR



boceto de Arduino. En la sección anterior, se captaron los datos RAW para los botones de au-
-
do para el volumen hasta el televisor.

· Rubén & Juan Tomás Oliva Ramos · 209


Capítulo 7 · Aplicaciones de control para Smart TV

En primer lugar, es preciso construir un módulo IR simple emisor añadiendo una luz led infra-
rrojo y una resistencia de 330 ohmios.

El siguiente esquema de Fritzing muestra cómo conectar cada componente junto con el Ar-
duino para construir el módulo receptor IR. También muestra la conexión entre cada compo-
nente electrónico.

A continuación se brindan las instrucciones adicionales de cableado para el circuito cons-


truido previamente para capturar los comandos de IR:

Conexión de componentes

#include <IRremote.h>

IRsend irsend;
int pushButton = 7; //push button connected to digital pin 7
int val = 0; // variable for reading the button status

unsigned int rawData[69] = {47536, 4700,4250, 750,1500, 700,1500, 700,1550,


700,400, 700,400, 700,400, 700,450, 650,450, 650,1600, 600,1600, 650,1600,
600,500, 600,500, 600,550, 600,500, 600,500, 600,1650, 550,1650, 600,1650,
550,550, 550,600, 500,600, 500,600, 550,550, 550,600, 500,600, 500,600,
500,1750, 500,1700, 500,1750, 500,1700, 500,1750, 500,0}; // SAMSUNG E0E0E01F

void setup( )
{
pinMode(pushButton, INPUT);
}

210 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR

void loop( ) {

val = digitalRead(pushButton); // read input value


if (val == HIGH) {
for (int i = 0; i < 3; i++) {
irsend.sendRaw(rawData,69,32);
delay(40);
}
}
}



 Apuntar el mando a distancia al televisor y presionar el minibotón. El volumen de la


televisión aumentará en una unidad.
 
que se desea controlar.

Control de forma remota a través de Internet


Este proyecto consiste en conectarse desde un navegador web de Internet a una página y, con
el modo a control remoto, desde la misma página. Dicha página hará las funciones del control
remoto de televisión para variarle el volumen desde Internet. A continuación se presenta un
diagrama de conexión:

Diagrama de conexión

Para realizar lo anterior es preciso seguir los pasos:

1. Cargar el siguiente sketch en la placa Arduino

#include <SPI.h>
#include <Ethernet.h>
#include <IRremote.h>

· Rubén & Juan Tomás Oliva Ramos · 211


Capítulo 7 · Aplicaciones de control para Smart TV

byte mac[ ] = { 0x90, 0xA2, 0xDA, 0x0B, 0x00 and 0xDD };


IPAddress ip(192,168,1,177);

EthernetServer server(80);

IRsend irsend;
String HTTP_REQUEST;
unsigned int rawData[69] = {47536, 4700,4250, 750,1500, 700,1500, 700,1550,
700,400, 700,400, 700,400, 700,450, 650,450, 650,1600, 600,1600, 650,1600,
600,500, 600,500, 600,550, 600,500, 600,500, 600,1650, 550,1650, 600,1650,
550,550, 550,600, 500,600, 500,600, 550,550, 550,600, 500,600, 500,600,
500,1750, 500,1700, 500,1750, 500,1700, 500,1750, 500,0}; // SAMSUNG E0E0E01F

void setup( )
{
Serial.begin(9600);

Ethernet.begin(mac, ip);
Serial.print(“Web Server at: ”);
Serial.println(Ethernet.localIP( ));
server.begin( );
}

void loop( )
{
EthernetClient client = server.available( );

if (client) {
boolean currentLineIsBlank = true;
while (client.connected( )) {
if (client.available( )) {
char c = client.read( );
HTTP_REQUEST += c;

if (c == ‘\n’ && currentLineIsBlank) {

client.println(“HTTP/1.1 200 OK”);


client.println(“Content-Type: text/html”);
client.println(“Connection: close”);
client.println( );

// send web page


client.println(“<!DOCTYPE html>”);
client.println(“<html>”);

212 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR

client.println(“<head>”);
client.println(“<title>IR Remote - Internet</title>”);
client.println(“</head>”);
client.println(“<body>”);
client.println(“<form method=\”get\”>”);

if (HTTP_REQUEST.indexOf(“GET /?volume=up HTTP/1.1”) > -1) {


for (int i = 0; i < 3; i++) {
irsend.sendRaw(rawData,69,32);
delay(40);
}
Serial.println(“Volume Up by 1”);
}

client.println(“<input type=\”submit\” name=\”volume\” value=\”up\”>”);


client.println(“</form>”);
client.println(“</body>”);
client.println(“</html>”);
Serial.print(HTTP_REQUEST);
HTTP_REQUEST = “”;
break;
}
if (c == ‘\n’) {
currentLineIsBlank = true;
}
else if (c != ‘\r’) {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop( );
}
}

2. -
ción de red.
3. Conectar el blindaje Ethernet al enrutador, o cambiar a través de un cable Ethernet Cat 6.
4. 
5. Apuntar el LED IR hacia el televisor.
6. Abrir un nuevo navegador web (o una nueva pestaña), escribir la dirección IP del Ardui-
no Ethernet Shield, http://192.168.1.177/ y pulsar Enter. Si se desea controlar el dispo-

7. Se observará la siguiente página web con un botón denominado VOLUME UP:

· Rubén & Juan Tomás Oliva Ramos · 213


Capítulo 7 · Aplicaciones de control para Smart TV

Botón VOLUME UP

8. Ahora, hacer clic en el botón, el volumen de la televisión aumentará en 1 unidad. Hay


que hacer clic en el botón VOLUME UP varias veces para aumentar el volumen. Además,
es necesario tener en cuenta que la barra de direcciones del navegador es similar a ht-
tp://192.168.1.177/?volume=up

Barra de dirección

Control de encendido y apagado de dispositivos eléctricos (lámparas, aire


acondicionado, equipos electrodomésticos)

Si se requiere controlar un dispositivo que no tiene ninguna función de recepción infrarroja in-
corporada se puede hacer con el uso de un zócalo infrarrojo. Un enchufe de infrarrojos es un
dispositivo que se puede conectar en una toma de corriente eléctrica y por ende, el dispositivo
eléctrico se puede conectar en él. Además, el zócalo IR tiene una unidad de recepción IR simple
y puede funcionar en un lugar donde la señal de infrarrojos se reciba correctamente.

La siguiente imagen muestra la vista frontal de la toma de infrarrojos:

214 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR

Vista frontal de toma de infrarrojos

La siguiente imagen muestra la vista lateral del conector de infrarrojos:

Vista lateral de toma de infrarrojos

Un tipo genérico de toma IR viene con un control remoto básico con una sola tecla para encen-
der y apagar:

Control remoto básico

· Rubén & Juan Tomás Oliva Ramos · 215


Capítulo 7 · Aplicaciones de control para Smart TV



 Apuntar el led IR enchufado con el Arduino hacia el conector de infrarrojos.


 Conectar cualquier dispositivo eléctrico (para este proyecto, se usa un ventilador
eléctrico para pruebas) en la toma de infrarrojos y asegurarse de que la energía está
disponible. A continuación, girar el interruptor de alimentación del ventilador a la
posición ON.
 Abrir un nuevo navegador web (o una nueva pestaña), escribir la dirección IP del
protector Ethernet Arduino, http://192.168.1.177/ y, a continuación, pulsar Enter.
 Se verá la siguiente página web con un botón denominado Power:

Botón Power

 Ahora, hacer clic en el botón de encendido. El ventilador eléctrico se encenderá,


hacer clic de nuevo en el botón de encendido para apagar el ventilador. Además,
hay que tener en cuenta que la barra de direcciones del navegador se cambia a
http://192.168.1.177/?key=power

Barra de direcciones

216 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR

Controlar la televisión, DVD y equipo de sonido desde un dispositivo móvil


El siguiente proyecto consiste en controlar un equipo de televisión desde una APP de Android,
mediante la comunicación bluetooth.

A continuación se ilustra el esquema de conectividad del proyecto:

Esquema de conectividad

Obtención de los códigos de los botones:

Diagrama del sensor

· Rubén & Juan Tomás Oliva Ramos · 217


Capítulo 7 · Aplicaciones de control para Smart TV

Código del sketch para realizar la codificación:


#include int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup( ) {
Serial.begin(9600);
irrecv.enableIRIn( ); // Start the receiver
}

// Dumps out the decode_results structure.

// Call this after IRrecv::decode( )

// void * to work around compiler issue

//void dump(void *v)

{
// decode_results *results = (decode_results *)v
void dump(decode_results *results)

{ int count = results->rawlen;

if (results->decode_type == UNKNOWN)

{ Serial.print(“Unknown encoding: ”);


}
else if (results->decode_type == NEC)
{ Serial.print(“Decoded NEC: ”);
} else if (results->decode_type == SONY)
{ Serial.print(“Decoded SONY: ”);
}

else if (results->decode_type == RC5)


{ Serial.print(“Decoded RC5: ”); }
else if (results->decode_type == RC6)
{ Serial.print(“Decoded RC6: ”); }

else if (results->decode_type == PANASONIC)


{ Serial.print(“Decoded PANASONIC – Address: ”);
Serial.print(results->panasonicAddress,HEX);
Serial.print(“ Value: ”); }

218 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR

else if (results->decode_type == JVC)


{ Serial.print(“Decoded JVC: ”); }
Serial.print(results->value, HEX);
Serial.print(“ (”);
Serial.print(results->bits, DEC);
Serial.println(“ bits)”);
Serial.print(“Raw (”);
Serial.print(count, DEC);
Serial.print(“): ”);

for (int i = 0; i < count; i++)


{ if ((i % 2) == 1)
{ Serial.print(results->rawbuf[i]*USECPERTICK, DEC); }
else
{ Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); }

Serial.print(“ ”); }
Serial.println(“”); }
void loop( )
{

if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
dump(&results);
irrecv.resume( ); // Receive the next value
}
}

Obtención de códigos

· Rubén & Juan Tomás Oliva Ramos · 219


Capítulo 7 · Aplicaciones de control para Smart TV

Después de haber construido el circuito para capturar los códigos, se debe abrir el monitor en
serie en el Arduino IDE, presionar el botón deseado en el mando a distancia y ver qué valores
recibe el Arduino, como se muestra en la imagen 7.28. Arduino recibirá el protocolo, el código
y los códigos en bruto.

Guardar o copiar los códigos recibidos por cada botón que se desee utilizar para controlar
los dispositivos. Estos son los botones para TV: POWER, VOLUMEN +, VOLUMEN-, CHANNEL +
y CHANNEL – y los botones TV/ DVD.

Para DVD: ALIMENTACIÓN, ABRIR/CERRAR, REPRODUCIR y DETENER.

Para el sistema de audio si sólo se pretende controlar el poder, reproducir CD y presets o bo-
tones pulsadores, estos códigos se utilizarán en el siguiente boceto.

Diagrama de conexiones

Conexión del módulo Bluetooth

220 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR

Ejemplo completo del proyecto:


#include “<\IrRemote.h\>”;
IRsend ir;
int estado=0;
char dato;

//These codes are for controlling the Audio System

unsigned int powerEquipo[32]={300, 750, 300, 1800, 300, 700, 350, 700, 350,
1750, 350, 700, 300, 1800, 250, 1800, 350, 700, 300, 1800, 350, 700, 300,
700, 350, 700, 350, 1750, 300, 750, 300}; //unsigned int chEmisoraUp[32]=
{300, 750, 300, 750, 300, 1750, 250, 800, 300, 750, 300, 750,250, 800, 300,
750, 250, 1800, 250, 1850, 300, 750, 250, 800, 200, 800, 300, 1800, 300, 750,
300}; unsigned int chEmisoraUp[32] ={300, 750, 300, 750, 300, 1800, 200, 850,
300,750,250, 750, 300, 750, 300, 750, 300, 1800, 300, 1750, 300, 750, 300, 750,
300, 750, 300, 1800, 250, 750, 300}; unsigned int chEmisoraDown[32] = {350,
700, 400, 650, 300, 1750,350,700,350,700,350,700,300, 750, 300, 700, 350, 700,
300, 750, 350, 1750, 400, 650, 300, 700, 350, 1750, 300, 750, 300};

unsigned int playCd[32] = {400, 650, 400, 650, 350, 1750, 350, 700, 350, 650,
350, 1750, 350, 1750, 300, 1750, 400, 1700, 350, 1750, 350, 700, 350, 650, 400,
650, 350, 1750, 450, 600, 350};

//These codes are for controlling the Tv

unsigned int pwrTv[68]={4600, 4350, 700, 1550, 650, 1550, 650, 1600, 650, 450,
650, 450, 650, 450, 650, 450, 700, 400, 700, 15, 50, 650, 1550, 650, 1600,
650, 450, 650, 450, 650, 450, 700, 450, 650,450, 650, 450, 650, 1550, 700,
450, 650, 450, 650, 450, 650, 450, 650, 450, 700, 400, 650, 1600, 650, 450,
650, 1550, 650, 1600, 650, 1550, 650, 1550, 700, 1550, 650, 1550, 650}; // vo-
lume up unsigned int

volUpTv[68]={4600, 4350,650,1550,700,1500,700,1550,700, 400, 700, 400, 700,


450, 650, 450, 700, 400, 700, 1500, 700, 1550, 650, 1550, 700, 400, 700, 400,
700, 450, 650, 450, 700, 400, 700, 1500, 700, 1550, 650, 1550, 700,400,700,450,
700,400,700,400,700,400,700,450,650,450,650,450,650,1550, 700,1500,700,1550,
700, 1500, 700, 1550, 650}; // volume down unsigned int

volDownTv[68]={4600,4350,700,1550,650,1550,700,1500,700,450,650,450,
700,400,700,400, 700,400, 700, 1550,700, 1500, 700, 1550, 700, 400, 700, 400,
700, 400, 700, 450, 650, 450, 650, 1550, 700, 1500, 700, 450, 650, 1550, 700,
400, 700, 400,700, 450, 700, 400, 700, 400, 700, 400, 700, 1550, 700, 400,
700,1500, 700, 1500, 700, 1550, 700, 1500, 700}; // channel up unsigned int

chUpTv[68]={4600, 4350, 700, 1500, 700,1500,700, 1550, 700, 450, 650, 400,
700, 450, 650, 450, 700, 400, 700, 1500, 700, 1550, 650, 1550, 700, 450, 650,
450, 700, 400, 700, 400, 700, 400, 700, 400, 700, 1550, 700, 400, 700, 400,
700, 1550, 650, 450, 700, 400, 700, 1550, 650, 450, 650, 1600, 650, 1550, 650,
450, 700, 1500, 700, 1500, 700, 1550, 650}; // channel down unsigned int

· Rubén & Juan Tomás Oliva Ramos · 221


Capítulo 7 · Aplicaciones de control para Smart TV

chDownTv[68]={4650, 4300, 700, 1550, 700, 1500, 700, 1550, 700, 400, 700, 400,
700, 400, 700, 450, 650, 450, 650, 1550, 700, 1500, 700, 1550, 700, 400, 700,
400, 700, 400, 700, 450, 700, 400, 700, 400, 700, 400, 700, 450, 650, 450,
650, 1550, 700, 400, 700, 450, 650, 400, 700, 1550, 700, 1500, 700, 1550, 700,
1500, 700, 400, 700, 1550, 650, 1550, 700, 1500, 700};

// Tv/Video unsigned int videoTv[68]={4500, 4300, 650, 1600, 650, 1550, 650,
1600, 650, 500, 600, 500, 650, 500, 650, 500, 650, 500, 600, 1650, 600, 1600,
650, 1550, 650, 500, 650, 500, 650, 500, 600, 500, 650, 500, 650, 1600, 600,
500, 650, 500, 650, 500, 650, 500, 600, 550, 600, 500, 650, 500, 650, 500, 650,
1550, 650, 1600, 650, 1550, 650, 1600, 650, 1550, 650, 1600, 650, 1550, 650};

void setup( )
{
Serial.begin(9600);
}

void loop( )
{
if(Serial.available( )>0)

{ dato=Serial.read( );
switch (dato)

{ case ‘R’:
ir.sendRaw(powerEquipo,32,38);
delay(500);
break;
case ‘T’:
ir.sendRaw(chEmisoraUp,32,38);
delay(100);
break;

case ‘U’:
ir.sendRaw(chEmisoraDown,32,38);
delay(100);
break;
case ‘V’:

ir.sendRaw(playCd,32,38);
delay(100);
break;
case ‘K’:

222 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
7.3 · Control remoto de dispositivos infrarrojos IR

//Power the TV
ir.sendRaw(pwrTv,68,38);
delay(100);
break;

case ‘L’:
//Volume +
ir.sendRaw(volUpTv,68,38);
delay(100);
break;

case ‘M’:
//Volume -
ir.sendRaw(volDownTv,68,38);
delay(100);
break;

case ‘N’:
//Channel +
ir.sendRaw(chUpTv,68,38);

delay(100);
break;

case ‘O’:
//Channel -
ir.sendRaw(chDownTv,68,38);
delay(100);
break;

case ‘P’:
// Tv/Video
ir.sendRaw(videoTv,68,38);
delay(100);
break;

case ‘A’:
for (int i = 0; i < 3; i++)
{
ir.sendNEC(0xFF30CF, 32); // Power the DVD
delay(40);
}
break;
case ‘B’:

· Rubén & Juan Tomás Oliva Ramos · 223


Capítulo 7 · Aplicaciones de control para Smart TV

for (int i = 0; i < 3; i++)


{
ir.sendNEC(0xFF00FF, 32); // Open /Close
delay(40);
}
break;

case ‘C’:
for (int i = 0; i < 3; i++)
{
ir.sendNEC(0xFF52AD, 32); // Play
delay(40);
}
break;
case ‘D’:
for (int i = 0; i < 3; i++)
{
ir.sendNEC(0xFF728D, 32); // Stop
delay(40);
}
break;

} // n del switch
} //n del if
}//n del loop

RESUMEN
En este capítulo se estudió cómo crear una aplicación para Android TV en Android Studio, con
el objetivo de integrar esta tecnología en el control de dispositivos Android y Arduino.

También se desarrollaron algunos proyectos donde se utiliza la tarjeta Arduino para control
a través del sensor infrarrojo, la recepción de la codificación del control remoto y el envío de
la señal para manejo de televisiones, equipos de audio y DVD, donde se construyó el emisor
y receptor.

En la última parte se creó un proyecto donde se usó un teléfono móvil y mediante bluetooth
se controlaron los dispositivos electrónicos desde la aplicación.

En el siguiente capítulo se verán los proyectos wearable y sus aplicaciones con el uso de
Android-Arduino.

224 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Capítulo

8
Estadística para adquirir
DATOS DE UN SENSOR
de pulso cardíaco
Contenido Objetivo
8.1 Introducción En este capítulo el lector integrará las he-
8.2 El análisis estadístico rramientas estadísticas para el análisis y
8.3 Uso de estadística descriptiva registro en la adquisición de datos de un
para lecturas de sensores de pulso sensor de pulso cardíaco; con el objetivo
cardíaco de obtener lecturas tomadas y guarda-
8.3.1 Aplicación de la estadística das en un microSD conectado a la tarjeta
descriptiva Arduino. Asimismo, se analizará y aplica-
8.3.2 Resumen gráfico de la rá la estadística para el correcto estudio
estadística descriptiva para de la información, para uso futuro en apli-
las lecturas censadas caciones para medicina y dispositivos
8.3.3 Medidas de asociación entre wearable a través de la integración de la
dos variables aplicadas a las plataforma Arduino, a efecto de una co-
lecturas censadas rrecta toma de decisiones.
8.4 Control estadístico de procesos en
lecturas censadas por el pulso de
ritmo cardíaco
Resumen
Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco


En nuestros días se generan grandes volúmenes de información numérica que es necesario
manejar a través de diversos métodos sistemáticos, los cuales pueden ser utilizados para orga-
nizar, presentar, analizar e interpretar la información efectivamente. De esta manera, pueden
extraerse conclusiones válidas y tomarse decisiones razonables. A partir de lo anterior, con la
estadística es posible conocer la manera en que se puede emplear la información además de
establecer una guía de acción si existe incertidumbre en determinada situación.

Por otro lado, hay que resaltar que cuando se emplea la estadística y se logra conectar con
una situación en particular de la electrónica, ingeniería u otra disciplina, no se está ante una
herramienta más sino que se convierte en la única que, hoy por hoy, permite dar luz y obtener


fl
-
ra cualquier situación de la vida real y principalmente para un proceso, ya sea de servicios o
de transformación de algún artículo (Centeno, 2016). Un elemento medular e imprescindible
-
colectar de alguna actividad que se desee estudiar, es decir, si se considera el monitoreo de la
humedad en una camisa de un corredor o jugador a través de un sensor, las lecturas adquiridas
serán la información y a ésta se le conocerá como datos estadísticos censados. Estos datos se
recolectaron de una forma y, para obtenerla, se empleó algún método o técnica, a lo cual se le
llama técnicas estadísticas. (Centeno, 2016)

El análisis de las lecturas de humedad en la camisa es aquel que emplea una serie de técnicas
estadísticas, para interpretar numéricamente las humedades censadas en la prenda.

La trascendencia de censar algunas variables, como la temperatura, humedad, presión, en-


tre otras, radica en que es necesario aprovechar de mejor manera la información que arroja el
censor para emplearse en la aplicación de una herramienta estadística y tomar mejores deci-
siones.

Requerimientos de software y hardware


Como parte de las herramientas requeridas se usará una tarjeta Arduino Uno; un sensor de
ritmo cardíaco, que es el componente más importante de este capítulo. Se utilizará un sensor
compatible con Arduino llamado pulso sensor (http://pulsesensor.com/).

226 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.2 · El análisis estadístico

El siguiente es el sensor de pulso cardíaco:

Sensor de pulso cardíaco

Como primer paso se realizó una prueba con el sensor que se muestra a continuación y a través
de la herramienta Serial Plotter del entorno de Arduino, esta herramienta aparece en la insta-
lación de Arduino a partir de la versión 1.6.6. Enseguida se observan algunas imágenes del sen-
sor conectado a la tarjeta Arduino Uno, al canal analógico A0. El cable morado es la señal del
sensor, el color rojo (+5v) y tierra (GND) el cable negro.

Sensor conectado a Arduino Uno

La conexión del sensor al dedo se observa de la siguiente manera:

Conexión sensor-dedo

· Rubén & Juan Tomás Oliva Ramos · 227


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

Carga del sketch para las lecturas del sensor:


Se carga el siguiente programa:

/* PulseSensor™ Starter Project http://www.pulsesensor.com


*

This an Arduino project. It’s Best Way to Get Started with your PulseSensor™
& Arduino.
-------------------------------------------------------------
1) This shows a live human Heartbeat Pulse.
2) Live visualization in Arduino’s Cool “Serial Plotter”.
3) Blink an LED on each Heartbeat.
4) This is the direct Pulse Sensor’s Signal.
5) A great rst-step in troubleshooting your circuit and connections.
6) “Human-readable” code that is newbie friendly.”

*/

// Variables
int PulseSensorPurplePin = 0; // Pulse Sensor PURPLE WIRE connected
to ANALOG PIN 0
int LED13 = 13; // The on-board Arduion LED

int Signal; // holds the incoming raw data. Signal


value can range from 0-1024
int Threshold = 550; // Determine which Signal to “count as a beat”,
and which to ingore.

// The SetUp Function:


void setup( ) {
pinMode(LED13,OUTPUT); // pin that will blink to your heartbeat!
Serial.begin(9600); // Set’s up Serial Communication
at certain speed.
}

// The Main Loop Function


void loop( ) {
Signal = analogRead(PulseSensorPurplePin); // Read the PulseSensor’s value.
// Assign
this value to the “Signal” variable.
Serial.println(Signal); // Send the Signal value
to Serial Plotter.
if(Signal > Threshold){ // If the signal is above

228 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.2 · El análisis estadístico

“550”, then “turn-on” Arduino’s on-Board LED.


digitalWrite(LED13,HIGH);
} else {
digitalWrite(LED13,LOW); // Else, the sigal must be below “550”, so
“turn-off” this LED.
}
delay(10);
}

Después de haber cargado el sketch, se debe ingresar al menú Herramientas, opción


Serial Plotter:

Menú Herramientas

Luego, se muestran los datos enviados al monitor serial:

Envío al monitor serial

· Rubén & Juan Tomás Oliva Ramos · 229


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco



Resultados vistos en gráca

Almacenamiento de datos en una memoria conectada al Arduino


En ocasiones, se requerirá almacenar los datos de forma local en caso de que no se tenga cone-
xión a Internet o de que el servidor de base de datos no se encuentre activo por alguna situa-
ción; por ello, es conveniente almacenar la información en un dispositivo conectado a la tarjeta
Arduino, lo cual se realiza con una memoria microSD.

MicroSD

Los pines de conexión son los siguientes:

Pines
Pin del módulo SD Pin Arduino Uno
CS/SS Pin D4
SCK/CLK Pin D13
MOSI Pin D11
MISO Pin D12
VCC 5V
GND GND

230 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.2 · El análisis estadístico

La conexión a la tarjeta Arduino es la siguiente:

Conexión a Arduino

Sketch para guardar los datos en la memoria microSD:

#include <SD.h>
#include <SPI.h>

int Signal;

const int chipSelect = 4;

void setup( ) {
// Open serial communications
Serial.begin(9600);

// Init SD card
Serial.println(“Inicializando Tarjeta SD...”);

if (!SD.begin(chipSelect)) {
Serial.println(“Tarjeta no presente”);
// don’t do anything more:
return;
}
Serial.println(“Memoria SD inicializada.”);
}

void loop( ) {
Signal = analogRead(0); // Read the PulseSensor’s value.

· Rubén & Juan Tomás Oliva Ramos · 231


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

String sensor = String((oat) Signal);

// Make a string for assembling the data to log


String valor = sensor;

// Open le
File dataFile = SD.open(“sensor.txt”, FILE_WRITE);

// Write data to le


if (dataFile) {
dataFile.println(valor);
dataFile.close( );
Serial.println(valor);
}
else {
Serial.println(“error para abrir logger.txt”);
}

// Repeat every 10 seconds


delay(10);
}

Análisis estadístico aplicado a las lecturas de un sensor de pulso cardíaco


Para llevar a cabo el análisis estadístico, se partirá de las lecturas generadas por el sensor de
pulso cardíaco que se almacenaron en un archivo TXT, posteriormente se empleará Excel para
generar el análisis correspondiente.

La imagen que se muestra a continuación es el archivo TXT de las lecturas del sensor de pul-
so cardíaco.

Archivo TXT

232 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.2 · El análisis estadístico

Para trabajar en el entorno de Excel y generar el análisis estadístico de las lecturas censadas
que se muestran en la imagen anterior, es pertinente llevar a cabo el siguiente procedimiento.

1. Abrir el programa de Excel y guardar el archivo con el siguiente nombre: análisis_




Guardado de archivo Excel

2. Si se considera que el archivo donde se almacenan las lecturas es uno de texto, será ne-
cesario utilizar el menú Datos de Excel. Ahí se empleará la opción Obtener datos exter-
nos y se seleccionará la alternativa desde un archivo de texto, en la siguiente imagen se
muestra con mayor detalle.

Menú Datos

· Rubén & Juan Tomás Oliva Ramos · 233


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

3. Enseguida, cuando se da clic en la opción desde un archivo de texto, aparecerá un recua-


-
sario seleccionarlo para extraer los datos censados.

Archivo Sensor

4. 
hacer.

Instrucciones

234 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.2 · El análisis estadístico

5. 

Botón Siguiente

6. Se continúa con el proceso:

Continuidad del proceso

· Rubén & Juan Tomás Oliva Ramos · 235


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

7. Se da clic en Finalizar y aparece el siguiente mensaje:

Ventana Importar datos

8. La imagen anterior pregunta en qué lugar de la hoja de Excel se desea situar los datos. Si

de aquí es posible elegir en qué celda se desea posicionar los valores.

Posicionamiento en celdas

236 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.2 · El análisis estadístico

Situar datos en hoja

9. Por último, se da clic en Aceptar y automáticamente aparecerán todos los valores censa-
dos que se almacenaron en el archivo de texto:

Valores censados

El archivo con las 4766 lecturas censadas se podrá encontrar como material de apoyo en anexo.

Para emplear todas las herramientas de estadística aplicadas a las lecturas censadas se uti-
lizará el archivo de Excel llamado: análisis_estadistico_sensor.

· Rubén & Juan Tomás Oliva Ramos · 237


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

Luego, para comenzar con la aplicación de las herramientas estadísticas es recomendable


hacer un análisis rápido de todos los valores censados localizados en el archivo de Excel.
Para hacerlo, se debe seguir el procedimiento:

1. Seleccionar todas las lecturas censadas.


2. A partir de la selección se encontrará una imagen, la cual está relacionada con el análisis
rápido, como se muestra a continuación.

Análisis rápido

3. Al seleccionar la siguiente imagen (análisis rápido) se desplegará un menú muy amplio:

Despliegue de Menú

238 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.2 · El análisis estadístico

Cada opción posee diferentes alternativas para llevar a cabo el cálculo.

4. El primer análisis rápido a calcular será el promedio, el cual se obtiene con la selección
de la opción Total y después Promedio, como se muestra en la siguiente imagen.

Cálculo de Promedio

5. Posteriormente, se calcularán los valores censados que estén por arriba del promedio.

Cálculo de valores censados

· Rubén & Juan Tomás Oliva Ramos · 239


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

Valores mayores

Los valores que se muestran en color rojo son todos los que están por arriba del promedio.

Valores superiores al promedio

240 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco


forma:

Gráco del análisis rápido

fl
fl
Mediante la estadística es posible reunir, organizar y analizar datos numéricos, en este caso
-
tir de ellas.

Luego de lo anterior es pertinente considerar que la estadística descriptiva es aquella donde


los resultados obtenidos del análisis no pretenden ir más allá del conjunto de datos, es decir, el
análisis que se realiza se limita en sí mismo a los datos recolectados y no se puede realizar in-
ferencia o generalización alguna acerca de la población de donde provienen.

Gráco de lecturas

· Rubén & Juan Tomás Oliva Ramos · 241


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

-


Lecturas censadas



Frecuencias
Clase Frecuencia % Acumulado % Acumulado
(10-10) 25 0.00534 25 0.53%

310-330 8 0.00171 33 0.70%

330-350 8 0.00171 41 0.88%

350-370 40 0.00854 81 1.73%


370-390 30 0.00641 111 2.37%

390-410 54 0.01153 165 3.52%

430-450 101 0.02157 266 5.68%

450-470 154 0.03288 420 8.97%

470-490 214 0.04570 634 13.54%

490-510 216 0.04612 850 18.15%

510-530 216 0.04612 1066 22.76%

530-550 247 0.05274 1313 28.04%

550-570 243 0.05189 1556 33.23%

570-590 686 0.14649 2242 47.88%


590-610 894 0.19090 3136 66.97%

242 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco

610-630 243 0.05189 3379 72.15%

630-650 174 0.03716 3553 75.87%

650-670 340 0.07260 3893 83.13%

670-690 259 0.05531 4152 88.66%

690-710 135 0.02883 4287 91.54%


710-730 116 0.02477 4403 94.02%

730-750 90 0.01922 4493 95.94%

750-770 58 0.01239 4551 97.18%

770-790 15 0.00320 4566 97.50%

790-810 13 0.00278 4579 97.78%

810-830 2 0.00043 4581 97.82%

830-850 2 0.00043 4583 97.86%

970-990 100 0.02135 4683 100.00%

4683 100.00%


de un histograma.

Con apoyo de Excel, el histograma se puede generar de la siguiente forma:

1. Con la tabla de frecuencias, se selecciona únicamente la columna Frecuencia y


% acumulado.

Selección de columnas

· Rubén & Juan Tomás Oliva Ramos · 243


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

2. En la siguiente imagen se muestra el histograma:

Histograma

Histograma de lecturas censadas

-
tab para generar uno.

El siguiente histograma permite detallar cuándo, en un momento dado para la muestra de


las lecturas censadas, se establece un valor objetivo como el de 570; en este caso, el valor de la

244 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco

media está por arriba del valor objetivo y de algún modo las lecturas de pulso cardíaco que es-
tán por debajo de 570, cumplen con el objetivo establecido.

Segundo histograma de lecturas censadas


Pareto. A continuación, se explica cómo se obtuvo.

1. Es necesario seleccionar las dos columnas: Frecuencia y % Acumulado. A partir de ahí se



de estadística.

Selección de columnas

· Rubén & Juan Tomás Oliva Ramos · 245


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

Selección de tipo de gráco

En la siguiente imagen se muestra el diagrama de Pareto.

Diagrama de Pareto

El diagrama que se obtuvo a través de Excel indica el número de lecturas censadas presentes
en cada una de las clases, es decir, 21 lecturas están en el rango de 2 a 232; 5 lecturas están en-
tre 232 a 462 y así respectivamente. La siguiente imagen describe un diagrama de Pareto que
se obtuvo a través de Minitab.

246 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco

Diagrama para lecturas censadas

Con ayuda de este diagrama de Pareto es necesario considerar que se debe centrar la aten-
ción en la clase 590-610, debido a que en ella se concentra el mayor número lecturas censadas.

8.3.1 Aplicación de la estadística descriptiva


La estadística descriptiva es la parte de la estadística básica que, por lo general, no hace un aná-
lisis profundo de la información. Es un primer acercamiento a la información y, por esa misma
razón, es la manera de presentarla ante cualquier lector, ya sea especialista o no. Sin embargo,
lo anterior no quiere decir que carezca de metodología o algo similar, sino que, al contrario, por
ser un medio accesible a la mayoría de la población humana, resulta de suma importancia con-
siderarla para evitar malentendidos, tergiversaciones o errores.

La estadística descriptiva analiza, estudia y describe a la totalidad de los individuos de una po-
        



De acuerdo con lo anterior, a través de la estadística descriptiva los resultados obtenidos en


el análisis de la muestra de las lecturas censadas por medio del sensor de pulso cardíaco no
pretenderán ir más allá del conjunto de datos.

El procedimiento para emplear la estadística descriptiva es el siguiente.

· Rubén & Juan Tomás Oliva Ramos · 247


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

1. Con apoyo de la tabla de Excel generada se realizará la estadística descriptiva.

Tabla de Excel

2. 

Selección de columna C

248 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco

3. Es preciso apoyarse del menú Datos y enseguida buscar la opción Análisis de datos y se-
leccionarla.

Menú Datos

4. Después, se selecciona la opción Estadística descriptiva

Selección de Estadística descriptiva

· Rubén & Juan Tomás Oliva Ramos · 249


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

5. Luego será necesario completar algunos recuadros.

Completar recuadros

6. Por último, se da clic en Aceptar y se obtiene la estadística descriptiva para las lecturas
censadas por el sensor de pulso cardíaco.

Resumen estadística descriptiva

250 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco

Interpretación de los valores de la estadística descriptiva:

 El valor de la media o valor promedio de las lecturas censadas es = 585.70.


 El error estándar de la media es = 1.62.
 El valor central o la mediana se ubica en 590.
 El valor que más se repite o la moda es 979.
 La desviación estándar indica qué tan dispersos se encuentran las lecturas censadas
de la media o promedio, y en este caso es = 111.72.
 La varianza se encarga de medir la raíz cuadrada de la desviación estándar y este
valor es = 12481.55.
 La curtosis mide la concentración de datos en el centro, este valor es igual a 5.5.
 
referencia al histograma que más adelante se obtendrá.
 El rango es el intervalo que existe entre el valor máximo y el mínimo.
 El valor mínimo permite conocer el de la lectura censada mínima o la más pequeña, en
este caso fue 0.
 El valor máximo da a conocer la lectura mayor censada, en ese caso fue de 980.

A través del análisis de estadística descriptiva que se empleó para las lecturas censadas por el
sensor de pulso cardíaco, es posible tomar más y mejores decisiones a partir de los datos que
un sensor envíe en tiempo real.


las lecturas censadas

Con apoyo del software Minitab se obtuvo el resumen que a continuación se mostrará. Es váli-
do considerar que algunos valores de la estadística descriptiva también se calcularon en el te-
ma anterior, sin embargo, el siguiente se complementa porque se presentan el histograma y el
diagrama de cajas y bigotes para las lecturas censadas.


censadas; a continuación se describe.

 El histograma presenta un comportamiento simétrico e indica que hay dos clases


que poseen la mayor cantidad de las lecturas censadas. La clase 570-590 tiene 686
lecturas y la clase 590-610 posee 894 lecturas.

 
está relacionada con un diagrama de cajas y la segunda es un diagrama de bigotes.
Mediante el diagrama se puede visualizar en qué punto se encuentra la media de las
lecturas y la mediana de éstas, con un intervalo de 95%.

· Rubén & Juan Tomás Oliva Ramos · 251


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

 En la parte derecha, en la segunda columna se pueden encontrar los valores para


la estadística descriptiva, que son completamente iguales, es decir, como los que se
calcularon anteriormente.

 En el tercer rectángulo aparecen los cuartiles: primer cuartil, la mediana y el tercer


cuartil. Estos son los tres valores que dividen un conjunto de datos ordenados en
cuatro partes porcentualmente iguales.

 
que son aceptables las lecturas censadas son los siguientes: límite inferior= 582.53,
límite medio= 585.70 y el límite superior = 588.87. Si alguna de las lecturas está por
arriba o por debajo de los límites, indica que está fuera de control.

Más adelante se abundará en el tema del límite de control para la muestra de lecturas censadas.

Resumen de lecturas


a las lecturas censadas

En este tema se presentarán las herramientas y métodos para determinar si existe una correla-
ción o asociación entre dos variables y, de ser así, si es lineal, es decir, se emplearán las lecturas
censadas para conocer si existe una correlación o asociación entre ellas. En el caso de las corre-

y utilizarse para predecir el valor de una variable a partir del valor de otra.

252 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco


-


Obtención de gráca


las lecturas censadas. También es pertinente resaltar que algunas de las lecturas pueden consi-
derarse como atípicas o aberrantes, es decir, por el valor que generan no es común encontrar-
las. Tal es el caso de aquellas que se encuentran más dispersas de toda la muestra de lecturas


Gráca de dispersión

· Rubén & Juan Tomás Oliva Ramos · 253


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco


gran variación, es decir, existen valores atípicos o aberrantes y otros muy dispersos.


través de los siguientes pasos.

1. 
2. Dar clic derecho y seleccionar Agregar línea de tendencia.

Opción Agregar línea de tendencia

3. Elegir las siguientes opciones: Lineal, Agregar línea de tendencia y Presentar R cuadrado.

Opciones a elegir

254 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco



Ecuación gracada

Interpretación
Al obtener la ecuación de regresión es posible obtener la proyección de alguna lectura censa-
da. Por otro lado, la línea de tendencia indica que las lecturas censadas se podrían ajustar a esa
tendencia.

El valor de la ecuación es: y = 0.0135x + 553.62

El R 2

Respecto del valor del R2 (porcentaje de variación de la variable de respuesta que se explica
por su relación con una o más variables predictoras) se puede establecer que el modelo de la
ecuación no se ajusta bien a las lecturas censadas debido a que su valor es muy bajo, es decir,
mientras más cercano esté a 1 o a 100%, el modelo se ajustará mejor.


correspondientes.

· Rubén & Juan Tomás Oliva Ramos · 255


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

Se empleará el menú de Análisis de datos:

Menú Análisis de datos

Al seleccionar el menú Análisis de datos, aparecerá el siguiente mensaje:

Opciones en Análisis de datos

Cuando se elige Regresión se mostrará la siguiente pantalla, y donde aparece Rango Y de en-
trada se seleccionarán todos los valores que se encuentran en la columna Lecturas censadas.

256 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco

Opción Regresión

En el apartado de Rango X de entrada se elegirá el número de muestra. En las opciones de re-


siduales se seleccionará la curva de regresión ajustada. En el apartado de Probabilidad normal
no se activará ninguna opción. Enseguida, se dará clic en Aceptar y se obtendrá lo siguiente:

byYako1976 identi.io

Opciones a elegir

· Rubén & Juan Tomás Oliva Ramos · 257


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

Resumen de regresión

En relación con el resumen de estadísticas de regresión, se puede considerar lo siguiente:


lineal entre los valores cuantitativos pareados x, y en la muestra.



Gráca de la curva

258 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.3 · Uso de estadística descriptiva para lecturas de sensores de pulso cardíaco

Si en esta misma curva ahora se incluye la ecuación y el R2 , se puede obtener un mejor resulta-


Curva con ecuación y R2

Si se considera la línea de tendencia obtenida es pertinente observar que ahora los valores de
las lecturas censadas sí tienen una correlación y, por lo tanto, la ecuación es un buen modelo
para llevar a cabo un pronóstico de otras lecturas que sean susceptibles de censar.

Gráca de probabilidad normal

· Rubén & Juan Tomás Oliva Ramos · 259


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

-
re Minitab, es posible mostrar el patrón aproximado lineal que concuerda con una distribu-




El histograma indica que los datos podrían tener valores atípicos, lo cual se muestra me-

en esa clase se concentra el mayor número de valores censados y es necesario poner mayor
atención en ella.

Histograma

8.4fl
fl
En muchos procesos de la industria, así como en los negocios que ofrecen servicios se emplea
de manera habitual principios de control estadístico de procesos para supervisar la calidad de
los bienes que producen y de los servicios que se ofrecen.

Una de las características importantes de las lecturas censadas es que su patrón cambia
con el paso del tiempo y también algunos datos, por lo tanto, también cambian los valores de
los parámetros. A continuación se describirá el empleo de datos censados y cómo construir e

lecturas censadas que cambian, todo lo cual servirá para mejorar la calidad del proceso.

260 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.4 · Control estadístico de procesos en lecturas censadas por el pulso de ritmo cardíaco



ver y comprender algunas propiedades de las lecturas censadas que, de otra forma, serían muy
-
tadístico es dar a conocer su relevancia cuando se generan datos a partir de un sensor, además
de conocer cómo es el comportamiento de ellos.

Cuando se obtienen lecturas a partir de un sensor, es necesario considerar si el proceso es-


tá fuera de control, debido a que todavía está presente alguna variación de causa especial. Por
bajo
control, puede mejorarse la calidad a través del rediseño del mismo para reducir su variabili-
dad inherente.

A partir de la descripción anterior, es necesario apoyarse a través del control estadístico de


procesos para emplear alguna de sus herramientas en las lecturas censadas por el sensor
de pulso cardíaco, y con ello explicar con mayor detalle si las lecturas están o no fuera de control.

sus orígenes.

El objetivo primordial de emplear el control estadístico de procesos a las lecturas del sensor
-
les causas de variación y si es posible corregirlas.

Para aplicar el control estadístico a las lecturas, será necesario establecer un método de tra-
bajo y apoyarse con Minitab:

1. En primera instancia es necesario obtener el tamaño de la muestra; a partir de la pobla-


ción de las 4766 lecturas censadas se extraerá un valor representativo.
2. Se empleará la siguiente fórmula para realizar el cálculo.

NZ  p p)


n=
(Ne2 + Z 2 pp)

Cuyos valores son:

n = Tamaño de la muestra a calcular


N = 4766
p = 0.50
Z = 1.96
e = 5%
p = 50 %

· Rubén & Juan Tomás Oliva Ramos · 261


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

Cuando se sustituyen se obtiene lo siguiente:

4766 . 0.50 . (1-0.50)


n=
(4766 – 1 ). 0.052 + (1.96)2 . 0.50 . 0.50

n = 354 lecturas censadas

Considerando que el tamaño de la muestra es de 354 lecturas, ahora sí es posible tomar este
valor a partir de la población.

La muestra se presenta en la siguiente tabla:

Muestra

 OBS 1 OBS 2 OBS 3 OBS 4 OBS 5

1 461 428 450 466 484

2 498 504 566 769 700

3 695 680 669 658 650

4 635 620 596 578 565

5 556 540 503 454 437

6 399 353 322 300 289

7 260 300 362 360 373

8 386 396 411 435 444

9 407 392 327 310 275

10 270 295 360 362 367

11 378 391 395 409 422

12 439 461 478 491 502

13 541 560 701 691 677

14 545 549 548 549 548

15 546 547 546 546 537

16 538 539 540 542 510

17 512 512 516 511 516

18 513 512 514 508 512

19 504 500 505 506 505

20 501 508 510 519 513

21 514 513 514 515 512

262 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.4 · Control estadístico de procesos en lecturas censadas por el pulso de ritmo cardíaco

22 519 531 554 565 570

23 548 564 571 741 730

24 738 668 669 407 404

25 405 399 401 401 405

26 402 403 401 401 549

27 585 566 606 622 616

28 646 697 727 737 732

29 774 772 803 809 790

30 769 745 693 691 691

31 687 681 676 666 658

32 654 647 641 447 464

33 471 480 494 500 510

34 513 557 577 550 590

35 714 710 704 696 687

36 675 669 667 669 660

37 652 637 624 609 598

38 588 576 431 422 367

39 344 328 317 391 401

40 407 416 606 593 587

41 581 572 561 545 537

42 493 465 479 452 450

43 421 413 382 363 334

44 330 297 292 275 264

45 267 305 358 359 493

46 501 512 502 503 561

47 579 557 566 606 627

48 671 327 329 291 273

49 268 257 262 280 326

50 370 385 393 410 427

51 439 447 452 453 459

52 465 475 587 596 610

53 601 755 756 718 686

54 683 678 676 673 672

55 664 664 655 644 636

· Rubén & Juan Tomás Oliva Ramos · 263


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

56 628 501 512 699 719

57 727 725 734 733 732

58 740 721 700 674 672

59 669 666 663 657 652

60 650 646 639 635 625

61 614 608 601 594 587

62 584 577 569 570 555

63 541 504 512 486 469

64 664 682 690 690 717

65 715 646 643 645 643

66 645 642 642 643 641

67 643 642 502 496 492

68 366 353 356 364 367

69 356 362 360 366 356

70 364 354 361 375 385

71 384 390 420 423 679


que los valores de las lecturas censadas se capturen de la siguiente forma.

Valores de lecturas

 Observación Lectura censada  Observación Lectura censada


1 1 461 3 3 669

1 2 428 3 4 658

1 3 450 3 5 650

1 4 466 4 1 635

1 5 484 4 2 620

2 1 498 4 3 596

2 2 504 4 4 578

2 3 566 4 5 565
2 4 769 5 1 556

2 5 700 5 2 540

3 1 695 5 3 503

3 2 680 5 4 454

264 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
8.4 · Control estadístico de procesos en lecturas censadas por el pulso de ritmo cardíaco

La tabla mostrada anteriormente sólo da a conocer hasta la quinta muestra, sin embargo, es
necesario calcular hasta la muestra 71 de las lecturas censadas.

Después de haber capturado la tabla se procede a utilizar el menú Estadísticas, se selecciona


-


Opciones del menú Estadísticas

Después de seleccionar la opción X-barra, aparecerá la tabla que se muestra en la imagen. Es ne-
-


Gráca de resultados

· Rubén & Juan Tomás Oliva Ramos · 265


Capítulo 8 · Estadística para adquirir datos de un sensor de pulso cardíaco

Interpretación de los resultados


Las medias y desviaciones estándar de las lecturas del sensor de pulso cardíaco no se ubican
dentro de los límites de control. La lectura censada de pulso cardíaco y su variabilidad no están
bajo control para las 71 muestras generadas.

RESUMEN
En este capítulo se aplicaron algunas herramientas de la estadística descriptiva para la ge-
neración de análisis y toma de decisiones a partir de los valores obtenidos por un sensor de
pulso cardíaco.

Entre las principales herramientas se encuentran: el análisis rápido, la estadística descripti-


va, las medidas de asociación entre dos variables y el control estadístico de procesos.

Es pertinente resaltar que, en cualquier proceso, ya sea de transformación o de servicios,


mientras se generen números es posible emplearlos para hacer análisis estadísticos y favo-
recer su empleo para desarrollar estrategias de mejora para el mismo proceso o fuera de él.

El gran volumen de información numérica origina la necesidad de métodos sistemáticos,


los cuales pueden ser utilizados para organizar, presentar, analizar e interpretar la información
efectivamente. De esta manera, pueden extraerse conclusiones válidas y tomarse decisiones
razonables con el uso de los métodos estadísticos, mismos que son desarrollados primera-
mente para llevar a cabo esta necesidad.

Cotidianamente cuando un sensor (temperatura, humedad entre otros) se encuentra en fun-


cionamiento, censa valores que de algún modo es necesario emplear para tomar una decisión.
Si éstos no se usan para ser analizados a través de métodos y técnicas estadísticas, difícilmen-
te se podría tomar alguna decisión a partir de ellos.

266 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Capítulo

9
Integración de aplicaciones:
PROYECTOS
wearable
Contenido
9.1 Un vistazo al Internet de las cosas
9.1.1 Componentes IoT
9.1.2 El día moderno de IoT Objetivo
9.1.3 Ejemplos del Internet de las Cosas
9.2 Uso del Internet de las Cosas en ciudades En este capítulo se aplicarán y desarrolla-
inteligentes e industria automotriz rán proyectos para dispositivos wearable
9.2.1 Retos técnicos con el uso de herramientas estudiadas en
9.3 El Internet de las Cosas y el rol del Bluetooth los capítulos anteriores. Asimismo, se inte-
Low Energy grarán las plataformas relativas a proyectos
9.4 El Futuro del Internet de las Cosas de tecnología para aplicaciones Android y
9.4.1 Otras tecnologías Arduino con la finalidad de crear dispositi-
9.4.2 Redes Bluetooth Mesh vos wearable: desde el análisis de la idea,
9.5 Desarrollo de proyectos Wearable el desarrollo, hasta la integración. Esto per-
9.5.1 SmartBand para niños mitirá impulsar la creatividad para nuevos
9.5.2 Reloj con GPS productos de esta índole.
9.6 Podómetro o contador de pasos
9.6.1 Podómetro con Arduino
9.6.2 Arduino Genuino 101
9.6.3 Pulsera-botón de pánico
9.6.4 Módulo GSM
9.6.5 Comandos AT
Resumen
Capítulo 9 · Integración de aplicaciones: Proyectos wearable


, o brevemente IoT, es una tendencia prometedora en tecnología. Según ana-
listas, esta herramienta puede ser perjudicial en la próxima década; tendrá un gran impacto en
-


 Dispositivos wearable
 Industria
 Cuidado de la salud
 Transporte
 Fabricación
 Agricultura
 Ciudades inteligentes




-
nes, tablets y computadoras conectados entre sí.

IoT es un ecosistema en el que los objetos están interconectados y, al mismo tiempo, tienen
una conexión a Internet; incluye todos los aparatos que potencialmente pueden conectarse e
-
tá en cualquier lugar.

9.1.1

entender el papel que desempeñan en dicho entorno. Fundamentalmente, IoT es un objeto in-
teligente, puede ser desde un sensor simple que mida una cantidad tal como presión, tempera-


a desarrollar el Internet de las cosas.

            
-
tuar con ellos.

-


 
 Bluetooth

268 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
9.1 · Un vistazo al Internet de las cosas

 Zigbee
 Red celular
 NB-IoT
 

-



 
 MQTT
 
 
 Rest
 
 Stomp

9.1.2
         
2013, esta idea evolucionó debido a la integración de las tecnologías inalámbricas, el aumento




-
-

seguridad y servicios de emergencia.

-


Cabe destacar que IoT es una red de dispositivos conectados conscientes de su entorno,

responsabilidad. Tales dispositivos pueden ser automóviles, sensores, luces, paneles solares,

-
-


· Rubén & Juan Tomás Oliva Ramos · 269


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Conexiones de aparatos a Internet

9.1.3 


     
bombillas y otros dispositivos que antes eran demasiado simples, ahora están conectados y
  -
so tiene sólo tres años, y no es improbable que la tasa de adopción de esta tecnología sea algo
nunca antes visto.


los primeros mil millones en 2005, el segundo en 2010 y el tercero en 2014. Actualmente, hay
3,400 millones de usuarios de Internet en el mundo. Aunque esta tendencia parece poco rea-

50 mil millones de dispositivos conectados en el mundo y 90% de los vehículos lo estará a In-

los wearable se convertirán en un mercado de 6 mil millones de dólares, con 171 millones de
dispositivos vendidos.

-



Wearables
-


270 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
9.1 · Un vistazo al Internet de las cosas

tecnología wearable se compone desde accesorios de moda hasta relojes inteligentes; Apple



-
-


-
-


Fitness Tracker

son monitoreadas y mantenidas. Fitness wearables no se limitan sólo a las bandas, hay camisas



-




a través de la ropa.

Dispositivos inteligentes de casa




hogar inteligente.  o simplemente 
  -
-
paldada por IoT y exige la conexión de dispositivos en un entorno. Aunque la idea de casa inte-

última década, muchos dispositivos domésticos inteligentes entraron en el mercado por parte
de las principales empresas de tecnología.

Amazon Echo
             

-

· Rubén & Juan Tomás Oliva Ramos · 271


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

-


 Alexa, toca Adele.


 Alexa, reproduce playlist XYZ.
 

 

 Alexa, ¿qué tiempo hace?
 Alexa, ¿cuál es mi viaje?
 Alexa, reproduce el audiolibro Juego de tronos.
 
 
 

Amazon Echo


ejecutar los comandos y bluetooth para conectarse a otros dispositivos en el hogar, por ejem-
-


Google en el mercado doméstico inteligente.

Focos inalámbricos

-

-


272 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
9.1 · Un vistazo al Internet de las cosas

Focos inalámbricos

Refrigeradores inteligentes

-

de IoT, ya que está completamente conectado a Internet y proporciona varios controles a los


Refrigerador inteligente

Smartwatch para niños






· Rubén & Juan Tomás Oliva Ramos · 273


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

-
-

              


Smartwatch para niños




-
ministración implica la gestión de los activos de una ciudad, por ejemplo, centrales eléctricas,
sistemas de atención médica, de transporte, escuelas, bibliotecas, sistemas de alcantarillado,
de gestión de residuos y hasta de aplicación de la ley.

-


aumentar la calidad de la comunicación con nuevos medios.

-

-




274 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
9.2 · Uso del Internet de las Cosas en ciudades inteligentes e industria automotriz

Tesla Model S

9.2.1
-
-



-

se puede esperar que la misma converja en una gran burbuja de IoT.



-
sarrollo que adopten el concepto de ciudades inteligentes.

Esquema de ciudad inteligente

· Rubén & Juan Tomás Oliva Ramos · 275


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Bluetooth siempre ha sido una tecnología atractiva en electrónica de consumo, cuando ésta





       -


-
municación de corta distancia con más amplitud en el mercado. Actualmente, casi todos los
-



velocidades de transmisión de datos y alcance, es ideal para convertirse en parte de IoT y ya




-
-
-

adopten ampliamente la baja energía bluetooth para producir cosas inteligentes, pueden tam-



la misma tasa de adopción que bluetooth. También tiene una velocidad rápida, un alcance ma-



veces, con una aceleración de dos. También se anunció la inclusión de una malla con una co-
-





276 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · El Futuro del Internet de las Cosas

BLE en la nube de IoT

Con lo anterior, el dispositivo Beacon Bluetooth es incluso más barato; su único trabajo es
          
Nearables consiste en una especie de calcomanías que pueden proporcionar transmisiones


-
tooth en IoT.


admitirán bluetooth en 2021, lo que lo convierte en alrededor de un tercio del mercado total
de Internet de las Cosas. Como se mencionó anteriormente, esta tecnología coexistirá con otras
-

reducido y mayor alcance y velocidad, por lo que su uso va en aumento y además brinda nuevas
oportunidades para que las empresas la utilicen de maneras innovadoras.





que juegan un papel importante en la revolución de IoT.



área personal con radios digitales de baja potencia, con lo cual logra distancias de transmi-

· Rubén & Juan Tomás Oliva Ramos · 277


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

sión de 10 a100 metros a través de la línea de comunicación visual. Zigbee tiene una velocidad
-


Zigbee Hue



Operación de Zigbee






 
-
dos en una malla de comunicación, donde existe un dispositivo central que establece comuni-

278 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · El Futuro del Internet de las Cosas

cación con los demás nodos de su alrededor; ésta permite crear redes de dispositivos que pue-
den estar interconectados entre sí.

Redes Bluetooth tipo Mesh



Control de dispositivos

Productos


-
nectada a una red como red en una casa y permite la interacción con dispositivos móviles.

· Rubén & Juan Tomás Oliva Ramos · 279


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Google Home


-


Aplicación de monitoreo de pulso cardiaco para Android







Conexiones de hardware
1. 
2. Colocar el módulo en la placa de pruebas
3. 

 -

 
 Finalmente, conectar el pasador RDY al pasador Arduino 2 y el pin RST Arduino pin 9

280 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Diagrama de conexiones

 Ahora, se debe conectar el sensor de pulso cardíaco, lo cual es realmente muy simple. Se

al pin Arduino A0



Proyecto nal

Prueba del sensor


Ahora, se escribirá un código básico para asegurarse que el sensor de pulso está correctamente
-
-




· Rubén & Juan Tomás Oliva Ramos · 281


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

// Sensor and pins variables


int pulsePin = 0;
int blinkPin = 13;
int fadePin = 5;
int fadeRate = 0;

// Pulse rate variable


volatile int BPM;

// Raw signal
volatile int Signal;

// Interval between beats


volatile int IBI = 600;

// Becomes true when the pulse is high


volatile boolean Pulse = false;

// Becomes true when Arduino nds a pulse


volatile boolean QS = false;

void setup( ){
// Update pin that will blink to your heartbeat
pinMode(blinkPin,OUTPUT);

// Update pin that will fade to your heartbeat!


pinMode(fadePin,OUTPUT);

// Start Serial
Serial.begin(115200);

// Sets up to read Pulse Sensor signal every 2mS


interruptSetup( );
}

void loop( ){
// If heart beat is found
if (QS == true) {

// Set ‘fadeRate’ Variable to 255 to fade LED with pulse


fadeRate = 255;

// Print heart rate with a ‘B’ prex


sendDataToProcessing(‘B’,BPM);

282 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

// Reset the Quantied Self ag for next time


QS = false;
}

// Fade LED
ledFadeToBeat( );

// Wait 20 ms
delay(20);
}

// LED fade
void ledFadeToBeat( ){
fadeRate -= 15; // set LED fade value
fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into
negative numbers!
analogWrite(fadePin,fadeRate); // fade LED
}
// Print data
void sendDataToProcessing(char symbol, int data ){
Serial.print(symbol); // symbol prex tells Processing what type of data
is coming
Serial.println(data); // the data to send culminating in a carriage
return
}

-




Sketch de Arduino para envío de datos a la aplicación de Android


// Libraries
#include <SPI.h>
#include “Adafruit_BLE_UART.h”
#include <aREST.h>

// Sensor and pins variables


int pulsePin = 0;
int blinkPin = 13;
int fadePin = 5;
int fadeRate = 0;

· Rubén & Juan Tomás Oliva Ramos · 283


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

// Pins
#dene ADAFRUITBLE_REQ 10
#dene ADAFRUITBLE_RDY 2 // This should be an interrupt pin, on Uno thats #2
or #3
#dene ADAFRUITBLE_RST 9

// Create aREST instance


aREST rest = aREST( );

// BLE instance
Adafruit_BLE_UART BTLEserial = Adafruit_BLE_UART(ADAFRUITBLE_REQ,
ADAFRUITBLE_RDY, ADAFRUITBLE_RST);

// Pulse rate variable


volatile int BPM;

// Raw signal
volatile int Signal;
// Interval between beats
volatile int IBI = 600;

// Becomes true when the pulse is high


volatile boolean Pulse = false;

// Becomes true when Arduino nds a pulse


volatile boolean QS = false;

// Variable to be returned by Bluetooth LE


int bpm = 0;

void setup( ){

// Start Serial
Serial.begin(115200);

// Start BLE
BTLEserial.begin( );

// Give name and ID to device


rest.set_id(“1”);
rest.set_name(“pulse_sensor”);

// Expose variables to API


rest.variable(“bpm”,&bpm);

284 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

// Sets up to read Pulse Sensor signal every 2mS


interruptSetup( );
}

void loop( ){
// Assign BPM variable
bpm = BPM;

// Tell the nRF8001 to do whatever it should be working on.


BTLEserial.pollACI( );

// Ask what is our current status


aci_evt_opcode_t status = BTLEserial.getState( );

// Handle REST calls


if (status == ACI_EVT_CONNECTED) {
rest.handle(BTLEserial);
}
}

-


Pantalla de monitoreo Android Studio

Agregado en la aplicación
-
-


· Rubén & Juan Tomás Oliva Ramos · 285


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

http://android-
graphview.org/. Una captura de pantalla de cómo esta aplicación podría ver con Android grá-


Vista con Android gráco

-
rio, donde los datos se actualicen en tiempo real a través de implementaciones de controlado-
-







adultos tienen diversas opciones para elegir, pero no los niños.

Con el creciente interés de los padres en la tecnología, los wearables para niños son un mer-
-


             
muestran algunas tendencias.

286 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

Asimismo, se elaborará un dispositivo que se coloque sobre la piel de un bebé para detec-
tar su temperatura, el dato se enviará a una aplicación en Android; se apreciará como en la si-


Dispositivo de temperatura

Arduino LilyPad
-
-
tiles o textiles interactivos, que son telas en las que se puede incrustar electrónica y com-
      
proyectos de computación portátiles que implican el uso de textiles electrónicos.

-
pié en la integración de telas con electrónicos como microcontroladores, sensores y actuado-
res. Además, los e-textiles no necesitan ser portátiles, pues también se encuentran en el diseño
de interiores.


de la moda que algunos diseñadores ya han incorporado en sus creaciones de prendas, bolsos
y accesorios. Dichas creaciones representan un desarrollo en las telas y materiales inteligentes




-

-
-


· Rubén & Juan Tomás Oliva Ramos · 287


Capítulo 9 · Integración de aplicaciones: Proyectos wearable





 Microcontroladores ATmega168v o ATmega328v


 
 
 
 
 
 
 
 

Arquitectura de Arduino LilyPad

288 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

Modo de programación de conexiones




Chip a programar

Pines para la conexión Arduino Lilypad y FTDI232




Conexión a Arduino LilyPad

Carga de sketch a Arduino LilyPad





· Rubén & Juan Tomás Oliva Ramos · 289


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



// the setup function runs once when you press reset or power the board

void setup( ) {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever


void loop( ) {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}



Vericación de puerto

290 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Selección del puerto



Selección de la placa




· Rubén & Juan Tomás Oliva Ramos · 291


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Modelo del microcontrolador



Aplicación APP Android para monitoreo de temperatura





Módulo bluetooth



Conexiones

292 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Topología de la aplicación



Conexiones a LilyPad y bluetooth

Sketch de la aplicación para Arduino:


#include<SoftwareSerial.h>

const int Tempsensor = A0; // connect output pin of lm35 to A0 pin of arduino

//SoftwareSerial bluetooth(bluetoothRx, bluetoothTx);


SoftwareSerial bluetooth(6, 7);

void setup( ) {

pinMode(Tempsensor, INPUT);
Serial.begin(9600);// serial communication begins
bluetooth.begin(9600);// bluetooth communication begins
}

· Rubén & Juan Tomás Oliva Ramos · 293


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

void loop( ) {
oat temp = analogRead(Tempsensor); // read temperature sensor voltage
temp = temp * 0.48828125; // (5*1000)/1024 = 0.48828125 from sensor data sheet
Serial.println(“ “); //
Serial.println(temp); // watch the current temperature in serial monitor
bluetooth.print(“ “);
bluetooth.println(temp); // send temperature to bluetooth device
delay(1000);
}



Conexión del sensor



Conexión al sistema

294 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



byYako1976 identi.io

Conexiones nales



Lectura de la señal

Monitoreo de datos en tiempo real con servicios web en la nube



se conecta a la placa y los datos son enviados a un servicio en la nube, el cual permite mostrar


· Rubén & Juan Tomás Oliva Ramos · 295


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Datos en la nube



https://dweet.io/

Servicio en la nube

-
ciones para el registro de datos.



https://dweet.io/dweet/for/my-thing-name?hello=world



296 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



https://dweet.io/get/latest/dweet/for/my-thing-name

Obtención del último registro



https://dweet.io/get/dweets/for/my-thing-name

Conexión mediante servicios web en APP Inventor


Como se puede observar en la siguiente imagen, el control web1 permite la conexión con un


Conexión con servicio remoto

· Rubén & Juan Tomás Oliva Ramos · 297


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

http://dweet.io/dweet/
for/temperature

Propiedades de conexión




http://dweet.io/dweet/for/temperatura?
temp=25 donde el valor de 25 es la lectura del sensor.

Control Clock



Monitoreo de temperatura

298 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Registro de datos






 https://freeboard.io/

Pantalla de visualización

· Rubén & Juan Tomás Oliva Ramos · 299


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Generación de cuenta



Pantalla de monitoreo

300 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Link de Add

Seleccionar Dweet.io

Selección de Dweet.io

· Rubén & Juan Tomás Oliva Ramos · 301


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Opción Salvar



Creación de gráco

302 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Selección de Gauge



Captura de información

· Rubén & Juan Tomás Oliva Ramos · 303


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Gráca de la temperatura

Dashboard y gráca de temperatura

304 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable


A continuación se creará un prototipo de otra índole. ¿Qué tal la idea de conectar el proyecto


que se mueve y la altitud sobre el nivel del mar.

-


Actualmente existen 27 satélites que orbitan la Tierra, los cuales brindan a cualquier perso-

y latitud. Hoy existe una amplia gama de dispositivos para coches, aviones, barcos y pronto en
el reloj.

-
-




Módulo GPS, pantalla OLED y gráca de temperatura

Materiales a utilizar:

 Soldadura
 Cables
 
 Batería de litio de 3.3v 150mA
 Cinta de tela
 

· Rubén & Juan Tomás Oliva Ramos · 305


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Conexión de la pantalla



Conexión del GPS

-


-
-
sea la hora local, es preciso sumar o restar horas al parámetro de Greenwich.


satélites que es posible encontrar y su velocidad medida en minutos por segundo.

306 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

Construcción del reloj

Conexiones de la pantalla OLED y GPS

Caras del reloj



Cortes de plástico

· Rubén & Juan Tomás Oliva Ramos · 307


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Armado de partes



Pegado de pantalla y conexión



Conexión de módulos

308 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

Código del sketch que se carga a la tarjeta Adafruit Flora:

#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_GPS GPS(&Serial1);

#dene OLED_RESET 6
Adafruit_SSD1306 display(OLED_RESET);

#dene NUMFLAKES 10
#dene XPOS 0
#dene YPOS 1
#dene DELTAY 2

#dene LOGO16_GLCD_HEIGHT 16
#dene LOGO16_GLCD_WIDTH 16

void setup( )
{
// connect at 115200 so we can read the GPS fast enough and echo without
dropping chars
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C
addr 0x3C (for the 128x32)
// Clear the buffer.
display.clearDisplay();
Serial.println(“Testing GPS”);

// 9600 NMEA is the default baud rate for MTK3339


GPS.begin(9600);

// Set the update rate of the GPS


GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);

delay(1000);
// Ask for rmware version
Serial1.println(PMTK_Q_RELEASE);
}

· Rubén & Juan Tomás Oliva Ramos · 309


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

uint32_t timer = millis( );


void loop( )
{
// read data from the GPS
char c = GPS.read( );

// if there is data we parse it...


if (GPS.newNMEAreceived( )) {
//
if (!GPS.parse(GPS.lastNMEA( ))) // this also sets the newNMEAreceived( )
ag to false
return; // we can fail to parse a sentence in which case we should
just wait for another
}
// if millis( ) or timer wraps around, we’ll just reset it
if (timer > millis( )) timer = millis( );

// char
if (millis( ) - timer > 1000) {
//
timer = millis( );
display.clearDisplay( );
//
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print(GPS.hour, DEC);
display.print(‘:’);
//
if(GPS.minute<10){
display.print(‘0’);
display.print(GPS.minute, DEC);
}
else{
display.print(GPS.minute, DEC);
}
display.print(‘:’);
//
if(GPS.seconds<10){
display.print(‘0’);
display.print(GPS.seconds, DEC);
}
else{

310 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

display.print(GPS.seconds, DEC);
}
//
display.print(“ ”);
display.print(GPS.day, DEC);
display.print(‘/’);
display.print(GPS.month, DEC);
display.print(“/20”);
display.println(GPS.year, DEC);
//
// if (GPS.x) {
//
display.print(“Longitude:”);
display.print(GPS.latitude, 4);
display.println(GPS.lat);
display.print(“Latitude:”);
display.print(GPS.longitude, 4);
display.println(GPS.lon);
//
display.print(“Speed:”);
display.print(GPS.speed);
display.print(“ Alt:”);
display.println(GPS.altitude);
// }
//
display.display( );

}
}



Vista nal del reloj

· Rubén & Juan Tomás Oliva Ramos · 311


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Rastreador de mascota




se requiera soldadura.

Rastreador de GPS



Diagrama de circuito

312 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Cocido de circuito

A continuación se muestra el sketch de prueba:

// Test code for Adafruit GPS modules using MTK3329/MTK3339 driver


//
// This code turns on the LOCUS built-in datalogger. The datalogger
// turns off when power is lost, so you MUST turn it on every time
// you want to use it!
//
// Tested and works great with the Adafruit Ultimate GPS module
// using MTK33x9 chipset
// ------> http://www.adafruit.com/products/746
// Pick one up today at the Adafruit electronics shop
// and help support open source hardware & software! -ada

//This code is intended for use with Arduino Leonardo and other ATmega32U4-
based Arduinos

#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

// Connect the GPS Power pin to 5V


// Connect the GPS Ground pin to ground
// If using software serial (sketch example default):
// Connect the GPS TX (transmit) pin to Digital 8
// Connect the GPS RX (receive) pin to Digital 7
// If using hardware serial:

· Rubén & Juan Tomás Oliva Ramos · 313


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

// Connect the GPS TX (transmit) pin to Arduino RX1 (Digital 0)


// Connect the GPS RX (receive) pin to matching TX1 (Digital 1)

// If using software serial, keep these lines enabled


// (you can change the pin numbers to match your wiring):
//SoftwareSerial mySerial(8, 7);
//Adafruit_GPS GPS(&mySerial);

// If using hardware serial, comment


// out the above two lines and enable these two lines instead:
Adafruit_GPS GPS(&Serial1);
HardwareSerial mySerial = Serial1;

// Set GPSECHO to ‘false’ to turn off echoing the GPS data to the Serial console
// Set to ‘true’ if you want to debug and listen to the raw GPS sentences
#dene GPSECHO false

// this keeps track of whether we’re using the interrupt


// off by default!
boolean usingInterrupt = false;
void useInterrupt(boolean); // Func prototype keeps Arduino 0023 happy

void setup( )
{
while (!Serial); // the Leonardo will ‘wait’ until the USB plug is connected

// connect at 115200 so we can read the GPS fast enuf and


// also spit it out
Serial.begin(115200);
Serial.println(“Adafruit GPS logging start test!”);

// 9600 NMEA is the default baud rate for MTK - some use 4800
GPS.begin(9600);

// You can adjust which sentences to have the module emit, below
// Default is RMC + GGA
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
// Default is 1 Hz update rate
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
// the nice thing about this code is you can have a timer0 interrupt go off
// every 1 millisecond, and read data from the GPS for you. that makes the
// loop code a heck of a lot easier!
useInterrupt(true);
while (true) {

314 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

Serial.print(“Starting logging....”);
if (GPS.LOCUS_StartLogger( )) {
Serial.println(“ STARTED!”);
break;
} else {
Serial.println(“ no response :(“);
}
}
}

uint32_t updateTime = 1000;

void loop( ) // run over and over again


{
char c = GPS.read( );
// if you want to debug, this is a good time to do it!
if ((c) && (GPSECHO))
Serial.write(c);

if (millis( ) > updateTime)


{
updateTime = millis( ) + 1000;
if (GPS.LOCUS_ReadStatus( )) {
Serial.print(“\n\nLog #”);
Serial.print(GPS.LOCUS_serial, DEC);
if (GPS.LOCUS_type == LOCUS_OVERLAP)
Serial.print(“, Overlap, “);
else if (GPS.LOCUS_type == LOCUS_FULLSTOP)
Serial.print(“, Full Stop, Logging”);

if (GPS.LOCUS_mode & 0x1) Serial.print(“ AlwaysLocate”);


if (GPS.LOCUS_mode & 0x2) Serial.print(“ FixOnly”);
if (GPS.LOCUS_mode & 0x4) Serial.print(“ Normal”);
if (GPS.LOCUS_mode & 0x8) Serial.print(“ Interval”);
if (GPS.LOCUS_mode & 0x10) Serial.print(“ Distance”);
if (GPS.LOCUS_mode & 0x20) Serial.print(“ Speed”);

Serial.print(“, Content ”); Serial.print((int)GPS.LOCUS_cong);


Serial.print(“, Interval ”); Serial.print((int)GPS.LOCUS_interval);
Serial.print(“ sec, Distance ”); Serial.print((int)GPS.LOCUS_distance);
Serial.print(“ m, Speed ”); Serial.print((int)GPS.LOCUS_speed);
Serial.print(“ m/s, Status ”);
if (GPS.LOCUS_status)
Serial.print(“LOGGING, ”);

· Rubén & Juan Tomás Oliva Ramos · 315


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

else
Serial.print(“OFF, ”);
Serial.print((int)GPS.LOCUS_records); Serial.print(“ Records, ”);
Serial.print((int)GPS.LOCUS_percent); Serial.print(“% Used ”);

}//if (GPS.LOCUS_ReadStatus( ))
}//if (millis( ) > updateTime)
}//loop

/******************************************************************/
// Interrupt is called once a millisecond, looks for any new GPS data, and
stores it
SIGNAL(TIMER0_COMPA_vect) {
char c = GPS.read( );
// if you want to debug, this is a good time to do it!
if (GPSECHO && c) {
#ifdef UDR0
UDR0 = c;
// writing direct to UDR0 is much much faster than Serial.print
// but only one character can be written at a time.
#endif
}
}

void useInterrupt(boolean v) {
if (v) {
// Timer0 is already used for millis( ) - we’ll just interrupt somewhere
// in the middle and call the “Compare A” function above
OCR0A = 0xAF;
TIMSK0 |= _BV(OCIE0A);
usingInterrupt = true;
} else {
// do not call the interrupt function COMPA anymore
TIMSK0 &= ~_BV(OCIE0A);
usingInterrupt = false;
}
}



// Test code for Adafruit GPS modules using MTK3329/MTK3339 driver


//
// This code turns on the LOCUS built-in datalogger. The datalogger
// turns off when power is lost, so you MUST turn it on every time

316 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

// you want to use it!


//
// Tested and works great with the Adafruit Ultimate GPS module
// using MTK33x9 chipset
// ------> http://www.adafruit.com/products/746
// Pick one up today at the Adafruit electronics shop
// and help support open source hardware & software! -ada

//This code is intended for use with Arduino Leonardo and other ATmega32U4-
based Arduinos

#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

// Connect the GPS Power pin to 5V


// Connect the GPS Ground pin to ground
// If using software serial (sketch example default):
// Connect the GPS TX (transmit) pin to Digital 8
// Connect the GPS RX (receive) pin to Digital 7
// If using hardware serial:
// Connect the GPS TX (transmit) pin to Arduino RX1 (Digital 0)
// Connect the GPS RX (receive) pin to matching TX1 (Digital 1)

// If using software serial, keep these lines enabled


// (you can change the pin numbers to match your wiring):
//SoftwareSerial mySerial(8, 7);
//Adafruit_GPS GPS(&mySerial);

// If using hardware serial, comment


// out the above two lines and enable these two lines instead:
Adafruit_GPS GPS(&Serial1);
#dene mySerial Serial1

void setup( )
{
while (!Serial); // Leonardo will wait till serial connects

// connect at 115200 so we can read the GPS fast enuf and


// also spit it out
Serial.begin(115200);
Serial.println(“Adafruit GPS logging start test!”);

// 9600 NMEA is the default baud rate for MTK - some use 4800
GPS.begin(9600);

· Rubén & Juan Tomás Oliva Ramos · 317


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_OFF);

while (mySerial.available( ))
mySerial.read( );

delay(1000);
GPS.sendCommand(“$PMTK622,1*29”);
Serial.println(“----------------------------------------------------”);
}

void loop( ) // run over and over again


{
// If using hardware serial (e.g. Arduino Mega), change this to Serial1, etc.
if (mySerial.available( )) {
char c = mySerial.read( );
if (c) {
#ifdef UDR0
UDR0 = c;
#else
Serial.print(c);
#endif
}
}
}

Después de descargar el sketch, aparecerán las siguientes lecturas:

Lecturas del sketch

318 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Selección de lecturas



Página de Adafruit

· Rubén & Juan Tomás Oliva Ramos · 319


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Conversión de texto



Página de Google maps

320 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



My places



Importación de archivo

· Rubén & Juan Tomás Oliva Ramos · 321


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Resultado del rastreador

Sistema rastreador de dispositivos por medio de Internet


-

         
de accidentes.

Diagrama de sistema

  


-
ponente es un dispositivo Arduino que captura las coordenadas actuales y las publica en un
-



322 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Módulo requeridos



Conexión del GPS

· Rubén & Juan Tomás Oliva Ramos · 323


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Conexión nal



/***************************************************************************
* External Libraries
**************************************************************************/

#include <SPI.h>
#include <WiFi.h>
#include <TinyGPS.h>
#include <SoftwareSerial.h>

/***************************************************************************
* Internet Connectivity Setup - Variables & Functions
**************************************************************************/

char ssid[ ] = “YOUR_SSID”; // Network SSID (name)


char pass[ ] = “YOUR_PASSWORD”; // Network Password (use for WPA,
// or use as key for WEP)

int keyIndex = 0; // Network Key Index Number


// (needed only for WEP)

int status = WL_IDLE_STATUS;

WiFiClient client;

324 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

void connectToInternet( )
{
status = WiFi.status( );

// Check for the presence of the shield


if (status == WL_NO_SHIELD)
{
Serial.println(“[ERROR] WiFi Shield Not Present”);
// Do nothing
while (true);
}

// Attempt to connect to WPA/WPA2 Wi network


while ( status != WL_CONNECTED)
{
Serial.print(“[INFO] Attempting Connection - WPA SSID: “);
Serial.println(ssid);

status = WiFi.begin(ssid, pass);


}

// Connection successful
Serial.print(“[INFO] Connection Successful”);
Serial.print(“”);
printConnectionInformation( );
Serial.println(“-----------------------------------------------”);
Serial.println(“”);
}

void printConnectionInformation( )
{
// Print Network SSID
Serial.print(“[INFO] SSID: ”);
Serial.println(WiFi.SSID( ));

// Print Router’s MAC address


byte bssid[6];
WiFi.BSSID(bssid);
Serial.print(“[INFO] BSSID: ”);
Serial.print(bssid[5], HEX);
Serial.print(“:”);
Serial.print(bssid[4], HEX);
Serial.print(“:”);
Serial.print(bssid[3], HEX);

· Rubén & Juan Tomás Oliva Ramos · 325


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Serial.print(“:”);
Serial.print(bssid[2], HEX);
Serial.print(“:”);
Serial.print(bssid[1], HEX);
Serial.print(“:”);
Serial.println(bssid[0], HEX);

// Print received signal strength


long rssi = WiFi.RSSI( );
Serial.print(“[INFO] Signal Strength (RSSI): “);
Serial.println(rssi);

// Print encryption type


byte encryption = WiFi.encryptionType( );
Serial.print(“[INFO] Encryption Type: “);
Serial.println(encryption, HEX);

// Print WiFi Shield’s IP address


IPAddress ip = WiFi.localIP( );
Serial.print(“[INFO] IP Address: “);
Serial.println(ip);

// Print MAC address


byte mac[6];
WiFi.macAddress(mac);
Serial.print(“[INFO] MAC Address: “);
Serial.print(mac[5], HEX);
Serial.print(“:”);
Serial.print(mac[4], HEX);
Serial.print(“:”);
Serial.print(mac[3], HEX);
Serial.print(“:”);
Serial.print(mac[2], HEX);
Serial.print(“:”);
Serial.print(mac[1], HEX);
Serial.print(“:”);
Serial.println(mac[0], HEX);
}

/***************************************************************************
* GPS Setup - Variables & Functions
**************************************************************************/

326 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

TinyGPS gps;
SoftwareSerial ss(2, 3); // GPS TX = Arduino D2, GPS RX = Arduino D3

static void smartdelay(unsigned long ms)


{
unsigned long start = millis( );
do
{
while (ss.available( ))
gps.encode(ss.read( ));
} while (millis( ) - start < ms);
}

void getGPSCoordinates( )
{
oat latitude;
oat longitude;
unsigned long age = 0;

gps.f_get_position(&latitude, &longitude, &age);

smartdelay(10000);

// Transmit sensor data


if(latitude != TinyGPS::GPS_INVALID_F_ANGLE &&
longitude != TinyGPS::GPS_INVALID_F_ANGLE)
{
transmitSensorData(latitude, longitude);
}
else
{
Serial.println(“[INFO] Searching for Satellite”);
}
}

/***************************************************************************
* Data Publish - Variables & Functions
**************************************************************************/

//IP address of the server


char server[ ] = {“bookapps.codifythings.com”};
int port = 80;

· Rubén & Juan Tomás Oliva Ramos · 327


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

unsigned long lastConnectionTime = 0;


const unsigned long postingInterval = 10L * 1000L;

void transmitSensorData(oat latitude, oat longitude)


{
// Read all incoming data (if any)
while (client.available( ))
{
char c = client.read( );
}

if (millis( ) - lastConnectionTime > postingInterval)


{
client.stop( );

Serial.println(“[INFO] Connecting to Server”);

String requestData = “clientID=Sheep1&latitude=” + String(latitude) +


“&longitude=” + String(longitude);
Serial.println(“[INFO] Query String: “ + requestData);

// Prepare data or parameters that need to be posted to server


if (client.connect(server, port))
{
Serial.println(“[INFO] Server Connected - HTTP GET Started”);

// Make a HTTP request:


client.println(“GET /gpstracker/update.php?” + requestData +
“ HTTP/1.1”);
client.println(“Host: “ + String(server));
client.println(“Connection: close”);
client.println( );

lastConnectionTime = millis( );

Serial.println(“[INFO] HTTP GET Completed”);


}
else
{
// Connection to server:port failed
Serial.println(“[ERROR] Connection Failed”);
}
}

328 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

Serial.println(“-----------------------------------------------”);
}

/***************************************************************************
* Standard Arduino Functions - setup( ), loop( )
**************************************************************************/

void setup( )
{
// Initialize serial port
Serial.begin(115200);

// Initialize serial port for GPS data


ss.begin(9600);

//Connect Arduino to internet


connectToInternet( );
}

void loop( )
{
// Get GPS Coordinates
getGPSCoordinates( );
}



<?php
$servername = “localhost”;
$dbname = “codifyth_iot_book_db”;
$username = “codifyth_admin”;
$password = “Codify20!5”;

//Open a new connection to MySQL server


$mysqli = new mysqli($servername, $username, $password, $dbname);

//Output connection errors


if ($mysqli->connect_error)
{
die(“[ERROR] Connection Failed: “ . $mysqli->connect_error);
}
?>

· Rubén & Juan Tomás Oliva Ramos · 329


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Ruta de base de datos




<?php
include(‘util-dbconn.php’);

$clientID = $_GET[‘clientID’];
$latitude = $_GET[‘latitude’];
$longitude = $_GET[‘longitude’];

$sql = “INSERT INTO `GPS_TRACKER_DATA` (CLIENT_ID, LATITUDE, LONGITUDE)


VALUES(‘$clientID’, $latitude, $longitude) “;
$sql = $sql . “ON DUPLICATE KEY UPDATE CLIENT_ID=’$clientID’, LATITUDE=$la-
titude, LONGITUDE=$longitude”;

echo $sql;

if (!$result = $mysqli->query($sql))
{
echo “[Error] “ . mysqli_error( ) . “\n”;
exit( );
}

$mysqli->close( );

echo “[DEBUG] Updated GPS Coordinates Successfully\n”;


?>

330 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



<html lang=”en”>

<head>
<title>Livestock Tracking System</title>

<script type=”text/javascript” src=”http://maps.googleapis.com/maps/api/


js?sensor=false”></script>

<script>
function init( )
{
<?php
include(‘util-dbconn.php’);

$sql = “SELECT * FROM `GPS_TRACKER_DATA`”;


$result = $mysqli->query($sql);
$resultCount = $result->num_rows;

$zoomLatitude = “”;
$zoomLongitude = “”;

echo “var locations = [“;

if ($resultCount > 0)
{
$currentRow = 0;
 while($row = $result->fetch_assoc( ))
{
$currentRow = $currentRow + 1;
$clientID=$row[“CLIENT_ID”];
$latitude=$row[“LATITUDE”];
$longitude=$row[“LONGITUDE”];

if($currentRow == 1)
{
$zoomLatitude = $latitude;
$zoomLongitude = $longitude;
}

echo “[‘”.$clientID.”’,”.$latitude.”,”.$longitude.”]”;

if($currentRow < $resultCount)

· Rubén & Juan Tomás Oliva Ramos · 331


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

{
echo “,”;
}
}
}

echo “];”;

echo “var latitude = ‘$zoomLatitude’;”;


echo “var longitude = ‘$zoomLongitude’;”;

$mysqli->close( );
?>

map = new google.maps.Map(document.getElementById(‘map’),


{
zoom: 10,
center: new google.maps.LatLng(latitude, longitude),
mapTypeId: google.maps.MapTypeId.ROADMAP
});

var infowindow = new google.maps.InfoWindow( );

var marker, i;

for (i = 0; i < locations.length; i++)


{
marker = new google.maps.Marker({position: new google.maps.
LatLng(locations[i][1], locations[i][2]),map: map});

google.maps.event.addListener(marker, ‘click’, (function(marker, i)


{
return function( )
{
infowindow.setContent
(locations[i][0]);
infowindow.open(map,
marker);
}
})(marker, i));
}
}
</script>

332 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

</head>

<body style=“background-color: #9bcc59”>


<div style=“align: center;”><font size=“5px” color=“white”>Livestock Tracking
System</font></div>
<div id=“map” style=“width: 100%; height: 50%; margin-top: 50px;”></div>

<script type=“text/javascript”>
init( );
</script>
</body>
</html>





Ejecución de archivo


  http://proyectomonitoreo.com.mx/gpstracker cambiar el nombre de la
carpeta y poner los archivos dentro de la misma, también se deberá cambiar el nombre de do-
minio según corresponda.

· Rubén & Juan Tomás Oliva Ramos · 333


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Resultados del rastreo

Anillo para control de acceso




la antena que generalmente no permite la comunicación entre dispositivos de más de 10 cm.
-



aplicaciones, aunque la más común es probablemente como un sistema de pago. Con NFC en
-
tradora. Diversos transportes públicos de todo el mundo usan NFC para pagar en autobuses y
trenes, aunque también se encuentra en una tarjeta de plástico.

            
shield y los TAGS.

Materiales a usar

334 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



 Tablero MDF de 6 mm
 Madera u otros materiales sólidos para el anillo
 Cable USB
 Soldadura
 
 Servomotor
 
 Cables macho-macho

El código para la lectura de las tarjetas es:


#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>

// Dene the I2C pins


#dene PN532_IRQ (2)
#dene PN532_RESET (3) // Not connected by default on the NFC Shield
//Connect the shield I2C connection:
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

void setup(void) {
Serial.begin(115200);
Serial.println(“Starting the NFC shield”);
nfc.begin( );
//Check the rmware version of the shield
uint32_t versiondata = nfc.getFirmwareVersion( );
if (! versiondata) {
Serial.print(“Cant nd the shield, check you connection”);
while (1); // wait
}

// Got ok data, print it out!


Serial.println(“Connected”);
//Print out the rmware version
Serial.print(“Firmware ver. “);
Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print(‘.’); Serial.println((versiondata>>8) & 0xFF, DEC);

// Set the number of retry attempts to read from a card


nfc.setPassiveActivationRetries(0xFF);

· Rubén & Juan Tomás Oliva Ramos · 335


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

// congure the board to read RFID tags


nfc.SAMCong( );

Serial.println(“Waiting for a tag”);


}

void loop(void) {
//Decalre a variable to store state
boolean success;
//Buffer to store the ID of the card
byte uid[ ] = { 0, 0, 0, 0, 0, 0, 0 };
//Keychain that stores the card information
byte keyID[ ] = {39, 246, 64, 175};
int counter=0;
//Variable to store the length of the ID
byte uidLength;

// Waits for and tag and reads the lenght of the ID and the ID
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0],
&uidLength);

if (success) {

for (uint8_t i=0; i < uidLength; i++)


{
if(uid[i]==keyID[i]){
counter++;
}

}
Serial.println( );
//If 4 out of 4 i right we unlock
if(counter==4){
Serial.println(“unlocked”);
//if not the card is wrong
}else{
Serial.println(“wrong card try again”);
}
// Wait 1 second before continuing
delay(1000);
}
}

336 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

-


Apertura de monitor serial

            
mensaje de desbloqueo en caso de que la comparación sea igual; es importante dar clic en la


#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>

// Dene the I2C pins


#dene PN532_IRQ (2)
#dene PN532_RESET (3) // Not connected by default on the NFC Shield
//Connect the shield I2C connection:
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

void setup(void) {
Serial.begin(115200);
Serial.println(“Starting the NFC shield”);
nfc.begin( );
//Check the rmware version of the shield
uint32_t versiondata = nfc.getFirmwareVersion( );
if (! versiondata) {
Serial.print(“Cant nd the shield, check you connection”);

· Rubén & Juan Tomás Oliva Ramos · 337


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

while (1); // wait


}

// Got ok data, print it out!


Serial.println(“Connected”);
//Print out the rmware version
Serial.print(“Firmware ver. ”);
Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print(‘.’); Serial.println((versiondata>>8) & 0xFF, DEC);

// Set the number of retry attempts to read from a card


nfc.setPassiveActivationRetries(0xFF);

// congure the board to read RFID tags


nfc.SAMCong( );

Serial.println(“Waiting for a tag”);


}

void loop(void) {
//Decalre a variable to store state
boolean success;
//Buffer to store the ID of the card
byte uid[ ] = { 0, 0, 0, 0, 0, 0, 0 };
//Keychain that stores the card information
byte keyID[ ] = {39, 246, 64, 175};
int counter=0;
//Variable to store the length of the ID
byte uidLength;

// Waits for and tag and reads the lenght of the ID and the ID
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0],
&uidLength);

if (success) {

for (uint8_t i=0; i < uidLength; i++)


{
if(uid[i]==keyID[i]){
counter++;
}

}
Serial.println( );

338 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

//If 4 out of 4 i right we unlock


if(counter==4){
Serial.println(“unlocked”);
//if not the card is wrong
}else{
Serial.println(“wrong card try again”);
}
// Wait 1 second before continuing
delay(1000);
}
}



Servomotor



#include <Servo.h>
//Create servo object
Servo myservo;

void setup( )
{
//Name the signal pin
myservo.attach(9);
}

void loop( )
{
//Rotate the motor from position 0 to 180 degrees

· Rubén & Juan Tomás Oliva Ramos · 339


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

myservo.write(0);
delay(1000);
myservo.write(180);
delay(1000);
}

Armado del prototipo en todas sus partes


Ahora se puede hacer una construcción para adaptar el proyecto a la puerta; este diseño puede



Prototipo



Adición del motor

340 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable



Conexión de partes




#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>
#include <Servo.h>

// Dene the I2C pins


#dene PN532_IRQ (2)
#dene PN532_RESET (3) // Not connected by default on the NFC Shield
//Connect the shield I2C connection:
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

//Create servo object


Servo myservo;

void setup(void) {
Serial.begin(115200);
Serial.println(“Starting the NFC shield”);
nfc.begin( );

//Check the rmware version of the shield


uint32_t versiondata = nfc.getFirmwareVersion( );
if (! versiondata) {
Serial.print(“Cant nd the shield, check you connection”);
while (1); // wait
//Name the signal pin

· Rubén & Juan Tomás Oliva Ramos · 341


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

myservo.attach(9);
myservo.write(0);
delay(1000);
}

// Got ok data, print it out!


Serial.println(“Connected”);
//Print out the rmware version
Serial.print(“Firmware ver. ”);
Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print(‘.’); Serial.println((versiondata>>8) & 0xFF, DEC);

// Set the number of retry attempts to read from a card


nfc.setPassiveActivationRetries(0xFF);

// congure the board to read RFID tags


nfc.SAMCong( );

Serial.println(“Waiting for a tag”);


}

void loop(void) {
//Decalre a variable to store state
boolean success;
//Buffer to store the ID of the card
byte uid[ ] = { 0, 0, 0, 0, 0, 0, 0 };
//Keychain that stores the card information
byte keyID[ ] = {39, 246, 64, 175};
int counter=0;
//Variable to store the length of the ID
byte uidLength;

// Waits for and tag and reads the length of the package and the //ID
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0],
&uidLength);

if (success) {

for (uint8_t i=0; i < uidLength; i++)


{
if(uid[i]==keyID[i]){
counter++;
}
}

342 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Desarrollo de proyectos Wearable

Serial.println( );
//If 4 out of 4 i right we unlock
if(counter==4){
Serial.println(“Open door”);
myservo.write(180);

//Keep the door open for 20sec


delay(2000);
Serial.println(“Close door”);
myservo.write(0);

//if not the card is wrong


}else{
Serial.println(“wrong card try again”);
}
// Wait 1 second before continuing
delay(1000);
}



TAG




TAG como pulsera

· Rubén & Juan Tomás Oliva Ramos · 343


Capítulo 9 · Integración de aplicaciones: Proyectos wearable


Un podómetro es un dispositivo electrónico o electromecánico generalmente portátil, que
cuenta cada 

por el usuario si se desea la presentación de la distancia recorrida en una unidad de longitud


-

en el cinturón durante todo el día, de manera que registre la cantidad de pasos recorridos y, por


Algunos podómetros también registran erróneamente los movimientos que no son un paso,
-


-
-
-




Conexión al Arduino

El código de prueba de la aplicación es:

// Declare built-in LED pin


int LED = 13;

344 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

// Declare the X,Y,Z analog pins


int xPin = A0;
int yPin = A1;
int zPin = A2;

void setup( ){
Serial.begin(9600);
pinMode(LED, OUTPUT);
}

void loop( ){
// Read the 3 values
int xVal = analogRead(xPin);
int yVal = analogRead(yPin);
int zVal = analogRead(zPin);

// Print the 3 values on the Serial


Serial.print(xVal);
Serial.print(“ ”);
Serial.print(yVal);
Serial.print(“ ”);
Serial.println(zVal);

// Check for movement


// Values at rest:
// X ~ 330
// Y ~ 330
// Z ~ 400
// If movement, blink the built-in LED

if (xVal < 310 || xVal > 350 || yVal < 310 || yVal > 350 || zVal < 380 ||
zVal > 420)
{
digitalWrite(LED, HIGH);
delay(300);
digitalWrite(LED, LOW);
}

// Small delay for the Serial


delay(50);
}

· Rubén & Juan Tomás Oliva Ramos · 345


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Ejemplo de una aplicación de un podómetro para un teléfono móvil:



Podómetro para dispositivo


-
duino 101; se usarán las características y sensores que posee la tarjeta.



-


       


energía del Módulo Intel® Curie ™ con la simplicidad de Arduino a un precio accesible. Mantie-



Características




346 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

Arduino Genuino 101

Lectura de un potenciómetro



    




Diagrama de conexión

Diagrama de conexión

El código del sketch es:

#include <Arduino.h>
#include <U8g2lib.h>

· Rubén & Juan Tomás Oliva Ramos · 347


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/


SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display

int a=0; //variable of value of analog read pin


char dato[4];//variable to send text to the oled display
void setup(void) {
u8g2.begin( );// Oled display begins
}

void loop(void) {
a=analogRead(A0); //read potentiometer value
sprintf(dato,”%04d”,a); //convert potentiometer value to string u8g2.
clearBuffer( ); // clear the internal
memory
u8g2.setFont(u8g2_font_inr38_mf); // choose a suitable font
u8g2.drawStr(0,60,dato); // write something to the internal memory
u8g2.sendBuffer( ); // transfer internal memory to the display
delay(1000);
}



Conexiones nales

348 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

Contador de pasos con Arduino Genuino 101

-





CurieIMU.h es la biblioteca que da acceso a todos los parámetros, características y lecturas del

también de tres ejes. Asimismo, la biblioteca es parte del núcleo de 101 tableros y se carga jun-

de detección de pasos, mismos que se leen con interrupción o sondeo.





contrario, el nuevo valor se imprime en el monitor serie y se almacena.

Código del sketch de la aplicación del contador de pasos

#include “CurieIMU.h”
const int ledPin = 13;

boolean stepEventsEnabeled = true; // whether you’re polling or using events


long lastStepCount = 0; // step count on previous polling check
boolean blinkState = false; // state of the LED

void setup( ) {
Serial.begin(9600); // initialize Serial communication
while(!Serial) ; // wait for serial port to connect.
// pinMode(13, OUTPUT);
// intialize the sensor:
CurieIMU.begin( );
// turn on step detection mode:
CurieIMU.setStepDetectionMode(CURIE_IMU_STEP_MODE_NORMAL);
// enable step counting:
CurieIMU.setStepCountEnabled(true);

if (stepEventsEnabeled) {
// attach the eventCallback function as the
// step event handler:
CurieIMU.attachInterrupt(eventCallback);

· Rubén & Juan Tomás Oliva Ramos · 349


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

CurieIMU.interrupts(CURIE_IMU_STEP); // turn on step detection

Serial.println(“IMU initialisation complete, waiting for events...”);


}
}
void loop( ) {
/* Instead of using step detection event notications,
we can check the step count periodically */
if (!stepEventsEnabeled) {
updateStepCount( );
}
digitalWrite(13, blinkState);
blinkState = !blinkState;
delay(1000);
}

static void updateStepCount( ) {


// get the step count:
int stepCount = CurieIMU.getStepCount( );

// if the step count has changed, print it:


if (stepCount != lastStepCount) {
Serial.print(“Step count: “);
Serial.println(stepCount);
// save the current count for comparison next check:
lastStepCount = stepCount;
}
}

static void eventCallback(void) {


if (CurieIMU.stepsDetected( ))
updateStepCount( );
}

Imagen nal del podómetro

350 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos



construirá un botón que se puede poner sobre alguna prenda de vestir y portarse como apoyo
para protegerse en alguna situación de emergencia. A continuación, se presenta el esquema del


 
 
 

Esquema wearable


-

-



-
-
-
municaciones 2G y 3G.




· Rubén & Juan Tomás Oliva Ramos · 351


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Módulo GSM


son simples comandos de texto que se pueden enviar a través de conexio-
nes en serie a varios chips electrónicos ajustados a las instrucciones del mismo. Históricamente,
     -
       





Descripción de comandos AT

 

Este es el comando AT más básico; su propósito es hacer ping a un


AT dispositivo de módem. Si el dispositivo de módem funciona correctamente,
la respuesta OK se recibirá del mismo.

AT+CMGF=1 Este comando establece el formato de SMS en caracteres ASCII.

Este comando envía un mensaje de texto SMS, entre comillas se pone el


AT+CMGS=”1234567890”
número de teléfono.

Este comando ordena al módem que establezca una llamada de voz con
un teléfono (llamada telefónica).
ATD1234567890;
El número de teléfono 1234567890 que se muestra en el comando debe
reemplazarse por un número de teléfono que recibirá la llamada.

ATH Este comando se usa para desconectar la sesión de la llamada telefónica.

352 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

  


tabla anterior, para enviar comandos para operaciones tales como marcar, colgar, enviar SMS,





Módulo GSM conectado a Arduino

Uso de plataformas para dispositivos wearable




 
 

Conexión con plataformas

· Rubén & Juan Tomás Oliva Ramos · 353


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

Sketch de la programación del módulo GSM/GPRS de forma general


para envío de SMS y llamada telefónica:

// Include the software serial library


// Alternately you can directly use the hardware serial
// via (Arduino’s digital pins D0 and D1)
#include <SoftwareSerial.h>

// Dene the two pins that will be connected


// between the Arduino Uno and the GSM module

// D2 is connected to RXD pin of the GSM module


// So D2 will be simulated as the Tx pin on the Arduino
#dene SIM800_RXD 2

// D4 is connected to TXD pin of the GSM module


// So D4 will be simulated as the Rx pin on the Arduino
#dene SIM800_TXD 4

// Dene the object for using the software serial


// these two pins are used to transmit the AT commands
// from the Arduino board to the modem in the GSM module
// SYNTAX: SoftwareSerialobj(Arduino_Rx, Arduino_Tx)
SoftwareSerial GSM_SIM800(SIM800_TXD, SIM800_RXD);

// The number 1234567890 shown below


// should be replaced with the number to be called
String phoneNumber = “1234567890”;

//Initialize the sketch for using the GSM module


void setup( )
{
// initialize the hardware serial
// for communication with the Serial Monitor window
Serial.begin(9600);

// initialize the software serial


// for communication with the GSM modem
GSM_SIM800.begin(9600);

// Wait for 3 seconds for the SIM800 module to initialize


delay(3000);
}

354 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

// Dene the main logic of the main program loop


void loop( )
{
// read a character from the Serial Monitor window
char ch = Serial.read( );

// if the character a is entered


if (ch == ‘a’)
{
// invoke function to send an SMS
sendAlertSMS( );
}

// if the character b is entered


if (ch == ‘b’)
{
// invoke the function to dial a phone number
callNumber( );
}
}

// Logic to send SMS


void sendAlertSMS( )
{
Serial.println(“Sending SMS...”);

// Issue AT command to set SMS format to ASCII characters


GSM_SIM800.print(“AT+CMGF=1\r\n”);
delay(1000);

// Issue an AT command to send a new SMS to a phone number


GSM_SIM800.print(“AT+CMGS=\”” + phoneNumber + “\”\r\n”);
delay(1000);

// Next step is to send SMS content to the modem


// Note that this step does not use a separate AT command
GSM_SIM800.print(“This is an SMS”);
delay(1000);

// The last AT command is to


// send Ctrl+Z /ESC character sequence
// to indicate to the GSM modem
// that the SMS message is complete
GSM_SIM800.print((char)26);

· Rubén & Juan Tomás Oliva Ramos · 355


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

delay(2000);

// Get results of sending SMS


// Print the results in the Serial Monitor window
if(GSM_SIM800.available( ))
{
Serial.println(GSM_SIM800.read( ));
}
}

// Logic to call phone number


void callNumber( )
{
// Send AT command TD to the GSM modem
// along with the number to be called
Serial.println(“Calling...”);
GSM_SIM800.print(“ATD” + phoneNumber + “;\r\n” );

// wait 10 seconds before the next loop


delay(15000);

// Issue an AT command to the GSM modem to disconnect the call


GSM_SIM800.print(“ATH\r\n”);
}

Condición del botón cuando se presiona y se envía un mensaje de texto SMS




If (digitalread(5) == 0)
{
EnviaSMS( );
}

void EnviaSMS( )
{
Serial.println(“Enviando SMS”);

// Issue AT command to set SMS format to ASCII characters


GSM_SIM800.print(“AT+CMGF=1\r\n”);
delay(1000);

// Issue an AT command to send a new SMS to a phone number


GSM_SIM800.print(“AT+CMGS=\”” + phoneNumber + “\”\r\n”);

356 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

delay(1000);

// Next step is to send SMS content to the modem


// Note that this step does not use a separate AT command
GSM_SIM800.print(“Mensaje SMS de alerta”);
delay(1000);

// The last AT command is to


// send Ctrl+Z /ESC character sequence
// to indicate to the GSM modem
// that the SMS message is complete
GSM_SIM800.print((char)26);
delay(2000);

// Get results of sending SMS


// Print the results in the Serial Monitor window
if(GSM_SIM800.available( ))
{
Serial.println(GSM_SIM800.read( ));
}
}

Dispositivo wearable con módulo ESP8266





Conexión del sistema




· Rubén & Juan Tomás Oliva Ramos · 357


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Internet, desde un sitio web y también desde la aplicación.



  https://ifttt.com/

Pantalla de IFTTT

 

Ingreso de password

358 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

 

Servicio de comunicación SMS

 
Conectar; el usuario deberá tener al alcance el número donde desea se le envíe el
mensaje de texto SMS, es preciso anteponer 0052 para el caso de México y el número



Generación del canal de comunicación

· Rubén & Juan Tomás Oliva Ramos · 359


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

 Después de haber creado el canal de comunicación, es decir, el servicio de mensajería




SMS Settings



Creación de New Applet

360 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos



Condición IFTTT



Servicio Webhooks

· Rubén & Juan Tomás Oliva Ramos · 361


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Opción Receive a web request



Creación del trigger

362 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos



Creación de la condición



Selección de la acción

· Rubén & Juan Tomás Oliva Ramos · 363


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Pantalla de Envío de mensaje



Pantalla del mensaje a enviar

364 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos



Aparición de la acción



Conguración de las credenciales

· Rubén & Juan Tomás Oliva Ramos · 365


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Pantalla Webhooks settings

-




Conguración del servicio

366 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos



https://maker.ifttt.com/trigger/{event}/with/key/kUF8xV-qsqV2AaECaP1A-
LFl6DoDleGW2QZJlQNoUQT

https://maker.ifttt.com/trigger/boton_presionado/with/key/kUF8xV-qsqV2AaECaP1A-
LFl6DoDleGW2QZJlQNoUQT



Ejecución del servicio




// Libraries
#include <ESP8266WiFi.h>

// WiFi settings
const char* ssid = “wi-name”;
const char* password = “wi-pass”;

// IFTTT settings
const char* host = “maker.ifttt.com”;
const char* eventName = “boton_presionado”;
const char* key = “key”;

· Rubén & Juan Tomás Oliva Ramos · 367


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

void setup( ) {
pinMode(D1,INPUT_PULLUP);
Serial.begin(115200);
delay(10);

// We start by connecting to a WiFi network


Serial.println( );
Serial.println( );
Serial.print(“Connecting to ”);
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status( ) != WL_CONNECTED) {


delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi connected”);
Serial.println(“IP address: ”);
Serial.println(WiFi.localIP( ));
}

void loop( ) {

// Reading push button


bool boton = digitalRead(D1);

// Check humidity data


if (boton == 0) {

Serial.print(“connecting to ”);
Serial.println(host);

// Use WiFiClient class to create TCP connections


WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println(“connection failed”);
return;
}

368 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

// We now create a URI for the request


String url = “/trigger/”;
url += eventName;
url += “/with/key/”;
url += key;

Serial.print(“Requesting URL: ”);


Serial.println(url);

// This will send the request to the server


client.print(String(“GET ”) + url + “ HTTP/1.1\r\n” +
“Host: “ + host + “\r\n” +
“Connection: close\r\n\r\n”);
int timeout = millis( ) + 5000;
while (client.available( ) == 0) {
if (timeout - millis( ) < 0) {
Serial.println(“>>> Client Timeout !”);
client.stop( );
return;
}
}

// Read all the lines of the reply from server and print them to Serial
while(client.available( )){
String line = client.readStringUntil(‘\r’);
Serial.print(line);
}

Serial.println( );
Serial.println(“closing connection”);

// Wait a long time before new alert


delay(10 * 60 * 1000);

}
}

· Rubén & Juan Tomás Oliva Ramos · 369


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Respuesta del monitor


-


Muestra de conguración correcta

370 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

Detector de llanto para bebé

Sensor

              

https://www.dfrobot.com/product-83.html

Sensor de sonido
-
te para detectar el volumen en ambiente. Arduino puede recoger la señal de salida imitando la





 Amplio rango de voltaje de 3.3v a 5v


 

 
 
 Conector de alta calidad
 

· Rubén & Juan Tomás Oliva Ramos · 371


Capítulo 9 · Integración de aplicaciones: Proyectos wearable



Pines



Conexión de sensor a tarjeta



void setup( )
{
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
}
void loop( )
{

372 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Podómetro o contador de pasos

int val;
val=analogRead(0); //connect mic sensor to Analog 0
Serial.println(val,DEC);//print the sound value to serial
delay(100);
}



Interfaz

Sketch del programa en el Arduino para envío de los datos al celular:

#include <SoftwareSerial.h>

//SoftwareSerial bluetooth(bluetoothRx, bluetoothTx);


SoftwareSerial bluetooth(6, 7);

void setup( )
{
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
bluetooth.begin(9600);// bluetooth communication begins
}
void loop( )
{
int val;
val = analogRead(0); //connect mic sensor to Analog 0

· Rubén & Juan Tomás Oliva Ramos · 373


Capítulo 9 · Integración de aplicaciones: Proyectos wearable

bluetooth.print(val,DEC);
delay(1000);
}


Condiciones para detección de llanto






Detector de sonido

Bloques de la aplicación

374 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Resumen

Marcaje de número

RESUMEN
En este capítulo se desarrollaron varios proyectos relacionados con los dispositivos weara-
ble aplicados al mundo real; cada uno representó casos que se tomaron como referencia
para otros posibles proyectos. Se proporcionaron las herramientas necesarias para efec-
tuarlos, y cada uno de ellos se basó en la utilización de placas Arduino que se pueden usar
para wearables.

Se ilustró con dispositivos como smartwatches que cuentan con tecnología del tipo senso-
res, GPS, pulseras, etc.; además, se brindó una idea de cómo desarrollar dispositivos inteli-
gentes para diversos usos, desde personal, en la vida diaria o de tipo industrial.

En el siguiente capítulo se verán las aplicaciones industriales donde se usará Android, con
un enfoque en el control y monitoreo de dispositivos.

· Rubén & Juan Tomás Oliva Ramos · 375


Capítulo

Integración con
DISPOSITIVOS
industriales
Contenido Objetivo
10.1 Introducción En este capítulo se desarrollarán las habili-
10.2 Protocolo RS485 y módulos dades para utilizar y crear aplicaciones en
10.2.1 Esquema de montaje la plataforma de Android para monitoreo y
10.2.2 Comunicación RS485 con control de equipos industriales, tales como
Arduino controladores lógicos programables (PLC)
y la integración de Arduino en el ámbito in-
10.3 Conexión de un termopar a Arduino
dustrial; lo cual a su vez permitirá aplicar-
10.3.1 Rangos y límites de error de lo a redes y protocolos industriales. Asimis-
termopar mo, esta herramienta añadirá convergencia
10.4 Modbus RTU transparente a equipos de comunicación,
10.4.1 Aplicaciones industriales con como variadores de velocidad, actuadores
protocolo Modbus RTU y sensores, con lo que será posible crear
10.4.2 Modbus TCP escenarios donde Arduino interactúe con
10.5 Aplicaciones Android para control y equipo industrial, se configurará y realizará
monitoreo de dispositivos industriales el software requerido en esta placa a través
10.5.1 Modbus Droid del uso de Shields Ethernet y módulos Wifi
10.5.2 Scada Touch Lite ESP82266 y de comunicación RS485, mos-
10.5.3 ESP8266 conectado a una trados en la figura 10.1. Al final, se podrá
red industrial integrar una gran cantidad de aplicaciones
con las herramientas vistas en este capítulo.
Resumen
Capítulo 10 · Integración con dispositivos industriales


En la actualidad los dispositivos industriales juegan un papel muy importante en el ámbito
de procesos; sin duda alguna, los dispositivos electrónicos se deben de integrar a estas tec-
nologías para poder satisfacer las necesidades actuales de la industria. Por tal motivo, vere-
mos aplicada la plataforma de desarrollo Arduino en la adaptación e integración de equipos
industriales, con ello se llevará a cabo una comunicación y convergencia entre los dispositi-
vos actuales.


El RS485 es un estándar de comunicaciones ampliamente usado en la industria de microcon-
troladores como Arduino para leer o escribir en otros dispositivos. Es sencillo, robusto y, a di-
ferencia de otras tecnologías, su uso es gratuito. Por estos motivos, muchos otros sensores y ac-
tuadores lo han adoptado como forma de comunicación, y es frecuente en el ámbito industrial.

Una de las ventajas del RS485 es la larga distancia de transmisión: el alcance depende de la
velocidad, es posible conseguir 35 Mbps en distancias inferiores a 10 metros y hasta 100 Kbps
en hasta 1200 metros.

-
     
tanto, se puede emplear para enviar cualquier tipo de señal, como una digital, PWM, puerto


Un bus RS485 dispone de dos conductores denominados A y B (inversora); para ellos se sue-
le utilizar un cable de par trenzado y así aumentar la inmunidad al ruido. Es posible acceder
hasta 32, 128 o 254 estaciones con un único par trenzado.

El protocolo funciona, simplemente, con la inversión de la tensión entre A (no inversora) y


B (inversora):

 
 



receptor y emisor en cada terminal.

El RS485 se emplea frecuentemente en combinación con UART para enviar señales a largas
-
lo Modbus.

378 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.2 · Protocolo RS485 y módulos

Proyectos con RS485 incluyen automatización de plantas industriales. También se emplea


-

control grandes sistemas de iluminación o sonido como en conciertos de música.

Protocolo RS485





Por otro lado, es preciso emplear los conductores A y B del par trenzado, que constituyen el
propio bus RS485 y al que estarán conectados todos los dispositivos que pertenezcan al mis-
mo bus.

-
nes RE (Receiver Enable) y DE (Driver Enamble). Si se conectan estos pines a Vcc, el módulo


-



· Rubén & Juan Tomás Oliva Ramos · 379


Capítulo 10 · Integración con dispositivos industriales



Conexión de modo emisor



Conexión de modo receptor


-


Cambio de tensión





-


380 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.2 · Protocolo RS485 y módulos

Conexión half-duplex


te) se tendrán que usar dos conversores RS485 en cada dispositivo y dos bus RS485 paralelos




Esquema de comunicación con Arduino

· Rubén & Juan Tomás Oliva Ramos · 381


Capítulo 10 · Integración con dispositivos industriales

El es un industrial ampliamente utilizado por su robustez, fácil instrumen-



-
trol de luces entre otras aplicaciones. En este apartado se trabajará con la comunicación serial
a través del RS485.


32 dispositivos. El siguiente es el módulo de comunicación RS485 ya con el circuito que nivela
los voltajes para establecer la comunicación.

Módulo RS485 con circuito

-

la bornera.

Por las salidas A y B se envían los datos; B es la negación de A, se envían los mismos datos
pero en la línea B están negados, de esta forma se pueden restar ambas señales y eliminar el
ruido para quedarse sólo con la señal de datos. El encargado de esta transmisión diferencial


Viéndose desde el microcontrolador o Arduino, la comunicación se trabaja de manera serial:


-


Uso del módulo RS485 como transmisor



salidas A y B se comportarán como salidas de datos, se tienen que conectar a 5v los pines RE

transmitirá por los pines AB.

382 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.2 · Protocolo RS485 y módulos

Módulo RS485 como transmisor

Uso del módulo RS485 como receptor


Al conectar los pines RE y DE, el módulo se comportará como receptor y los datos recibidos por

Arduino es posible leer los datos recibidos.

Módulo RS485

Comunicación simplex entre dos Arduinos con RS485


Una  es unidireccional; en este caso, un Arduino se comporta sólo co-
mo transmisor y el otro como receptor. A nivel de programación es como si se trabajara con
una comunicación serial, pero en un sentido: uno envía y el otro sólo recibe datos.

Desde un Arduino a través de un potenciómetro se moverá un servomotor conectado a otro


Arduino, sólo dos cables (salidas A y B del RS485) unirán a ambos, si la distancia es larga se re-
comienda usar cable trenzado.

· Rubén & Juan Tomás Oliva Ramos · 383


Capítulo 10 · Integración con dispositivos industriales

Conexión simplex

El código del transmisor es:


void setup( )
{
Serial.begin(9600);
}

void loop( )
{
int lectura = analogRead(0);//leemos el valor del potenciómetro (de 0 a 1023)
byte angulo= map(lectura, 0, 1023, 0, 180); // escalamos la lectura a un
valor de ángulo (entre 0 y 180)
Serial.write(angulo); //enviamos el ángulo correspondiente
delay(50);
}



#include <Servo.h>
Servo myservo; // creamos el objeto servo
void setup( )
{
Serial.begin(9600);
myservo.attach(9); // asignamos el pin 9 para el servo.
}

void loop( )
{

384 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.2 · Protocolo RS485 y módulos

if (Serial.available( )) {
int angulo = Serial.read( ); //Leemos el dato recibido
if(angulo<=180) //vericamos que sea un valor en el rango del servo
{
myservo.write(angulo); //movemos el servomotor al ángulo correspondiente.
}
}
}

Comunicación half-dúplex entre varios Arduinos



bus RS485, un Arduino es  y todos los demás son -

que envía la información por el bus y sólo el esclavo con la dirección correcta es quien inter-
preta o procesa los datos.

A continuación se muestra el mismo ejemplo trabajado anteriormente, pero enfocado en






 Conexión multipunto

· Rubén & Juan Tomás Oliva Ramos · 385


Capítulo 10 · Integración con dispositivos industriales


y en el código únicamente hay que tener en cuenta las direcciones de los esclavos.


enviar la dirección del esclavo, la cual queda de la siguiente forma:

[Inicio de trama][Dirección][Función][Valor][Fin de trama]




El esclavo interpreta esta trama y, si coincide su dirección, entonces realiza la función corres-
pondiente; si es una función que necesite responder, en la trama también agrega la dirección,

es de la forma:

[Inicio de trama][Dirección] [, ] [Valor][Fin de trama]

En este caso, entre la dirección y el valor se envía una coma como separador, puesto que ambos


El código del maestro es:


const int ledPin = 13; // Numero del pin para el Led
const int EnTxPin = 2; // HIGH:TX y LOW:RX
void setup( )
{
Serial.begin(9600);
Serial.setTimeout(100); //establecemos un tiempo de espera de 100ms

// inicializamos los pines


pinMode(ledPin, OUTPUT);
pinMode(EnTxPin, OUTPUT);
digitalWrite(ledPin, LOW);
digitalWrite(EnTxPin, HIGH); //RS485 como Transmisor
}

void loop( )
{

int lectura = analogRead(0);//leemos el valor del potenciómetro (de 0 a 1023)


int angulo= map(lectura, 0, 1023, 0, 180);// escalamos la lectura a un
valor de ángulo (entre 0 y 180)

386 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.2 · Protocolo RS485 y módulos

//---enviamos el ángulo para mover el servo------


Serial.print(“I”); //inicio de trama
Serial.print(“101”);//dirección del esclavo
Serial.print(“S”); //función S para indicarle que vamos a mover el servo
Serial.print(angulo); //ángulo o dato
Serial.print(“F”); //n de trama

//----------------------------
delay(50);

//---solicitamos una lectura del sensor----------


Serial.print(“I”); //inicio de trama
Serial.print(“101”);//direccion del esclavo
Serial.print(“L”); //L para indicarle que vamos a Leer el sensor
Serial.print(“F”); //n de trama
Serial.ush( ); //Esperamos hasta que se envíen los datos

//----Leemos la respuesta del Esclavo-----


digitalWrite(EnTxPin, LOW); //RS485 como receptor
if(Serial.nd(“i”)) //esperamos el inicio de trama
{
int esclavo=Serial.parseInt( ); //recibimos la direccion del esclavo
int dato=Serial.parseInt( ); //recibimos el dato

if(Serial.read( )==’f’&&esclavo==101) //si n de trama y direccion son


los correctos
{
funcion(dato); //realizamos la acción con el dato recibido
}
}
digitalWrite(EnTxPin, HIGH); //RS485 como Transmisor

//----------n de la respuesta----------

}
void funcion(int dato)
{
if(dato>500)
digitalWrite(ledPin, HIGH);
else
digitalWrite(ledPin, LOW);
}

· Rubén & Juan Tomás Oliva Ramos · 387


Capítulo 10 · Integración con dispositivos industriales

El código del esclavo es:

#include <Servo.h>

Servo myservo; // creamos el objeto servo


const int EnTxPin = 2; // HIGH:TX y LOW:RX
const int mydireccion =101; //Direccion del esclavo
void setup( )
{
Serial.begin(9600);
Serial.setTimeout(100); //establecemos un tiempo de espera de 100ms
myservo.attach(9); // asignamos el pin 9 para el servo.
pinMode(EnTxPin, OUTPUT);
digitalWrite(EnTxPin, LOW); //RS485 como receptor
}

void loop( )
{
if(Serial.available( ))
{
if(Serial.read( )==’I’) //Si recibimos el inicio de trama
{
int direccion=Serial.parseInt( ); //recibimos la direccion
if(direccion==mydireccion) //Si direccion es la nuestra
{
char funcion=Serial.read( ); //leemos el carácter de función

//---Si el carácter de función es una S entonces la trama es para


mover el motor-----------
if(funcion==’S’)
{
int angulo=Serial.parseInt( ); //recibimos el ángulo
if(Serial.read( )==’F’) //Si el n de trama es el correcto
{
if(angulo<=180) //vericamos que sea un valor en el ran-
go del servo
{
myservo.write(angulo); //movemos el servomotor al ángu-
lo correspondiente.
}
}
}
//---Si el carácter de función es L entonces el maestro está so-
licitando una lectura del sensor---

388 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.3 · Conexión de un termopar a Arduino

else if(funcion==’L’)
{
if(Serial.read( )==’F’) //Si el n de trama es el correcto
{
int lectura = analogRead(0); //realizamos la lectura del
sensor
digitalWrite(EnTxPin, HIGH); //rs485 como transmisor
Serial.print(“i”); //inicio de trama
Serial.print(mydireccion); //direccion
Serial.print(“,”);
Serial.print(lectura); //valor del sensor
Serial.print(“f”); //n de trama
Serial.ush( ); //Esperamos hasta que se envíen los datos
digitalWrite(EnTxPin, LOW); //RS485 como receptor
}
}
}
}
}
delay(10);
}

Si se desea que un código para un segundo esclavo tenga la misma función, sólo se debe cam-
biar la dirección.


Un 
-

en forma de alambre.

¿Cuáles son los tipos de termopar?


-




dicho alambre. Esto es, un termopar muy delgado posiblemente no alcance todo el rango de
temperatura.

· Rubén & Juan Tomás Oliva Ramos · 389


Capítulo 10 · Integración con dispositivos industriales

¿Cómo escojo un tipo de termopar?

Debido a que un termopar mide en amplios rangos de temperatura y puede ser relativamente

pueden seleccionar:

 Rango de temperatura
 Resistencia química del termopar o material de la funda
 Resistencia a la abrasión y a la vibración
 Requisitos de instalación (es posible que sea necesaria la compatibilidad del equipo


e sabe el tipo de unión a escoger?





-




 Resistencia del aislante a temperatura ambiente



Menos de 0.90 mm (0.03 pulg.) 50 V 100 M Ohmios

0.80-1.5 mm (0.030 a 0.059 pulg.) 50 V 500 M Ohmios

Mayor de 1.5 mm (0.059 pulg.) 500 V 1000 M Ohmios


entorno circundante. Este tipo ofrece el mejor tiempo de respuesta, pero está limitado al uso
en aplicaciones en seco, no corrosivas y no presurizadas.

¿Qué es el tiempo de respuesta?


      como el tiempo que requiere un sensor para alcanzar
-
mismo, se requieren cinco constantes de tiempo para que el sensor se acerque a 100% del va-

cuanto menor sea el diámetro de la funda de la sonda, más rápida será la respuesta, pero la

de la sonda no puede soportar todo el rango de temperatura del tipo del termopar.

390 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.3 · Conexión de un termopar a Arduino

Temperatura y atmósfera de aplicación





   

Acero inoxidable 304 900 °C (1650 °F) Muy buena Buena Muy buena Muy buena

Inconel 600 1148 °C (2100 °F) Muy buena Buena Muy buena Muy buena




Rangos de temperatura y precisión

  

J Hierro - Constantan -190°C a 760°C

Cobre - Constantan
T -200°C a 370°C
Cobre - Constantan

Cromel - Alunsel
K -190°C a 260°C
(Cromo - Niquel) - (Aluminio - Niquel)

E Cromel - Constantan -100°C a 1260°C

S (90% Platino + 10% Rodio) - Platino 0°C a 1480°C

R (87% Platino + 13% Rodio) - Platino 0°C a 1480°C

Tablas de referencia de tipos de termopar


El termopar produce una salida de voltaje que se puede correlacionar con la temperatura que


rango de temperatura del termopar, los límites de error y los factores ambientales.


En este proyecto se utilizará un termopar tipo K para conectarse a la placa Arduino y sensar
las temperaturas detectadas; para ello, se utilizará un módulo de acondicionamiento de señal
marca Adafruit.

Módulo de acondicionamiento de la señal MAX31855


Este módulo de la marca Adafruit viene con una librería para instalarse con Arduino y hacer la
interfaz conjunta, se puede obtener desde: https://www.adafruit.com/product/269

· Rubén & Juan Tomás Oliva Ramos · 391


Capítulo 10 · Integración con dispositivos industriales

Módulo MAX31855

Termopar conectado a las terminales + y -

Librería para comunicar el módulo

https://github.com/
adafruit/Adafruit-MAX31855-library

Se debe cargar el siguiente código en Arduino y abrir el monitor serial:


//tipo J
//conexion cable gris + (positivo)
//conexion cable rojo - (negativo)

//tipo K
//conexion cable blanco - (negativo)
//conexion cable rojo + (positivo)

#include “Adafruit_MAX31855.h”

392 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.3 · Conexión de un termopar a Arduino

int thermoDO = 3;
int thermoCS = 4;
int thermoCLK = 5;

Adafruit_MAX31855 thermocouple(thermoCLK, thermoCS, thermoDO);

void setup( ) {
Serial.begin(9600);

Serial.println(“MAX31855 test”);
// wait for MAX chip to stabilize
delay(500);
}

void loop( ) {

double c = thermocouple.readCelsius( );
if (isnan(c)) {
Serial.println(“Something wrong with thermocouple!”);
} else {
Serial.print(“Temperatura Grados centigrados = ”);
Serial.println(c);
}
delay(1000);
}

Esta es la pantalla que se mostrará después de descargar el código:

Pantalla de descarga

· Rubén & Juan Tomás Oliva Ramos · 393


Capítulo 10 · Integración con dispositivos industriales



Conexión del termopar al Arduino

Transferencia de temperatura a través de comunicación RS485



sensores que requieren ser conectados a otros dispositivos para ser monitoreados o, bien,
adaptarlos a las necesidades y requerimientos de acuerdo con la aplicación; por ello, al tomar
como referencia lo visto en los apartados anteriores, se hará que el Arduino tome las lecturas
del sensor termopar y envíe los datos sensados por la red industrial RS485 para, de esta mane-
ra, crear un sensor de tipo industrial con Arduino.


agregar el Arduino y el módulo de comunicación, el sensor se adapta a la necesidad para comu-
nicarse y así puede interactuar con otro dispositivo. En este ejemplo el dispositivo se conectará

que monitoree las temperaturas.

 
 Arduino (esclavo), módulo con acondicionador de señal y termopar
 Red de datos RS485

Aplicación wearable
Si se considera el siguiente esquema, se puede emplear este tipo de comunicación para una
aplicación industrial donde haya intercambio con un dispositivo wearable, como un teléfono
móvil o un smartwatch:

394 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.3 · Conexión de un termopar a Arduino

Red RS485

Aplicación con intercambio hacia dispositivo wearable

Sensor ultrasónico conectado por RS485


 https://
www.dfrobot.com/product-101.html

Sensor ultrasónico

· Rubén & Juan Tomás Oliva Ramos · 395


Capítulo 10 · Integración con dispositivos industriales

El sensor ultrasónico URM04 está desarrollado con base en el popular sensor URM37, que uti-
liza una interfaz RS485, ésta permite el uso simultáneo de múltiples sensores; con la interfaz
RS485 es posible que varios sensores trabajen juntos, hasta 32 URM04 se pueden conectar a
la vez en una red.




es posible diseñar compensadores para controlar perfectamente los motores según la distan-
cia del obstáculo.

: Este sensor requiere una interfaz RS485. No se puede conectar directamente a un Ar-
duino.

Campo de visión y detección del sensor



Sensor ultrasónico con RS485

396 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.3 · Conexión de un termopar a Arduino

+: +5V DC Power +5V


-: GND Ground
A: A RS485 A(+)
B: B RS485 B(-)

Conexiones de la interfaz RS485

Conexión del sensor a la placa Arduino


En necesario conectar el sensor a un la placa Arduino para que se puedan hacer las lecturas;


Circuito integrado MAX485

· Rubén & Juan Tomás Oliva Ramos · 397


Capítulo 10 · Integración con dispositivos industriales



Diferentes tipos de módulos para RS485

398 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
10.3 · Conexión de un termopar a Arduino


Es posible realizar una red de sensores de la siguiente manera:

Red de sensores

Sketch de Arduino para control del sensor:


/*
# The Sample code for driving single URM04 measuring distance function

# Editor : Lauren
# Date : 2012.2.8
# Ver : 0.3
# Product: URM04 Ultrasonic sensor

# Specication
* Detecting range: 4cm-500cm
* Resolution : 1cm
* Interface : RS485
* Units: Range reported in cm
* Temperature sensor: 12 bits reading from serial port

# Description:
# nish driving single URM function
# if use the IO expansion shield to drive the urm sensors, the measuring rate
may be 20Hz or slower[if you want].
# The sample code is compatible with the Arduino IDE 1.0 and also the earlier
version.

*/

#include “Urm4parser.h”

· Rubén & Juan Tomás Oliva Ramos · 399


Capítulo 10 · Integración con dispositivos industriales

void setup( ){
urmInit( ); // Init the URM04 sensor
}

void loop( ){
static unsigned long timePoint = 0;

runUrm4( ); // Drive URM04 Sensor and transmit the protocol to the sen-
sor via RS485 interface
// (IO Expansion shield V5 for arduino)
decodeURM4( ); // Read and get the distance value from the sensor

if(millis( ) - timePoint > 100){


PrintData( ); // print the data
timePoint = millis( );
}
// PrintData( );
// delay(100);

}
void PrintData( ){
Serial.print(“Distance value: ”);
for(int i = 0; i < urmAccount; i++){
Serial.print(urmData[i]);
Serial.print(“ ”);
}
/*
for(int i = 0; i < urmAccount;i ++){
Serial.print(urmID[i],HEX);
Serial.print(“ ”);
}
*/
Serial.println( );
}


Modbus suele ir sobre RS485; es un protocolo de comunicaciones situado en el nivel 7 del mo-
-
-
vertido en un protocolo de comunicaciones estándar de facto en la industria, es el que goza de


400 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

-
nes son:

 Es público
 Su implementación es fácil y requiere poco desarrollo
 Maneja bloques de datos sin suponer restricciones

Modbus es un protocolo de comunicación que se puede usar para enviar y recibir datos a través
de una línea de bus serie, como RS232 y RS485. En este capítulo, se aprenderá a usar el proto-
colo de comunicación Modbus a través de una línea de bus RS485 para conectar dispositivos



-

todos los dispositivos (esclavos) al nodo maestro.

También es compatible con el uso de dispositivos en entornos de larga distancia y eléctrica-



comunicación Modbus, primero es necesario agregar algunos módulos de hardware al Ardui-
no; con ello se habilitará como un nodo maestro Modbus.


-
tocolo en común, es que la placa Arduino puede interactuar con dispositivos de tipo industrial;
esto conduce a otro nivel de control, ya que de esta forma el Arduino puede leer, escribir valo-
res a los otros dispositivos y también leer de los mismos equipos.

-
guientes:

 
 
 
 
 Un variador de velocidad controlado desde Arduino.
 Tener todos los dispositivos anteriores conectados en una misma red industrial,
interactuando entre ellos, enviando y recibiendo datos.

A continuación, se presenta un esquema donde se muestra cómo puede interactuar Arduino


conectado a varios equipos industriales a través de Modbus RTU e interconectados en una red
RS485.

· Rubén & Juan Tomás Oliva Ramos · 401


Capítulo 10 · Integración con dispositivos industriales

Interacción de Arduino con equipos industriales

Aplicación Modbus RTU sobre RS485



de ellas es Android Studio empleado en una aplicación de tipo industrial, la cual permite crear

terfaz para equipos con Android, por ejemplo una Tablet.



 
 
 
 
 

Funciones de los registros del protocolo Modbus RTU:

 
 
 
 
 
 
 07: READ STATUS
 
 

402 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU



Diagrama de conexiones

byYako1976 identi.io

Pantalla de la interfaz

A continuación se muestra el funcionamiento de la aplicación:

Aplicación en marcha

· Rubén & Juan Tomás Oliva Ramos · 403


Capítulo 10 · Integración con dispositivos industriales

Sketch del Arduino para el esclavo:


#include <SimpleModbusSlave.h>
#dene pinDig 3
#dene pinDigOut 6

//////////////// registers of the slave ///////////////////


enum
{
// The rst register starts at address 0

ADC0,
ADC1,
INDIG0,
INDIG1,
INDIG2,
INDIG3,
OUTD0,
OUTD1,
OUTD2,
OUTD3,
AOUT0,
TOTAL_ERRORS,
TOTAL_REGS_SIZE
// total number of registers for function 3 and 16 share the same
register array
};

unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array

void setup( )
{

modbus_congure(38400, 1, 2, TOTAL_REGS_SIZE);

//digital inputs conguration


for(int i=10; i pinMode(i, INPUT_PULLUP);
}

//digital outputs
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);

404 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

//modbus led

pinMode(8, OUTPUT);

//PWM
pinMode(9, OUTPUT);

//modbus registers initialization


for (int i=0; i holdingRegs[i] = 0;
}
}
void loop( )
{
// modbus_update( ) is the only method used in loop( ). It returns the
total error
// count since the slave started. You don’t have to use it but it’s useful
// for fault nding by the modbus master.

holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);

holdingRegs[0]=analogRead(0);
holdingRegs[1]=analogRead(1);

//digital inputs
for (int i=0; i < 4; i++){
holdingRegs[i+2]=digitalRead(10+i);
}

for(int i=0; i < 4; i++){


digitalWrite(pinDig+i,holdingRegs[pinDigOut+i]);
}

//PWM
analogWrite(9, holdingRegs[10]);

modbus_congure(&Serial, 38400, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);

Conexión de Arduino a una pantalla HMI Delta


-
-
ca Delta.

· Rubén & Juan Tomás Oliva Ramos · 405


Capítulo 10 · Integración con dispositivos industriales




Módulo con conexiones

Y el cable de comunicación RS485:

Cable RS485



Interfaz de pantalla

406 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

A continuación, se muestra la pantalla de control del sistema:

Pantalla de control

Sketch del Arduino:


#include “ModbusXT.h”

#dene TIMEOUT 500 //Timeout for a failed packet. Timeout need to larger
than polling
#dene POLLING 2 //Wait time to next request

#dene BAUD 57600


#dene RETRIES 10 //How many time to re-request packet frome slave if
request is failed
#dene BYTE_FORMAT SERIAL_8E1
#dene TxEnablePin 2 //Arduino pin to enable transmission

#dene print(x) Serial.print(x)


#dene println(x) Serial.println(x)

//Name for register in regs[ ]


enum {
button1,
button2,
button3,
number_entry,
password_entry,
slider,
total_packets,

· Rubén & Juan Tomás Oliva Ramos · 407


Capítulo 10 · Integración con dispositivos industriales

total_requests,
total_failed,
transfer_rate,
transfer_delay,
led_grn,
led_blue,
led_red,
graph,
TOTAL_REGS //=15
};

// This is the easiest way to create new packets


// Add as many as you want. TOTAL_NO_OF_PACKETS
// is automatically updated.
enum {
PACKET1,
PACKET2,
NO_OF_PACKET //=2
};

// Masters register array


uint16_t regs[TOTAL_REGS];

//Modbus packet
Packet packets[NO_OF_PACKET];

// Access individual packet parameter. Uncomment it if you know what you’re


doing
// packetPointer packet1 = &packets[PACKET1];
// packetPointer packet2 = &packets[PACKET2];

int graph_value = 0;
int slider_value = 0;
long sm,em,dm;
uint16_t temp,num;

const uint8_t hmiID = 1; //ID of HMI. The ID need to match, unless program
will not work

//Modbus Master class dene


Modbus master;

void setup( )
{

408 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

//Cong packets and register


master.congure(packets, NO_OF_PACKET, regs);

//Cong individual packet: (packet, ID, Function, Address, Number of regis-


ter or data, start register in master register array)
master.construct(&packets[PACKET1], hmiID, READ_HOLDING_REGISTERS, 0, 6, 0);

master.construct(&packets[PACKET2], hmiID, PRESET_MULTIPLE_REGISTERS, 100,


9, 6);

//Start Modbus
master.begin(&Serial1, BAUD, BYTE_FORMAT, TIMEOUT, POLLING, RETRIES, TxE-
nablePin);

Serial.begin(57600); //debug on serial0

println(“Arduino Modbus Master”);

pinMode(13, OUTPUT);
}

void loop( )
{
master.update( ); //polling

sm = millis( );

graph_value++; //update graph data, just increase from -32768 to 32767


(signed int)

regs[total_packets] = NO_OF_PACKET; //Total number of packet,


here is 2
regs[total_requests] = master.total_requests( ); //Update all requested pac-
kets. Take a look on ModbusXT.h
regs[total_failed] = master.total_failed( ); //Update all failed packet
regs[graph] = graph_value; //Update graph value

//If button is press, turn on HMI’s LED


for (uint8_t i=0;i<3;i++)
{
if (regs[i] == 1)
regs[i+11] = 1;
else
regs[i+11] = 0;

· Rubén & Juan Tomás Oliva Ramos · 409


Capítulo 10 · Integración con dispositivos industriales

//If Led green is on (or button 0 = 1) turn on Led on arduino


if (regs[led_grn])
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);

//Print number value on HMI


if (num != regs[number_entry] )
{
num = regs[number_entry];
print(“Number: “);
println(num);
}

//Print slider value on HMI


if (slider_value != regs[slider] )
{
slider_value = regs[slider];
print(“Slider: “);
println(slider_value);
}

//update transfer rate and transfer delay


if ( (sm-dm) > 1000) //update 1s
{
dm = sm;
regs[transfer_rate] = regs[total_requests] - temp;
temp = regs[total_requests];

regs[transfer_delay] = (unsigned int) ((NO_OF_PACKET*100000UL)/regs


[transfer_rate]);
}

}//end loop

410 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU



Pantalla de conguración



En este proyecto se conectará la placa Arduino con un módulo de comunicación RS485 para
enlazarlo a una red con la comunicación de un sensor de temperatura.

Módulo shield multiprotocolo de radio


-
do para conectar dos módulos de comunicación al mismo tiempo.

Shield radio multiprotocolo

· Rubén & Juan Tomás Oliva Ramos · 411


Capítulo 10 · Integración con dispositivos industriales

Módulo Modbus RS485 para Arduino


más de un dispositivo industrial a Arduino con sólo dos cables compartidos, se pueden conec-


Módulo R2485

Resistencia del aislante a temperatura ambiente



Standard EIA RS-485

Physical Media Twisted pair

Network Topology Point-to-point, Multi-dropped, Multi-point

Maximum Devices 32 drivers or receivers

Voltage Levels -7V to +12V

Mark(1) Positive Voltages (B-A > +200mV)

Space(0) Negative voltages (B-A < -200mV)

Available Signals Tx+/Rx+, Tx-/Rx-(Half Duplex)Tx+,Tx-,Rx+,Rx-(Full Duplex)

Ambos módulos se pueden adquirir en la siguiente dirección: https://www.cooking-hacks.


com/documentation/tutorials/rs-485-module-shield-tutorial-for-arduino-raspberry-pi-intel-
galileo/#img_3

Elementos que conforman el sistema:



la placa Arduino, el shield multiprotocolo y el módulo de comunicación.

412 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

Elementos del sistema

El mismo sitio muestra los pasos para ensamble de los módulos:

Ensamble de los módulos

· Rubén & Juan Tomás Oliva Ramos · 413


Capítulo 10 · Integración con dispositivos industriales

Conexión del sensor de temperatura

Este es el sensor de temperatura para conectarlo al módulo RS485 y a la tarjeta Arduino:

Sensor de temperatura

Conexiones del sensor:

 
 

Conexiones del sensor



Conguración de jumper

414 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

Conexión del módulo RS485 al sensor de temperatura

1.      


marcado con A (señal no invertida)
2. -
cado con B (señal invertida)

Conexiones del módulo RS485

Conexiones del módulo

3. 
una fuente de alimentación de pared.



Conexiones nales

· Rubén & Juan Tomás Oliva Ramos · 415


Capítulo 10 · Integración con dispositivos industriales

Sketch de Arduino

// Include these libraries for using the RS-485 and Modbus functions

#include <RS485.h>
#include <ModbusMaster485.h>
#include <SPI.h>

// Instantiate ModbusMaster object as slave ID 1


ModbusMaster485 node(254);

// Dene one addres for reading


#dene address 102

// Dene the number of bytes to read


#dene bytesQty 4

void setup( )
{
pinMode(5, OUTPUT);
digitalWrite(5, LOW);

// Power on the USB for viewing data in the serial monitor


Serial.begin(115200);
delay(100);

// Initialize Modbus communication baud rate


node.begin(19200);

// Print hello message


Serial.println(“Modbus communication over RS-485”);
delay(100);
}

void loop( )
{
// This variable will store the result of the communication
// result = 0 : no errors
// result = 1 : error occurred
int result = node.readHoldingRegisters(address, bytesQty);

416 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

if (result != 0) {
// If no response from the slave, print an error message
Serial.println(“Communication error”);
delay(1000);
}
else {

// If all OK
Serial.print(“Read value : ”);

// Print the read data from the slave


Serial.print(node.getResponseBuffer(0));
delay(1000);
}

Serial.print(“\n”);
delay(2000);

// Clear the response buffer


node.clearResponseBuffer( );

El resultado de la lectura de la temperatura es:

Pantalla de temperatura

· Rubén & Juan Tomás Oliva Ramos · 417


Capítulo 10 · Integración con dispositivos industriales

Conexión con otros dispositivos de forma inalámbrica

Es importante mencionar que este módulo shield multiprotocolo de radio permite conectarse
con otros medios, como se muestra a continuación:

Conexión con otros dispositivos

Módulo de comunicación XBEE

Comunicación PLC Allen-Bradley y Arduino mediante el protocolo DF1


caso, la placa puede interactuar con un dispositivo de tipo industrial y entre sí misma. Para
este proyecto es necesario un módulo de comunicación serial que se conectará a la placa. El


418 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU



Interfaz de comunicación



byYako1976 identi.io

Arquitectura del sistema

· Rubén & Juan Tomás Oliva Ramos · 419


Capítulo 10 · Integración con dispositivos industriales



Esquema de conexión


 
 
 Seleccionar Baud rate a 9600
 Escribir la dirección del nodo con 1
 
 

420 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

Pasos de conguración



Pantalla del programa

Código de Arduino:

#include <DF1.h>

#dene DF1destination 1
#dene DF1baud 9600
#dene DF1format SERIAL_8N1
#dene DF1timeout 1000

enum
{
DF1PACKET1,

· Rubén & Juan Tomás Oliva Ramos · 421


Capítulo 10 · Integración con dispositivos industriales

DF1PACKET2,
DF1TOTAL_NO_OF_PACKETS
};
DF1Packet DF1packets[DF1TOTAL_NO_OF_PACKETS];

DF1packetPointer DF1packet1 = &DF1packets[DF1PACKET1];


DF1packetPointer DF1packet2 = &DF1packets[DF1PACKET2];

unsigned int DF1readRegs[1];

unsigned int DF1writeRegs[1];

#dene AnalogOutputPin 9

void setup( ) {
DF1_construct(DF1packet1, DF1destination, DF1_READ_N7, 0, 1, DF1readRegs);

DF1_construct(DF1packet2, DF1destination, DF1_WRITE_N7, 1, 1, DF1writeRegs);

DF1_congure(&Serial, DF1baud, DF1format, DF1timeout, DF1packets, DF1TOTAL_


NO_OF_PACKETS);

void loop( ) {
DF1_update( );

//wrire N7:1
int sensorValue = analogRead(A0);
int outputValue = map(sensorValue, 0, 1023, 0, 32767);
DF1writeRegs[0] = outputValue;

//Read N7:0
unsigned int N7_0 = DF1readRegs[0];
N7_0 = map(N7_0, 0, 32000, 0, 255);
analogWrite(AnalogOutputPin, N7_0);
}

-
léfono móvil, un smartwatch, etc., y de esta manera interactuar para llevar a cabo monitoreo
y supervisión entre dispositivos, todo esto con la integración de los elementos y tecnología
requerida.

422 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

Actuadores

Dispositivo Android Arduino PLC

Esquema de interacción



       
-
colo de comunicaciones estándar de facto en la industria, es el que goza de mayor disponibili-




 Se diseñó para aplicaciones industriales


 Es público y gratuito
 Es fácil de implementar y requiere poco desarrollo
 Maneja bloques de datos sin suponer restricciones

Modbus permite el control de una red de dispositivos, por ejemplo, un sistema de medida de
temperatura y humedad, y con ello comunica los resultados a una computadora. Modbus tam-

-


-

Modbus tiene la dirección del dispositivo destinatario de la orden; todos los dispositivos reci-
ben la trama pero sólo el destinatario la ejecuta (salvo un modo especial denominado Broad-
          
   


Versiones del protocolo


 Modbus RTU — Es la implementación más común disponible para Modbus. Se utiliza
en la comunicación serie y hace uso de una representación binaria compacta de los


· Rubén & Juan Tomás Oliva Ramos · 423


Capítulo 10 · Integración con dispositivos industriales




Modbus son entramados (separados) por periodos inactivos (silenciosos).

 

  


              
 



Conexión de Arduino a una red Modbus TCP con el módulo Ethernet shield



Ethernet shield interactuará en una red industrial.

Red de interacción

424 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Modbus RTU

Ejemplo de prueba Arduino para establecer comunicación:

// librerias para comunicación con móduloo ethernet


#include <SPI.h>
#include <Ethernet.h>

// libreria para emplear el Modbus TCP


#include “Mudbus.h”

// crea la clase Mb de la libreria modbus


Mudbus Mb;

// conguraciones

void setup( )
{
byte mac[ ] = {0x90, 0xA2, 0xDA, 0x00, 0x0A, 0xC2 };
byte ip[ ] = {192,168,1,150};

// inicializa la comunicación ethernet


Ethernet.begin(mac, ip); // Inicia ethernet con la mac e ip del Arduino

pinMode(7,OUTPUT); // congura pin 7 como salida.


pinMode(2, INPUT_PULLUP); // congura pin 2 como entrada con pull-up
pinMode(9,OUTPUT);
analogReference(INTERNAL);// congura la referencia interna de 1.1 volts.
delay(5000); // tiempo de espera para arranque del ethernet shield
}

void loop( )
{
Mb.Run( ); // inicia la comunicación modbus

// Registros Modbus 40001,40002,40003 y 40004 Función 03.


Mb.R[1] = (analogRead(4)*100)/1000;
Mb.R[0] = analogRead(0);
Mb.R[6] = random(0,40); // valor random 0-255

analogWrite(9,Mb.R[2]);

Mb.R[3] = map(Mb.R[0],0,1021,0,32767);
Mb.R[4] = map(Mb.R[0],0,1021,-127,127);
Mb.R[5] = map(Mb.R[0],0,1021,0,100);

· Rubén & Juan Tomás Oliva Ramos · 425


Capítulo 10 · Integración con dispositivos industriales

// Registros Modbus 00001,00002,00003 Función 01.


if(digitalRead(2) == 0)
{
Mb.C[0] = 1;
}
else
{
Mb.C[0] = 0;
}

//condiciones para leer estados logicos


if (Mb.C[1] == 1)
{
digitalWrite(7,HIGH);
Mb.C[2] = 1;
}
else
{
digitalWrite(7,LOW);
Mb.C[2] = 0;
}
}



-
dio visual y de manipulación (interfaz) que permite la interacción humana (hombre) con un


-

     

pantalla.


-
quier otro dispositivo a través de una red industrial.


para uso personal o pequeñas aplicaciones, están fuera del alcance.

426 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Aplicaciones Android para control y monitoreo de dispositivos industriales

Dispositivos HMI

Sin embargo, gracias a los avances tecnológicos en la actualidad es posible contar con herra-
mientas de desarrollo relativamente económicas para realizar estas terminales con platafor-
mas muy comerciales y de uso común, por ejemplo las tablet y celulares. Se puede usar la pla-
taforma Android, que cuenta con diversas aplicaciones, algunas muy económicas e inclusive
gratuitas aunque con ciertas limitaciones.


plataformas como Arduino que, mediante la programación adecuada, puede interconectarse a

asociadas a un control.



Para pruebas de comunicación Modbus:

 Modbus-Droid
 
 



 
 Scada Touch Basic ($90 pesos, sin límite de objetos 3 páginas, 1 proyecto)
 




Es una aplicación que se utiliza como herramienta para monitorear los principales registros
Modbus dentro de una red.

· Rubén & Juan Tomás Oliva Ramos · 427


Capítulo 10 · Integración con dispositivos industriales

Conguración de Modbus Droid


indican las direcciones Modbus a monitorear.


-


Es una aplicación gratuita en modo demo con sus limitantes. Es posible adquirir la versión



Scada Touch Lite

428 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Aplicaciones Android para control y monitoreo de dispositivos industriales

A continuación se muestra una pantalla de monitoreo:

Pantalla de monitoreo



Parámetros

· Rubén & Juan Tomás Oliva Ramos · 429


Capítulo 10 · Integración con dispositivos industriales



Pantalla de conguración



Pantalla nal



ESP8266 inalámbricos; desde una aplicación para Android Modbus Droid se puede monitorear
y controlar el estado de las entradas y las salidas del dispositivo.

430 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Aplicaciones Android para control y monitoreo de dispositivos industriales

Conexión de ESP8266

Código de aplicación para cargar al módulo ESP8266:


// librerias a incluir:
#include <ESP8266WiFi.h>
#include <ModbusTCPSlave.h>
#include <Ticker.h>

// se crea el objeto Parada asociado a la librería Ticker


Ticker proceso;
// se crea el objeto Mb asociado a la libreria Modbus
ModbusTCPSlave Mb;

// rutina que carga los valores a los registros Modbus correspondientes


// a los Holding Registers

void datos_modbus( )
{
// (en Arduino son registros HR 0-5)
Mb.MBHoldingRegister[0] = analogRead(A0); // canal A0
Mb.MBHoldingRegister[1] = random(0,128); // valor random 0-128
Mb.MBHoldingRegister[2] = random(-32768,32767); // valor random +-32768
Mb.MBHoldingRegister[3] = !digitalRead(D1); // estado del botón 1,0 en en-
trada D1
digitalWrite(D2,Mb.MBHoldingRegister[4]); // activa/apaga led en salida D2
int PWM = map(Mb.MBHoldingRegister[5],0,100,0,255);
analogWrite(D5,PWM); // envia valor PWM a salida D5
}

· Rubén & Juan Tomás Oliva Ramos · 431


Capítulo 10 · Integración con dispositivos industriales

void setup( )
{
pinMode(D1, INPUT_PULLUP);
pinMode(D2,OUTPUT);
Mb.begin(“Nombre_RED”, “contraseña”); // datos del access point a conectarse
datosWiFi( ); // rutina que congura datos de red
delay(100);
}

void loop( )
{
Mb.Run( );
delay(10);

// esto mantiene la conexión viva


proceso.attach_ms(10,datos_modbus);
}

void datosWiFi( )
{
IPAddress local_IP(192, 168, 1, 40); // modica la dirección IP
IPAddress gateway(192, 168, 1, 1); // modica el gateway
IPAddress subnet(255, 255, 255, 0); // modica la subnet
WiFi.cong(local_IP, gateway, subnet);
}



Pantalla de monitoreo

432 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Aplicaciones Android para control y monitoreo de dispositivos industriales

Monitoreo y control de un PLC Micrologix 1400 desde Android (Modbus TCP)

En el siguiente proyecto se verán los aspectos generales de cómo controlar y monitorear des-
de una aplicación en Android un controlador lógico programable conectado a una red Modbus



Habilitación de Modbus TCP en RSLogix





Pantalla de conguración

-
-
nicación.

· Rubén & Juan Tomás Oliva Ramos · 433


Capítulo 10 · Integración con dispositivos industriales

Canales de conguración







434 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Aplicaciones Android para control y monitoreo de dispositivos industriales

Registros a congurar




 
 B9: Sólo lectura (representa entradas)
 
 N7: Sólo lectura (representa números enteros)
 
holding registers)



 N15-N19
 
registers

· Rubén & Juan Tomás Oliva Ramos · 435


Capítulo 10 · Integración con dispositivos industriales

Registros asociados a N15

Si en un momento dado se requiere leer un valor, por ejemplo, de un timer o contador, se debe
asignar el valor a una de estas localidades de memoria mostradas en la tabla anterior o a cual-






Registro N19/0

436 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
 · Aplicaciones Android para control y monitoreo de dispositivos industriales



 

Temporizador

 


Salida y monitoreo

 

Escritura de COIL

 


Lectura de contacto abierto

· Rubén & Juan Tomás Oliva Ramos · 437


Capítulo 10 · Integración con dispositivos industriales

Lectura/escritura de los registros Modbus

Para poder leer o escribir es necesario conocer los registros Modbus, que tienen como nomen-
clatura:

 
 
 
 

Registros Modbus

A continuación se presentan las lecturas de los registros Modbus desde la aplicación en An-
droid:

Pantalla de aplicación en Android

438 Arduino y Android. Proyectos wearable para smart watches, smart tv y dispositivos móviles.
Resumen

RESUMEN
En este capítulo se vieron aspectos relacionados con aplicaciones industriales enfocadas al
manejo de dispositivos móviles Android, la integración de la placa Arduino como plataforma
y la convergencia con equipos industriales como PLC, actuadores industriales, variadores de
velocidad, pantallas HMI, etc.

Se describió la conexión de un sensor termopar en una red industrial para después enviar
valores a un smartwatch o teléfono móvil. El enfoque principal de este capítulo fue dar a co-
nocer una serie de escenarios en los cuales se mostró la comunicación de equipos industria-
les entre sí para utilizarse en un proceso o situación real. Otro aspecto importante fue el uso
de una placa Arduino para llevarla a otro nivel: darle una aplicación con equipos industriales y
convivir entre ellos para el envío y recepción de información.

Con lo anterior, el lector podrá desarrollar proyectos; por ejemplo, interconectar el Arduino
y converger con equipos industriales a través de protocolos de comunicación, es decir, un Ar-
duino podría leer la temperatura y después de que ocurra cierta condición enviar un estado
de activación a un PLC, luego activar un proceso, como un contador o temporizador. Con es-
tos escenarios se pueden realizar diferentes aplicaciones para enviar estados de escritura y
lectura entre sí.

En los siguientes tres capítulos de contenido Web se desarrollará una serie de proyectos de
aplicación con la plataforma de Android y Arduino.

Descargado en: eybooks.com

· Rubén & Juan Tomás Oliva Ramos · 439

Potrebbero piacerti anche