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

  • Open the saved file with the micro:bit Python Editor editor.
  • If you are in a class with multiple tilt controlled cyber:bot robots, make sure to update channel=7 to your assigned value.

The .hex file download was created by entering the Python script below into the python.microbit.org 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_with_fb360 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.

We'll leave this for a while to set up the tilt controller

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)