1. Introducción
Resumen
El proyecto consta del desarrollo e implementación de un sistema autónomo de
robótica conocido como “Sumorobot”, el cual incluye dos secciones principales
que es la sección de software que involucra el procesador (Arduino UNO), así
como el código de programación desarrollado mediante la plataforma de Arduino;
la segunda parte es la física que involucra en su gran mayoría componentes
electrónicos como lo son motores, sensores, etc.
Objetivos
1) Establecer la conexión y adquisición de datos mediante la implementación
de sensores ultrasónicos.
2) Adaptación y lectura mediante sensores ópticos.
3) Activación de salidas analógicas mediante esquema básico de
funcionamiento de puente H.
Términos importantes
Puente H: Dispositivo electrónico que permite el controlar la dirección de giro de
un motor, en este caso motores de CD.
Sensor Ultrasónico: Sensor de tipo ultrasónico que permite evaluar y conocer la
distancia que existe entre objetos.
Sensor Optoeléctrico: Sensor basado en un modelo de par de diodos, uno emisor
y otro receptor.
Arduino UNO: Placa electrónica que permite un ambiente amigable para la
programación y desarrollo de proyectos electrónicos.
Nomenclatura empleada
Fundamento Teórico
2. Análisis conceptual del problema
Si bien es conocido que un sistema autónomo debe ser capaz de gobernarse a sí
mismo es importante tener en cuenta que debe contener varios sistemas que le
brinden información sufriente para poder tomar decisiones al respecto de cuál será
la tarea a realizar.
El sistema a desarrollar debe tomar en consideración variaos parámetros:
1) El sumorobot se coloca en una pista circular de fondo negro con una línea
blanca que rodea el contorno de la pista, por ello se debe contar con
sensores ópticos en la parte inferior del sumorobot.
2) El sumorobot debe detectar al oponente para poder envestir, por ello mismo
se implementaran sensores ultrasónicos.
3) El sumorobot debe permanecer en estado de reposo durante 5 segundos
antes de poder iniciar el ataque.
4) El sistema debe evaluar en que momento activar los motores y en qué
dirección.
5) El sistema debe evaluar las condiciones y poder decidir según una
jerarquía.
Identificación de variables
Tiempo de espera
Antes de iniciar cualquier adquisición de información así como una activación se
requiere de una señal de activación del sistema, seguida de un tiempo muerto o
tiempo de espera (Delay).
Señales de sensores
Cuando se dice que el sistema debe poder evaluar las condiciones del medio
significa que tomara decisiones en base a una jerarquía, esto hace referencia a
que se tienen dos señales de sensores, una de los optoeléctricos y otra de los
3. sensores ultrasónicos. Esto determina que la de mayor importancia es la de los
optoeléctricos y después los ultrasónicos.
Descripción de la teoría y fórmulas empleadas
Sensor ultrasónico HC-SR04
El sensor de ultrasonidos se enmarca dentro de los sensores para medir
distancias o superar obstáculos, entre otras posibles funciones (ver Figura 1). En
utilizan para la medición de distancias. Esto se consigue enviando un ultrasonido
(inaudible para el oído humano por su alta frecuencia) a través de uno de la pareja
de cilindros que compone el sensor (un transductor) y espera a que dicho sonido
rebote sobre un objeto y vuelva, retorno captado por el otro cilindro. Este sensor
en concreto tiene un rango de distancias sensible entre 3cm y 3m con una
precisión de 3mm. Se recibe en dicho sensor el tiempo que transcurre entre el
envío y la recepción del ultrasonido.
Aprovechando que la velocidad de dicho ultrasonido en el aire es de valor 340
m/s, o 0,034 cm/microseg (ya que trabajaremos con centímetros y
microsegundos). Para calcular la distancia, recordaremos que v=d/t (definición de
velocidad: distancia recorrida en un determinado tiempo). De la fórmula anterior
despejamos d, obteniendo d=v·t, siendo v la constante anteriormente citada y t el
valor devuelto por el sensor a la placa Arduino. También habrá que dividir el
resultado entre 2 dado que el tiempo recibido es el tiempo de ida y vuelta.
Figura 1. Sensor ultrasónico HC-SR04
4. Relevador
Un relé es un dispositivo electromecánico que permite gobernar el paso o no de
corriente en un circuito independiente al circuito que utilizamos para el control (ver
Figura 2). La conexión debe realizarse de la siguiente forma:
Figura 2. Conexión de un relevador
En esta ocasión, este montaje sólo permite controlar el encendido y apagado del
motor, y siempre girando en el mismo sentido (no tiene sentido controlar la
velocidad, pues el relé no tiene velocidad de cambio de posición de sus
contactores como para “seguir” un PWM). Es importante saber cuál es
la resistencia del bobinado del electroimán (lo que está entre los terminales de
conexión) que activa el relé y con cuanto voltaje este se activa. Este voltaje y
esta resistencia nos informan que magnitud debe de tener la señal que activará
el relé y cuanta corriente se debe suministrar a éste (ver Figura 3)
Figura 3. Diagrama de un relé
5. Sensor optoeléctrico QRD1114
El QRD1114 es la incorporación de un fotodiodo IRLED y un fototransistor en un
encapsulado cada uno alimentado independientemente a 5V, el IRLED envía una
señal infrarroja hacia arriba cuando esta golpea con un objeto a no más de 5 cm la
señal regresa y la base es el recepto, “la base del transistor” es la que nos genera
el funcionamiento.
El QRD1114 sólo es capaz de detectar objetos entre 0 y 3 cm de distancia. En el
Arduino, el valor de lectura estará en entre 600 y 1.024 (ver Figura 4).
Figura 4. Sensor QRD1114
Este sensor también se puede utilizar para detectar blancos y superficies negras
porque una superficie blanca reflejará más luz que una superficie de color negro
resultante en una lectura más alta. Debido a esto, una gran variedad de ellos
puede ser utilizado para la detección de la línea y siguientes.
Transistor TIP 31
El transistor de unión bipolar (BJT) es un dispositivo electrónico de estado
sólido consistente en dos uniones PN muy cercanas entre sí, que permite controlar
el paso de la corriente a través de sus terminales. La denominación de bipolar se
debe a que la conducción tiene lugar gracias al desplazamiento de portadores de
dos polaridades (huecos positivos y electrones negativos), y son de gran utilidad
6. en gran número de aplicaciones; pero tienen ciertos inconvenientes, entre ellos
su impedancia de entrada bastante baja.
NPN es uno de los dos tipos de transistores bipolares, en los cuales las letras "N"
y "P" se refieren a los portadores de carga mayoritarios dentro de las diferentes
regiones del transistor. La mayoría de los transistores bipolares usados hoy en día
son NPN, debido a que la movilidad del electrón es mayor que la movilidad de los
"huecos" en los semiconductores, permitiendo mayores corrientes y velocidades
de operación.
Los transistores NPN consisten en una capa de material semiconductor dopado P
(la "base") entre dos capas de material dopado N. Una pequeña corriente
ingresando a la base en configuración emisor-común es amplificada en la salida
del colector.
Un TIP31 es un tipo estándar de NPN transistor de unión bipolar utilizado para
aplicaciones de potencia media (ver Figura 5).
Figura 5. Transistor TIP31
Resistencia variable (PRESET)
Esta es la versión miniatura de la resistencia variable estándar. Está diseñada
para ser montada directamente sobre la placa de circuito impreso y es ajustada
solo cuando el circuito es construido (ver figura 6).
7. Figura 6. PRESET
Por ejemplo para ajustar la frecuencia del tono de una alarma o la sensibilidad de
un circuito sensible a la luz. Un pequeño destornillador se requiere para ajustarlo.
Los Presets son mucho más baratos que una resistencia variable estándar por lo
que algunas veces son usados en proyectos donde una resistencia variable
estándar debería ser usada normalmente (ver figura 7).
Figura 7. Símbolo de un PRESET
Los Preset multi-vuelta se usan cuando deben hacerse ajustes muy precisos. El
tornillo debe ser girado muchas veces (10 o más) para mover el cursor deslizable
desde un extremo de la pista hasta el otro, dando un control muy fino y preciso.
Driver L298N
Este módulo basado en el chip L298N permite controlar dos motores de corriente
continua o un motor paso a paso bipolar de hasta 2 amperios. El módulo cuenta
con todos los componentes necesarios para funcionar sin necesidad de elementos
adicionales, entre ellos diodos de protección y un regulador LM7805 que
suministra 5V a la parte lógica del integrado L298N.
8. Cuenta con Jumpers de selección para habilitar cada una de las salidas del
módulo (A y B). La salida A está conformada por OUT1 y OUT2 y la salida
B por OUT3 y OUT4. Los pines de habilitación son ENA y ENB respectivamente.
En la parte inferior se encuentran los pines de control del módulo, marcados
como IN1, IN2, IN3 e IN4. (ver figura 8).
Figura 8. Driver L298N
Material y equipo empleado
Procesador: Arduino UNO
Sensores optoeléctricos: (4) QRD1114
Sensores ultrasónicos: (3) HC-SR04
Resistencias de varios valores: (4) Preset 10kΩ y (4) 200Ω
(4) Relevador de estado sólido 5 V
(4) Transistor TIP31
Desarrollo y Procedimiento
9. Implementación de sensores optoeléctricos
Los sensores optoeléctricos enviaran señales al procesador que le indicaran
cuando se encuentre en los límites de la arena de batalla, con lo cual se espera
que el sistema envíe una señal de alerta y modifique el sentido de giro de los
motores.
Existen dos formas de adquirir señales de un sensor QRD1114, ya que se pueden
manejar mediante entradas analógicos o entradas digitales. Las entradas digitales
especifican un valor establecido defaul por Arduino, el cual arroja un valor entero
de 0 o 1. Sin embargo cuando se trabaja con las entradas analógicas se tiene
valores oscilantes ya que depende del arreglo de resistencias implementadas.
Para este proyecto se optó por implementar todos los sensores optoeléctricos
mediante entradas analógicas implementando el esquema de conexión mostrado
en la figura 9.
Sin embargo una vez que se ha adquirido el valor analógico es conveniente hacer
una comparación y asignar un valor entre 0 y 1, como si se tratara de un sistema
digital.
Figura 9. Implementación de sensor optoeléctrico (QRD1114).
10. El código implementado para la lectura y comparación de la señal proveniente del
sensor optoeléctrico es el que se muestra en la figura 10. Sin embargo se requiere
escalar este fragmento de código para cuatro sensores que serán los que se
coloquen en cada esquina del sumorobot.
Figura 10. Código de adquisición de sensor optoeléctrico.
Implementación de sensores ultrasónicos
Los sensores ultrasónicos tienen un papel muy importante, ya que estos indican
cuando un objeto se encuentra cerca del rango de alcance del sumorobot, de esta
forma se evalúa y se decide qué sentido de giro se le asignan a los motores.
Para esto se tiene la configuración de conexión de la figura 11, en la cual cabe
destacar que las los pines a implementar son aquellos que tengan una salida tipo
PWM.
11. Figura 11. Implementación de sensor ultrasónico (HC-SR04).
El código para la adquisición se señales del sensor ultrasónico es el que se
muestra en la figura 12, en el cual se observa la implementación de los pines de
salida con PWM, además de usar una fórmula matemática para estimar la
distancia en base al tiempo de rebote de la señal emitida por el sensor. De igual
forma se muestra un extracto del código implementado por ello mismo se requiere
escalar para la implementación de tres sensores.
Figura 12. Código de adquisición de sensor ultrasónico.
12. Desarrollo de lógica de programación
Una vez que se ha comprendido e implementado la adquisición de señales
mediante sensores y la plataforma Arduino, se puede generar un plan para lógica
de programación, en la cual se explique el funcionamiento que tendrá el sistema
(ver Figura 13).
Figura 13. Funcionamiento del sistema.
Sección de comparación de sensores optoeléctricos
Se ejecuta una pequeña comparación en la cual se tiene la señal proveniente de
los sensores optoélectricos que introducen un valor variante ya que se adquieren
como entradas analógicas (ver Figura 14). Esta sección emula una especie de
convertidor analógico a una señal digital.
13. Figura 14. Comparación de señales de sensores optoeléctricos.
Sección de adquisición de sensores ultrasónicos
En esta sección se adquiere un valor variable como una variación de voltaje según
sea la distancia adquirida por el sensor ultrasónico, es por ello que conviene
implementar una fórmula para la conversión a unidades de longitud, en este caso
a centímetros (cm).
Activación de motores
Para hacer la activación de los motores se toma en consideración ocho posibles
casos que se generar a partir de las señales de los sensores optoeléctricos y la
variable “opto” que indica cuando un sensor está activo, (ver Tabla 1).
Tabla 1. Tabla de casos de combinaciones de sensores optoeléctricos.
Caso Opto1 Opto2 Opto3 Opto4
1 0 0 0 0
2 1 1 0 0
3 0 0 1 1
4 1 0 0 1
5 0 1 1 0
6 1 0 0 0
7 0 1 0 0
8 0 0 1 0
14. Caso 1: Este es el caso más importante ya que describe el funcionamiento íntegro
del sistema cuando se encuentra dentro de la arena de batalla, de la siguiente
manera se considera la tabla 2, que muestra la activación de los motores en base
a la señal de los sensores ultrasónicos.
Nota: El código de programación indica que mientras la distancia detectada sea
menor de 60 cm, el sistema acciona los motores.
Tabla 2. Asignación de dirección.
Si la distancia <= 60 cm
Distancia1 Distancia2 Distancia3 Dirección
1 0 0 Adelante
0 1 0 Derecha
0 0 1 Izquierda
1 1 1 Izquierda
La última condición indica que el sistema no encuentra un objeto cercano, por lo
tanto gira hasta encontrar un objeto dentro del alcance de ataque, es decir que
algún sensor indique que existe un objeto en una distancia menor a 60 cm.
Caso 2: Indica que el sumorobot está a punto de salir del área de batalla por su
parte delantera por lo tanto asigna que la dirección debe ser hacia “atrás”.
Caso 3: Indica que el sumorobot está a punto de salir del área de batalla por su
parte trasera por lo tanto asigna que la dirección debe ser hacia “adelante”.
Caso 4: Indica que el sumorobot se encuentra en una posición limite por su parte
derecha, por lo tanto debe asignar la dirección “izquierda”.
Caso 5: Indica que el sumorobot se encuentra en una posición limite por su parte
izquierda, por lo tanto debe asignar la dirección “derecha”.
Los casos restantes se llenan solo para asegurar un correcto funcionamiento, sin
embargo son semejantes a los primeros 5.
15. Los motores se activan según la dirección que se ha asignado, la cual se muestra
en la tabla 3.
Tabla 3. Accionamiento de motores.
Dirección IN1 IN2 IN3 IN4
Adelante HIGH LOW LOW HIGH
Atrás LOW HIGH HIGH LOW
Derecha HIGH LOW HIGH LOW
Izquierda LOW HIGH LOW HIGH
En la tabla 3, se muestran cuatro parámetros (IN1, IN2, IN3, IN4), que son las
salidas digitales para el accionamiento de un puente H.
Resultados
1) En cuanto a la sección de adquisición y acoplamiento de señales de
sensores optoeléctricos se tuvo que implementar un potenciómetro en lugar
de una resistencia fija, ya que esto permite una calibración independiente
para cada sensor, ya que no todos los sensores varían según distintas
condiciones, en nuestro caso la distancia en que se colocan los sensores.
2) La sección de adquisición de sensores ultrasónicos se implementó de
manera adecuada, y por lo tanto no se presentaron mayores
complicaciones.
3) En la sección de activación de los motores, en primera instancia se recurrió
a la implementación de un módulo de puente H de Arduino (L298N Full-
Bridge), sin embargo la demanda de corriente de los motores excedía la de
las especificaciones del Driver; por ello mismo se optó por realizar un
puente H enteramente analógico.
4) En el montado de las partes del sumorobot, hubo que adecuar la base y
buscar las llantas adecuadas, además de aplicar un antiderrapante a las
llantas.
16. 5) El resultado que se obtuvo ante la señales de accionamiento del sistema
con los motores fue muy buena, ya que obedece de manera rápida ante la
presencia de objetos cercanos.
Fuentes consultadas
[1] Gallardo G. Daniel, Apuntes de ARDUINO Nivel Pardillo,
http://educacionadistancia.juntadeandalucia.es/profesorado/pluginfile.php/2882/mo
d_resource/content/1/Apuntes_ARDUINO_nivel_PARDILLO.pdf, consultada: 3 de
Marzo de 2015.
[2] Are we getting close? Proximity Sensors + Arduino,
http://bildr.org/2011/03/various-proximity-sensors-arduino/, consultada: 5 de marzo
de 2015.
[3] Tutorial: sensor ultrasonidos HC-SR04,
http://elcajondeardu.blogspot.mx/2014/03/tutorial-sensor-ultrasonidos-hc-sr04.html,
consultada: 5 de marzo de 2015.
[4] Tutorial: Uso de Driver L298N para motores DC y paso a paso con Arduino,
http://electronilab.co/tutoriales/tutorial-de-uso-driver-dual-l298n-para-motores-dc-y-
paso-a-paso-con-arduino/, consultada: 7 de Marzo de 2015.