IN-16

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
FACULTAD DE ESTUDIOS SUPERIORES CUAUTITLÁN
CENTRO DE FÍSICA APLICADA Y TECNOLOGÍA AVANZADA
DIVISIÓN DE INGENIERÍA Y TECNOLOGÍA
LICENCIATURA EN TECNOLOGÍA
QUINTO CONGRESO DE TECNOLOGÍA. 1 AL 3 DE JUNIO 2015
IN-16
Interfaz de comunicación humano-máquina II
Alfredo Sánchez Martínez, David Tinoco Varela, José Isaac Sánchez Guerra *

RESUMEN
Se desarrolló una interfaz humano-máquina capaz de ejecutar
acciones dependiendo de la interacción con el usuario. Para
hacerlo, se requirió de una plataforma que contara con el IDE de
Arduino y el entorno Processing.
En Processing se ejecutaron las acciones, mientras que Arduino
proporcionaba los comandos.
ABSTRACT
A human-machine interface able to perform actions depending on
user interaction was developed. To do so, a platform that had the
Arduino and Processing environment was required. The actions
were executed in Processing, while Arduino provided the
commands.
Palabras claves: Interfaz, Arduino, Processing, Sensores
ANTECEDENTES
Se desea controlar el ordenador mediante un dispositivo periférico
que funcione como interfaz.
INTRODUCCIÓN
Arduino es un sistema de prototipado que forma parte del colectivo
conocido como Hardware de sistemas abiertos, que significa que
toda la información necesaria para el diseño y la producción del
sistema está disponible bajo una licencia Creative Commons, que
permite a terceros fabricar la placa base por su cuenta. El entorno
de desarrollo se puede obtener libremente de Internet, así como las
librerías de programación.
configurados y se prefirió utilizar el sistema operativo Windows,
porque es más fácil de instalar el IDE de Processing.
Construcción del prototipo:
Los sensores empleados fueron módulos plásticos que contienen
un fototransistor y un LED infrarrojo. Cada LED infrarrojo se
conectó a una resistencia de 330 ohms, porque a una entrada de 5
volts, la intensidad de corriente con dicha resistencia es de 15mA.
La intensidad máxima que toleran los LEDs en polarización directa
es de 20mA. De este modo, se tiene la mejor luminosidad, pero no
se corre el riesgo de alcanzar el valor máximo. El fototransistor se
conectó en serie a una resistencia de 100 kilo ohms, de modo que
cuando el fotodiodo fuera activado por la luz, no hubiera una caída
de voltaje importante, que impidiera que la compuerta NAND
funcionara, pero que cuando no fuera activado por la incidencia de
luz, la corriente parásita que pudiera encontrarse ahí, tuviera una
forma de llegar a tierra, y así, no hubiera interferencia con la
compuerta lógica NAND que se conectó en el nodo entre el
fototransistor y la resistencia.
Se emplearon compuertas NAND con la finalidad de acondicionar
la señal, ya que la señal de salida del sensor es analógica, pero el
microcontrolador requiere una señal de entrada digital. La
compuerta nos evita caer en rangos no definidos para el
microcontrolador, que pudieran causar problemas. De modo que lo
que se obtuvo fue un circuito de acoplamiento.
Los cinco módulos se conectaron de esta forma, como muestra el
diagrama de la Figura 1.
Este sistema resulta muy útil para la construcción de prototipos,
porque resulta muy fácil de programar e implementar. Ahorra
tiempo, ya que los circuitos de acoplamiento y de
acondicionamiento para el microcontrolador ya vienen integrados.
En este caso, el puerto USB integrado que se usa para programar la
tarjeta resulta de mucha utilidad para establecer comunicación en
serie con el ordenador.
DESARROLLO
Como plataforma de desarrollo, se utilizó un ordenador con la IDE
de Arduino y de Prcessing instaladas, los puertos de comunicación

* Institución, Escuela, Departamento, Correo electrónico. Información
de adscripción del autores y coautores del artículo
Figura 1. Esquema de circuito de acoplamiento con los puertos del
controlador Arduino.
Una vez armado el arreglo de sensores, se incorporó al controlador
Arduino como se muestra en la figura 2. Se dejaron libres los
puertos que soportan señales PWM, porque son útiles para utilizar
módulos digitales.
PAGINA 1
DE 4
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
FACULTAD DE ESTUDIOS SUPERIORES CUAUTITLÁN
CENTRO DE FÍSICA APLICADA Y TECNOLOGÍA AVANZADA
DIVISIÓN DE INGENIERÍA Y TECNOLOGÍA
LICENCIATURA EN TECNOLOGÍA
QUINTO CONGRESO DE TECNOLOGÍA. 1 AL 3 DE JUNIO 2015
Los puertos 0 y 1 deben quedar despejados, porque son los que el
sistema emplea para la comunicación serial con el ordenador.
Se programó el Arduino y se presionó el botón de RESET.
Para verificar el funcionamiento del programa, se abre el monitor
serial en el IDE de Arduino, haciendo click en su icono, como se
muestra en la figura 3.
Figura 3. Ubicación del icono del monitor serial.
Si se ve el texto programado, es que el equipo funciona
correctamente.
Figura 2. Esquema del bus de conexiones con el controlador
Arduino
Codificación de los “sketches”
Un “sketch” es la manera coloquial de denominar los programas
realizados en Arduino y en Processing.
El programa deberá inicializar la conexión serial mediante el
siguiente código:
void
{
//iniciar comunicaciones
Serial.begin(9600);
}
setup()
con
un
baud
rate
de
9600
El ‘baud rate’ es la tasa de transferencia de la información. Se tuvo
cuidado con esta cantidad para que la información que se recibiera
fuera legible.
Lo que va adentro de “void setup()” solamente se ejecutará una
vez.
Una vez inicializada la comunicación serial, se podrá escribir el
resto del código. Para probar la placa Arduino que se tenía
disponible, se utilizó el siguiente código:
void
{
Serial.println("Hello,
delay(100);
}
loop()
world!");
Lo que va dentro de “void loop()” es la parte del programa que se
repite una y otra vez. En este caso, se imprime la frase “Hello,
world!”, muy popular, y se espera 100 milisegundos. El retraso es
para evitar congestionar la línea y agotar los recursos del
ordenador, y para que podamos apreciar la aparición de las líneas
Figura 4. Texto mostrado en el monitor serial.
Se hizo un código nuevo para transmitir la información que nos
interesa. De momento, se programó una función, pero se pueden
implementar más.
int s1 = 2;
int s2 = 4;
int s3 = 7;
int s4 = 8;
int s5 = 12;
void setup()
{
pinMode(s1, INPUT);
pinMode(s2, INPUT);
pinMode(s3, INPUT);
pinMode(s4, INPUT);
pinMode(s5, INPUT);
Serial.begin(9600);
}
void loop()
{
if (digitalRead(s1) == HIGH && digitalRead(s2) == LOW &&
digitalRead (s3) == LOW && digitalRead (s4) == LOW &&
digitalRead(s5) == HIGH {
Serial.println(“1”);
delay(100);
} else {
Serial.println(“0”);
delay(100);
}
}
En la parte de Processing, se tiene que importar la librería “Serial”.
Para ello se elige, en el menú “Sketch”, submenú “Import
PAGINA 2
DE 4
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
FACULTAD DE ESTUDIOS SUPERIORES CUAUTITLÁN
CENTRO DE FÍSICA APLICADA Y TECNOLOGÍA AVANZADA
DIVISIÓN DE INGENIERÍA Y TECNOLOGÍA
LICENCIATURA EN TECNOLOGÍA
QUINTO CONGRESO DE TECNOLOGÍA. 1 AL 3 DE JUNIO 2015
Library…”, la opción “serial”. Automáticamente se añadirá una
línea al sketch como resultado:
import processing.serial.*;
Se deberá crear un objeto a partir de la clase Serial
Serial myPort;
Y también se deberá crear una variable para guardar toda la
información enviada por el puerto serial
String val;
Se debe especificar el nombre del puerto, dependiendo del que esté
en uso actualmente.
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
Se empleó el código del tutorial para probar la comunicación.
void
draw()
{
if
(
myPort.available()
>
0)
{
//
If
data
is
available,
val = myPort.readStringUntil('\n');
// read it and store it in val
}
println(val);
//print
it
out
in
the
console
}
Un vez que se conoció cómo establecer la conexión serial, se
preparó la interfaz de salida en Processing, para darle al usuario
una retroalimentación de lo que está sucediendo. Se preparó un
código de prueba para ver cómo se comporta la suite de
Processing.
En lugar de usar la conexión serial, se usó el mouse de la
computadora, para simplificar el proceso de pruebas y no tener
mucho código que pudiera dejar de funcionar.
int telState = 0; //estado de actividad del telefono
int pts; //estado previo del telefono
int cts; //estado actual del telefono
int tchg; //cambio de estado del telefono
void setup() {
size(120,120);
background(0);
}
void draw() {
if (mousePressed){
pts=cts;
cts=1;
}
tchg=pts-cts;
if (tchg == -1) {
if (telState == 0) {
telState=1;
} else if (telState == 1) {
telState=2;
} else {
telState=1;
}
}
if (telState == 0) {
fill(0);
} else if (telState == 2) {
fill(200,0,0);
} else {
fill(0,150,100);
}
ellipse(60, 60, 80, 80);
delay(100);
}
void mouseReleased() {
pts=cts;
cts=0;
}
El funcionamiento es sencillo, el programa está a la espera de un
cambio. Este cambio se interpreta como que el usuario hace la
señal de usar el teléfono. La función de teléfono es representada
por un círculo verde. Cuando el usuario hace la señal nuevamente,
está indicando que quiere colgar, y el teléfono cambia de estado a
un teléfono colgado, representado por un círculo rojo.
Ya que la representación gráfica funcionó, se unen los códigos de
Processing:
import processing.serial.*;
Serial myPort;
String val;
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
int pushButton;
int telState = 0; //estado de actividad del telefono
int pts; //estado previo del telefono
int cts; //estado actual del telefono
int tchg; //cambio de estado del telefono
void setup() {
size(120,120);
background(0);
}
void draw() {
if ( myPort.available() > 0) {
Como el arduino nos manda la información en Strings, la
tendremos que convertir a int, que es el tipo de datos con el que
estamos trabajando.
PAGINA 3
DE 4
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
FACULTAD DE ESTUDIOS SUPERIORES CUAUTITLÁN
CENTRO DE FÍSICA APLICADA Y TECNOLOGÍA AVANZADA
DIVISIÓN DE INGENIERÍA Y TECNOLOGÍA
LICENCIATURA EN TECNOLOGÍA
QUINTO CONGRESO DE TECNOLOGÍA. 1 AL 3 DE JUNIO 2015
val = myPort.readStringUntil('\n');
pushButton=Integer.parseInt(val);
}
if (pushButton == 1){
pts=cts;
cts=1;
} else if(pushButton == 0) {
pts=cts;
cts=0;
}
Processing 2.0.. string to int. En Processing Forum [en línea].
[Fecha de consulta 8 de mayo 2015]. Disponible en:
http://forum.processing.org/two/discussion/2217/processing-2-0string-to-int
tchg=pts-cts;
if (tchg == -1) {
if (telState == 0) {
telState=1;
} else if (telState == 1) {
telState=2;
} else {
telState=1;
}
}
if (telState == 0) {
fill(0);
} else if (telState == 2) {
fill(200,0,0);
} else {
fill(0,150,100);
}
ellipse(60, 60, 80, 80);
delay(100);
}
RESULTADOS:
La comunicación entre el Arduino y la plataforma fue exitosa. La
interfaz queda abierta para un posterior desarrollo
CONCLUSIONES:
El desarrollo del trabajo se vio enormemente beneficiado por la
gran cantidad de información disponible. Debido a que se
emplearon programas de Software Libre, la documentación
provino incluso de otros usuarios. La ventaja que tiene el
prototipado con Arduino es que es sencilla, pero se pueden realizar
grandes proyectos.
FUENTES:
Monk, Simon. 12 Proyectos Arduino Android: Controle Arduino
Con Su Teléfono Inteligente O Su Tableta. Madrid: Estribor, 2013.
Craft, Brock. Arduino Projects for Dummies. United States: For
Dummies, 2013.
Connecting Arduino to Processing. En Sparkfun [en línea]. [Fecha
de
consulta
8
de
mayo
2015].
Disponible
en:
https://learn.sparkfun.com/tutorials/connecting-arduino-toprocessing
PAGINA 4
DE 4