Saltar la navegación

5. Ahora toca programar

Retor diceHemos aprendido muchas cosas sobre el robot Maqueen y como programarlo con Python.

Ahora ha llegado el gran momento.

Vuestro grupo debe desarrollar el trabajo final.

La forma más segura para que todo salga bien, es organizando el trabajo.

Os propongo la siguiente secuencia de actividades.

1. Nos preparamos

Es importante que dediquéis un tiempo a pensar en el reto que tenéis que resolver. Pinchad aquí para volver a leer vuestro reto.

Antes de ponernos manos a la obra, es el momento idóneo para que planifiquemos que es lo que vamos a hacer:

  1. Definid el funcionamiento de vuestro vehículo inteligente, explicando con el máximo detalle posible cómo se va a comportar ante cada situación.
  2. Realizad un esquema con los sistemas que tendréis que utilizar. Para desarrollar el proyecto lo haremos por sistemas independientes, por ejemplo:
    • Los elementos luminosos.
    • Los motores.
    • El sensor.
  3. Organizad vuestro equipo: es importante que cada uno sepa lo que tiene que hacer.

No olvidéis tomar nota de todo. Para ello, podéis utilizar:

  • Vuestro cuaderno de clase.
  • El ordenador puede ser una gran herramienta.

¡Ya podemos continuar!

Lumen dice ¿Cómo debe funcionar?

Una propuesta del funcionamiento del vehículo puede ser la siguiente:

  • Al pulsar el botón A el vehículo avanza a velocidad 25.
  • Si se detecta un obstáculo a menos de 5 cm (centímetros), se debe detener.
  • Si pulsamos el botón B el vehículo debe parar.

2. Preparamos el editor de código

Imagen que indica dónde debes hacer clic para entrar en el editor de Python. Nosotros vamos a utilizar una herramienta muy importante que es el Editor de Código V3 para Python.

Pero antes de empezar a programar, vuestro grupo deberá preparar el Editor de código Python. A continuación, se explica lo que tenéis que hacer:

Poner un nombre al proyecto y crear el fichero clase_maqueen.py

Es muy sencillo, basta con poner un nombre que nos permita identificar nuestro proyecto. Un posible nombre puede ser: Vehiculo_Inteligente.

No olvidéis crear el fichero clase_maqueen.py.

En la siguiente imagen podéis ver cómo debe quedar:

Imagen donde se el nombre del proyecto y los ficheros que debe incluir.

Crear el fichero clase_maqueen.py

En la actividad anterior creasteis el fichero clase_maqueen.py. Ahora debemos crear la clase Maqueen dentro de este fichero.

La clase Maqueen va a contener todas las funcionalidades de nuestro robot. Esta tarea es muy importante y no podemos fallar.

Debéis hacer lo siguiente:

  • Copiar el código. En botón Ver Código, lo tenéis disponible. Recordad, debemos copiar todo el código.
  • Pegar el código. Nos aseguramos de que estamos dentro del fichero clase_maqueen.py y pegamos el código.

Comprobad que habéis hecho bien el proceso.

Ver código

#-------------------------------------------------------------------------

import microbit
import machine
import utime
import neopixel
from microbit import *

# Clase Maqueen creada para controlar los motores, leds y RGB
# ----> NO TOCAR ESTE CÓDIGO <----
class Maqueen:

        #Clase de Python para la plataforma DFRobot Micro:maqueen
        #https://www.dfrobot.com/product-1783.html
        #Author: Krzysztof Sawicki <krzysztof@rssi.pl>
        #Licencia: GNU

        #---Función para inicializar el NeoPixel---
    def __init__(self):
        self.rgbleds = neopixel.NeoPixel(microbit.pin15, 4)
        print("MAQUEEN inicializado")

        #---Función para controlar los leds---
    def set_led(self, lednumber, value):

        #Habilitar o deshabilitar los LEDS frontales
        #0 - LED izquierdo (P8)
        #1 - LED derecho (P12)

        if lednumber == 0:
            microbit.pin8.write_digital(value)
        elif lednumber == 1:
            microbit.pin12.write_digital(value)

        #---Función para utilizar el sensor ultrasónico---
    def read_distance(self):

        #Lee la distancia del sensor HC SR04
        #el resultado esta en centimetros
        #Divider se toma de la biblioteca Makecode para micro:maqueen

        divider = 42
        maxtime = 250 * divider
        microbit.pin2.read_digital() # just for setting PULL_DOWN on pin2
        microbit.pin1.write_digital(0)
        utime.sleep_us(2)
        microbit.pin1.write_digital(1)
        utime.sleep_us(10)
        microbit.pin1.write_digital(0)
        duration = machine.time_pulse_us(microbit.pin2, 1, maxtime)
        distance = duration/divider
        return distance

        #---Función para usar los sensores siguelíneas---
    def read_patrol(self, which):

        #Leemos los sensores de tonos grises

        if which == 0: # left
            return microbit.pin13.read_digital()
        elif which == 1: # right
            return microbit.pin14.read_digital()

        #---Función para controlar ambos motores---
    def set_motor(self, motor, value):

        #Controls motor
        #motor: 0 - left motor, 1 - right motor
        #value: -255 to +255, the sign means direction

        data = bytearray(3)
        if motor == 0: # left motor
            data[0] = 0
        else:
            data[0] = 2 # right motor is 2
        if value < 0: # ccw direction
            data[1] = 1
            value = -1*value
        data[2] = value
        microbit.i2c.write(0x10, data, False) # 0x10 is i2c address of motor driver

        #---Función para parar los dos motores---
    def motor_stop_all(self):
        self.set_motor(0, 0)
        self.set_motor(1, 0)
#----------------------------------------------------------------------------------

Lumen dice ¿Te puedo ayudar?

Si tienes problemas para realizar la actividad, dentro del apartado 4.3. Programamos la placa controladora en la actividad 7. Nuestro código, tenéis toda la información.

3. Encendemos las luces

Como ya sabemos, nuestro robot Maqueen dispone de dos LED rojos. En esta actividad debéis controlar el encendido y apagado del LED derecho e izquierdo del robot Maqueen.

Lumen dice ¿Necesitáis ayuda?

Os propongo dos posibilidades:

  1. Que se enciendan con el botón A y se apaguen con el botón B.
  2. Los intermitentes, con el botón A se enciende el LED derecho y con el botón B el LED izquierdo.

Seguro que se os ocurren otras combinaciones.

Clavis dice ¿No te sale a la primera?

Cuando nos enfrentamos a cualquier tarea es muy importante aprender ir adaptándose a lo que va surgiendo.

Por ejemplo, si cada vez que programamos instrucciones, el robot no funciona; quizás tengamos que pensar que deberíamos cambiar nuestra estrategia de programación y repasar bien el código o los bloques antes de realizarlo para ver cuáles son los fallos que tenemos y poder solucionarlos. A lo mejor, hacer las cosas rápido sin revisarlas no es una estrategia que nos funcione en programación. También podríamos copiarlo en un documento antes de trasladarlo al programa y hacer un pequeño resumen con información importante para programar.

La cuestión es que no podemos ser rígidos en nuestros procesos mentales y en lo que hacemos y empeñarnos en seguir con algo que vemos que no está funcionando.

¡Hay que ir creciendo y aprendiendo!

4. Mostrar una imagen

En la actividad anterior programamos los LED del Maqueen. En esta actividad, vamos a utilizar la matriz de LED de la placa micro:bit para mostrar imágenes.

Existen muchas imágenes que podéis utilizar y sería una forma divertida de tunear vuestro vehículo.

Lumen dice ¿Os puedo ayudar?

Os propongo lo siguiente:

  • Al presionar el botón A de la placa micro:bit, debe aparecer en la matriz de LED una flecha hacia arriba.

Imagen de la micro:bit que muestra en su matriz de LEDs la imagen de una flecha hacia arriba.

  • Al presionar el botón B de la placa micro:bit, debe aparecer en la matriz de LED una X.

Imagen de la micro:bit que muestra en su matriz de LEDs la imagen de una X.

¿Y si pulsamos los dos botones a la vez? Vuestro grupo decide si quiere programar esta acción.

En la siguiente página podéis encontrar el código de las imágenes disponibles.

5. Controlamos los motores

Los motores son una parte muy importante de vuestro trabajo.

En esta actividad debéis programar el funcionamiento de los motores.

Lumen dice Tengo una propuesta

Yo probaría con lo siguiente:

  1. Al pulsar el botón A de la placa micro:bit, el vehículo debe avanzar durante 2 segundos.
  2. Al pulsar el botón B de la placa micro:bit, el vehículo debe retroceder durante 2 segundos.

En el apartado 8. Controlamos los motores de la página 4.3. Programamos la placa controladora, tenéis más posibilidades de controlar los motores.

6. Incorporamos el sensor

Imagen de un sensor de ultrasonido.

Recordad que vuestro vehículo debe detectar obstáculos para evitar colisiones. Por lo tanto, es necesario utilizar el sensor de ultrasonidos.

Os propongo que programéis el sensor para controlar el funcionamiento de los motores.

¡Vosotras y vosotros decidís el comportamiento del vehículo!

Lumen dice ¿Necesitáis ayuda?

Se me ocurre la siguiente propuesta de programación:

  1. Si el sensor detecta que el obstáculo no se encuentra a menos de 5 cm, el vehículo debe avanzar.
  2. Si el sensor detecta que el obstáculo se encuentra a menos de 5 cm, el vehículo debe parar.

Esto es solo una propuesta, vosotros y vosotras podéis cambiarla a vuestro gusto.

7. Nuestro programa final

Imagen del robot Maqueen.En esta actividad, vamos a utilizar todo lo que hemos aprendido hasta el momento. Tenéis que diseñar un programa que permita a vuestro vehículo detectar obstáculos y evitar posibles colisiones. 

Es importante trabajar en equipo y aportar diferentes soluciones.

No olvidéis que en el apartado 4.3. Programamos la placa controladora, tenéis un ejemplo resuelto.

Lumen dice ¿Necesitáis una ayuda final?

Me encanta poder ayudaros, en esta ocasión os puedo proponer la siguiente secuencia de funcionamiento:

  1. Al pulsar el botón A de la placa micro:bit:
    • El vehículo debe avanzar.
    • La placa micro:bit debe mostrar una imagen. Por ejemplo, una flecha hacia arriba [↑].
    • Los LED del vehículo deberán estar encendidos.
  2. Si el sensor detecta un obstáculo a una distancia de 5 cm o menos, entonces:
    • El vehículo deberá detenerse.
    • Se mostrará en la pantalla de la micro:bit la imagen de un aspa [X].
    • Los LED permanecerán encendidos.
  3. Si pulsamos el botón B de la placa micro:bit:
    • Los motores deben estar parados.
    • La pantalla de la micro:bit debe estar apagada.
    • Los LED del vehículo deben apagarse.

8. Comprobamos el funcionamiento

En esta actividad debéis comprobar el funcionamiento de vuestro vehículo inteligente.

Si algo no ha salido bien, revisad la actividad correspondiente de esta página.

Cuando todo esté correcto, podéis añadir extras a vuestro vehículo.

9. Añadimos extras

Seguro que estáis pensando en añadir más funcionalidades a vuestro vehículo.

Por ejemplo:

  • Al detectar un obstáculo, que suene una alarma.
  • Cuando el vehículo avance, las luces estén parpadeando.
  • Al detectar un obstáculo el vehículo para y retrocede.
  • ... todo lo que se os ocurra.

Clavis dice ¿Para qué sirve todo esto?

Piensa en la funcionalidad que tiene todo lo que has aprendido, para qué sirve y cuándo podrías usarlo en tu día a día.

Todo lo que hemos aprendido, de una forma u otra, nos ayuda en nuestra vida.

Motus dice ¿Has pensado en todo lo que has aprendido?

¡Reto finalizado! ¿Cómo te sientes? ¿Te has dado cuenta de la cantidad de cosas que has tenido que hacer para completar las actividades?

Al realizar estas actividades has tenido que poner en juego todo lo que sabes. A veces para aprender tenemos que trabajar de forma constante. Cuando nos esforzamos mucho nuestro trabajo es valorado por nuestros profes y familiares. Pero lo más importante es que nos sentimos muy felices por el trabajo realizado.

¡Cuánto has aprendido!

Te animo a que sigas trabajando para que puedas aprender y seguir mejorando.