Taller de Robótica Básico - Skybot v1.4. - SESION 3 - Ejemplos de programación del Skybot



Objetivos

El objetivo de este capítulo es mostrar ejemplos de programas en C para manejar diferentes recursos del robot. Editando, compilando, probando y modificando los ejemplos se aprenderá muy rápidamente a manejar el robot y en poco tiempo se podrá dar rienda suelta a la imaginación para hacer otras cosas... ¡Qué comience la fiesta!


Contenido


Ejemplos básicos

Para los siguientes ejemplos desconectar el cable que une la Skypic con la CT293.

[ejemplo1] Led encendido/apagado. Hacer que el led de la Skypic se encienda cada vez que se acccione el pulsador de la skypic.

En la función main() nos encontramos con:

 if (Pulsador_esta_pulsado() == VERDADERO)

    {  
        EncenderLed();
    }
    else
    {
        ApagarLed(); // en caso contrario apago el LED
    }  

Esta línea comprueba si la funcion Pulsador_esta_pulsado() devuelve VERDADERO. Según esta condición se cumpla o no, se llamará a la función EncenderLed() o ApagarLed().

Y envolviendo a este código de comprobación, encontramos lo siguiente:

  for (;;)
  {
    // Si pulsador apretado enciendo el LED
    if (Pulsador_esta_pulsado() == VERDADERO)
        { 
        EncenderLed();
    }
    else
        {
        ApagarLed(); // en caso contrario apago el LED
    }

La instrucción "for(;;)", equivale a decir que se repita continuamente todo aquello que se encuentre entre sus corchetes. De este modo, nos aseguramos de que nuestro programa compruebe sin parar si el pulsador esta accionado o no (y de encender/apagar el led de la skypic).

EXPERIMENTO: Modificar la condición del if para modificar el comportamiento del skybot




Ejemplos básicos de motores y sensores


[ejemplo2] Activar los motores para que el robot vaya hacia adelante durante 2 segundos

Este programa simplemente hace que el robot avance durante 2 segundos exactamente.

Lo primero que se hace es configurar el Skybot para que use los motores.

  // Configuramos el PIC16f876a para 
  // adaptarse al Robot Skybot
  ConfigurarSkybot();

y después se detalla la acción exacta que queremos que realice:

   Avanzar();
  PausaTiempo(2,0);
  Parar();

Con estas instrucciones, le decimos que los motores se pongan a avanzar, que lo hagan durante 2 segundos, y luego ya cambiamos la configuración de los motores para que se detengan. Este será el procedimiento habitual cuando queramos decirle a nuestro skybot que realice una operación determinada durante X segundos.

[ejemplo3Mover el robot en diferentes direcciones

Este ejemplo es igual que el ejemplo2, pero en vez de enviar la orden Avanzar(), se envían distintas ordenes, para que el robot baile un poco.

    // adaptarse al Robot Skybot
  ConfigurarSkybot();
   
  // El Skybot avanza durante 2 segundos
  Avanzar();
  PausaTiempo(2,0);
   
  // El Skybot avanza durante 2 segundos
  GirarIzq();
  PausaTiempo(2,0);
   
  // El Skybot avanza durante 2 segundos
  GirarDer();
  PausaTiempo(2,0);
   
  // paramos el Robot
  Parar();

EXPERIMENTO: Modificar las ordenes para que el skybot realice el trazado de un cuadrado imaginario.



[ejemplo4] Prueba del sensor 1. Leer su estado y mostrarlo por el led

Este ejemplo es muy útil para comprobar si los sensores funcionan correctamente. El programa sólo lee el sensor infrarrojo 1 pero cambiando la llamada a la función SensorIR_Izq_Lee_Negro() por su homónima para el derecho, podemos leer el otro sensor, reflejando su estado por el led. 

  for (;;)
  {
    // Si leo NEGRO apago el LED
    if (SensorIR_Izq_Lee_Negro() == VERDADERO)
        {
        ApagarLed();
    }
    // en caso contrario lo enciendo
    else
        {
        EncenderLed();
    }
  }

EXPERIMENTO: Cambiar el valor de la condición del if para que sea el derecho, y que se apague cuando lea blanco.


[ejemplo5] Prueba de motores y sensores. El robot avanza mientras el sensor 3 lee blanco. Se para si lee negro.

Ejemplo de un comportamiento muy sencillo del robot. Mientras el sensor 3 lee blanco, el robot está avanzando. Pero si lee negro se detiene. Cambiando el valor de la condición del if, podemos hacer la misma prueba con cualquiera de los otros tres sensores.

EXPERIMENTO: Colocar el robot sobre una superficie negra ú opaca (por ejemplo, el suelo). Colocar un trozo de cinta aislante blanca a unos centímetros de la cabeza del robot. El robot avanzará hasta alcanzar la "meta". En este ejemplo sólo se moverá en línea recta. ¡¡Prueba a programar un movimiento más complejo!!





Hasta aquí, sólo unos ejemplos escogidos basados en la libreria Skybot. A partir de aquí, el alumno debe curiosear el resto de los ejemplos hasta comprender su funcionamiento.

Una vez entendidos, se puede pasar a la siguiente sesión, donde se profundiza en la programación de nuestro skybot y se introducen los conceptos de puertos, pines de entrada/salida etc.

Descarga de ficheros


Ejemplos para el skybot

Fichero C

Ejecutable

HTML

Descripción

ejemplo1.c

ejemplo1.hex

ejemplo1

Al apretar el Pulsador el LED se enciende

ejemplo2.c

ejemplo2.hex

ejemplo2

Hacemos que el Skybot avance durante 2 segundos

ejemplo3.c

ejemplo3.hex

ejemplo3

Hacemos que el robot se mueva en diferentes direcciones

ejemplo4.c

ejemplo4.hex

ejemplo4

Si el sensor 1 detecta negro apago el LED

ejemplo5.c

ejemplo5.hex

ejemplo5

Mientras el Sensor3 lea blanco avanza el robot

ejemplo6.c

ejemplo6.hex

ejemplo6

Al apretar el Bumper Derecho el LED se enciende

ejemplo7.c

ejemplo7.hex

ejemplo7

Al apretar el Bumper Izquierdo el robot se para

ejemplo8.c

ejemplo8.hex

ejemplo8

El Led parpadea

ejemplo9.c

ejemplo9.hex

ejemplo9

Lectura de la LDR y huida hacia delante (huye de la luz) (BETA)

delay0.h

--------------

delay0.h

TEMPORIZADOR 0: Rutina de pausa que usa el temporizador 0 (sin interrupciones). Para ser incluido en la misma carpeta que libreria_skybot.h

delay0.c

--------------

delay0.c

TEMPORIZADOR 0: Codigo de las funciones de pausa que usa el temporizador 0 (sin interrupciones).Para ser incluido en la misma carpeta que libreria_skybot.h

libreria_skybot.h

           --------------

libreria_skybot.h

LIBRERIA SKYBOT: Conjunto de funciones que facilitan el acceso a los sensores y motores del skybot.Para ser incluido en la misma carpeta que el fichero de codigo C principal

libreria_skybot.c

           --------------

libreria_skybot.c

LIBRERIA SKYBOT: Conjunto de funciones que facilitan el acceso a los sensores y motores del skybot.Para ser incluido en la misma carpeta que el fichero de codigo C principal

mogollon.c

mogollon.hex

mogollon

MOGOLLON: Codigo basico que permite participar en el concurso del mogollon en caso de urgencia.

sigue_linea.c

sigue_linea.hex

sigue_linea

SIGUE_LINEA: Programa que hace que el Skybot siga una linea

Makefile.linux

          --------------

Makefile.linux

Ejemplo de Makefile para Linux

borrar_codigo_objeto.bat


borrar_codigo_objeto

BORRAR_CODIGO: Elimina todos los ficheros creados durante el proceso de compilacion

crear_ejecutable.bat


crear_ejecutable

CREAR_EJECUTABLE: Para entornos windows, compila el fichero pasado como argumento, situado en la ruta pasada como segundo argumento (Ver fichero y leer instrucciones en la cabecera).

ejemplos1-linux.tgz

..........

..........

TODOS LOS EJEMPLOS para Linux. Con Makefile

ejemplos1-windows.zip

..........

..........

TODOS LOS EJEMPLOS con ficheros de proceso por lotes para Windows (.bat)




[Sesion 3]

Juan González

Javier Valiente

IEAROBOTICS