跳到主要内容

搭配掌控板

注意事项


  1. 由于扩展板驱动电机和舵机等执行器的引脚电源来自于板载的锂电池,所以在驱动这些设备时请确保电池电量充足,并记得打开电池开关
  2. 掌控板的引脚是特殊的,所以接插Robotbit时需要将屏幕朝向开关方向

image.png

编程API


  • 库的导入

import robotbit

API代码演示图形化积木API备注
class RobotBit()robot = robotbit.RobotBit()image.png掌控板搭配Robotbit扩展板使用时有额外的robotbit.py库,欲使用该库的驱动功能,务必先进行导入及实例化
motor(index, speed)robot.motor(1, 100)image.png
- index:电机序号
- 1~4:M1A、M2A、M1B、M2B
- speed:电机速度范围-255~255
- 其中负数为反转
- 0为停止
motorStopAll()robot.motorStopAll()image.png一次停止1~4号接口上的所有电机
servo(index, degree)robot.servo(1, 90)image.png
- index:舵机引脚序号
- 1~8:S1~S8(这部分引脚不是普通的IO)
- degree:蓝色9g舵机角度范围0~180°
geekServo9g(index, degree)robot.geekServo9g(1, 90)image.png
- degree:geekServo是舵机的系列名称,这个系列中的9g舵机角度范围-45~225°
geekServo2kg(index, degree)robot.geekServo2kg(1, 90)image.png
- degree:geekServo是舵机的系列名称,这个系列中的9g舵机角度范围0~360°
- 0~360°不是360°可持续旋转,而是360°的区间运转范围
stepperDual(degree1, degree2)robot.stepperDual(360, -360)image.png
- 步进电机和电机接口复用所以只能选其一,1个步进电机会占用5个引脚
- 步进电机是一种扭矩很高,速度很慢且精度很高的执行单元。
- 这条指令是阻塞的(既运行后直到所设定的角度到达前,程序都会等待)
stepperDegree(index, degree)robot.stepperDegree(1, 360)image.png

编程示例


示例1 — 电机驱动

连接电机到M1A(红黑线与+ / -接口的对应关系尽量为红+ / 黑-),这个程序将循环让电机正转、停止,再反转、停止,周而复始。期间你可以调换一下红黑线的方向观察电机转轴的方向变化

  • 连线

资源 7.png

  • 图形化编程:

image.png

  • 代码编程
from mpython import *
import robotbit

robot = robotbit.RobotBit()

while True:
robot.motor(1,255)
sleep(1*1000)
robot.motor(1,0)
sleep(1*1000)
robot.motor(1,-255)
sleep(1*1000)
robot.motor(1,0)

示例2 — 步进电机驱动(28-byj)

代码之运行一次,当步进电机转动开始前以及转动结束后分别响一次蜂鸣器,能够很好得理解步进电机的阻塞效果

  • 连线

资源 9.png

  • 图形化编程

image.png

  • 代码编程
from mpython import *
import robotbit
import music

robot = robotbit.RobotBit()

music.pitch(60, -1)
robot.stepperDual(360, -360)
music.pitch(60, -1)

示例3 — 舵机的驱动

舵机的驱动引脚为电源开关左侧,丝印写有S1~S8的一排引脚。注意舵机的线序不要反,舵机线的黄色、红色、棕色线分别对应引脚的黄色、红色、黑色

  • 以下以geekServo2kg舵机为例,编写一个以掌控板按键A和按键B分别控制舵机在2个角度上来回转动的程序
  • 可以尝试高频率切换按下A和B,观察舵机转动的效果,能够理解舵机的转动并不是阻塞的

image.png资源 8.pngimage.png

  • 图形化编程

image.png

  • 代码编程
from mpython import *
import robotbit

robot = robotbit.RobotBit()

while True:
if button_a.value() == 0:
robot.geekServo2kg(1, 0)
sleep(0.2*1000)
elif button_b.value() == 0:
robot.geekServo2kg(1, 360)
sleep(0.2*1000)