# El robot Cute Bot

# Cutebot se mueve

##### ¿Qué es Cutebot?

Cutebot es un **pequeño robot programable** diseñado para enseñar programación y robótica a los niños. Cutebot dispone de una ranura en la que se inserta una tarjeta micro:bit, que actúa como controladora del robot.

El fabricante de Cutebot es [Elecfreaks](https://www.elecfreaks.com/about-us), una empresa con sede en China que desarrolla, fabrica y vende productos educativos basados en micro:bit. La empresa es el distribuidor de micro:bit en China y uno de los **socios de la fundación micro:bit**.[![Cutebot.jpg](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/cutebot.jpg)](https://libros.catedu.es/uploads/images/gallery/2023-09/cutebot.jpg)

Cutebot tiene las siguientes **funcionalidades**:

- Dos <span style="color: rgb(224, 62, 45);">ruedas controladas </span>independientemente y conectadas a sendos motores provistos de reductoras de engranajes.
- Alimentación mediante tres pilas alcalinas R06 (AAA), tres pilas recargables de NiMH o un pack de batería de litio.
- Dos <span style="color: rgb(224, 62, 45);">LED frontales </span>RGB de colores seleccionables desde el código del programa.
- Dos <span style="color: rgb(224, 62, 45);">LED RGB bajo la placa</span> para producir efectos de luz mediante una biblioteca de bloques específica.
- Dos sensores colocados bajo la placa para <span style="color: rgb(224, 62, 45);">detectar líneas</span>.
- Dos LED azules sobre la placa para informar sobre el estado de la detección de líneas.
- Un emisor y receptor de <span style="color: rgb(224, 62, 45);">ultrasonidos</span> para la detección de obstáculos.
- Varios puertos para la conexión de <span style="color: rgb(224, 62, 45);">accesorios</span> tales como brazos motorizados, cámaras de inteligencia artificial, pantallas OLED, servomotores, etc.
- Un receptor de <span style="color: rgb(224, 62, 45);">infrarrojos</span> que permite el control del robot mediante un mando a distancia.
- Un pequeño <span style="color: rgb(224, 62, 45);">zumbador</span> para producir sonidos.

<p class="callout info">Cada sensor o actuador es accesible mediante **puertos numerados desde P0 hasta P15**. Por ejemplo, las luces LED situadas bajo la placa se activan desde el puerto P15. Los puertos P13 y P14 corresponden a los sensores del seguidor de líneas.</p>

##### Biblioteca de bloques de Cutebot

Para controlar Cutebot es preciso programar previamente la placa micro:bit. Los bloques de programación para el control de Cutebot no están disponibles inmediatamente en el editor MakeCode, por lo que deben ser cargados antes de comenzar a programar. Para ello hay que pulsar sobre el menú <span style="color: rgb(126, 140, 141);">**+Extensiones**</span> de MakeCode.

[![Extensiones.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/extensiones.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/extensiones.png)

Se desplegará un **mosaico de imágenes de accesorios** entre los que se encuentran varios robots. Tan sólo hay que buscar la imagen correspondiente a Cutebot y pulsar sobre ella.

[![Selección Cutebot.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/seleccion-cutebot.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/seleccion-cutebot.png)

Tras unos instantes, se cargarán **dos nuevos menús de bloques**, uno llamado **<span style="color: rgb(45, 194, 107);">Cutebot</span>** para el control del robot y otro llamado <span style="color: rgb(98, 216, 196);">**Neopixel**</span> para producir efectos de luces con los LED colocados bajo la placa.

El menú **<span style="color: rgb(45, 194, 107);">Cutebot</span>** ofrece **bloques** para el control de la velocidad de las ruedas, para ajustar el color de las luces, para leer los sensores de infrarrojos, de líneas y de obstáculos y para accionar los servomotores que pudieran conectarse.

[![Menú Cutebot.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/menu-cutebot.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/menu-cutebot.png)

##### Cutebot se mueve

Para probar Cutebot, vamos a programar un pequeño bucle que haga **avanzar una corta distancia al robot cuando detecte un ruido fuerte**, como una palmada. Adicionalmente, el robot encenderá las luces frontales y emitirá un breve pitido de confirmación. El código a introducir es el siguiente:

[![Cute Palmada.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/cute-palmada.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/cute-palmada.png)

La secuencia que se ejecuta continuamente dentro del bucle **<span style="color: rgb(53, 152, 219);">para siempre</span>** consta de los siguientes pasos:

- Comprobar si el nivel de sonido supera un cierto umbral, en nuestro ejemplo, 180.
- En caso afirmativo encender las dos luces frontales con luz roja.
- Tocar una nota musical breve y esperar a que termine de sonar.
- Hacer girar las dos ruedas hacia adelante a un 25% de su velocidad máxima.
- Esperar un segundo.
- Detener las ruedas.
- Apagar las luces.

En algunos casos, Cutebot no conseguirá avanzar en línea recta. Esto ocurrirá cuando las ruedas giren a velocidades ligeramente distintas, efecto producido por la variabilidad en las características de los motores. Por ejemplo, el robot se desviará a la derecha cuando la rueda izquierda gire a una velocidad algo mayor que la derecha. Para solucionar este problema conviene reducir ligeramente la velocidad de la rueda izquierda o bien aumentar la velocidad de la rueda derecha.

[![Reducir velocidad.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/reducir-velocidad.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/reducir-velocidad.png)

# Lucípeto y Giróvago

##### Lucípeto...

Muñoz (2023) presenta un código muy simple para que Cutebot pueda detectar las fuentes de luz intensa y se mueva hacia ellas, al igual que un insecto.

El código combina la lectura del sensor de luz de la placa micro:bit con los bloques de control de velocidad de los motores de CuteBot. Cuando el nivel de luz medido es muy bajo, el robot enciende las luces frontales con color rojo y **gira sobre sí mismo buscando una fuente de luz** lo suficientemente intensa. El giro se consigue moviendo las dos ruedas a la misma velocidad, pero en sentidos contrarios.

Cuando el sensor detecta suficiente luz, las dos ruedas pasan a girar a la misma velocidad, por lo que Cutebot avanza en línea recta hacia la fuente de luz. Adicionalmente, se encienden las luces frontales con luz blanca.

[![Lucípeto.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/lucipeto.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/lucipeto.png)

##### ...y Giróvago

Vamos a convertir Cutebot en un **spinner activado por un sonido fuerte,** como una palmada. El spinner girará sobre sí mismo, encenderá una luces e irá reduciendo paulatinamente su velocidad hasta pararse.

El código utilizado es el siguiente:

[![Giro00.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/giro00.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/giro00.png)

Esta vez introduciremos el código que hace girar al robot dentro del evento <span style="color: rgb(185, 106, 217);">**al detectar el sonido alto**</span>, disponible en el menú <span style="color: rgb(185, 106, 217);">**Entrada**</span>.

Necesitamos una variable, a la que llamaremos **<span style="color: rgb(224, 62, 45);">velocidad</span>**, para guardar el valor de la velocidad de las ruedas. Dicha velocidad irá disminuyendo progresivamente, al igual que ocurre en un spinner; la variable debe ser creada previamente pulsando sobre el menú **<span style="color: rgb(224, 62, 45);">Variables</span>**.

[![Giro01.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/giro01.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/giro01.png)

Volviendo al código, cuando micro:bit detecte un sonido fuerte, se activará el evento <span style="color: rgb(185, 106, 217);">**al detectar el sonido alto**</span> y la variable **<span style="color: rgb(224, 62, 45);">velocidad</span>** tomará al azar un valor inicial entre el 30% el 50%.

Seguidamente se iniciará un bucle <span style="color: rgb(45, 194, 107);">**mientras**</span> que mantendrá girando el robot durante 500 mS en cada iteración. La rueda derecha se moverá hacia adelante a **<span style="color: rgb(224, 62, 45);">velocidad</span>** y la rueda izquierda se moverá hacia atrás a **<span style="color: rgb(224, 62, 45);">-velocidad</span>**.

Transcurridos 500 mS, se restará 1 a la variable **<span style="color: rgb(224, 62, 45);">velocidad</span>**<span style="color: rgb(224, 62, 45);">. <span style="color: rgb(0, 0, 0);">Mientras la velocidad sea mayor que 10, el bucle **<span style="color: rgb(45, 194, 107);">mientras</span>** se volverá a ejecutar y Cutebot se mantendrá girando, aunque cada vez a menor velocidad.</span></span>

<span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);">Cuando la velocidad sea igual o menor que 10, la ejecución saldrá del bucle **<span style="color: rgb(45, 194, 107);">mientras</span>** y parará los motores.</span></span>

<span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);">Añadamos ahora al nuestro spinner **efectos de luces** con los LED colocados bajo la placa y con los bloques de la biblioteca <span style="color: rgb(53, 152, 219);">**Neopixel**</span>. Esta biblioteca está pensada para producir efectos de luz con tiras de LED. En primer lugar lugar hay que inicializar los dos LED que forman nuestra tira:</span></span>

<span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);">[![Giro02.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/giro02.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/giro02.png)</span></span>

<span style="color: rgb(224, 62, 45);">**Fijar strip**</span> es un bloque que se encuentra en <span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);"><span style="color: rgb(53, 152, 219);">**Neopixel**</span>. **<span style="color: rgb(224, 62, 45);">Strip</span>** es la variable con la que nos refirimos a las luces colocadas bajo la placa de Cutebot, <span style="color: rgb(53, 152, 219);">**P15**</span> es el puerto correspondiente a las luces y **<span style="color: rgb(53, 152, 219);">2</span>** es el número total de luces a controlar.</span></span>

<span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);">Los LED **<span style="color: rgb(224, 62, 45);">R</span><span style="color: rgb(22, 145, 121);">G</span><span style="color: rgb(35, 111, 161);">B</span>** generan cada color gracias a la mezcla de tres luces, cada una de ellas correspondiente a uno de los tres colores primarios: <span style="color: rgb(224, 62, 45);">rojo</span>, <span style="color: rgb(22, 145, 121);">verde</span> y <span style="color: rgb(35, 111, 161);">azul</span>.</span></span>

<span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);">En cada <span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);">ejecución</span></span> del bucle </span></span><span style="color: rgb(45, 194, 107);">**mientras**</span><span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);"> se encenderán los dos LED de la variable <span style="color: rgb(224, 62, 45);">**strip**</span> con un color que será la mezcla de los tres colores <span style="color: rgb(224, 62, 45);">rojo</span>, <span style="color: rgb(22, 145, 121);">verde</span> y <span style="color: rgb(35, 111, 161);">azul</span>, generados cada uno de ellos con intensidades aleatorias, desde 0 (valor mínimo) hasta 255 (valor máximo).</span></span>

[![Giro04.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/giro04.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/giro04.png)

<span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);">Al salir del bucle <span style="color: rgb(45, 194, 107);">**mientras**</span> es preciso apagar los LED mediante el bloque **<span style="color: rgb(224, 62, 45);">strip show color</span> <span style="color: rgb(53, 152, 219);">black</span>**.</span></span>

<span style="color: rgb(224, 62, 45);"><span style="color: rgb(0, 0, 0);"><iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/zHO_BqHnzNU" width="560"></iframe>

</span></span>

# Evitando obstáculos

##### El sensor de distancia  


El kit básico de Cutebot incluye un **sensor de distancia**. Se trata de un accesorio conectable al frontal de Cutebot mediante cuatro pines marcados en la placa como "SONAR". El funcionamiento de la placa se basa en la **emisión de ultrasonidos** y en la recepción de los **ecos** generados cuando las ondas rebotan contra objetos cercanos.

[![SONAR00.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sonar00.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sonar00.png)El sensor de distancias debe conectarse en el puerto marcado como "**SONAR**" y no en el marcado como "IIC". Es muy posible confundirse, ya que ambos conectores se encuentran juntos.[![SONAR01.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sonar01.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sonar01.png)El **bloque** que proporciona la medida de la distancia detectada por el sensor es **<span style="color: rgb(45, 194, 107);">Sensor de distancia cm HC-SR04</span>**, y se encuentra en el menú de bloques de **<span style="color: rgb(45, 194, 107);">Cutebot</span>**. La medida proporcionada por el sensor puede ajustarse en **<span style="color: rgb(45, 194, 107);">cm</span>** y en <span style="color: rgb(45, 194, 107);">**pulgadas**</span>.

![Sonar00.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/0bdsonar00.png)

El programa mostrado sobre estas líneas es el código básico que **detiene el movimiento de Cutebot al encontrar un obstáculo**. Cuando el sensor de distancia detecta un obstáculo a menos de 10 cm, el coche se detiene por completo y enciende las luces rojas. En caso de no encontrar ningún obstáculo, el robot simplemente se mueve hacia adelante con las luces apagadas.

<p class="callout info">Recordatorio: si Cutebot no anvanza en línea recta, habrá que aumentar ligeramente la velocidad de una de las ruedas. Si el desvío se produce hacia la izquierda, habrá que aumentar la velocidad de la rueda izquierda. Si el desvío se produce hacia la derecha, habrá que aumentar la velocidad de la rueda derecha.</p>

##### Detección y evitación de obstáculos

Es posible refinar el código para que Cutebot no se detenga ante un obstáculo, sino que lo esquive. Para ello haremos que cuando el robot se encuentre con un obstáculo, haga un **giro al azar a la izquierda o a la derecha durante 250 ms** y continúe con la ejecución del programa.

[![Sonar01.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/CwYsonar01.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/CwYsonar01.png)

Un **ligero retroceso** antes de empezar a girar puede mejorar el comportamiento del robot.

[![Sonar02.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sonar02.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sonar02.png)

Jugando con la distancia de detección y con los tiempos de giro y retroceso también puede mejorarse el comportamiento del robot ante los obstáculos.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/arC56KgvhIQ" width="560"></iframe>

# Un sencillo seguidor de líneas

##### Código básico

Los dos **sensores ópticos** colocados bajo la placa de Cutebot, similares a los de un ratón de ordenador, pueden detectar líneas negras. El kit de Cutebot incluye una plantilla de papel con una línea negra cerrada a modo de **circuito**. Programaremos micro:bit para que Cutebot sea capaz de **reconocer el circuito y recorrerlo de forma autónoma**.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/515MTWZJaCU" width="560"></iframe>

Tras cargar la extensión de Cutebot, comenzaremos por introducir un código que muestre en la matriz de LED de micro:bit el logotipo del **seguidor de líneas**:

[![Sigue00.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sigue00.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sigue00.png)

El bucle <span style="color: rgb(53, 152, 219);">**para siempre**</span> se dedicará a leer continuamente los dos sensores de líneas y a actuar sobre la velocidad de las ruedas. Cuando los dos sensores de líneas detecten el color negro (**<span style="color: rgb(45, 194, 107);">El estado del seguimiento es ●●</span>**), significará que Cutebot está justo sobre la línea del circuito y que debe continuar avanzando hacia adelante. Para ello hay que hacer girar las dos ruedas a la misma velocidad.

[![Sigue01.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sigue01.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sigue01.png)

Si el **sensor derecho detecta color blanco** (**<span style="color: rgb(45, 194, 107);">El estado del seguimiento es ●</span><span style="color: rgb(45, 194, 107);">○</span>**), el robot se ha salido de la línea por la derecha y debe girar hacia la izquierda. Para ello habrá que parar la rueda izquierda y hacer girar la rueda derecha hacia adelante. El código tendrá el siguiente aspecto:

[![Sigue02.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sigue02.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sigue02.png)

Si, por el contrario, el **sensor izquierdo detecta color blanco** (**<span style="color: rgb(45, 194, 107);">El estado del seguimiento es ○●</span>**), el robot se habrá desviado hacia la izquierda y habrá que girarlo hacia la derecha para recolocarlo sobre la línea:

[![Sigue03.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sigue03.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sigue03.png)

¿Qué ocurre si el robot ha perdido completamente la línea y los dos sensores detectan color blanco? En este caso, (**<span style="color: rgb(45, 194, 107);">El estado del seguimiento es ○○</span>**), conviene parar el robot. El código completo se muestra a continuación:

##### [![Sigue04.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sigue04.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sigue04.png)

<p class="callout info">Cuando las pilas estén muy frescas, Cutebot se desplazará más rápido y puede que pierda la línea continuamente. Este problema se soluciona reduciendo la velocidad de las ruedas, por ejemplo al 20%.</p>

##### Mutatis mutandis

El código desarrollado es efectivo, pero admite muchas mejoras. Por ejemplo, cuando el robot intente dar una curva muy cerrada, es posible que pierda la línea y se detenga completamente. Realicemos una pequeña modificación en el código para que Cutebot pueda volver a encontrar la línea perdida:[![Sigue05.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sigue05.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sigue05.png)

De acuerdo con el último bloque condicional, cuando se pierda la línea (**<span style="color: rgb(45, 194, 107);">El estado del seguimiento es ○○</span>**) el robot comenzará a rotar sobre sí mismo y no se detendrá hasta que la vuelva a encontrar.

Si no frenamos completamente las ruedas al realizar las correcciones de la trayectoria podremos conseguir que el movimiento de Cutebot sea más suave. El código requiere unos cambios mínimos:

[![Sigue07.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sigue07.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sigue07.png)

##### <iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/oX2qu-l3F6Q" width="560"></iframe>



##### Añadimos funciones automáticas

El seguidor de líneas puede incorporar luces automáticas que se enciendan, por ejemplo, al entrar en un túnel. Incorporar esta función es tan simple como añadir al código un **evento de tiempo** que lea el sensor de luz de micro:bit y, dependiendo del valor medido, encienda o apague los LED de Cutebot.[![Sigue06.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/sigue06.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/sigue06.png)

# Rover marciano

##### Control remoto

Programemos un **robot de exploración a control remoto**. Esta vez serán necesarias dos placas micro:bit, una receptora montada sobre Cutebot y una emisora a modo de mando de control remoto.

Además, Cutebot enviará a la placa usada como control la información que capten sus sensores durante las exploraciones.

En primer lugar, es preciso que ambas placas ajusten la radio **Bluetooth** en el mismo grupo y banda de frecuencia. Los bloques necesarios se encuentran en el menú <span style="color: rgb(186, 55, 42);">**Radio**</span>. El siguiente código es por lo tanto común a la placa emisora y a la receptora.

[![Rover00.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover00.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover00.png)

Vamos ahora con el emisor. Cuando **pulsemos los botones A+B**, el rover debe **avanzar**. Para ello le enviaremos por radio una cadena de texto con el código "Av".

[![Rover01.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover01.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover01.png)

Al pulsar el **botón A** el mando enviará un código "Iz", que indicará un **giro a la izquierda**. De la misma forma, Al pulsar el **botón B** el mando mandará un código "De", indicativo de un **giro a la derecha**.

[![Rover02.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover02.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover02.png)

El código básico del emisor está ya resuelto. En cuanto al **receptor**, éste sólo debe ocuparse de mover el rover cuando reciba los códigos. Un rover marciano debe moverse muy despacio, así que cada vez que se reciba un código, las ruedas se mantendrán en movimiento durante unos pocos milisegundos.

[![Rover09.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover09.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover09.png)

La estructura <span style="color: rgb(53, 152, 219);">**si...si no, si...**</span> se obtiene del menú **<span style="color: rgb(53, 152, 219);">Lógica</span>**; habrá que pulsar sobre los símbolos <span style="color: rgb(53, 152, 219);">**+**</span> y **<span style="color: rgb(53, 152, 219);">-</span>** para añadir o quitar condiciones a la estructura.

El evento <span style="color: rgb(186, 55, 42);">**al recibir radio**</span> se encuentra en el menú **<span style="color: rgb(186, 55, 42);">Radio</span>**. <span style="color: rgb(186, 55, 42);">**receivedString**</span> hace referencia al código recibido, y puede arrastarse para encajarse en los comparadores <span style="color: rgb(230, 126, 35);">**incluye**</span>, que se encuentran en el menú **^Avanzado <span style="color: rgb(230, 126, 35);">Texto</span>**<span style="color: rgb(0, 0, 0);">.</span>

<span style="color: rgb(0, 0, 0);">El código es muy claro: cuando se recibe una cadena de texto se comprueba si contiene el código "Av" y, en caso afirmativo, se hace avanzar a Cutebot durante 500 ms. Si por el contrario el código es "Iz", el robot girará a la izquierda durante 250 ms. Por último, cuando el código sea "De", el robot girará a la derecha durante otros 250 ms. FInalmente, se pararán los motores.  
</span>

##### <span style="color: rgb(0, 0, 0);">Transmisión de datos ambientales</span>

<span style="color: rgb(0, 0, 0);">Hagamos ahora que el rover transmita información sobre los obstáculos que vaya encontrando. En primer lugar haremos que su placa micro:bit muestre el logotipo de la misión de exploración planetaria (La Tierra y Marte):</span>

<span style="color: rgb(0, 0, 0);">[![Rover04.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover04.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover04.png)</span>

Cada vez que el robot reciba un código para moverse, se comprobará la distancia medida por el sensor y, si ésta resulta ser menor o igual a 10 cm, se enviará el dato numérico al mando a distancia. Como puede verse a continuación, esta función se consigue añadiendo sólo dos bloques más.

[![Rover08.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover08.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover08.png)

Por su parte, la placa que se usa como control remoto debe mostrar en su pantalla el valor de la distancia que haya medido y retransmitido el rover. En primer lugar borraremos la pantalla LED cada vez que enviemos un código al rover.

[![Rover06.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover06.png)](https://libros.catedu.es/uploads/images/gallery/2023-09/rover06.png)

Mediante el bloque <span style="color: rgb(132, 63, 161);">**plot bar graph**</span> del menú <span style="color: rgb(132, 63, 161);">**LED**</span>, mostraremos en la pantalla del mando una barra luminosa cada vez que se reciba un número desde el rover.

![Rover07.png](https://libros.catedu.es/uploads/images/gallery/2023-09/scaled-1680-/rover07.png)

Mediante la función de resta entre 10 y el distancia recibida desde el rover conseguimos que la barra muestre su altura máxima cuando la distancia a un obstáculo sea mínima. De igual forma, la barra tendrá un altura nula cuando no haya obstáculos cercanos.

<p class="callout info">Podemos conseguir un movimiento más preciso del rover reduciendo los tiempos de avance y giro, por ejemplo, a 250 ms y 125 ms. También podemos añadir la función de marcha atrás al pulsar el logo táctil.</p>