跳到主要内容

KittenBlock图形化编程


编程指令介绍

普通执行器
image.png设置电机速度
停止电机
设置舵机角度
同一套占空比角度转换规则并不适用于所有型号的舵机,这种情况下,可以使用此积木块更具您的舵机数据表直接设置脉宽。
编码电机(单)
image.png初始化(单)
设置速度
停止运转
读取当前速度
以指定转速,设置旋转圈数
以指定转速,设置旋转时间,受到起始阶段的加速度与结束阶段的减速度影响,此积木并不适合精确设置
以指定转速,设置旋转角度
编码电机(双)
image.png初始化(双)
以指定速度,设置前进距离
指定转向速度,幅度会根据前进速度而变化,前进速度为零则会原地旋转
喇叭
image.png录制音频
播放音频
电池电压
image.png返回扩展盒电池电压
语言对讲(此板块积木暂不可用)
image.png设置对讲频道
发送一段声音
播放接收到的声音

案例程序

电机控制

指定电机会在运行三秒之后停止运行。
image.png

舵机控制

运行程序后舵机角度会在180°和90°之间切换
image.png

电机(单):速度控制

  1. 通过未来板按钮控制电机速度
    image.png
  2. 设置速度并且指定运行时间可以直接这个积木来完成
    image.png

编码电机(单):指定角度与圈数

运行程序之后电机会选装两圈之后停下
image.png

编码电机(双)

编码电机双控的初始化积木,一些描述不大好理解,此处进行解释。

  1. 轮子直径
    lADPJunPWt6f-ejNC9DND8A_4032_3024.jpg
  2. 轮间距,为两个轮子中心之间的距离
    lADPJuK0XZUQdifNC9DND8A_4032_3024.jpg
  3. 左右视角相对于?
    小车行驶姿态放于地面,面朝小车尾部。

运行程序之后,小车会先原地掉头,之后会以指定的速度和距离前进一段时间
image.png

录制与播放

按下按钮a开始录制,按下按钮b播放录制好的文件,如果再次按下按钮a会替换掉之前的同名录音文件。image.png

案例-方糖模块控制

01-语音识别模块

电路连接

image.png

软件准备

打开Kittenblock1.88,对未来板插件版本进行更新(最新插件集成了方糖语音识别模块的控制)
image.png
image.png

硬件选择未来板,连接串口,首次连接软件会提示你更新未来板固件,选择是,进行固件更新
image.png

编程控制

1、编写一个简单的程序
image.png

2、点击运行,模块会进行语音播报“现在温度是,34,摄氏度”。再用唤醒词把模块唤醒,如“智能管家”,再说出“打开台灯”,“关闭台灯”,未来板屏幕会显示不同信息。

使用注意:
语音播报语句后,必须增加适当的延时,具体的延时时长需要自己尝试,一般词语之间2秒,长句子一般是4秒以上。语音播报指令是抢占式的,两条语音播报之间如果没有延时,第一条语音播报会被第二条语音播报覆盖过去。
image.png
3、如果想把程序下载到板子上,脱离电脑运行,点击代码,调出下载弹窗,点击下载。稍等片刻,下载完毕后,实现的效果和在线运行效果一致,但现在能脱离电脑运行了。
image.png

更多的语音控制命令

可以直接通过我们Kittenblock的未来板插件 ASR项目积木块或者下方的指令文档进行查看,点击查看原文
https://www.yuque.com/kittenbot/hardwares/mgx5l380f73wxpgv

进阶——自定义唤醒词

简介:自定义唤醒词,默认只能新增一个,如果再次录入,会提醒你重置学习数据。唤醒词的口令不一定是普通话,可以是各种方言,甚至是拟声词。

1、给语音识别模块通电
2、使用默认唤醒词对模块进行唤醒(“你好小喵”、“小喵小喵”、“智能管家”)
3、准备开始进行自定义唤醒词,口令“开始学习唤醒词”,等待模块语音引导提示,说出你要新增的唤醒词,例如粤语的“靓仔”,录入两遍后,“靓仔”就成为你新的唤醒词了!
4、尝试用“靓仔”唤醒你的模块吧!

进阶——自定义命令词

简介:自定义命令词,默认有十条空指令和五条有IO动作的指令,一共十五条,平时推荐使用前10条空指令
1、给语音识别模块通电
2、使用默认唤醒词对模块进行唤醒(“你好小喵”、“小喵小喵”、“智能管家”)
3、准备开始进行自定义命令词,如,口令“学习第一条命令词”,等待模块语音引导提示,说出你要新增的命令词,例如潮汕话的“胶己人”,录入两遍后,“胶己人”就成为你新的第一条命令词了!同理,你可以录入第二、第三条命令词等
4、进行编程,下载
image.png
5、使用唤醒词唤醒模块后,尝试用“胶己人”命令词测试,如果测试正确,未来板屏幕会显示“识别到第一条命令词”

02-方糖数码管模块

编程积木

积木-功能说明

序号积木图积木功能
1blocksPng-1709881928497.png控制数码管的冒号打开
2blocksPng-1709881933840.png控制数码管的单独位显示

电路连接

image.png

Microbit接口使用线材
2数码管模块.png方糖数码管模块I2C黑色PH2.0-4Pin接口线PH2.0-4pin.png

案例1:按键计分-十进制

blocksPng-1709881854895.png

03-方糖LED模块

电路连接

image.png

编程

使用Kittenblock

选择在线运行或离线上传的方式运行程序查看效果

信息

如果还不清楚如何在线运行或离线上传请参照 快速开始

image.png

效果展示

实现LED灯间隔一秒亮灭并接着呼吸灯效果一轮,循环往复。

危险

由于呼吸灯效果是用过pwm实现,人眼能够明显观察到效果;但视频拍帧率较低,不同步会导致视觉闪烁

LED.mp4

Micropython api

电机

电机运转

sugarbox.motor(电机序号,速度)

  • 电机序号:0(所有电机),1~4(分别对应MA1,M1B,M2A,M2B);
  • 速度:-255~255(转/分钟),正负数表示两个方向;
#运行程序之后,点机会开始运转
import sugarbox
sugarbox.motor(1,120)

电机停止

sugarbox.stop(电机序号)

  • 电机序号:0(所有电机),1~4(分别对应MA1,M1B,M2A,M2B);
#运行此代码之后电机会在三秒后停止
import time

sugarbox.motor(1,120)
time.sleep(3)
sugarbox.stop(1)


舵机

角度设置

sugarbox.servo(舵机序号,角度/脉宽)

  • 电机序号:1~4(对应S1~S4);
  • 角度:0~180度;
  • 脉宽:根据舵机数据表设置;

注:角度与脉宽选填一个即可

#舵机将会在90度与180度之间来回旋转
import sugarbox
import time
#sugarbox.servo(1,us=1500)
while True:
sugarbox.servo(1,degree=180)
time.sleep(1)
sugarbox.servo(1,degree=90)
time.sleep(1)

编码电机(单)

初始化

sugarbox.EMotor(电机序号)

  • 电机序号:1或2
import sugarbox
em1 = sugarbox.EMotor(1)
em2 = sugarbox.EMotor(2)

电机运转

em1.run(速度)

  • 速度:-230~230,正负数值表示两个方向
em1.run(160)

电机停止

em1.stop()

#编码电机em1会在运行三秒钟之后停止
import time

em1.run(160)
time.sleep(3)
em1.stop()

读取电机速度

返回电机速度,float类型

em1.get_speed()

em1.get_speed()

指定旋转圈数

em1.run_for_rotations(圈数, 速度, 是否阻塞)

  • 圈数:指定旋转圈数;
  • 速度:-230~230,设置旋转时的速度;
  • 是否阻塞:bool类型,如果为True,则会等待车轮完成旋转圈数之后再继续往后执行,反之;
#电机以120转/分钟的速度旋转一圈
em1.run_for_rotations(round=1, speed=120, wait=True)

指定运行时间

em1.run_for_seconds(时间, 速度, 是否阻塞)

  • 时间:指定旋转时间(秒);
  • 速度:-230~230,设置旋转时的速度;
  • 是否阻塞:bool类型,如果为True,则会等待车轮完成旋转时间之后再继续往后执行,反之;
#以120转/分钟的速度运行5秒
em1.run_for_seconds(sec=5, speed=120, wait=True)

指定旋转角度

em1.run_for_degrees(时间, 角度, 是否阻塞)

  • 圈数:指定旋转时间(秒);
  • 角度:0°~360°;
  • 是否阻塞:bool类型,如果为True,则会等待车轮完成旋转时角度之后再继续往后执行,反之;
#电机以120转/分钟的速度旋转180度
em1.run_for_degrees(degree=180, speed=120, wait=True)

编码电机(双)

初始化

sugar_robot = sugarbox.EMotorDual(车轮直径, 轮间距, 左轮序号, 右轮序号, 方向)

  • 车轮直径;
  • 轮间距:两个后轮中点之间的距离;
  • 左轮序号:1或2;
  • 右轮序号:1或2;
  • 反向:bool类型参数,默认为False

注:两个轮子的序号参数不能一样

sugar_robot = sugarbox.EMotorDual(diameter=6.5, gauge=14, left=1, right=2, dir=0)

指定前进距离

sugar_robot.run(速度, 距离, 阻塞)

  • 速度:前进速度(转/分钟)
  • 距离:前进距离(厘米)
  • 是否阻塞:bool类型,如果为True,则会等待车轮完成前进距离之后再继续往后执行,反之;
#以120转/分的速度前进10厘米
sugar_robot.run(speed=120, distance=10, wait=True)

指定转向角度

sugar_robot.drive(转向速度, 转向角度, 速度, 阻塞)

  • 转向速度:小车转向速度(度/秒);
  • 转向角度:预计达到的转向角度;
  • 前进速度:小车前进速度(转/分钟),配合转向速度达到让小车通过预期角度的弯道;如果前进速度为0,那么小车会原地旋转
  • 阻塞:是否阻塞:bool类型,如果为True,则会等待车轮完成旋转时角度之后再继续往后执行,反之;
#转向角度为360度/秒,原地旋转180度
sugar_robot.drive(steer=360, degree=180, speed=0, wait=True)

音频

音频录制

sugarbox.audio.savewav(文件名, 时长)

  • 文件名:录制之后生成的文件名称
  • 时长:录制时长
import sugarbox
sugarbox.audio.savewav("filename.wav", sec=1)

播放音频

sugarbox.audio.playwav(文件名)

  • 文件名:选择要播放的文件名
sugarbox.audio.playwav("filename.wav")