Chisme del Lince 191: Joystick Cutebot, conduce el robot por radio
Taller de Lynx Enterprises. El Cutebot azul de la semana pasada sigue la cinta negra él solito, y al Lince de la Noche le parece aburridísimo.
—Quiero conducirlo yo —anuncia—. Con un joystick, como los pilotos de verdad. Ya he comprado tres metros de cable.
La Gata Montesa mira el cable, mira al robot y mira al Lince.
—¿Tres metros? Se enrollaría en las ruedas en cuanto girara. ¿Y si el robot sale de la sala?
—Hombre, entonces… compro seis metros.
—Tienes dos micro:bit —suspira la Gata—. Y cada una lleva una radio dentro. Una se queda en tu mano y la otra va en el robot. Solo tienen que ponerse en la misma emisora.
El Lince guarda el cable en el cajón, con cierta dignidad.
Introducción
En este chisme construimos un joystick Cutebot: un mando hecho con una micro:bit y una placa joystick:bit que conduce un robot Cutebot por radio, sin cables.
Primero lo ensayas en un simulador con un joystick, un eslalon de conos y experimentos con la radio. Después pasas al robot real.
Por qué este chisme
En el chisme 188 el Cutebot decidía solo. Aquí decide una persona. Es un paso importante: un robot teledirigido solo funciona si el mando y el robot se entienden.
Además es un problema con ciencia de verdad: convertir una medida del joystick en órdenes para dos ruedas, y mandarla por el aire sin que se pierda.
Cómo funciona
Hacen falta dos programas, uno para cada micro:bit.
- El emisor (el mando) lee el joystick, lo convierte y manda dos valores por radio: x (izquierda–derecha) e y (atrás–delante).
- El receptor (el robot) los oye y mueve cada rueda.
El joystick de la placa mide cada eje con un número de 0 a 1023. En el centro marca unos 512. El Cutebot entiende porcentajes de −100 a 100. El bloque *ajustar intervalo* hace la conversión.
La radio manda los valores con nombre: "x" e "y". Y solo se oyen las micro:bit que están en el mismo grupo de radio. Es como sintonizar la misma emisora. En el chisme 78 ya usamos la radio para mandar telemetría.
La mezcla de ejes
Con dos ruedas independientes (tracción diferencial, como en el chisme 188), cada rueda recibe una combinación de los dos ejes:
| Rueda | Fórmula |
|---|---|
| Izquierda | y + x |
| Derecha | y − x |
Si empujas hacia delante (y = 100, x = 0), las dos ruedas van a 100 y el robot avanza recto. Si empujas a la derecha (x = 100, y = 0), la izquierda va a 100 y la derecha a −100: el robot gira sobre sí mismo.
Qué necesitamos
- Un robot Cutebot (Elecfreaks) con una micro:bit V2 y sus pilas.
- Otra micro:bit V2 con una placa joystick:bit.
- Un ordenador con MakeCode para micro:bit y dos extensiones: joystickbit y cutebot.
Usamos la extensión cutebot, no la «Cutebot-Pro», igual que en el chisme 188.
El programa del emisor (el mando)
Esta micro:bit va en el joystick:bit. Lee los dos ejes, los convierte a porcentajes y los manda por radio.
El mismo programa en JavaScript, listo para pegar:
// EMISOR (micro:bit con joystick:bit)
// PARTE 1 · lo importante: convertir y enviar
let x = 0
let y = 0
radio.setGroup(1)
basic.forever(function () {
// el joystick da 1023 ... 0 y el robot entiende -100 ... 100
x = Math.map(joystickbit.getRockerValue(joystickbit.rockerType.X), 1023, 0, -100, 100)
y = Math.map(joystickbit.getRockerValue(joystickbit.rockerType.Y), 1023, 0, -100, 100)
radio.sendValue("x", x)
radio.sendValue("y", y)
})
Lo que debes cambiar tú: el número del grupo de radio, si hay otros mandos cerca. Tiene que ser el mismo en las dos micro:bit.
El programa del receptor (el Cutebot)
Esta micro:bit va encajada en el robot. Guarda lo que oye en dos variables y mueve las ruedas.
// RECEPTOR (micro:bit del Cutebot)
// PARTE 1 · lo importante: oír x e y y mezclar
let xValue = 0
let yValue = 0
radio.setGroup(1)
radio.onReceivedValue(function (name, value) {
if (name == "x") {
xValue = value
}
if (name == "y") {
yValue = value
}
})
basic.forever(function () {
// rueda izquierda = y + x ; rueda derecha = y - x
cuteBot.motors(yValue + xValue, yValue - xValue)
})
Lo que debes cambiar tú: nada, si el mando y el robot están en el mismo grupo. Si el robot gira al revés, intercambia + y - en la última línea, o los números 1023 y 0 del emisor.
Cómo probarlo
- Descarga cada programa en su micro:bit. Pon el robot en alto, con las ruedas en el aire, para no perseguirlo por la sala.
- Con el mando quieto, las ruedas deben estar paradas. Si se mueven un poco, mira la sección siguiente.
- Empuja hacia delante: las dos ruedas giran hacia delante. Empuja a la derecha: la rueda izquierda avanza y la derecha retrocede.
- Pon el robot en el suelo y recorre un eslalon con vasos de plástico.
Antes de gastar pilas, practica en el simulador del chisme 191. Tiene un modo para verlo todo hecho, cámara lenta y un eslalon con cinco conos.
Qué estamos midiendo realmente
El joystick no mide una orden: mide la posición de un pequeño potenciómetro con un conversor analógico-digital de 10 bits. Por eso salen números de 0 a 1023.
En reposo, el joystick no marca exactamente 512. Marca 509, 514, 516… Tras la conversión, x e y valen −2, 1, 3. Es poca cosa, pero el robot se mueve solito. Un dato no es una medida perfecta.
La solución habitual es una zona muerta: si el valor está entre −10 y 10, se trata como 0.
Hay otro detalle: la suma y + x puede dar 200, y la rueda solo admite ±100. Se pierde parte del giro. Cada rueda tiene un límite físico.
Y la radio tampoco es instantánea ni perfecta. Los paquetes tardan un poco y algunos se pierden. Además no está cifrada: cualquier micro:bit del mismo grupo oye lo que mandas. Aquí solo viajan dos números, sin datos personales.
Para el aula
- Predicción: ¿qué hace el robot con x = 60 e y = 60? Calcula las dos ruedas antes de probarlo.
- Hipótesis: «con la zona muerta en 10 el robot ya no anda solo». Compruébalo en el simulador con la deriva a 20.
- Experimento: dos parejas en grupos distintos y dos en el mismo. ¿Qué ocurre? ¿Cómo se evita?
- Medida: cronometra el eslalon con el robot real y con el simulador. ¿Coinciden? ¿Por qué no?
- Error: cambia
-por+en la rueda derecha. ¿Qué ha pasado? Explícalo con la tabla de x e y. - DUA · representación: bloques, JavaScript, tabla de ruedas y dibujo del robot para la misma idea.
- DUA · acción y expresión: se puede cargar el programa completo o completarlo con la ayuda del simulador. Ratón, pantalla táctil y teclado.
- DUA · implicación: letra grande, cámara lenta y un reto con meta clara.
Retos
- Haz que funcione: completa el eslalon sin tocar ningún cono.
- Modifica algo: cambia el grupo de radio y comprueba que mando y robot ya no se oyen.
- Zona muerta: añade esta función al emisor y úsala para x e y.
- Más suave: añade
basic.pause(50)al final del bucle del emisor. ¿Cambia la respuesta del robot? - Una luz: enciende los faros del Cutebot cuando vayas marcha atrás.
- Guarda los datos: apunta tiempo y toques de diez eslalon. ¿Mejoras con la práctica?
- Modo tortuga: usa el botón A del mando para limitar la velocidad a la mitad.
// RETO 3 · zona muerta (en el emisor)
function zonaMuerta(valor: number) {
if (Math.abs(valor) < 10) {
return 0
}
return valor
}
// y dentro del bucle:
// radio.sendValue("x", zonaMuerta(x))
// radio.sendValue("y", zonaMuerta(y))
Qué hemos aprendido
- Un mando por radio necesita dos programas: emisor y receptor, en el mismo grupo.
- Una conversión de rango pasa de 0–1023 a −100–100.
- La mezcla y + x, y − x convierte dos ejes en dos ruedas.
- Los sensores reales no marcan 0 en reposo: hace falta una zona muerta.
- Cada rueda tiene un límite y la radio, retrasos: un robot teledirigido nunca responde al instante.
Escena final
El Cutebot recorre el eslalon entre vasos de plástico. Al llegar a la meta, el Lince levanta el mando como un trofeo.
—Sin cables —presume.
—Y sin tocar un solo cono —reconoce la Gata—. Aunque antes se te ha ido el robot solo, ¿te acuerdas?
—Eso fue el joystick —dice el Lince—. No marcaba cero.
—Exacto. Y por eso hoy has aprendido más que si hubieras comprado seis metros de cable.
Para seguir investigando
- Siguelíneas Cutebot: el mismo robot, pero guiado por sus sensores (chisme 188).
- La estación de tierra del CanSat: otro uso de la radio de la micro:bit (chisme 78).
- Robot seguidor de línea: un robot que decide solo (chisme 83).
- Radio en MakeCode: documentación oficial de los bloques de radio.
- Joystick en Wikipedia: cómo funciona un mando de palanca.
Etiqueta:AIDARAC, cutebot, ies monterroso, Joystick, joystick:bit, makecode, micro:bit, montesteam, Radio, ROBÓTICA

