Script for the Tilt & Grip cyber:bot with F360 Servos

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 Feedback 360 drive servos and Gripper servo.

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

radio_tilt_grip_controlled_cyberbot_with_fb360.hex

The .hex file download was created by entering the Python script below into the python.microbit.org/v/2 editor, and also adding the cyberbot.py and Feedback360.py modules  to the Project File as shown in Add Modules to your micro:bit.  The Script Name was set to radio_tilt_grip_controller before saving it as a .hex file as shown in How to Save and Reopen a Script in Python Editor v2.

  • Plug the battery pack’s barrel plug into the cyber:bot board’s barrel jack.
  • Set the cyber:bot board’s PWR switch to 1.
  • Click Connect, then Flash.
  • Disconnect the USB from the cyber:bot robot’s micro:bit module.

Project Script:radio_tilt_grip_controlled_cyberbot_with_fb360

# radio_tilt_grip_controlled_cyberbot_with_fb360

from cyberbot import *
from feedback360 import *
import radio

drive.connect()

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 = 0
                vR = 0
            
            if button == 'B':               # added
                bot(15).servo_angle(30)     # added Gripper close & lift
            elif button == 'A':             # added
                bot(15).servo_angle(150)    # added Gripper lower & open

        finally:

            drive.speed(vL/2, -vR/2)