You are on page 1of 27

REINVENTANDO LA ENSEANZA DE LA COMPUTACIN

Aprendiendo con Robots y Python

Ing. Roberto Martnez Romn

Usando Robots en el saln de clase

Ing. Roberto Martnez Romn rmroman@itesm.mx

Introduccin
Los estudiantes no tienen una idea clara de lo que son las Ciencias Computacionales. Los lenguajes iniciales son complejos (sintaxis) El contexto de la Computacin actual es diferente (robots, celulares, consolas de videojuegos) Los estudiantes estn acostumbrados a usar dispositivos con los que interactan (iPod, celular, controles de juego) y obtiene un resultado inmediato.

Propuesta
Usar el robot Scribbler para introducir a los estudiantes en la lgica de programacin. Usar Python como lenguaje para programar los robots. Usar un simulador del robot Scribbler. Usar los robots reales.

Ing. Roberto Martnez Romn rmroman@itesm.mx

Instalando el software en XP
Esta gua es para el sistema operativo Windows XP 1. Abrir el CD y entrar a la carpeta Windows.

Debes hacerlo con una cuenta de administrador

Instalando el software en XP
3. Ejecuta el archivo "install.bat" dando doble click sobre el cono correspondiente. 4. Iniciar la instalacin de varias aplicaciones, deja que stas se instalen en los folders por default (normalmente c:\Python24) 5. Si hay otra versin de python diferente a la 2.4, debes indicar a cada aplicacin que se instale sobre la versin 2.4

Ing. Roberto Martnez Romn rmroman@itesm.mx

Instalando el software en XP
6. Crea un acceso directo en el escritorio del archivo "c:\Python24\Lib\site-packages\myro\simulator.py", renombra este acceso directo a "Simulador Myro". En tu escritorio debes tener los conos de abajo. Si no tienes el segundo, "Start Python.pyw", copia el que est en el CD.

Instalando el software en Vista


Esta gua es para el sistema operativo Windows Vista 1. Abrir el CD y entrar a la carpeta Windows. Anota la unidad de disco correspondiente.

Ing. Roberto Martnez Romn rmroman@itesm.mx

Instalando el software en Vista


2. Da click en el botn Inicio, abre Programas y luego Accesorios. 3. En el men Accesorios, da click derecho sobre el cono Smbolo del Sistema. Selecciona "Correr como administrador", esto abre una consola de lnea comandos. 4. En la consola de comandos, cmbiate al disco y directorio de la instalacin de python. (por ejemplo, E:\Windows)

Instalando el software en Vista


5. Finalmente, en la misma consola de comandos, teclea "install.bat" y da <enter>. Deja que las aplicaciones se instalen en los folders por default. 6. Si hay otra versin de python diferente a la 2.4, debes indicar a cada aplicacin que se instale sobre la versin 2.4

Ing. Roberto Martnez Romn rmroman@itesm.mx

Instalando el software en Vista


7. Cierra la consola de comandos tecleando exit. 8. Crea un acceso directo en el escritorio del archivo "c:\Python24\Lib\site-packages\myro\simulator.py", renombra este acceso directo a "Simulador Myro".
En tu escritorio debes tener los siguientes conos. Si no tienes el segundo, "Start Python.pyw", copia el que est en el CD.

Caractersticas del robot en el simulador


2 sensores de infrarrojo. 2 sensores de lnea. 2 motores independientes. 1 bocina, puede reproducir tonos. 1 puerto para dibujar. 3 sensores de luz

Ing. Roberto Martnez Romn rmroman@itesm.mx

Conectndose con el Robot (simulador)


1. Ejecuta el simulador dando doble click sobre el cono "Simulador Myro".
El simulador abre dos ventanas: una consola de comandos (la puedes minimizar) y la aplicacin grfica. Este es el mundo sobre el cual vamos a programar el robot Scribbler.
Si el Firewall de Windows muestra un mensaje sobre seguridad, selecciona la opcin "Desbloquear".

Conectndose con el Robot (simulador)


2. Ejecuta el intrprete de python , dando doble click sobre el cono "Start Python.pyw". Aparecer la ventana del intrprete de python en la cual podemos ejecutar comandos para programar el robot del simulador.

Ing. Roberto Martnez Romn rmroman@itesm.mx

Conectndose con el Robot (simulador)


3. Importa las libreras necesarias para interactuar con el robot, para esto teclea el comando:

from myro import

Los comandos son sensibles a maysculas y minsculas.

4. Conctate al robot Scribbler tecleando el comando

robot = SimScribbler()

Conectndose con el Robot (simulador)


5. Ahora le preguntamos al robot su nombre, para esto teclea el comando:

robot.getName()
Si el comando anterior funciona correctamente, significa que hemos logrado la comunicacin exitosa con el robot. 6. Cambia el nombre de tu robot con el siguiente comando

robot.setName("R2D2")
Consulta nuevamente el nombre del robot y verifica que haya sido modificado.

Ing. Roberto Martnez Romn rmroman@itesm.mx

Conectndose con el Robot (simulador)


7. Enva un comando para que el robot genere un sonido por un segundo, de una frecuencia de 880Hz

robot.beep(1,880)
Prueba otras frecuencias y duracin, por ejemplo:

robot.beep(2,440) robot.beep(0.5,1200)

Conectndose con el Robot (simulador)


8. Prueba los comandos que has aprendido hasta ahora (beep, setName, getName) de diferentes formas, para que te vayas familiarizando con el software. Recuerda que lo ms importante es que te diviertas con estas actividades!. 10. Para cerrar el intrprete de python y el simulador selecciona el men File y despus Exit en cada una de las ventanas.

Ing. Roberto Martnez Romn rmroman@itesm.mx

Funciones en python
Para definir una funcin, se usa la sintaxis def nombre(parmetros) : instrucciones Por ejemplo: def alarma(robot) : robot.beep(1,440) robot.beep(0.5,880) robot.beep(1,440) robot.beep(0.5,880)

Funciones en python
Carga el intrprete de python. Ejecuta el simulador. Conctate al robot del simulador. En el men File del intrprete, selecciona New Window. En la nueva ventana teclea el cdigo de la derecha (cuidado con la indentacin!)

Ing. Roberto Martnez Romn rmroman@itesm.mx

10

Funciones en python
Guarda tu archivo con el nombre sonidos.py en la carpeta correspondiente. En el men de Run, selecciona la opcin Run Module o usa la tecla F5. Si no hay errores, el control regresa al intrprete de python. Si hay errores, debes corregirlos antes de ejecutar nuevamente el mdulo. Ahora puedes ejecutar la funcin escribiendo su nombre y enviando el parmetro correspondiente. alarma(robot)
Cambia el valor del tiempo y/o la frecuencia y experimenta con la funcin. Recuerda ejecutar el mdulo despus de cada cambio.

Tocando msica
Reproduciendo sonidos con el robot.
beep(duracin, frecuencia)

Nota Do Re Mi

Octavas y frecuencia Oc. 4 Oc. 5 Oc. 6 261.63 523.25 1046.50 293.66 587.33 1174.66 329.63 659.26 1318.51

Ing. Roberto Martnez Romn rmroman@itesm.mx

11

La funcin tocarMelodia
# Secuencia def tocarMelodia(robot) : negra = 0.3 blanca = 2*negra mi = 659.26 re = 587.33 do = 523.25 robot.beep(negra,mi) robot.beep(negra,re) robot.beep(negra,do) robot.beep(negra,re) robot.beep(negra,mi) robot.beep(negra,mi) robot.beep(blanca,mi) robot.beep(negra,mi) robot.beep(negra,mi) robot.beep(blanca,mi) robot.beep(negra,re) robot.beep(negra,re) robot.beep(blanca,re)

Otro ejemplo

Ing. Roberto Martnez Romn rmroman@itesm.mx

12

Caractersticas del robot Scribbler


El robot Scribbler.
Tres sensores de luz. Dos sensores de infrarrojo. Dos sensores de lnea. Dos motores independientes. Una bocina. Tres leds. Un puerto para colocar un plumn y pintar en el piso. Comunicacin serial. Costo $99 USD

Caractersticas de la tarjeta Fluke


La tarjeta Fluke.
Desarrollada por Georgia Tech. Tres sensores de infrarrojo. Una cmara de fotos. Conectividad por Bluetooth. Indicador de batera baja. Costo $119.95 USD

Ing. Roberto Martnez Romn rmroman@itesm.mx

13

Conectndose con el robot real


Conecta el adaptador bluetooth a un puerto USB. Abre la aplicacin BlueSoleil y pide que liste los dispositivos bluetooth que hay alrededor. (F5) Da doble click sobre tu robot (si pide contrasea teclea 1234). Finalmente da click sobre el cono de servicio serial y anota el nmero de puerto serie asignado.

Conectndose con el robot real


Abre el intrprete de python, importa las libreras de Myro y realiza la conexin como se muestra a continuacin:

from myro import * robot = Scribbler("com18")


Ahora ya puedes interactuar con el robot real, prueba lo siguiente:
pregntale al robot su nombre. cambia el nombre del robot. Reproduce un sonido. Reproduce una meloda con la funcin escrita en el ejercicio anterior.

Ing. Roberto Martnez Romn rmroman@itesm.mx

14

Tomando decisiones
Leyendo el estado de los sensores.
getIR getObstacle getLine getLight

A cada funcin le podemos indicar cul sensor estamos leyendo. Por ejemplo,
getIR("left"), getIR("right") getObstacle("left"), getObstacle("center"), getObstacle("right")

Tomando decisiones
Leyendo el estado de los sensores.
getIR. 0 si hay un objeto enfrente, 1 en otro caso. getObstacle. 0 no hay objeto, (0, 6400] hay objeto. getLine. 1 lnea negra, 0 lnea blanca. getLight. 0 luz intensa, aumenta hasta1024 con menor luz.

Ing. Roberto Martnez Romn rmroman@itesm.mx

15

Tomando decisiones
La sintaxis para la instruccin de seleccin es:

if condicin :
instrucciones

if condicin :
instrucciones

else :
instrucciones

Operadores relacionales
Los operadores relacionales son los siguientes
Operador > < >= <= == != Significado Mayor que Menor que Mayor o igual que Menor o igual que Igual a Diferente de Ejemplo luz > 500 luz < 100 luz >=700 luz <= 50 piso == 1 objetoIzquierda != 0

Ing. Roberto Martnez Romn rmroman@itesm.mx

16

Operadores lgicos
Los operadores lgicos son:
Operador and or not Significado Y, conjuncin O, disyuncin No, negacin Ejemplo luz > 500 and luz < 900 luz < 100 or luz > 1000 not luz < 0

Ejercicio
Escribe las expresiones lgicas en python que representan las siguientes condiciones del robot:

a) "Estoy sobre la lnea" ambos sensores detectan la lnea. b) "Estoy en la orilla de la lnea" slo uno de los sensores detecta la lnea. c) "Estoy fuera de la lnea" ninguno de los sensores detectan la lnea.

Ing. Roberto Martnez Romn rmroman@itesm.mx

17

Detectando objetos
# Seleccin def detectar(robot) : izq = robot.getIR("left") der = robot.getIR("right")

if izq==0 or der==0 :
print "No puedo caminar, hay un objeto frente a mi" speak("No puedo caminar, hay un objeto frente a mi")

else :
print "El camino esta libre, estoy listo para caminar" speak("El camino esta libre, estoy listo para caminar")

Saludando
# Seleccin def saludar(robot) : if robot.getLight("center")>200 : print "Alarma! No hay luz!" speak("Alarma! No hay luz!") else : print "Las condiciones de luz son normales" speak(" Las condiciones de luz son normales ")

Ing. Roberto Martnez Romn rmroman@itesm.mx

18

Tomando fotos de manera inteligente


Este robot toma fotos slo cuando el objeto se encuentra a una distancia adecuada.
def tomarFoto(robot) : sensor = robot.getObstacle("center") print "Valor del sensor:", sensor if sensor > 4000 : print "Demasiado cerca para tomarte una foto" elif sensor < 100 : print "Demasiado lejos, para tomarte una foto" else : print "Tomando foto, espere..." foto = takePicture("color") show(foto)

Tomando fotos de manera inteligente


def tomarFoto(robot) : sensor = robot.getObstacle("center") print "Valor del sensor:", sensor if sensor > 4000 : print "Demasiado cerca para tomarte una foto" elif sensor < 100 : print "Demasiado lejos, para tomarte una foto" else : print "Tomando foto, espere..." foto = takePicture("color") show(foto)

Ing. Roberto Martnez Romn rmroman@itesm.mx

19

Moviendo el Robot
Podemos mover el robot con los siguientes comandos. Comandos forward(velocidad) backward(velocidad) turnLeft(velocidad) turnRight(velocidad) stop() Segunda versin forward(velocidad, tiempo) backward(velocidad, tiempo) turnLeft(velocidad, tiempo) turnRight(velocidad, tiempo)

El valor de velocidad est en el rango [-1,1]. El parmetro tiempo indica el nmero de segundos que dura el movimiento.

Cuidado!

Queda estrictamente prohibido mover el robot sobre la mesa

Ing. Roberto Martnez Romn rmroman@itesm.mx

20

Iteraciones en python
En python existe la estructura for para hacer ciclos.

for variable in [secuencia] :


instrucciones
Ejemplo: for valor in range(10) : print valor

Haciendo Ciclos/Iteraciones
Dibujando un cuadrado.
Dibujamos una lnea y giramos 90. Repetimos lo anterior 4 veces.
#Ciclos def dibujarCuadrado(robot) :

for i in range(4) :
robot.forward(1, 1.5) robot.turnLeft(1, 0.35)

Ing. Roberto Martnez Romn rmroman@itesm.mx

21

Haciendo Ciclos/Iteraciones
Tambin existe la estructura while para hacer ciclos.

while condicin :
instrucciones
Ejemplo: valor = 1 while valor<=10 : print valor valor = valor+1

Evadiendo obstculos
Haga que el robot camine continuamente y se detenga cuando detecte un obstculo. def caminar(robot) : while robot.getObstacle("center") < 3000 : robot.forward(0.8,0.5) print "Termina"

Ing. Roberto Martnez Romn rmroman@itesm.mx

22

Evadiendo obstculos
Haga que el robot camine continuamente y se detenga cuando detecte un obstculo. def caminar(robot) : robot.forward(0.8) while robot.getObstacle("center") < 3000 : pass robot.stop() print "Termina"

Evadiendo obstculos
Haga que el robot camine continuamente y se detenga cuando detecte un obstculo. def caminar(robot) : while True : robot.forward(0.8,0.5) if robot.getObstacle("center") > 3000 : break print "Termina"

Ing. Roberto Martnez Romn rmroman@itesm.mx

23

Evadiendo obstculos
Haga que el robot camine y, cuando detecta un obstculo, gira a la derecha y contina caminando. Simular esto por 15 segundos.

def evadir(robot) : for i in timer(15) : robot.forward(1) if robot.getObstacle("center") > 3000 : robot.turnRight(0.8,1) robot.stop()

Moviendo el Robot
Otros comandos para mover el robot. Comandos translate(velocidad) rotate(velocidad) move(vel_translate, vel_rotate) motors(vel_izq, vel_der);

- rotate +

Ing. Roberto Martnez Romn rmroman@itesm.mx

24

Lectura de datos desde el teclado


Para leer datos desde el teclado, se usa la funcin input a = input("Teclea tu edad: ")

Escribe un mdulo para leer dos valores e imprimir la suma y el cociente. Para imprimir informacin en el monitor, usa la instruccin print print "El resultado es: ", resultado print "La suma de ", a, "+", b, "=", resultado

Ejercicios
1. Escribe un mdulo llamado resolverSistema que pida los valores de un sistema de dos ecuaciones con dos incgnitas y que imprima las races. 2. Escribe un mdulo llamado convertir que lea desde el teclado una cantidad en grados Fahrenheit y la imprima en grados Celsius.

Ing. Roberto Martnez Romn rmroman@itesm.mx

25

Ejercicios
1. Escribe una funcin que haga que el robot gire mientras no "vea" un objeto frente a l. Cuando detecta el objeto, camina hacia adelante para "pegarle". 2. Escribe una funcin que haga que el robot "siga" a un objeto frente a l.

Otras cosas que se pueden hacer en Python


from turtle import * clear() down() for step in range(24) : right(105) forward(100)

Ing. Roberto Martnez Romn rmroman@itesm.mx

26

Gracias!
Roberto Martnez Romn

rmroman@itesm.mx http://homepage.cem.itesm.mx/rmroman/
IPRE http://wiki.roboteducation.org

Ing. Roberto Martnez Romn rmroman@itesm.mx

27

You might also like