Script for Tilt & Grip cyber:bot

Script: radio_tilt_grip_controlled_cyberbot

This is the script to run on the cyber:bot robot. It receives values from the micro:bit tilt controller that are used for its drive servos and Gripper servo.

  • Right-click the cyber_bot_gripper_forward_object.hex link below, choose Save As, and then save the file to your computer.

radio_tilt_grip_controlled_cyberbot.hex

  • Open the saved file with the micro:bit Python Editor editor.
  • If you are working with more than one of these robots in a classroom, update channel=7 to your assigned channel.

The script was created by entering the text below into the python.microbit.org editor.  The cyberbot.py module was also added to the Project Files as shown in Add modules to your micro:bit.  The Script Name was set to cyber_bot_gripper_forward_object before saving it as a .hex file as shown in Save & Edit Scripts.

  • Plug the battery pack’s barrel plug into the cyber:bot board’s barrel jack.
  • Set the cyber:bot board’s PWR switch to 0.
  • Click Send to micro:bit.
  • Disconnect the USB from the cyber:bot robot’s micro:bit module.
  • Set the cyber:bot on the floor, and then set the cyber:bot board's PWR switch to 2.
# radio_tilt_grip_controlled_cyberbot

from cyberbot import *
import radio

radio.on()
radio.config(channel=7, queue=1, length=64)

while True:

    packet = radio.receive()

    if packet:

        try:

            dictionary = eval(packet)
    
            x = dictionary.get('x')
            y = dictionary.get('y')
            needle = dictionary.get('needle')
            
            fb = y / 10
            lr = x / 10

            button = dictionary['button']   # added
             
        except Exception as e:

            display.show(Image.SAD)
            print("Exception e:", e)
            print("Type:", type(e))
            continue

        else:

            if abs(y) > 80:
                display.show(Image.ALL_CLOCKS[needle])
                vL = fb
                vR = -fb

                if(fb < 0): lr = -lr
                vL = vL - lr/2              # Reduced lr term by 2
                vR = vR - lr/2              # Reduced lr term by 2

            else:

                display.show(Image.DIAMOND_SMALL)
                vL = None
                vR = None
            
            if button == 'B':               # added
                bot(16).servo_angle(30)     # added Gripper close & lift
            elif button == 'A':             # added
                bot(16).servo_angle(150)    # added Gripper lower & open

        finally:

            bot(18).servo_speed(vL)
            bot(19).servo_speed(vR)