Python 教程#

Mu 编译器开发环境设置#

1. 安装 IDE#

Mu

Mu的官方网站:https://codewith.mu/

Mu是一个面向初学者程序员的Python代码编辑器,它基于教师和学生。获得Mu最简单和最容易的方法是通过Windows或Mac OSX的官方安装程序(Mu不再支持32位Windows)。目前推荐的版本是Mu 1.1.0-beta 2。建议你们通过每个支持的操作系统的链接更新到这个版本.

步骤1-确定版本并且下载Mu安装程序:

先了解您的计算机是Windows系统还是Mac OSX系统;再打开资源管理器,鼠标右键点击”此电脑”,并选择属性,了解您的Windows系统是32位还是64位。

Img

查看系统类别,类型将显示在操作系统下,64位系统或者32位系统:

Img

打开链接:https://codewith.mu/en/download 下载对应的Mu软件版本。

Img

步骤2-运行安装程序:

找到你刚刚下载的安装程序(它可能在你的下载文件夹中),双击打开安装程序文件。

Img

这里我们概述了在Windows 系统上安装Mu所需的步骤。

Mac OSX系统安装Mu方法对应链接:https://codewith.mu/en/howto/1.1/install_macos

步骤3-许可协议

检查许可证,选择复选框并单击“Install”。

Img

步骤4-安装

当Mu在你的电脑上安装时,需要几秒钟。

Img

第5步-完成

安装已成功完成,请单击“Finish”关闭安装程序。

Img

第6步-启动Mu

你可以点击开始菜单中的图标启动Mu,也可以在搜索框中输入Mu(下面两种方法都有显示)。在第一次开始时,这可能需要一些时间。

Img

Mu的主界面如下图所示:

Img

2. 开发板驱动安装#

Micro:bit是可以免安装USB驱动的。如果你的电脑已经安装过micro:bit 驱动,就不需要再次安装micro:bit驱动。假如你是首次使用micro:bit主板,则你的电脑需要安装micro:bit驱动。如果你的电脑识别不了Micro:bit主板,则需要安装一下Micro:bit驱动,我们提供有Micro:bit 驱动文件Img,你可以进入相关文件夹中根据安装说明书进行安装。

Img

下面给Micro:bit主板安装驱动。

首先将Micro:bit主板用Micro USB数据线连接到电脑上,然后鼠标左键双击驱动文件,出现如下页面再点击“下一页”。

Img

先点击“安装”,几秒种后,安装完成,再点击“完成”。这样,驱动安装完成。

Img

Img

安装完成后,点击“我的电脑” —>“属性”—> “设备管理器”, 我们可以看到下图。

Img

3. 编译器设置和工具栏介绍#

第一次使用时需要设置“模式”为BBC micro:bit。

打开Mu软件,点击菜单栏中的“模式”按钮并在弹出对话框中选择“BBC micro:bit”之后,单击“OK”。

Img

Mu的操作页面请参考官方的介绍:https://codewith.mu/en/tutorials/1.1/start

更多有关使用Mu的教程,请参阅:https://codewith.mu/en/tutorials/

4. 库文件安装#

特别注意:导入库文件前需要给Micro:bit主板上传一个.py的代码(空代码也是可以的),这里我们是以一个空代码为例。

导入“PCA9685.py”和“servo.py”库文件

Mu保存文件的默认目录是“Mu_code”,它位于用户目录的根目录中。参考文献链接:https://codewith.mu/en/tutorials/1.0/files

例如,在Windows系统中,假设您的系统安装在电脑C驱动器上,则用户名为“Administrator”,那么“mu_code”目录的路径是“C:\Administrator\mu_ code”。在Linux系统上,“mu_code”目录的路径是“~/home/mu_code” .

进入“mu_code”文件夹。

Img

我们提供的库文件“PCA9685.py”和“servo.py”的路径如下:

Img

复制粘贴我们提供的库文件“PCA9685.py”和“servo.py”到“mu_code”文件夹中。复制成功后,如下图:

Img

先打开Mu软件并连接Micro:bit主板到电脑,接着点击“刷入”按钮烧入一个空的程序代码到Micro:bit主板中。

Img

然后点击“文件”按钮,就可以在“电脑上的文件”栏的下面方框中看到两个对应的库文件,再分别拖着库文件“PCA9685.py”和“servo.py”到Micro:bit主板中。

Img

Img

Img

Img

库文件导入成功后,你点击“加载”按钮导入(路径:)…\教程代码+Python库文件\教程代码\Python 代码\Microbit 机械手臂课程 中的程序代码“第14课 舵机转动.py”,然后单击“检查”按钮来检查代码是否有错误。如果一行出现光标或下划线,则表明该行的程序有错误。

Img

Img

但是,单击“检查”按钮来检查代码是否有错误时,即使代码没有错误时也会出现如下提示语,这提示语只是一些警告语,而不是代码错误提示语。也就是说整个代码是没有错误的。

Img

Img

Img

确定程序代码无误之后,你还需要确定Micro USB线已经将Micro:bit主板连接到电脑,然后单击“刷入”按钮将代码下载到Micro:bit主板。

Img

如果点击“刷入”按钮后程序代码错误或实验现象错误,请确认你是否已经导入好我们提供给Micro:bit主板的库文件“PCA9685.py”和“servo.py”。

特别注意: 如果您在micro:bit板上下载了其他程序,但库文件“PCA9685.py”和“servo.py”程序除外。在使用Micropython编程之前,您需要将库文件导入到Micro:bit主板。如果您始终使用相同的 Micro:bit主板进行Micropython编程,则无需多次将库文件发送到Micro:bit主板;反之,就需要再次将库文件发送到Micro:bit主板。

5. 添加代码到编译器#

这里我们以基础教程的“第1课 心跳.py”为例,打开(路径:)…\教程代码+Python库文件\教程代码\Python 代码\Microbit 基础课程 中的程序代码文件“第1课 心跳.py”。

Img

Img

除了上述Mu软件加载(导入)代码方法之外,还有一种更简单的加载代码方法:先打开 Mu 编辑器 软件,然后选中“第1课 心跳.py”文件,并继续按下鼠标左键,将选中的文件拖动到Mu软件中。如下图所示:

Img

成功加载如下所示。你也可以自己在编辑窗口输入代码。(注意!所有英文及符号均须以英文填写,最后一行必须有空格。

Img

6.下载代码到Micro:bit主板#

通过Micro USB线连接Micro:bit主板和电脑,点击“刷入”按钮将代码下载到Micro:bit主板。

Img

Img

Img

如果代码有错误,也可以将代码成功下载到Micro:bit主板,但无法正常工作。如果sleep写为sleeps,点击“刷入”按钮,代码也会被下载到Micro:bit主板。

Img

但是,下载完成后,Micro:bit主板正面的led点阵提示一些错误信息,以及错误的行号。点击“REPL”按钮之后,再按下Micro:bit主板的重置按钮(背面的复位按钮,不是A、B按键),错误信息将显示在REPL框中,如下所示:

Img

再次单击“REPL”按钮,将关闭REPL模式,然后你就可以刷新新代码了。为了确保代码正确,完成代码后,单击“检查”按钮检查代码是否有错误。如下图所示,点击“检查”按钮,然后Mu将指示代码的错误。

Img

根据错误提示,正确修改代码。然后再点击“检查”按钮,Mu在下面的栏上显示没有问题。

Img

有关使用Mu的更多教程,请参阅:https://codewith.mu/en/tutorials/

Microbit 基础课程#

第01课 心跳#

Micro:bit 基础课程是使用Micro:bit主板自带的传感器模块和LED点阵。

1.实验说明:

首先先来练习一个不需要其他辅助元件,只需要一块Micro:bit主板,一根Micro USB数据线与一台计算机的简单实验,让Micro:bit主板上的点阵显示“心跳”,这是一个让Micro:bit主板和计算机通信的实验,这也是一个入门实验,希望可以带领大家进入Micro:bit的魔幻世界。

2.准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3.课程代码:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

while True:
    display.show(Image.HEART)
    sleep(500)
    display.show(Image.HEART_SMALL)
    sleep(500)

4. 代码解释:

代码块

解释

from microbit import *

导入micro:bit的库文件

while True:

这是一个永久循环,它使micro:bit永远执行这个循环中的代码。

display.show(Image.HEART)

micro:bit上的LED点阵显示“Img”图案

sleep(500)

延时500毫秒

display.show(Image.HEART_SMALL)

micro:bit上的LED点阵显示“Img”图案

5. 实验结果:

按照之前的方式将代码下载到micro:bit主板,micro USB数据线不要拔下来,利用micro USB数据线上电,micro:bit主板上的LED点阵屏切换显示“Img”图案和“Img”图案,循环进行。

Img

Img

如果存在下载问题,请断开micro USB线和Micro:bit,然后重新连接它们并重新打开编译器,尝试再次下载。

6. 扩展小知识:

可以看到“Image.HEART”等于Img;“Image.HEART_SMALL”等于Img

这其实是microbit里面写好的了,直接使用就即可。

以下是内置图像的列表,如果感兴趣,可以选择以下某个内置图像替换上图代码中的函数show()里面的“Image.HEART”就行。

• Image.HEART • Image.HEART_SMALL • Image.HAPPY • Image.SMILE • Image.SAD • Image.CONFUSED • Image.ANGRY • Image.ASLEEP • Image.SURPRISED • Image.SILLY • Image.FABULOUS • Image.MEH • Image.YES • Image.NO • Image.CLOCK12, Image.CLOCK11, Image.CLOCK10, Image.CLOCK9, Image.CLOCK8, Image.CLOCK7, Image.CLOCK6, Image.CLOCK5, Image.CLOCK4, Image.CLOCK3, Image.CLOCK2,Image.CLOCK1 • Image.ARROW_N, Image.ARROW_NE, Image.ARROW_E, Image.ARROW_SE, Image.ARROW_S, Image.ARROW_SW, Image.ARROW_W, Image.ARROW_NW • Image.TRIANGLE • Image.TRIANGLE_LEFT • Image.CHESSBOARD • Image.DIAMOND • Image.DIAMOND_SMALL • Image.SQUARE • Image.SQUARE_SMALL • Image.RABBIT • Image.COW • Image.MUSIC_CROTCHET • Image.MUSIC_QUAVER • Image.MUSIC_QUAVERS • Image.PITCHFORK • Image.PACMAN • Image.TARGET • Image.TSHIRT • Image.ROLLERSKATE • Image.DUCK • Image.HOUSE • Image.TORTOISE • Image.BUTTERFLY • Image.STICKFIGURE • Image.GHOST • Image.SWORD • Image.GIRAFFE • Image.SKULL • Image.UMBRELLA • Image.SNAKE,Image.ALL_CLOCKS,Image.ALL_ARROWS

更多的控制,请参考Micro:bit官方的python库:

http://microbit-micropython.readthedocs.io/en/latest/index.html

第02课 LED点阵中单个LED显示#

Img

1. 实验说明:

Micro:bit主板的LED点阵共由25个发光二极管组成,5个一组,分别对应X和Y方向,形成一个5×5的矩阵,且每个发光二极管是放置在行线(X)和列线(Y)的交叉点上,我们可以通过设置坐标点来实现对25个LED中某一个LED的控制。例如,想要LED点阵中第1行第1个LED点亮,可以设置坐标点为(0,0);第1行第3个LED点亮,可以设置坐标点为(2,0);第1列第5个LED点亮,可以设置坐标点为(0,4);第3列第2个LED点亮,可以设置坐标点为(2,1),依此类推。

Img

2. 准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3. 课程代码:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

val1 = Image("09000:""00000:""00000:""00000:""00000:")
val2 = Image("00000:""00000:""00000:""00000:""00090:")
val3 = Image("00000:""00000:""00000:""00000:""00000:")

while True:
    display.show(val1)
    sleep(500)
    display.show(val3)
    sleep(500)
    display.show(val2)
    sleep(500)
    display.show(val3)
    sleep(500)

4. 代码解释:

代码块

解释

from microbit import *

导入micro:bit的库文件

val1 = Image(“09000:”“00000:”“00000:”“00000:”“00000:”)

将Image()赋给于变量val1(micro:bit上的LED点阵中每个LED像素可以设置为十个值的其中一个。如果像素设置为 0 (zero) ,表示处于关闭状态,从字面上理解,即为0亮度。而设置为 9 ,表示亮度最强。 1 到 8 代表关闭状态 (0) 和 最强亮度(9)之间的亮度级别.)

while True:

这是一个永久循环,它使micro:bit永远执行这个循环中的代码。

5. 实验结果:

按照之前的方式将代码下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电,我们就可以看到切换坐标点(1,0)的LED的亮灭状态,持续0.5s,再次切换坐标点(1,0)的LED的亮灭状态,持续0.5s;点亮坐标点(3,4)的LED,持续0.5s,熄灭坐标点(3,4)的LED,持续0.5s。循环进行。

Img

Img

第03课 5×5 LED点阵图案显示#

Img

1. 实验说明:

点阵在我们生活中很常见,很多都有用到它,比如LED广告显示屏,电梯显示楼层,公交车报站等等。

Micro:bit主板的LED点阵共由25个发光二极管组成,上一课我们已经讲过通过设置坐标点来实现对LED点阵的25个LED中的某个LED的控制,这样可以通过设置多个坐标点控制多个LED的亮灭使得LED点阵能够显示图案、数字、字符串。我们也可以在特定代码中通过点击 LED点阵的灰白色小正方形点亮 LED点阵对应的LED来实现LED点阵显示图案、数字、字符串。除了上述方法还可以使用自定义图案使LED点阵显示图案。

2. 准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3. 课程代码1:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

val = Image("00900:""00900:""90909:""09990:""00900")

display.show(val)

4.实验结果1:

按照之前的方式将代码1下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电,我们就可以看到Micro:bit主板的5×5 LED点阵显示“向下”图案Img

5. 课程代码2:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *
val = Image("00900:""00900:""90909:""09990:""00900")
display.show('1')
sleep(500)
display.show('2')
sleep(500)
display.show('3')
sleep(500)
display.show('4')
sleep(500)
display.show('5')
sleep(500)
display.show(val)
sleep(500)
display.scroll("hello!")
sleep(200)
display.show(Image.HEART)
sleep(500)
display.show(Image.ARROW_NE)
sleep(500)
display.show(Image.ARROW_SE)
sleep(500)
display.show(Image.ARROW_SW)
sleep(500)
display.show(Image.ARROW_NW)
sleep(500)
display.clear()

6.实验结果2:

用同样的方法将代码2下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电,我们就可以看到Micro:bit主板的5×5 LED点阵开始显示数字1、2、3、4、5,然后循环显示“向下”图案Img、字符串“Hello!”、“心”图案Img、“东北”方向图案Img、“东南”方向图案Img、“西南”方向图案Img和“西北”方向图案Img

7. 代码解释:

代码块

解释

from microbit import *

导入micro:bit的库文件

val = Image(“09000:”“00000:”“00000:”“00000:”“00000:”)

将Image()赋给于变量val

display.show(val)

micro:bit上的LED点阵屏显示向下“→”图案

display.show(‘1’)

micro:bit上的LED点阵屏显示数字“1”

sleep(500)

延时500毫秒

display.scroll(“hello!”)

micro:bit上的LED点阵屏滚动显示字符串“hello!”

display.show(Image.HEART)

micro:bit上的LED点阵屏显示“❤”图案

display.show(Image.ARROW_NE)

micro:bit上的LED点阵屏显示指向“东北”方向图案

display.clear()

micro:bit上的LED点阵屏清屏

第04课 可编程按键#

1.实验说明:

Img

按键可以控制电路的通断,把按键接入电路中,不按下按键的时候电路是断开的,一按下按键电路就通啦,但是松开之后就又断了。可是为什么按下才通电呢?这得从按键的内部构造说起。没按下之前,电流从按键的一端过不去另一端,按键的两端就像两座山,中间隔着一条河,我们在这座山过不去另一座山;按下的时候,按键内部的金属片把两边连接起来让电流通过,就像搭了一座桥,把两座山连接起来。

按键内部结构如图:Img,未按下按键之前,1、2就是导通的,3、4也是导通的,但是1、3或1、4或2、3或2、4是断开(不通)的;只有按下按键时,1、3或1、4或2、3或2、4才是导通的。

Micro:bit主板有三个按键,反面的是复位按钮,正面的是两个可编程按键,通过对两个可编程按键组合可以有三种组合,作为输入元件。我们结合上节课的LED点阵,一起来学习按键吧。我们做一个按键三连,分别按A、B和AB同时按,对应显示屏分别显示A、B和AB。

2. 准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3. 课程代码1:

按下Micro:bit主板上的按键A,按键B和按键A+B,让Micro:bit上LED点阵显示字符串。

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

while True:
    if button_a.is_pressed():
        display.show("A")
    elif button_a.is_pressed() and button_b.is_pressed():
        display.scroll("AB")
    elif button_b.is_pressed():
        display.show("B")

4. 实验结果1

按照之前的方式将代码1下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电。按下Micro:bit主板上正面按键A,我们可以看到5×5 LED点阵显示字符“A”;按下Micro:bit主板上正面按键B,我们可以看到5×5 LED点阵显示字符“B”;同时按下Micro:bit主板上正面按键A和B,我们就可以看到5×5 LED点阵显示字符“AB”。

5. 课程代码2:

按下Micro:bit主板上按键A和按键B,对应的增加和减少条形图高度,表现为LED点阵亮的行数对应的增加和减少。

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *
a = 0
b = 0
val1 = Image("00000:""00000:""00000:""00000:""00900")
val2 = Image("00000:""00000:""00000:""00900:""99999")
val3 = Image("00000:""00000:""00900:""99999:""99999")
val4 = Image("00000:""00900:""99999:""99999:""99999")
val5 = Image("00900:""99999:""99999:""99999:""99999")
val6 = Image("99999:""99999:""99999:""99999:""99999")
display.show(val1)

while True:
    while button_a.is_pressed() == True:
        sleep(10)
        if button_a.is_pressed() == False:
            a = a + 1
            if(a >= 5):
                a = 5
            break
    while button_b.is_pressed() == True:
        sleep(10)
        if button_b.is_pressed() == False:
            a = a - 1
            if(a <= 0):
                a = 0
            break
    if a == 0:
        display.show(val1)
    if a == 1:
        display.show(val2)
    if a == 2:
        display.show(val3)
    if a == 3:
        display.show(val4)
    if a == 4:
        display.show(val5)
    if a == 5:
        display.show(val6)

6.实验结果2:

按照之前的方式将代码2下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电。按下Micro:bit主板上正面按键A,条形图高度值增加,表现为LED点阵亮的行数增加;按下正面按键B,减少条形图高度,表现为LED点阵亮的行数减少。

7. 代码解释:

Img

Img

第05课 学习测温度#

1.实验说明:

Micro:bit主板实际上并不带温度传感器,而是采用nRF52833芯片内置的温度传感器进行温度检测,所以检测的温度更接近芯片的温度,可能与周围环境温度存在一定的误差。在这一课程中,我们先利用该传感器测试当前环境中的温度,并将测试结果在显示数据(设备)中显示,再通过设置该传感器检测的温度范围来控制LED点阵显示不同的图案。

注意:Micro:bit主板的温度传感器在这里:

Img

2. 准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3. 课程代码1:

Micro:bit检测温度

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

while True:

    Temperature = temperature()

    print("Temperature:", Temperature, "C")

    sleep(500)

4. 实验结果1:

按照之前的方式将代码1下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电,先点击“REPL”按钮,再按一下Micro:bit后面的复位按钮,这样,BBC Microbit REPL窗口打印并显示了Micro:bit的温度传感器检测到当前环境中的温度值,如下图:(这里的字母C表示摄氏温度单位,而摄氏温度单位(℃)会导致乱码

Img

5. 课程代码2:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

while True:

    if temperature() >= 35:
        display.show(Image.HEART)

    else:
        display.show(Image.HEART_SMALL)

6.实验结果2:

按照之前的方式将程序2下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电,外界环境中的温度小于35℃时,Micro:bit主板的5×5LED点阵中显示图案Img,用手按住Micro:bit主板的温度传感器,温度大于等于35℃时,5×5LED点阵中显示图案Img

7. 代码解释:

Img

第06课 地磁传感器#

Img

1.实验说明:

本实验项目主要介绍Micro:bit地磁传感器的使用,地磁传感器除了检测地磁场强度外,还能当作指南针确定方向,同时也是航姿参考系统(AHRS)的重要组成部分。Micro:bit V2主板采用的是LSM303AGR 地磁传感器,磁场动态范围为±50 gauss。在micro:bit V2主板中,磁力检测、指南针积木块均用到了磁力计栏,本实验中,将先介绍指南针,然后查看磁力计原始数据。常见的指南针主要部件是一根磁针,在地磁场的作用下可以转动并指向地磁北极(地磁北极是在地理南极附近),用来辨别方向。

micro:bit内部的一个地磁传感器(磁力计、指南针),我们可以读取这个磁力计的读数来判断方位,得到相对于北磁极的数值。返回值是0到360之间的数值,在磁力计首次开始工作(带到新位置后)时系统会自动要求我们对micro:bit主板校准,正确的校准方式是旋转micro:bit主板。需要注意的是,附近要是有金属物件可能会影响读数和校准准确性。

2. 准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3. 课程代码1:

按下按键A的时候,可以在屏幕上显示磁力计的读数。

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

compass.calibrate()

while True:

    if button_a.is_pressed():
        display.scroll(compass.heading())

程序说明:首先必须对Micro:bit进行校准,因为每个地方地磁场不同,对结果有比较大的的影响,如果是第一次使用指南针,Micro:bit会自动提示需要校准。

4.实验结果1:

按照之前的方式将程序1下载至Micro: bit主板,micro USB数据线不要拔下来,利用Micro USB数据线上电,按下Micro:bit主板上正面按键A时,Micro:bit主板首先提示校准,屏幕(LED点阵)提示:“TILT TO FILL SCREEN”,然后进入校准界面,校准方式为:旋转Micro:bit主板,使得屏幕(LED点阵)画一个封闭的正方形(25个LED都点亮),如下图所示:

Img

当封闭的正方形画好后,会显示一个“笑脸”图案Img,表示校准完成。 校准完成后,当每次按下按键A的时候,直接在屏幕上显示磁力计读数,北、东、南、西对应0°、90°、180°、270°。

5. 课程代码2:

朝不同的方向旋转磁力计,LED点阵显示对应的方向图案。

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *
compass.calibrate()
x = 0
while True:
    x = compass.heading()
    if x >= 293 and x < 338:
        display.show(Image("00999:""00099:""00909:""09000:""90000"))
    elif x >= 23 and x < 68:
        display.show(Image("99900:""99000:""90900:""00090:""00009"))
    elif x >= 68 and x < 113:
        display.show(Image("00900:""09000:""99999:""09000:""00900"))
    elif x >= 113 and x < 158:
        display.show(Image("00009:""00090:""90900:""99000:""99900"))
    elif x >= 158 and x < 203:
        display.show(Image("00900:""00900:""90909:""09990:""00900"))
    elif x >= 203 and x < 248:
        display.show(Image("90000:""09000:""00909:""00099:""00999"))
    elif x >= 248 and x < 293:
        display.show(Image("00900:""00090:""99999:""00090:""00900"))
    else:
        display.show(Image("00900:""09990:""90909:""00900:""00900"))

朝不同的方向旋转磁力计,LED点阵显示对应的方向图案。

如图所示,如果读数在292.5和337.5之间,就让显示屏显示一个指向右上方的箭头,由于代码里不能输入0.5,所以取的判断数值是293和338。之后再加入其它逻辑加载完成后,如下图所示:

Img

6.实验结果2:

按照之前的方式将程序2下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电,提示校准(校准方法请参考:上面程序1部分),校准完成后,旋转移动Micro:bit主板,可以看到Micro:bit主板上LED点阵显示各方向图案。

7. 代码解释:

Img

Img

第07课 加速度传感器#

Img

1.实验说明:

Micro:bit V2主板内置有LSM303AGR 重力加速度传感器(加速度计),其具有8/10/12 bits的分辨率,程序可设置量程为1g、2g、4g,、8g。

我们常使用加速度计来检测机器的姿态。

在本实验项目中,将介绍加速度传感器(加速度计)对几个特殊姿态的检测,之后来查看加速度传感器输出的三轴原始数据。

2. 准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3. 课程代码1:

对Micro:bit不同的操作,LED点阵显示对应的数字。

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

while True:
    gesture = accelerometer.current_gesture()

    if gesture == "shake":
        display.show("1")
    if gesture == "up":
        display.show("2")
    if gesture == "down":
        display.show("3")
    if gesture == "face up":
        display.show("4")
    if gesture == "face down":
        display.show("5")
    if gesture == "left":
        display.show("6")
    if gesture == "right":
        display.show("7")
    if gesture == "freefall":
        display.show("8")

4.实验结果1:

按照之前的方式将程序1下载到Micro:bit主板,利用Micro USB数据线上电,将Micro:bit主板晃动,则可见Micro:bit显示数字1(表明只要有晃动,无论朝哪个方向晃动,该条件都将满足)。

当Micro:bit主板的Logo朝上时,LED点阵显示数字2,Logo朝上示意图如下所示:

Img

同理,Micro:bit主板的Logo朝上时,LED点阵显示数字3(倒立的3),Logo朝下示意图如下所示:

Img

当屏幕朝上(指的是LED点阵朝上)时,LED点阵显示数字4。如下图所示:

Img

同理,当屏幕朝下(指的是LED点阵朝下)时,LED点阵显示数字5。

当Micro:bit 主板向左倾斜(是指LED点阵先朝上,然后再往左边倾斜)时,LED点阵显示数字6。如下图所示:

Img

同理,当Micro:bit主板向右倾斜(是指LED点阵先朝上,然后再往右边倾斜)时,LED点阵显示数字7。如下图所示:

Img

当不小心碰到Micro:bit主板使其从桌面掉落,则为做自由落体运动,此时,Micro:bit主板满足自由落体的条件,则LED点阵显示数字8。(注意:此方法操作时,很容易把micro:bit主板摔坏,不建议操作

注意:(3g、6g、8g, 如果需要满足此条件,则需要达到3倍,6倍,8倍重力加速度甩动Micro:bit主板。如果你们有兴趣的话,这部分程序可以自己添加)

5.实验程序2:

检测加速度在X轴,Y轴,Z轴的不同的值

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

while True:

    x = accelerometer.get_x()

    y = accelerometer.get_y()

    z = accelerometer.get_z()

    print("x, y, z:", x, y, z)

    sleep(100)

6. 实验结果2:

按照之前的方式将代码2成功下载到Micro:bit之后,Micro USB数据线不要拔下来,利用Micro USB数据线上电。先点击“REPL”按钮,再按一下Micro:bit后面的复位按钮,这样,BBC microbit REPL窗口打印并显示了Micro:bit的加速度在X轴、Y轴、Z轴的分解,可得数据变化如下图: Img

7. 代码解释:

Img

Img

第08课 光照强度检测#

Img

1.实验说明

本实验将介绍Micro:bit对外界光照强度的检测,由于Micro:bit并不自带光敏传感器,对外界光照强度的检测是通过LED矩阵进行的,LED矩阵被用来感知周围的光,并反复地将LED转换成输入,并采样电压衰减时间。这样检测出来的光照强度是一个相对值。

2. 准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3. 课程代码:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

while True:
    Lightintensity = display.read_light_level()
    print("Light intensity:", Lightintensity)
    sleep(100)

4.实验结果:

按照之前的方式将代码下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电。先点击“REPL”按钮,再按一下micro:bit后面的复位按钮,这样,BBC Microbit REPL窗口打印并显示了Micro:bit中光线传感器检测到的环境中光线强度值,如下图所示。当用手全部遮住Micro:bit的LED点阵,亮度级别约为0;然后将Micro:bit的LED点阵放置于光照下,随着环境中的光线强度增强时,亮度级别值也在逐渐增大;反之,亮度级别值在逐渐减少。

Img

5.代码说明:

代码块

解释

from microbit import *

导入micro:bit的库文件

while True:

这是一个永久循环,它使micro:bit永远执行这个循环中的代码。

Lightintensity = display.read_light_level()

将display.read_light_level()赋给于变量Lightintensity

print(“Light intensity:”, Lightintensity)

BBC microbit REPL窗口打印光线传感器检测到的光线亮度级别值

第09课 扬声器#

Img

1.实验说明:

Micro:bit主板有内置扬声器,这使得在你的项目中添加声音变得非常容易。通过编程使扬声器发出各种各样的音调,例如编写一首歌曲:《欢乐颂》,让扬声器播放出来。

2. 准备:

(1)通过Micro USB线连接Micro:bit主板和电脑。

Img

(2)打开离线版本的Mu软件。

3. 课程代码:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

import audio

display.show(Image.MUSIC_QUAVER)

while True:
    audio.play(Sound.GIGGLE)
    sleep(1000)
    audio.play(Sound.HAPPY)
    sleep(1000)
    audio.play(Sound.HELLO)
    sleep(1000)
    audio.play(Sound.YAWN)
    sleep(1000)

4. 实验结果:

代码成功下载到Micro:bit主板之后,Micro USB数据线不要拔下来,利用Micro USB数据线上电,Micro:bit主板上的扬声器发出声音且LED点阵显示音乐标志图案。

5.代码说明:

代码块

解释

from microbit import *

导入micro:bit的库文件

import audio

导入audio库文件

while True:

这是一个永久循环,它使micro:bit永远执行这个循环中的代码。

audio.play(Sound.GIGGLE)

发出giggle的声音

第11课 麦克风#

Img

Img

1.实验说明:

Micro:bit 主板有一个内置麦克风,可以测量环境的声音程度。你可以使用它作为一个简单的输入—当你鼓掌时,Micro:bit主板上前面内置麦克风LED指示灯会被打开。它还可以测量声音的强度,所以你可以制作一个噪音等级表或与音乐合拍的迪斯科灯光。麦克风是在Micro:bit 主板的背面,而在前面,你会发现一个内置麦克风LED指示灯,还有紧挨着让声音进入麦克风的孔。当你Micro:bit主板在测量声音级别时,它就会亮起来。

3. 课程代码1:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

while True:
    if microphone.current_event() == SoundEvent.LOUD:
        display.show(Image.HEART)
        sleep(200)
    if microphone.current_event() == SoundEvent.QUIET:
        display.show(Image.HEART_SMALL)

4. 实验结果1:

按照之前的方式将代码1下载到Micro:bit主板,Micro USB数据线不要拔下来,并且利用Micro USB数据线上电。当你鼓掌时,Micro:bit 主板上的LED点阵显示“❤”图案;当外界环境安静时,Micro:bit 主板上的LED点阵显示“Img”图案。

5. 课程代码2:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *
maxSound = 0
lights = Image("11111:"
              "11111:"
              "11111:"
              "11111:"
              "11111")
#### ignore first sound level reading
soundLevel = microphone.sound_level()
sleep(200)

while True:
    if button_a.is_pressed():
        display.scroll(maxSound)
    else:
        soundLevel = microphone.sound_level()
        display.show(lights * soundLevel)
        if soundLevel > maxSound:
            maxSound = soundLevel

6. 实验结果2:

按照之前的方式将代码2下载到Micro:bit主板,Micro USB数据线不要拔下来,利用Micro USB数据线上电,并且,当你按下Micro:bit主板上的A键时,Micro:bit主板上的LED点阵显示检测到的此时环境中最大声音级别值(这里需要注意:通过按Micro:bit背面的重置按钮重置最大值。);当鼓掌时,测量的声音越大,LED点阵屏的25个LED就越亮。

7. 代码解释:

Img

Img

第12课 蓝牙无线通信#

Img

1. 实验说明:

虽然Micro:bit拥有一个低功耗蓝牙模块,可以进行蓝牙连接发送数据等,但它只有16k的RAM。BLE堆栈占用了12k RAM,这意味着没有足够的空间来运行MicroPython;也意味着在同一时刻,MicroPython和蓝牙服务只能运行一个。 在将来可能配备32k RAM的版本就可以支持蓝牙服务了,在此之前,MicroPython还无法支持蓝牙。

https://microbit-micropython.readthedocs.io/en/latest/ble.html

Microbit 机械手臂课程#

第13课 4自由度机械手臂各个关节转动和控制引脚#

第1小节 4自由度机械手臂各关节的转动方向与舵机角度设置

名称

180°

舵机1(右侧舵机)

连接舵机1的小摆杆往后下摆

连接舵机1的小摆杆往上前摆

舵机2(底座转动舵机)

转到最右边

转到最左边

舵机3(爪子处舵机)

机械抓打开

机械爪闭合

舵机4(左侧舵机)

连接舵机4的大摆杆往前摆

连接舵机4的大摆杆往后摆

第2小节 控制引脚

舵机1(右侧舵机)

Micro:bit 16路舵机扩展板

棕线

G

红线

V

橙线

S(4)

舵机2(底座转动舵机)

Micro:bit 16路舵机扩展板

棕线

G

红线

V

橙线

S(5)

舵机3(爪子处舵机)

Micro:bit 16路舵机扩展板

棕线

G

红线

V

橙线

S(6)

舵机4(左侧舵机)

Micro:bit 16路舵机扩展板

棕线

G

红线

V

橙线

S(7)

左边摇杆模块(引脚)

Micro:bit 16路舵机扩展板

Y

P0

X

P1

V

+3V

G

GND

右边摇杆模块(引脚)

Micro:bit 16路舵机扩展板

Y

P2

B

P13

V

P14

G

P15

第14课 舵机转动#

1.实验说明:

在前面的机械手臂安装文档中,我们已经设置了舵机角度。舵机是一种可以非常精确地旋转的电机。目前已广泛应用于玩具车、遥控直升机、飞机、机器人等领域。在这个项目中,我们再次来学习一个舵机转动。

2.元件知识:

Img

舵机:舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。经由电路板上的IC 判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位。适用于那些需要角度不断变化并可以保持的控制系统。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。 舵机有多种规格,但它们都有三根连接线,分别是棕色、红色、橙色(不同品牌可能有不同的颜色)。棕色为GND,红色为电源正极,橙色为信号线.

Img

舵机的伺服系统由可变宽度的脉冲来进行控制,橙色的控制线是用来传送脉冲的。一般而言,PWM控制舵机的基准信号周期为20ms(50Hz),理论上脉宽应在1ms到2ms之间,对应控制舵机角度是0°~180°。但是,实际上更多控制舵机的脉宽范围是0.5ms 到2.5ms,具体需要自己实际调试下。

Img

经过实测,舵机的脉冲范围为0.65ms~2.5ms。180度舵机,对应的控制关系是这样的:

高电平时间

舵机角度

基准信号周期时间(20ms)

0.65ms

0度

0.65ms高电平+19.35ms低电平

1.5ms

90度

1.5ms高电平+18.5ms低电平

2.5ms

180度

2.5ms高电平+17.5ms低电平

舵机的规格参数:

工作电压:

DC 4.8V〜6V

可操作角度范围:

可操作角度范围:

脉波宽度范围:

500→2500 μsec

外观尺寸:

22.912.230mm

空载转速:

0.12±0.01 sec/60度(DC 4.8V) 0.1±0.01 sec/60度(DC 6V)

空载电流:

200±20mA(DC 4.8V) 220±20mA(DC 6V)

停止扭力:

1.3±0.01kg·cm(DC 4.8V) 1.5±0.1kg·cm(DC 6V)

停止电流:

≦850mA(DC 4.8V) ≦1000mA(DC 6V)

待机电流:

3±1mA(DC 4.8V) 4±1mA(DC 6V)

重量:

9±1g (不带舵机轴)

使用温度:

-30℃~60℃

3.实验接线:

Img

4.实验准备:

(1)将Micro:bit主板正确插入4自由度机械手臂的Micro:bit 16路舵机扩展板。

(2)外接电源。

(3)通过Micro USB线连接Micro:bit和电脑。

(4)打开离线版本的Mu软件。

5.添加库文件:

特别提醒:如果已经添加好了“PCA9685.py”和“servo.py”库文件,此步骤直接跳过。

特别注意:导入库文件前需要给Micro:bit主板上传一个.py的代码(空代码也是可以的),这里我们是以Python教程中的“第14课 舵机转动.py”代码为例。

导入“PCA9685.py”和“servo.py”库文件

Mu保存文件的默认目录是“Mu_code”,它位于用户目录的根目录中。参考文献链接:https://codewith.mu/en/tutorials/1.0/files

例如,在Windows系统中,假设您的系统安装在电脑C驱动器上,则用户名为“Administrator”,那么“mu_code”目录的路径是“C:\Administrator\mu_ code”。在Linux系统上,“mu_code”目录的路径是“~/home/mu_code”.

进入“mu_code”文件夹

Img

我们提供的库文件“PCA9685.py”和“servo.py”的路径如下:

Img

复制粘贴我们提供的库文件“PCA9685.py”和“servo.py”到“mu_code”文件夹中。复制成功后,如下图:

Img

先打开Mu软件并连接Micro:bit主板到电脑,接着点击“刷入”按钮烧入一个程序代码到Micro:bit主板中。

Img

然后点击“文件”按钮,就可以在“电脑上的文件”栏的下面方框中看到两个对应的库文件,再分别拖着库文件“PCA9685.py”和“servo.py”到Micro:bit主板中。

Img

Img

Img

Img

特别注意: 如果您在micro:bit板上下载了其他程序,但库文件“PCA9685.py”和“servo.py”程序除外。在使用Micropython编程之前,您需要将库文件导入到Micro:bit主板。如果您始终使用相同的 Micro:bit主板进行Micropython编程,则无需多次将库文件发送到Micro:bit主板;反之,就需要再次将库文件发送到Micro:bit主板。

6.实验代码:

库文件“PCA9685.py”和“servo.py”都添加完后,可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import sleep, i2c
from PCA9685 import *
from servo import *

#### 使用默认地址(0x40)初始化PCA9685.
pwm = PCA9685.PCA9685(i2c)

#### 设置适合舵机的频率为60hz.
pwm.set_pwm_freq(60)

print('Moving servo on channel 5, press Ctrl-C to quit...')

#### 使用舵机2辅助类逐步移动通道5
s2 = Servos(i2c)
while True:
    for num in range(30 , 150):  # num值的范围从30到150
        num += 1   #num值每次加1
        s2.position(5, num) #接在通道5的舵机转动num值角度
        sleep(20)
    for num in range(30 , 150):
        num += 1
        s2.position(5, 180-num)
        sleep(20)

7.实验结果:

按照之前的方式将程序下载至Micro: bit主板,利用外接电源供电。上电后,按一下Micro: bit主板上的复位按钮,4自由度机械手臂的舵机2(底座转动舵机)将从右边向左边转动,再从左边向右边转动,循环进行。

第15课 按键控制舵机#

1.实验说明:

在前面的项目实验中,我们已经了解过舵机的控制和Micro:bit主板上按键的工作原理及应用。那么在这个项目中,我们将学习使用Micro:bit主板上的按键AB来控制舵机的转动。

2.实验接线:

Img

3.实验准备:

(1)将Micro:bit主板正确插入4自由度机械手臂的Micro:bit 16路舵机扩展板。

(2)外接电源。

(3)通过micro USB线连接micro:bit和电脑。

(4)打开离线版本的Mu软件。

4.添加库文件:

特别提醒:如果已经添加好了“PCA9685.py”和“servo.py”库文件,此步骤直接跳过。

添加库文件的方法请参照 Python教程中的 第14课 舵机转动

5.实验代码:

本程序实现的功能是通过 AB 键控制舵机2(底座转动舵机)左右转,按A键的时候4自由度机械手臂的舵机2(底座转动舵机)向左转,按B键的时候4自由度机械手臂的舵机2(底座转动舵机)向右转。

库文件“PCA9685.py”和“servo.py”都添加完后,可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import sleep, i2c, button_a, button_b
from PCA9685 import *
from servo import *

#### 使用默认地址(0x40)初始化PCA9685.
pwm = PCA9685.PCA9685(i2c)

#### 设置适合舵机的频率为60hz.
pwm.set_pwm_freq(60)

print('Moving servo on channel 5, press Ctrl-C to quit...')

#### 使用舵机2辅助类逐步移动通道5
s2 = Servos(i2c)

####设置舵机2的初始角度为30°(底座旋转舵机,通道5)
s2.position(5, 30)
sleep(200)

while True:
    if button_a.is_pressed():  # 如果microbit主板上的按键A被按下时
        for num in range(30 , 150):  # num值的范围从30到150
            num += 1        #num值每次加1
            s2.position(5, num)  #接在通道5的舵机转动num值角度
            sleep(20)
    if button_b.is_pressed():
        for num in range(30 , 150):
            num += 1
            s2.position(5, 180-num)
            sleep(20)

6.实验结果:

按照之前的方式将程序下载至Micro: bit主板,利用外接电源供电。上电后,按一下Micro: bit主板上的复位按钮,通过Micro: bit主板上的A B键来控制4自由度机械手臂的舵机2(底座转动舵机)转动,按 A 键的时候4自由度机械手臂的舵机2(底座转动舵机)向左转,按 B 键的时候4自由度机械手臂的舵机2(底座转动舵机)向右转。

第16课 读取摇杆值#

1.实验说明:

摇杆模块是一个有两个模拟输入和一个数字输入的组件。广泛应用于游戏操作、机器人控制、无人机控制等领域。摇杆模块的X、Y引脚就是模拟输入,直接读取其测得的模拟值就可,Z轴(B引脚)是数字按钮,要先设置其引脚为输入状态,再读取测到的数值是1(按下)或0(没按下)。将读取到的值打印到串口监视器。

2.元件知识:

摇杆模块: 主要是采用PS2 手柄摇杆元件,实际上摇杆模块有3个信号端引脚,模拟3维空间,摇杆模块的引脚分别是GND、VCC、信号端(B、X、Y),其中信号端X、Y模拟空间的X轴和Y轴,控制时,模块的X、Y信号端是连接单片机模拟口,通过控制2个模拟输入值来控制物体在空间X、Y轴的坐标。信号端B模拟空间Z轴,它一般是接数字口,做按键使用。 VCC接单片机电源输出端V/VCC(3.3/5V),GND接单片机G/GND,原始状态下读出电压大约为1.65V/2.5V左右,对于X轴方向,当随箭头方向逐渐按下,读出电压值随着增加,且可以达到最大电压,随箭头相反方向逐渐按下,读出电压值逐渐减少,减少到最小电压;对于Y轴方向,当沿着模块上的箭头方向逐渐按下,读出电压值逐渐减少,减少到最小电压,随箭头相反方向逐渐按下,读出电压值随着增加,且可以达到最大电压;对于Z轴方向,信号端B接数字口,原始状态下输出0,按下输出1。这样,我们可以读取两个模拟值和一个数字口的高低电平情况,判断模块上摇杆的工作状态。

模块参数:

输入电压:DC 3.3V ~ 5V

输出信号:X/Y双轴模拟值+Z轴数字信号

适用范围:适用于控制点坐标在平面内的运动,双自由度舵机的控制等。

产品特点:外观精美,摇杆手感优越,操作简单,反应灵敏,使用寿命长。

3.实验接线:

Img

4.实验准备:

(1)将micro:bit主板正确插入4自由度机械手臂的Microbit 16路舵机扩展板。

(2)外接电源。

(3)通过micro USB线连接micro:bit和电脑。

(4)打开离线版本的Mu软件。

5.实验代码:

可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *

Left_Y = 0    #设置变量Left_Y初始值为0
Left_X = 0
Right_Y = 0
Right_B = 0
pin14.PULL_UP     #拉高引脚14的电平
pin15.PULL_DOWN   #拉低引脚15的电平
pin14.write_digital(1)  #设置引脚14为高电平
pin15.write_digital(0)   #设置引脚15为低电平

while True:
    Left_Y = pin0.read_analog()  #将引脚P0读取的模拟值赋予变量Left_Y
    Left_X = pin1.read_analog()
    Right_Y = pin2.read_analog()
    Right_B = pin13.read_digital()
    print("Left_Y analog signal:",Left_Y)  #串口打印引脚P0读取的模拟值
    print("Left_X analog signal:",Left_X)
    print("Right_Y analog signal:",Right_Y)
    print("Right_B analog signal:",Right_B)
    sleep(200)

6.实验结果:

按照之前的方式将程序下载至Micro: bit主板,micro USB数据线不要拔下来,利用micro USB数据线上电,并且还利用外接电源供电。先点击“REPL”,再按一下microbit主板上的复位按钮,这样,BBC microbit REPL 窗口将不断地打印左边摇杆模块的X、Y引脚的模拟值,右摇杆模块的Y引脚的模拟值和右摇杆模块的B引脚(按钮)的数字信号值,摇动左右摇杆模块和按下右摇杆模块按钮,模拟值和数字信号值会发生变化。如下图:

Img

Img

第17课 双摇杆遥控4自由度机械手臂#

1.实验说明:

前面课程中我们学习了舵机的基本原理与应用,同时也学习了读取摇杆的值。则在这一课程中,我们将这两个实验结合起来,实现通过利用两个摇杆模块,来控制4自由度机械手臂实现各种运动。

控制时我们先设置开机的姿势;摇杆模块控制4自由度机械手臂的如下表格:

初始化(即舵机初始角度)

舵机4(左侧舵机):120°

舵机1(右侧舵机):60°

舵机2(底座转动舵机):90°

舵机3(爪子处舵机):60°

左、右摇杆模块控制4自由度机械手臂

左摇杆

舵机

右摇杆

舵机

x<100

舵机2(底座转动舵机)的角度会逐渐减到30度(即:左摇杆摆到后面时,控制机械手臂转动的舵机2往右转,转到30度就停下。)

y2<100

舵机1(右侧舵机)的角度会逐渐增大到180°(即:右摇杆摆到右边时,连接舵机1的小摆杆往上前摆。)

x>900

舵机2(底座转动舵机)逐渐加到150度(即:左摇杆摆到前面时,控制机械手臂转动的舵机2往左转,转到150度就停下。)

y2>800

舵机1(右侧舵机)的角度会逐渐减少到0°(即:右摇杆摆到左边时,连接舵机1的小摆杆往后下摆。)

y1>900

舵机4(左侧舵机)的角度会逐渐增加到180°(即:左摇杆摆到左边时,连接舵机4的大摆杆往后摆。)

z=1

舵机3(爪子处舵机)的角度为180°(即:按住右摇杆的按钮,机械爪打开。)

y1<100

舵机4(左侧舵机)的角度会逐渐减少到35°(即:左摇杆摆到右边时,连接舵机4的大摆杆往前摆。)

z=0

舵机3(爪子处舵机)的角度为60°(即:松开右摇杆的按钮,机械爪闭合。)

2.实验接线:

舵机1(右侧舵机)

Micro:bit 16路舵机扩展板

棕线

G

红线

V

橙线

S(4)

舵机2(底座转动舵机)

Micro:bit 16路舵机扩展板

棕线

G

红线

V

橙线

S(5)

舵机3(爪子处舵机)

Micro:bit 16路舵机扩展板

棕线

G

红线

V

橙线

S(6)

舵机4(左侧舵机)

Micro:bit 16路舵机扩展板

棕线

G

红线

V

橙线

S(7)

左边摇杆模块(引脚)

Micro:bit 16路舵机扩展板

Y

P0

X

P1

V

+3V

G

GND

右边摇杆模块(引脚)

Micro:bit 16路舵机扩展板

Y

P2

B

P13

V

P14

G

P15

Img

3.实验准备:

(1)将Micro:bit主板正确插入4自由度机械手臂的Micro:bit 16路舵机扩展板。

(2)外接电源。

(3)通过micro USB线连接micro:bit和电脑。

(4)打开离线版本的Mu软件。

4.添加库文件:

特别提醒:如果已经添加好了“PCA9685.py”和“servo.py”库文件,此步骤直接跳过。

添加库文件的方法请参照 Python教程中的 第14课 舵机转动

5.实验代码:

库文件“PCA9685.py”和“servo.py”都添加完后,可以直接在Mu编译器上传教程中的代码,也可以手动在Mu编译器编写代码。

from microbit import *
from microbit import sleep, i2c
from PCA9685 import *
from servo import *

num1 = 60
num2 = 90
num3 = 60
num4 = 120

Left_Y = 0
Left_X = 0
Right_Y = 0
Right_B = 0
pin14.PULL_UP
pin15.PULL_DOWN
pin14.write_digital(1)
pin15.write_digital(0)

pwm = PCA9685.PCA9685(i2c)

pwm.set_pwm_freq(60)

print('Moving servo on channel 0, press Ctrl-C to quit...')

s1 = Servos(i2c)

s2 = Servos(i2c)

s3 = Servos(i2c)

s4 = Servos(i2c)

s1.position(4, 60)
sleep(200)

s2.position(5, 90)
sleep(200)

s3.position(6, 60)
sleep(200)

s4.position(7, 120)
sleep(200)

def baseplate_rotate():
    global num2
    if Left_X < 100:
        num2 = num2 - 1
        s2.position(5, num2)
        sleep(5)
        if num2 <= 30:
            s2.position(5, 30)
            sleep(200)
    if Left_X > 900:
        num2 = num2 + 1
        s2.position(5, num2)
        sleep(5)
        if num2 >= 150:
            s2.position(5, 150)
            sleep(200)

def clamp_claw():
    if Right_B == True:
        s3.position(6, 180)
        sleep(10)
    if Right_B == False:
        s3.position(6, 60)
        sleep(10)

def left_arm():
    global num4
    if Left_Y > 900:
        num4 =num4 + 1
        s4.position(7, num4)
        sleep(5)
        if num4 >= 165:
            s4.position(7, 165)
            sleep(200)

    if Left_Y < 100:
        num4 = num4 - 1
        s4.position(7, num4)
        sleep(5)
        if num4 <= 35:
            s4.position(7, 35)
            sleep(200)

def right_arm():
    global num1
    if Right_Y > 800:
        num1 =num1 - 1
        s1.position(4, num1)
        sleep(5)
        if num1 <= 15:
            s1.position(4, 15)
            sleep(200)
    if Right_Y < 100:
        num1 =num1 + 1
        s1.position(4, num1)
        sleep(5)
        if num1 >= 100:
            s1.position(4, 100)
            sleep(200)
while True:
    Left_Y = pin0.read_analog()
    Left_X = pin1.read_analog()
    Right_Y = pin2.read_analog()
    Right_B = pin13.read_digital()
    print("Left_Y analog signal:",Left_Y)
    print("Left_X analog signal:",Left_X)
    print("Right_Y analog signal:",Right_Y)
    print("Right_B analog signal:",Right_B)

    baseplate_rotate()
    clamp_claw()
    left_arm()
    right_arm()

6.实验结果:

按照之前的方式将程序下载至Micro: bit主板,利用外接电源供电。上电后,按一下Micro: bit主板上的复位按钮,4自由度机械手臂将处于初始位置,摇动左右两个摇杆模块(左摇杆沿着X轴和Y轴方向摇动;右摇杆沿着Y轴方向摇动及按下、松开右摇杆按钮),即可控制4自由度机械手臂实现各种运动。