Está en la página 1de 7

 

 
GRADO EN INGENIERÍA ELECTRÓNICA DE TELECOMUNICACIÓN  

   

  SISTEMAS INTEGRADOS EN
  TELECOMUNICACIONES
MiniProyecto:
 

 
Diseño y Programación de un robot
 
barredor automático
 

 
MiniProyecto SIT

Descripción del MiniProyecto


La  funcionalidad  que  debe  llevar  a  cabo  el  robot  basado  en  PSoC  4  será  el  de  un  barredor/aspirador 
automático. En este sentido, el robot deberá avanzar a una velocidad lenta hacia delante hasta que detecta 
un obstáculo a menos de 15 cm. Cuando se produzca esta detección, el robot llevará a cabo la maniobra de 
retroceso‐giro  para  evitarlo.  Esta  maniobra  consistirá  en  que  el  robot  emita  un  pitido  de  duración  breve, 
retroceda  en  línea  recta  unos  pocos  centímetros  y  realice  un  giro  a  su  izquierda  de  aproximadamente  90 
grados  a  una  velocidad  lenta  y  volverá  a  su  comportamiento  inicial  de  avanzar  de  forma  ilimitada  a  una 
velocidad lenta. Del mismo modo, cuando el robot detecte que se aproxima a un escalón, deberá ser capaz de 
detectarlo y realizar la maniobra de retroceso‐giro descrito anteriormente.  

El robot constará de un LED RGB mediante el que indicará el sentido del movimiento asignándole un color 
diferente a cada uno de éstos. De forma adicional este tipo de robots constan de un sistema de comunicación 
Bluetooth mediante el que se pueden llevar a cabo funcionalidades más avanzadas como puesta en marcha y 
parada del robot o control de los motores. 

Características de la Plataforma Robótica Móvil


Actuadores y Motores (salidas)
La plataforma robótica móvil empleada para desarrollar el comportamiento descrito anteriormente consta de 
dos  ruedas  delanteras  motrices  conectadas  cada  una  de  ellas  a  un  motor  DC  como  el  empleado  en  el 
Laboratorio 2 y un punto de apoyo trasero conocido como rueda muerta o rueda loca. Como se puedo ver en 
dicho laboratorio, los motores necesitan un  driver  de corriente que se conecta entre  el PSoC y éstos  para 
proporcionar la corriente suficiente para mover dichos motores y que permite ajustar la velocidad y sentido 
de giro de los mismos. Por tanto, el control de cada motor se realizará empleando tres pines digitales de PSoC 
(dos para controlar el sentido y uno para controlar la velocidad de giro). 

         
En  cuanto  al  resto  de  actuadores  necesarias,  el  robot  consta  de  un  zumbador  activo  que  puede  activarse 
mediante la salida a nivel alto de un pin digital (mismo zumbador que el empleado en el Laboratorio 1).  


 
MiniProyecto SIT

El LED RGB a empelar es el que se encuentra integrado en la baseboard del propio kit de PSoC 4 que se ha 
utilizado durante todas las sesiones de la asignatura. 

   
Sensores (entradas)
El sensor empleado para detectar obstáculos es el sensor de ultrasonidos HC‐SR04 (el mismo modelo que el 
empleado en el Laboratorio 2). Este sensor necesita un pin digital de salida que gestione la señal de trigger y 
un pin digital de entrada que monitorice la señal echo. El tiempo que la señal echo se encuentra a nivel alto 
es proporcional a la distancia medida, pues es el tiempo que tarda la onda ultrasónica en salir del sensor y ser 
detectada al rebotar en el obstáculo. El sensor de ultrasonidos estará situado en la parte frontal superior del 
robot. 

 
En  cuanto  al  sensor  empleado  para  detectar  un  escalón  es  el  sensor  de  reflexión  IR  Modulo  TCRT5000  (el 
mismo  modelo  que  el  empleado  en  el  apartado  3  del  Laboratorio  3)  que  proporciona  un  valor  de  tensión 
mayor,  cuando  menos  luz  IR  reflejada  recibe.  Este  módulo  proporciona  una  tensión  inversamente 
proporcional  en  la  salida  analógica  (A0).  Al  tratarse  de  un  escalón,  será  posible  diferenciar  entre  el  valor 
medido cuando el sensor esté cerca del suelo (mucha luz IR reflejada, valor medido de tensión muy pequeño, 
cercano a 0 V) y el valor proporcionado cuando detecta un escalón de 10 cm de alto y apenas recibe luz IR 
reflejada (al “asomarse” a un escalón, la superficie que refleja la luz IR está más alejada y por tanto el sensor 
mide una cantidad de luz IR reflejada mucho menor, cercano a VCC). Hay que considerar que este sensor a 
partir de aproximadamente 2 cm es necesario proporciona aproximadamente una tensión de VCC, por lo que 
se puede considerar como si midiera la luz IR reflejada en una superficie negra. El sensor IR estará colocado 
en la parte delantera inferior del robot enfocado hacia el suelo. 

         
 


 
MiniProyecto SIT

Interconexionado
En  la  siguiente  imagen  se  indica  la  localización  de  los  diferentes  sensores  y  actuadores  integrados  en  la 
plataforma robot móvil. 

En la siguiente imagen se muestran los pines a los que se han conectado los diferentes módulos y los niveles 
que hay que asignar a los pines de control de motores para mover el robot en una dirección determinada. 


 
MiniProyecto SIT

Planificación del MiniProyecto


Sesión 1 - 21/04 (2h + 3h)
Explicación  del  Miniproyecto,  características  de  la  plataforma  de  robot  móvil  y  organización  de  equipos 
mediante videoconferencia a través del Aula Virtual. 

Propuesta Reto 1: Programar una secuencia de movimientos en el robot, acompañado de una secuencia de 
colores mediante el LED RGB y empleo del zumbador. 

Sesión 2 - 28/04 (2h)


Probar los programas diseñador para resolver el Reto 1. 

Propuesta Reto 2: Añade al Reto 1 la detección de obstáculos mediante el sensor de ultrasonidos. 

Sesión 3 - 05/05 (2h)


Probar los programas diseñador para resolver el Reto 2. 

Propuesta Reto 3: Añade al Reto 1 y 2 la detección de un escalón mediante el sensor IR. 

Sesión 4 - 07/05 (2h)


Probar los programas diseñador para resolver el Reto 3. 

Propuesta  Reto  4:  Añade  al  Reto  3,  2  y  1  una  funcionalidad  adicional  mediante  la  que  se  emplee  la 
comunicación BLE entre el robot y una APP móvil.                                                     

Sesión 5 - 12/05 (2h)


Probar los programas diseñador para resolver el Reto 4. 

Resolución de Dudas. 

Sesión 6 - 14/05 (2h)


Evaluación del MiniProyecto a través la herramienta de videoconferencia del Aula Virtual.  

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
MiniProyecto SIT

Resolución del MiniProyecto 


RETO 1
En este primer reto se debe conseguir que el robot avance durante 3 s, se pare 0.5 s, retroceda 0.5 s, gire a la 
izquierda  0.5  s.  Para  que  el  robot  pueda  realizar  correctamente  su  labor,  es  necesario  que  los  motores  se 
muevan a una velocidad lenta y controlada, por lo que se va a emplear un ciclo de trabajo entre el 35% y 40% 
para definir la velocidad de giro de ambos motores (para facilitar el funcionamiento del PWM, se debe fijar un 
periodo de cuenta total de 100). Para alimentar el terminal “clock” de los módulos PWM se va a emplear un 
reloj de 100 kHz. 

Vídeo demostración: https://youtu.be/97W14VbeFxY 

Se va a proporcionar una plantilla de proyecto de PSoC Creator para que todos los grupos trabajéis con la 
misma  estructura.  Es  muy  importante  empezar  el  proyecto  empleando  un  código  estructurado,  limpio 
(incluyendo únicamente lo necesario) y añadiendo comentarios explicativos, por lo que se va a hacer uso de 
las siguientes funciones: 

// Definición de funciones de movimiento. Dentro de estas funciones


// programa también el color de LED que corresponde en cada caso

void robot_avanza (void); // Configura pines en modo avanzar


void robot_retrocede (void); // Configura pines en modo retroceder
void robot_derecha (void); // Configura pines en modo giro derecha
void robot_izquierda (void); // Configura pines en modo giro izquierda
void robot_parada (void); // Configura pines en modo parada

Dentro  de  cada  una  de  estas  funciones  se  configurarán  los  pines  de  control  del  sentido  de  giro  de  ambos 
motores para conseguir que el robot se desplace correctamente y los pines de control de velocidad de giro 
mediante  una  salida  PWM.  Así  mismo,  se  configurarán  los  tres  pines  del  LED  RGB  para  que  muestre  los 
siguientes colores cada vez que se llama a alguna de estas funciones: 

robot_avanza() ‐> Color Verde 

robot _retrocede() ‐> Color Rojo 

robot _derecha() ‐> Color Amarillo 

robot_izquierda() ‐> Color Morado 

robot_parada() ‐> Color Azul


MiniProyecto SIT

Para conseguir que el robot se desplace en una de las direcciones anteriores durante un cierto tiempo, se 
puede emplear un CyDelay() después de la llamada de la función de movimiento del robot. Por ejemplo, si se 
desea programar el robot para que avance durante 1 s y se mantenga parado durante 500 ms, se utilizarán 
estas cuatro líneas de código: 
 
robot_avanza(); // LED verde
CyDelay(1000); // Avanzar durante 1 s
motor_parada(); // LED azul
CyDelay(500); // Mantener el robot parado durante 500 ms

Por tanto, la distancia que recorre el robot al ejecutar cada una de estas funciones de desplazamiento depende 
de dos factores, la velocidad de giro de los motores que se configura mediante las señales de salida PWM 
(mediante el ciclo de trabajo fijado) y el tiempo fijado mediante un CyDelay() que determina el tiempo que 
dura el desplazamiento.  
 
Ajustando  estos  dos  factores  se  pueden  conseguir  desplazamiento  aproximados,  como  es  el  caso  del 
enunciado de este reto, en el que se pide conseguir un giro de 90 grados hacia izquierda. Por ejemplo, para 
conseguir que el robot realice un giro de 180 grados hacia la derecha configurando una velocidad de giro lenta 
(ciclo  de  trabajo  del  PWM  del  40  %  a  nivel  alto)  es  necesario  que  los  motores  estén  activados  durante 
aproximadamente  1  s.  Para  hacer  que  el  robot  gire  sobre  sí  mismo  180  grados,  dentro  de  la  función  de 
robot_derecha() se configurarán los pines de selección del sentido de giro  del motor A para que avance y del 
motor  B  para  que  retroceda,  así  como  se  fijará  mediante  PWM_A_WriteCompare(40)  y 
PWM_B_WriteCompare(40) el ciclo de trabajo al 35 % de ambos motores. A modo de ejemplo, se muestra el 
código que se debe introducir en el superbucle y dentro de la función robot_derecha() para conseguir que 
encienda el LED con el color adecuado y configure correctamente tanto el sentido como la velocidad de giro 
al 40 %: 
 
#define LED_ON 0u // Es más fácil entender el código con estas etiquetas
#define LED_OFF 1u // recordad que el LED es activo a nivel bajo (0) 
 
for(;;) // Superbucle, girar robot hacia la derecha 180º y parar el robot 1 s
{
robot_derecha(); // Giro derecha robot al 40% y LED Amarillo
CyDelay(1000); // Con 1s y 40% de dutty -> robot gira 180º derecha
motor_parada(); // Robot se para y LED azul
CyDelay(500); // Mantener el robot parado durante 500 ms
}

void robot_derecha (void) // Implementación de la función de giro derecha


{
Pin_Verde_Write(LED_ON); //LED Amarillo
Pin_Rojo_Write(LED_ON); //LED Amarillo
Pin_Azul_Write(LED_OFF); //Apago el pin que no se usa para no mezclar colores

//Configuración Girar Robot hacia la Derecha


Pin_MotorA_A_Write(0); //Motor A retrocede
Pin_MotorA_R_Write(1); //Motor A retrocede

Pin_MotorB_A_Write(1); //Motor B avanza


Pin_MotorB_R_Write(0); //Motor B avanza

PWM_A_WriteCompare(40);//Ajusto velocidad de giro motor A al 40 %


PWM_B_WriteCompare(40);//Ajusto velocidad de giro motor B al 40 %
}

 
Una vez implementado este comportamiento, añade la funcionalidad del zumbador, es decir, que emita un 
sonido mientras el robot está parado.