Friday 8 February 2013

Enseñando scratch a alumnos de M2

Este año estoy combinando mi trabajo como IT Manager con el de profesor de IT. La idea de enrolarme en el apartado académico surgió a raiz de una encuesta que se le envió a los alumnos preguntándoles qué cosas relacionadas con las nuevas tecnologías les gustaría aprender; ya que algunos de ellos apuntaron que les gustaría aprender a programar, me puse a buscar de qué forma podía enseñar programación a alumnos de entre 12 y 13 años.
La respuesta la encontré en un software desarrollado por el MIT y que otras universidades como Harvard (https://www.cs50.net/) utilizan para introducir a sus alumnos en el desarrollo de aplicaciones, se llama scratch y es completamente gratis para descargar y para usar, además está disponible para los principales sistemas operativos (windows, macs y linux).


Scratch permite introducir a los alumnos en el mundo de la programación utilizando una especie de pseudocódigo en formato visual, es decir, prácticamente no tenemos que escribir nada simplemente utilizaremos una serie de comandos que vienen presentados en forma de bloques, estos bloques encajan entre sí para formar "funciones" más o menos complejas.


En internet hay muchísimos tutoriales sobre scratch, en la mayoría de ellos te van explicando poco a poco los diferentes comandos y secciones, sin embargo, a mi personalmente nunca me han gustado las clases en las que el profesor simplemente se planta delante de los alumnos y les suelta un rollo más o menos largo que se olvida al cabo de 5 días. Por lo que dividí la clase en las siguientes secciones:


1. Investigación de scratch y cosas que se pueden hacer con él: Otra ventaja de scratch es que viene con un montón de "programas" simples como ejemplo y que pueden ayudarnos a la hora de enseñar este "lenguaje". Por otro lado en la página oficial, los usuarios de scratch pueden subir sus programas para el disfrute del resto del mundo. Así que mi primera clase consistió en, después de una breve introducción de lo que íbamos a hacer, mostrarles como acceder tanto a los ejemplos como a los programas subidos a internet por los usuarios; de esta forma, ellos pueden ver qué tipo de cosas pueden hacerse con Scratch y ayuda a capturar su atención sobre todo porque la mayoría de ejemplos son pequeños juegos.





2. Crear tu primer programa: después de haber jugado durante toda una clase, les mostré como hacer un programa muy muy sencillo, nuestro hello world en scratch, que consistía en coger al gato que viene por defecto al abrir scratch y hacer que se mueva por la pantalla. De esta forma les expliqué la interfaz de scratch y los diferentes tipos de bloques que había. Al final de la clase ya estaban usando bloques que no creía que controlarían hasta mucho más adelante.




3.Aprendiendo con ejemplos: En las clases siguientes, les decía que eligieran alguno de los ejemplos que más les habían gustado y que investigaran para qué servía cada uno de los bloques de los que se componía el programa, al tiempo que hacían pequeñas modificaciones para que ellos vieran como afectaban esas pequeñas modificaciones al programa, cosas como cambiar el valor de una variable para que una bola se mueva más rápido o hacer que se emita un sonido cada vez que se pulse una tecla. Al principio tenía mis dudas por si no fueran capaces de "innovar" pero de nuevo volvieron a sorprenderme y algunos de ellos terminaron cambiando completamente el ejemplo inicial...


Al tiempo que íbamos modificando ejemplos a ellos le iban surgiendo más y más dudas del tipo como puedo hacer esto o como puedo hacer aquello, y fue ahí donde aproveché para instruirles un poco más en el uso del programa y de las diferentes opciones.

4. Una vez que ya se habían familiarizado con scratch lo suficiente les propuse un projecto que era diseñar su propio juego desde el principio, por lo que tuvieron que empezar describiendo las características del juego que querían crear, cuales iban a ser los personajes, los escenarios si había puntuaciones como serían, cuantos niveles habría, qué sonidos sonarían al pasar según qué cosa, etc, etc...
Una vez tuvieron hecho todo el diseño, empezaron a desarrollar el juego siguiendo sus propias especificaciones, algunos hicieron juegos de carreras, otros de agilidad mental, y hubo uno que llegó a construirse un pacman completo con sus fantasmas y todo, algunos de sus compañeros quedaron tan sorprendidos que le animaron a crear un vídeo para compartir lo que habían hecho.

[Vídeo en proceso]

Pues hasta aquí la entrada, siento haberme enrollado mucho, quizá mi metodología no sea la más adecuada pero al final de la unidad todos sabían lo que era un bucle, una variable, una condición una entrada y salida de datos etc. etc... lo que les hará ser más receptivos cuando el año que viene empecemos a programar "de verdad" :)



Minitutorial, sensor de distancia

Como ya comenté en un post anterior, este año estoy dando clases de IT a alumnos de diferentes niveles. Por lo que me he decidido a escribir pequeñas entradas con  opciones que nos brinda arduino con su conexionado y su sketch correspondiente, así me servirá también como un repositorio a la hora de mostrarles ejemplos que pueden utilizar para aprender a programar y montar proyectos con arduino.

En esta ocasión le toca el turno a los sensores de distancia, el que voy a utilizar es el HC-SR04, comprado en dealextreme por poco más de 3$.

El sensor funciona por ultrasonidos y el mecanismo consiste en una señal de ultrasonido que envía uno de esos cilindros y que el otro recibe, en función del tiempo que tarde en volver el ultrasonido se determina la distancia hasta el objeto que tiene en frente.

Tiene un rango de 2 a 450 cm por lo que tiene muchas utilidades como detección de intrusos, contador de personas, detección de obstáculos para pequeños proyectos de coches autodirigidos y cualquier otra cosa que se nos ocurra.

Cuenta con 4 pines que por suerte vienen etiquetados en la misma placa, así tenemos vcc para el voltaje, Trig que es el que envía la señal y va conectado a una salida digital, echo que es el que recibe la señal y se conecta a una entrada analógica y por último Gnd para la toma a tierra. Esto nos facilita mucho las cosas a la hora de hacer el conexionado en una placa de montaje por ejemplo. Aquí tenéis como ejemplo el esquema he estado usando yo para pruebas.





Y aunque muy simple, os dejo un esquema del conexionado:






Una vez que tenemos el hardware listo vamos a pasar al software, para poder utilizar este sensor necesitaremos enviar una señal durante dos microsegundos, después silenciar esa señal y leer el valor que nos devuelve el pin de ECHO. De esta forma aplicando una pequeña fórmula nos devuelve el valor en CM. He aquí el sketch:




 // Definimos para que vamos a usar cada pin
#define ECHO 6       
#define TRIGGER 7 

//Primera bateria de instrucciones que se ejecutara
//Solo cuando inicie arduino
void setup()
{
  //Declaramos la velocidad con la que operaremos el puerto serie
  Serial.begin(9600);
  //Definimos que el pin de echo (6) es de entrada
  pinMode(ECHO, INPUT);
  //Y que el TRIGGER
  pinMode(TRIGGER, OUTPUT);
  //Mostrampos un mensaje por pantalla diciendo que estamos conectados
  Serial.println("El dispositivo se ha conectado.");
}

/*
 * Funcion de loop que se ejecutara de forma reiterativa
 * 
 */
void loop()
{
  // Ponemos el TRIGGER a 0
  digitalWrite(TRIGGER, LOW);
  // Esperamos 2 microsegundos
  delayMicroseconds(2);
  // Ponemos el TRIGGER a 1
  digitalWrite(TRIGGER, HIGH);
  // Y volvemos a esperar, ahora 10 microsegundos
  delayMicroseconds(10);
  // Por ultimo volvemos a poner el TRIGGER a 0
  digitalWrite(TRIGGER, LOW);
  // Ahora recogemos el valor recibido en el pin de ECHO
  // El cual determinara la distancia
  float distancia = pulseIn(ECHO, HIGH);
  // Para pasar el valor a CM tendremos que dividir el valor 
  // obtenido por 58 y esto nos dara como resultado los cm
  distancia= distancia/58;
  // Imprimimos por el puerto serie la distancia recien calculada
  Serial.print(distancia);
  Serial.println(" CM");
  // Ponemos otra pausa de 200 milisegundos
  // a tener en cuenta que son milisegundos, lo de antes
  // eran microsegundos, un valor aun mas pequeño
  delay(200);
}

Por último un pequeño vídeo de como funciona el sensor: