FICHA 8 MISIÓN A MARTE Sesión 1 Aprendizajes Al final de esta actividad se espera que puedas: • • • • Crear una simulación que incluya conceptos de programación como variables y funciones. Usar diferentes entradas, salidas y variables. Hacer pruebas y mejorar los programas usando casos de prueba. Usar funciones para estructurar y simplificar un código. Lo que sabemos, lo que debemos saber Como ya has visto, programar es describir en detalle una serie de pasos lógicos en un lenguaje apropiado que el computador interpreta y ejecuta para realizar una tarea. En esta ficha representarás el proceso de hacer volar un helicóptero robótico llamado Mars Helicopter. Pero antes, te contaremos un poco más de este proyecto. Mars Helicopter es un proyecto experimental de la NASA. El proyecto consiste en desplegar un pequeño helicóptero autónomo en Marte, de ahí su nombre. La finalidad del Mars Helicopter es explorar diferentes áreas de Marte. Tal como lo señala la NASA, Mars Helicopter funcionará como explorador robótico de prueba para obtener información relevante, con el fin de evaluar y planear misiones futuras de otros robots en Marte. Las baterías y el helicóptero mismo deben ser trasladados en otra nave espacial interplanetaria hasta Marte, recuerda que dada la gran distancia hasta Marte todo lo que se transporte debe ser del tamaño y peso más pequeño posible. Por ello, el Mars Helicopter es un helicóptero muy pequeño que solo podrá realizar máximo 5 vuelos en Marte con una duración máxima de 90 segundos cada uno, con despegues y aterrizajes verticales controlados. Teniendo en cuenta las características del Mars Helicopter y las actividades que vas a realizar, deberás comprender algunos aspectos que se irán presentando a lo largo de esta ficha. En particular debes saber qué es una variable, qué es una función y qué son casos de prueba en programación. Variables: En programación, una variable es un espacio en la memoria donde se almacena un valor que podemos crear, cambiar y leer durante la ejecución de un programa. Nombre T1 Procesador ARM ® Cortex de 32 bits con memoria RAM de 16K bytes. 03 - 2021 8-1 T2 Llueve La memoria de un computador (la micro:bit es un pequeño computador) se puede imaginar como un cajonero como el que muestra la imagen. Cada cajón tiene un nombre o etiqueta que nos permite identificarlo sin equivocarnos, y dentro de cada cajón puedo guardar, retirar, o consultar un objeto. Cuando programamos la micro:bit con MakeCode una variable puede guadar un valor. Este valor puede ser de diferente tipo como texto, booleano o Número. En otras fichas se abordarán otros tipos. En la siguiente imagen puedes ver una representación de cuatro variables de tipos diferentes, con sus respectivos valores. T1 Variable T2 Llueve Nombre 21 Valor La variable T1 tiene asignado el valor numérico 21 La variable T2 tiene asignado el valor numérico 1 1 Falso “Cali” La variable Llueve tiene asignado el valor Booleano Falso La variable Nombre tiene asignado el valor alfabético “Cali” Podemos realizar operaciones con los valores almacenados en las variables y actualizarlos, por ejemplo, podemos sumar al valor de T1 con el valor de T2 y guardar el resultado de la suma en T2. T1 Variable T2 Nombre 21 Valor T2 = T1 + T2 1 “Cali” T1 Variable T2 Nombre 21 Valor 22 “Cali” Podemos cambiar el valor y el tipo de valor almacenado en una variable, por ejemplo, podemos cambiar el valor asignado a T1 por el valor “Simona”. T1 T2 Variable Nombre 21 Valor 22 “Cali” T1 = “Cali” T1 T2 Variable Nombre Valor "Simona" 22 “Cali” Para crear una variable en MakeCode se utiliza el menú de variables y la opción de crear variables. Te invitamos a crear tres variables en el editor: T1, T2 y T3, como se muestra a la izquierda. Vas a utilizar estas tres variables para guardar la temperatura medida por la micro:bit en tres momentos diferentes. El Mars Helicopter tiene varios sensores que miden diferentes cosas de las rutas como la temperatura (termómetro), la presión (barómetro), la orientación (brújula), etc. Estas mediciones son almacenadas para que otros robots las puedan usar en la planeación de misiones futuras. Vamos a programar el Mars Helicopter para que recoja la temperatura promedio de cada punto; esta información será útil, por ejemplo, para estimar cuánta energía deben utilizar otros robots en refrigerarse mientras hacen sus propias misiones en la misma ruta. 03 - 2021 8-2 Los sensores, en particular los termómetros, pueden arrojar imprecisiones en las medidas, es común tomar varias mediciones y promediarlas para reducir este error. Recuerda que el cálculo del promedio sería: (T1+T2+T3) 3 Examina ahora el diagrama de bloques que aparece a la izquierda. Trata de anticipar qué hace y luego pruébalo para verificar tu predicción. Igualmente ten cuidado de cómo ensamblas la parte del cálculo del promedio. A continuación te mostramos ampliada esta parte. Analiza con cuidado el orden en que se hacen las operaciones en este bloque, corresponde al promedio= ((T1+(T2+T3)) Como has visto, crear variables permite guardar datos para ser utilizados posteriormente 3 Si usas otro orden, ¿obtendrás un resultado incorrecto? Haz el ensayo. Funciones: Una función es un conjunto de instrucciones (líneas de código) que realiza una tarea específica y que se utiliza frecuentemente. En la sociedad actual, existen expertos en muchas actividades lo cual facilita adelantar proyectos complejos. Por ejemplo, si estoy remodelando una casa probablemente no haga todo el trabajo sino que llame a personas expertas en pintar, en colocar pisos, en hacer instalaciones eléctricas. Cada una de estas personas sabe qué hacer y cómo hacerlo. De tal forma que cada vez que necesito hacer un trabajo eléctrico no hago el arreglo, sino que llamo al electricista. En programación se aplica la misma idea de especialización, si un conjunto de instrucciones realiza una tarea especializada se convierte en una función. A las funciones se les asigna un nombre por medio del cual se pueden realizar todas las instrucciones, cada vez que se requiera, mediante una llamada. Así, una función permite hacer una tarea varias veces sin repetir las líneas de código necesarias para realizarla. En MakeCode cada bloque que usas para programar es una función y los puedes combinar para crear nuevas funciones. Ahora debes convertir el programa que acabas de examinar en una función (nuevo bloque), lo cual será útil dado que vas a requerir tomar la temperatura promedio en varios lugares de tu programa. No tendrás que escribir el mismo código varias veces, solo llamar la función. Cada vez que requieras la temperatura promedio podrás llamar la función que realizará 3 mediciones de la temperatura y luego obtiene el promedio. No olvides separar las mediciones con 5 segundos de espera. 03 - 2021 8-3 Para ello debes ir al menú Avanzado, seleccionar Funciones y hacer clic en “crear una función”. Te aparecerá una ventana, como la que ves abajo, en la que debes escribir el nombre de la función, este nombre servirá para llamarla posteriormente, la llamaremos Temperatura promedio. Al crear la función aparecerán dos bloques dentro del menú Funciones, uno que se usa dentro de la función para responder con un valor ("return") y otro que sirve para llamar la función. En la zona de edición, también aparece un bloque inicial con el nombre de la función, allí pondremos las instrucciones que se realizarán al llamar la función. A la izquierda encontrarás estos bloques para guiarte. Ahora, puedes colocar el código que habías creado para el promedio dentro del bloque inicial de la función, y hacer llamados a la función desde cualquier lugar por ejemplo: Esta función calcula el promedio de tres mediciones de temperatura Como verás, podrás usar esta nueva función que has creado en otros programas que requieran la temperatura, logrando un error menor gracias al promedio de 3 mediciones en 10 segundos. Casos de prueba: Un caso de prueba es la especificación del resultado que debe tener un programa dadas diferentes condiciones de utilización o diferentes datos. Normalmente debes definir varios casos de prueba para cada funcionalidad de tus programas, de tal manera que puedas validar su funcionamiento. Tomemos como ejemplo el programa que se muestra a la izquierda. Los casos de prueba en este programa, podrían ser: ¿Qué pasa si la temperatura es mayor a 25°? ¿Qué pasa si la temperatura es menor de 25°? ¿Qué pasa si la temperatura es igual a 25°? ¿Seguirá funcionando el código si la temperatura es negativa? Si observas, este programa invoca la función usando el bloque “llamada Temperatura promedio”. 03 - 2021 8-4 Desconectadas Tablero de navegación con coordenadas (x, y) X Y 0,0 1,0 2,0 3,0 4,0 0,1 1,1 2,1 3,1 4,1 0,2 1,2 2,2 3,2 4,2 0,3 1,3 2,3 3,3 4,3 0,4 1,4 2,4 3,4 4,4 Inicio Recordemos que Mars Helicopter es un helicóptero robótico que servirá como demostración tecnológica para explorar objetivos interesantes en el planeta Marte, y como base para planificar la mejor ruta para próximas misiones. En esta actividad, tu misión será programar el Mars Helicopter para realizar 5 vuelos de exploración en Marte. Para esta actividad haz lo siguiente: • • • • Utiliza el diagrama de flujo para seguir las instrucciones paso a paso. Realiza los vuelos exploratorios en el tablero de navegación que se presentan en el documento, dentro de esos rangos de coordenadas se deben establecer los planes de vuelo. Lleva el conteo de la variable “Vuelos” en una hoja. Una de las personas del equipo será la función y se especializará en ejecutar la función Validar coordenadas. Inicio Establecer variables Coordenada_X en 0 Coordenada_Y en 0 Vuelos en 0 Ingresa plan de vuelo Leer Coordenada_X Leer Coordenada_Y Función Validar coordenadas ¿Coordenada_X >= 0 y Coordenada_X<= 4 ? Sí No ¿Coordenada_Y >= 0 y Coordenada_Y <= 4 ? Sí No Regresar FALSO Llamar Validar coordenadas No Pregunta ¿Qué sucede si ingreso un valor menor a 0 en alguna de las coordenadas? ¿Qué sucede si ingreso un valor mayor a 4 en alguna de las coordenadas? ¿Qué sucede si ingreso un valor entre 0 y 4 en ambas coordenadas? 03 - 2021 Ir a coordenadas ¿Aprobado? SÍ NO ¿Plan de vuelo aprobado? Sí No Aumentar Vuelos en 1 Regresar FALSO Regresar VERDADERO ¿Vuelos = 5? Sí Fin Como ves, las funciones ayudan a hacer nuestros códigos más legibles, cada vez que se necesite hacer una verificación de coordenadas, sólo veremos el llamado a la función y no todas las líneas de código necesarias para tal verificación. Casos de prueba: En la función “Validación de coordenadas” se está haciendo una validación de los datos ingresados en las coordenadas. Para verificar que los casos de prueba estén funcionando de forma adecuada, responde las siguientes preguntas de la tabla de la izquierda. Si lograste llevar a cabo los 5 vuelos cumpliendo las condiciones para realizar cada viaje, estás listo para cumplir tu otra misión en la micro:bit 8-5 Sesión 2 Conectadas: manos a la micro:bit Después de trabajar en la actividad desconectada, ya tienes mayor conocimiento sobre la Misión a Marte. Ahora es momento de trabajar en MakeCode haciendo un programa que te permita simular algunas de las instrucciones necesarias para lograr que el helicóptero vuele dentro de un rango de coordenadas limitado. En esta primera tarea vas a simular en el editor MakeCode de la micro:bit solamente el incremento de las coordenadas X y Y utilizando los botones A para X y B para Y. Luego, es necesario probar cada movimiento del vuelo, nueva coordenada, para verificar que se encuentre dentro del área de trabajo. La micro:bit cuenta con una matriz de 25 LED programables en una cuadrícula de 5 por 5. Este será el espacio (simulado) para los vuelos de exploración. Para comenzar, debes configurar las variables que utilizarás en el programa. El bloque de “al iniciar” se utiliza para realizar acciones que solo se adelantan la primera vez: cuando el programa comienza a funcionar. Una vez configuradas estas variables, puedes configurar los botones A y B para incrementar los valores de las coordenadas e ir describiendo una ruta de vuelo. Analiza estos bloques, trata de anticipar qué hacen y luego prueba en el MakeCode para verificar tu predicción. 03 - 2021 8-6 Analiza el siguiente programa. Este breve programa llama una función denominada Validar_coordenadas la cual es responsable de realizar un movimiento solicitado del helicóptero mostrándolo en la pantalla de LED de la micro:bit. Sin embargo, antes de realizarlo, verifica que esté en el campo de acción del helicóptero. Si llega a estar fuera, la función no realiza el movimiento, y luego el programa muestra una X. Es hora de que crees la función Validar_coordenadas. Analiza esta propuesta de función. No es la única posibilidad. Lo importante es que las coordenadas (x, y) estén en el área de trabajo, que regrese verdadero si esto es cierto y falso si no lo es. Analiza estos bloques, trata de anticipar qué hacen y luego prueba en el MakeCode para verificar tu predicción. ¿Se muestra la posición del helicóptero? ¿Alcanzas a ver las flechas y la coordenada después de presionar el botón A o B? Más adelante modificarás el código para que se puedan volver a ver, pero antes veamos algunos detalles de esta función. En esta función (Validar_coordenadas) se usa un bloque graficar x y que puedes encontrar en la sección LED. Este bloque te permite encender el LED que se encuentra en la coordenada (x, y) de la pantalla, recordemos que estas coordenadas empiezan en (0, 0) en la parte superior izquierda. Ten en cuenta que cuando la función utiliza el bloque "return" aparece un tercer bloque en la sección Funciones, que servirá para hacer uso del resultado que regresa tu función, como se ve en el diagrama a la izquierda. Modifica los bloques para que se alcancen a ver la flecha y la coordenada después de presionar el botón A o B. Te damos una pista: no llames a la función Validar_ coordenadas en el bloque para siempre. Una vez hayas resuelto esto, ¿se está mostrando la posición inicial del helicóptero? Si no, ¿qué debes hacer para que se grafique su posición al iniciar el programa? 03 - 2021 8-7 Es hora de probar el programa completo jugando con él. 03 - 2021 8-8 Aplicando lo aprendido Deberás ahora probar el programa para diferentes trayectorias y examinar si el resultado es el esperado. Examina estos dos casos de prueba: • • Si llego a un valor superior a 4 en la coordenada X, ¿es rechazado este último movimiento? Si llego a un valor superior a 4 en la coordenada Y, ¿es rechazado este último movimiento? Este programa tiene varias dificultades. Una de ellas consiste en que si quisieras introducir una nueva ruta de vuelo no tienes forma de iniciar de nuevo en la posición (0,0). Te sugerimos incluir una acción que inicie las coordenadas en cero cuando se opriman los botones A y B simultáneamente, lo cual le indica a la micro:bit que vas a introducir una nueva trayectoria. Seguro ya lo puedes hacer Para ir más lejos Ya sabes que el número total de vuelos no puede pasar de 5 y que cualquier vuelo solo puede durar 90 segundos. Cada movimiento de este helicóptero le toma 10 segundos (despegar, aterrizar, un movimiento en X o un movimiento en Y), por lo que ningún plan de vuelo puede tener más de 9 de estos movimientos. Modifica el programa para que al menos la condición del número de vuelos sea tenida en cuenta y avise cuando ya se hayan probado los 5 vuelos posibles. Para esto es necesario que primero se pueda definir un plan de vuelo conformado por varios movimientos, sin que se apruebe cada uno de estos independientemente, y luego se apruebe el plan de vuelo completo. Si quieres ir aun más lejos, agrega a este programa lo necesario para: • Poder disminuir el valor de las coordenadas, en la actualidad los botones solo pueden incrementarlas. • Controlar la condición de máximo 9 movimientos por plan de vuelo. • Mostrar el número de vuelos que se han verificado. 03 - 2021 8-9 Lo que hemos aprendido Revisa y completa la siguiente tabla marcando una X en la columna que mejor represente tu aprendizaje: Verifica los aprendizajes logrados Sí Algo No Creo un juego que incluya conceptos de programación como variables y funciones. Uso diferentes entradas, salidas y variables. Hago pruebas y mejoro los programas usando casos de prueba. Uso funciones para estructurar y simplificar un código. Selecciona la opción que mejor represente tu opinión: Contesta las siguientes preguntas Las actividades realizadas fueron difíciles. Las actividades me motivaron. Siento que aprendí muchas cosas. Aún me quedan muchas dudas sobre lo que hice. 03 - 2021 8 - 10 Sí Algo No Un poco de historia 3000 a. C. 1000 a. C. 0 1000 d. C. Babilonios Chinos Griegos Mayas 900 d. C. 600 a. C. 600 d. C. 300 a. C. 1990 d. C. 1900 d. C. 1800 d. C. Primer computador Motor de búsqueda web Computación 300 d. C. cuántica efectiva Nicole-Reine Lepaute (1723 - 1788) John von Neumann (1903 - 1957) Astrónoma y matemática francesa. En 1758 participó en el equipo que logró predecir por primera vez la trayectoria de un cometa al calcular el regreso del cometa Halley. El equipo predijo su regreso para el 13 de abril de 1759, fallando por tan solo un mes, puel el cometa regresó el 13 de marzo. Matemático y teórico computacional húngaro. En 1762, calculó el momento exacto en que ocurriría el eclipse del 1 de abril de 1764 y describió el porcentaje del eclipse en intervalos de 15 minutos. Su devoción a la astronomía y sus aportes le valieron el reconocimiento como miembro de la Academia Científica de Béziers. El asteroide 7720 Lepaute y el cráter lunar Lepaute fueron nombrados en su honor. Propuso una arquitectura conceptual de computador que es la base de todos los computadores que usamos hoy en día. Hizo aportes muy importantes en el campo de la Inteligencia Artificial con sus modelos de autómatas y máquinas autorreplicativas. Se le reconoce como el inventor del algoritmo de ordenamiento Merge Sort, u ordenamiento por mezcla. En su honor se otorga la Medalla John von Neumann para logros excepcionales en ciencia y tecnología de la computación. También hizo aportes en el campo de las Matemáticas, la Física y la Economía. En 1954 realizó una conferencia en Colombia en la Universidad de los Andes. Las bases del pensamiento computacional vienen desde la antigüedad y las mujeres han tenido un papel importante Mujeres y hombres que se destacan en la computación en Colombia y en el mundo Sandra Liliana Rojas Estudió en el colegio de Sugamuxi en Sogamoso, Boyacá, donde pasó los primeros 16 años de su vida. Estudió su pregrado en Ingeniería de Sistemas en la Universidad de Boyacá, una maestría en Ingeniería de Sistemas y Computación en la Universidad Nacional de Colombia y otra en Aprendizaje Basado en Proyectos en la Universidad de Aalborg en Dinamarca. Sandra es profesora de Ingeniería de Sistemas y Computación y ha sido Directora del Departamento de Ingeniería de Sistemas e Industrial en la Universidad Nacional de Colombia. 03 - 2021 8 - 11