Hoy comenzaremos a trabajar con el chasis del mBot2 y algunos de sus sensores: el sensor de distancia por ultrasonidos y el sensor Quad RGB. Por ello, es fundamental asegurarse de añadir las extensiones necesarias para poder utilizarlos correctamente.
Aprenderemos a utilizar los bloques que controlan el movimiento de las ruedas, así como aquellos que nos permiten obtener información del entorno a través de los sensores integrados en el chasis.
Como aplicación práctica, programaremos un comportamiento similar al de un robot aspirador, combinando el uso de los sensores con el movimiento del robot. (Evitando obstáculos y caídas por escaleras mientras se mueve)
Al presionar el botón B (Start), el CyberPi iniciará un programa que mostrará en pantalla los valores en tiempo real de los sensores L2 y R2 del Quad RGB, la distancia medida por el sensor de ultrasonidos y, si se utiliza, el valor de la variable flag. Estos datos se irán actualizando constantemente y almacenando en variables para su análisis.
Simultáneamente, se ejecutará otro bloque de código encargado de evaluar esos valores y reaccionar en consecuencia según lo programado.
Además, podemos incorporar una función asignada a uno de los botones para que el robot detenga su movimiento cuando se desee, para lo cual se recomienda utilizar un flag de control.
Se utilizarán únicamente los sensores laterales del Quad RGB, ya que son los primeros en detectar si hay suelo o no bajo el robot.
A continuación se muestran los bloques que deberás utilizar en esta práctica.
Los bloques de detección permiten obtener valores numéricos correspondientes a las magnitudes que están midiendo los sensores. Si estás trabajando en un entorno con mesas de color verde, se recomienda configurar el sensor RGB para que mida el "valor verde del objeto". Utilizaremos además el bloque naranja para almacenar estos valores en variables que luego podremos analizar.
Los bloques azules, relacionados con el movimiento del robot, ofrecen distintas opciones de control. En este caso, con las tres que se presentan será suficiente para realizar las pruebas. Se recomienda experimentar con ellos previamente para observar cómo reacciona el robot ante cada orden.
Por último, emplearemos una estructura condicional con bloques “si… si no…” anidados (en cascada). Esta técnica permite que el programa sea más eficiente al detectar situaciones de riesgo, ya que si se cumple una condición, no es necesario seguir evaluando las siguientes. Para optimizar el funcionamiento, se recomienda colocar en las primeras condiciones los casos más críticos o peligrosos, dejando los menos relevantes al final. Puedes anidar tantos bloques como necesites para cubrir todos los posibles escenarios.
omo en todas las prácticas, comenzaremos implementando el código base (P0).
Al presionar el botón Start (B), se activarán dos procesos simultáneos:
Lectura de sensores: Se recogerán los valores de los sensores L2, R2 y distancia por ultrasonidos, tal como hicimos en la práctica P1. La única diferencia será que primero se almacenarán los valores en variables, y después se mostrarán en pantalla esas variables.
Comportamiento del robot: El robot comenzará a desplazarse en línea recta a una velocidad constante de 20 rpm, mientras no se cumpla alguna de las siguientes condiciones:
Si L2 detecta una caída (sin suelo): el robot se detiene, retrocede 5 cm y gira 120° a la derecha.
Si R2 detecta una caída: el robot se detiene, retrocede 5 cm y gira 120° a la izquierda.
Si el sensor de ultrasonidos detecta un obstáculo a menos de 10 cm: el robot se detiene y gira 90°.
Como mejora adicional, se puede programar un botón que permita detener el movimiento del robot sin interrumpir la lectura de sensores. Para ello, bastaría con crear una variable de control (flag), modificar su valor desde botones específicos y añadir una condición que permita al código actuar en función del valor del flag.