Controla un pie chutador con la mano a distancia usando dos micro:bits y radio. El sensor magnético detecta la dirección del giro y el acelerómetro lanza el chut. Sin cables entre el mando y el robot.
Necesitas dos micro:bits: una hace de mando (en la mano) y otra de actuador (en el pie chutador).
Solo la micro:bit actuadora tiene cables físicos. El mando (controlador) usa únicamente los sensores integrados y la radio.
| Componente | Pin servo | micro:bit (Actuador) | Cable |
|---|---|---|---|
| Servo Chut — señal | S | P0 | Naranja |
| Servo Chut — alimentación | V | 3V | Rojo |
| Servo Chut — masa | G | GND | Negro |
| Servo Giro — señal | S | P1 | Naranja |
| Servo Giro — alimentación | V | 3V | Rojo |
| Servo Giro — masa | G | GND | Negro |
input.compassHeading().
Dos programas independientes: uno para el mando, otro para el actuador.
— PROGRAMA 1: MANDO (micro:bit en la mano) —
// === MANDO — micro:bit 1 (en la mano) === radio.setGroup(1) radio.setTransmitPower(7) basic.forever(function () { // Brújula: heading 0-360 → giro del pie let heading = input.compassHeading() // Acelerómetro eje Y: inclinar hacia delante → chut let acc = input.acceleration(Dimension.Y) radio.sendValue("h", heading) radio.sendValue("a", acc) basic.pause(50) })
— PROGRAMA 2: ACTUADOR (micro:bit en el pie chutador) —
// === ACTUADOR — micro:bit 2 (en el robot) === radio.setGroup(1) // Servo giro en P1, servo chut en P0 radio.onReceivedValue(function (name, value) { if (name == "h") { // Mapear heading 0-360 → servo 0-180 let angGiro = Math.map(value, 0, 360, 0, 180) pins.servoWritePin(AnalogPin.P1, angGiro) } if (name == "a") { // Inclinar hacia delante (acc > 500) → chutar if (value > 500) { pins.servoWritePin(AnalogPin.P0, 130) // posición chut basic.pause(300) pins.servoWritePin(AnalogPin.P0, 60) // posición reposo } } })
— PROGRAMA 1: MANDO —
# === MANDO — micro:bit 1 === import radio from microbit import * radio.config(group=1, power=7) radio.on() while True: heading = compass.heading() acc = accelerometer.get_y() radio.send(str(heading) + "," + str(acc)) sleep(50)
— PROGRAMA 2: ACTUADOR —
# === ACTUADOR — micro:bit 2 === import radio from microbit import * radio.config(group=1) radio.on() while True: msg = radio.receive() if msg: partes = msg.split(",") heading = int(partes[0]) acc = int(partes[1]) # Giro: mapear 0-360 a 0-180 grados ang_giro = heading * 180 // 360 pin1.write_analog(ang_giro * 1023 // 180) # Chut: inclinar hacia delante if acc > 500: pin0.write_analog(747) # ~130° chut sleep(300) pin0.write_analog(341) # ~60° reposo