Build HAT

简介

Raspberry Pi Build HAT 是一个附加板,可连接到树莓派的40针GPIO接头,该接头是与乐高®教育合作设计的,可通过树莓派计算机轻松控制乐高®Technic™电机和传感器。

build hat
Note
支持的设备的完整列表可以在 Device Compatibility 部分找到。

它为SPIKE™产品组合的乐高®™电机和传感器提供四个连接器。可用的传感器包括距离传感器、颜色传感器和多功能力传感器。角电机有多种尺寸,包括集成编码器,可以查询以找到它们的位置。

Build HAT适用于所有带有40针GPIO接头的Raspberry Pi计算机,包括添加排线或其他键盘系列设备。连接的乐高®Technic™设备可以很容易地用Python控制,以及标准的Raspberry Pi配件,如相机模块。

树莓派Build HAT电源(PSU)是 available separately,旨在为Build HAT和树莓派计算机以及所有连接的乐高®技术™设备供电。

psu

乐高®教育SPIKE™Prime Set 45678和SPIKE™Prime Expansion Set 45681可从乐高®教育经销商处单独获得,包括由Build HAT支持的有用元素集合。

Note
HAT适用于所有40针GPIO Raspberry Pi板,包括Raspberry Pi Zero系列。通过添加排线或其他扩展设备,它也可以与键盘系列设备一起使用。
  • 最多可控制 4 个 LEGO® Technic™ 电机和 SPIKE™ 产品组合中包含的传感器

  • 易于使用 Python 库来控制您的乐高® Technic™ 设备

  • 适用于任何带有 40 针 GPIO 接头的 Raspberry Pi 计算机

  • 板载 RP2040 微控制器管理乐高® Technic™ 设备的底层控制

  • 外部 8V PSU 可单独购买,为 Build HAT 和 Raspberry Pi 供电

Note

Build HAT无法为键盘系列设备供电,因为它不支持通过GPIO标头供电。

准备 Build HAT

Note
在开始使用 Raspberry Pi Build HAT 之前,你应该 设置 你的 Raspberry Pi,install 使用 Raspberry Pi Imager 安装最新版本的操作系统。

将9毫米垫片连接到板的底部。将Raspberry Pi放在Raspberry Pi上。确保你把它放在正确的位置。与其他HAT不同,所有组件都在底部,为面包板或乐高®元素在顶部留出空间。

连接 GPIO 引脚

如果要访问Raspberry Pi的GPIO引脚,可以添加可选的高接头并使用15 mm垫片。

tall headers

以下引脚由Build HAT本身使用,您不应该用任何连接它们。

GPIO Use Status

GPIO0/1

ID prom

GPIO4

Reset

GPIO14

Tx

GPIO15

Rx

GPIO16

RTS

unused

GPIO17

CTS

unused

设置Raspberry Pi

启动Raspberry Pi后,通过单击Raspberry菜单按钮打开Raspberry Pi配置工具,然后选择“首选项(Preferences)”,然后选择“Raspberry Pi配置”。

单击“interfaces”选项卡并调整串行设置,如下所示:

setting up

使用无显示器的Raspberry Pi

如果您正在无显示器运行Raspberry Pi并使用 raspi-config,请从第一个菜单中选择“接口选项”。

raspi config 1

然后是“P6串口”。

raspi config 2

禁用串行控制台:

raspi config 3

并启用串口硬件。

raspi config 4

最终设置应如下所示。

raspi config 5

如果您进行了任何更改,此时需要重新启动。

Build HAT连接电源

连接外部电源——建议使用 official Raspberry Pi Build HAT power supply——但是任何能够通过DC 5521中心正极筒形连接器(5.5毫米×2.1毫米×11毫米)提供48W的可靠+8V±10%电源都将为Build HAT供电。除非您使用的是键盘系列,否则您也不需要将额外的USB电源连接到Raspberry Pi。

Note

Build HAT无法为Raspberry Pi 400供电,因为它不支持通过GPIO标头供电。

Note

LEGO® Technic™ 马达的功率非常大,因此需要外部 8V 电源才能驱动它们。如果要读取电机编码器和 SPIKE™ 力传感器的数据,可以通过 Raspberry Pi 的 USB 电源插座,以常规方式为 Raspberry Pi 和 Build HAT 供电。SPIKE™ 颜色和距离传感器与电机一样,需要 外部电源

您可以选择将Build HAT与Python或.NET一起使用。

从 Python 使用 Build HAT

安装 Build HAT Python 库

要安装Build HAT Python库,请打开终端窗口并运行以下命令:

$ sudo apt install python3-build-hat

Bookworm 之前的Raspberry Pi OS版本无法使用 apt 访问库。请运行以下命令以使用 pip 安装库:

$ sudo pip3 install buildhat

有关Build HAT Python库的更多信息,请参阅 ReadTheDocs

使用来自 Python 的电机

a number of motors 与Build HAT一起使用。

连接电机

将电机连接到Build HAT上的A端口。LPF2连接器需要正确向上插入。如果连接器不容易滑入,请旋转180度,然后重试。

电机工作

启动 Thonny IDE。添加以下程序代码:

from buildhat import Motor

motor_a = Motor('A')

motor_a.run_for_seconds(5)

通过单击播放/运行按钮运行程序。如果这是Raspberry Pi启动后第一次运行Build HAT程序,则在将固件烧录到板上时会有几秒钟的暂停。您应该会看到红色LED熄灭,绿色LED亮起。Python程序的后续执行不需要此暂停。

你的马达应该顺时针转5秒钟。

更改程序的最后一行并重新运行。

motor_a.run_for_seconds(5, speed=50)

电机现在应该转得更快了。做另一个改变:

motor_a.run_for_seconds(5, speed=-50)

电机应向相反(逆时针)方向转动

通过单击Thonny中的加号按钮创建一个新程序。添加下面的代码:

from buildhat import Motor

motor_a = Motor('A')

while True:
    print("Position: ", motor_a.get_aposition())

运行程序。抓住马达并转动轴。您应该会看到Thonny REPL中打印的数字发生变化。

使用 Python 中的传感器

有一个与Build HAT一起使用的 大范围传感器

使用传感器工作

将颜色传感器连接到Build HAT上的端口B,将力传感器连接到端口C。

Note
如果您不打算驱动电机,那么您不需要外部电源,您可以为Raspberry Pi使用标准USB电源。

创建另一个新程序:

from signal import pause
from buildhat import ForceSensor, ColorSensor

button = ForceSensor('C')
cs = ColorSensor('B')

def handle_pressed(force):
    cs.on()
    print(cs.get_color())

def handle_released(force):
    cs.off()

button.when_pressed = handle_pressed
button.when_released = handle_released
pause()

运行它,将一个彩色物体(乐高®元件是理想的)放在颜色传感器前面,按下力传感器柱塞。传感器的发光二极管应该打开,最接近的颜色的名称应该显示在Thonny REPL中。

Use the Build HAT from .NET

Install the .NET Framework

在 Raspberry Pi 上无法通过 apt 安装微软的 .NET 框架。不过,您可以按照微软提供的 官方说明安装 .NET 框架。另外,还有一个简化的 第三方途径,可以将 .NET 工具链安装到 Raspberry Pi 上。

Warning
安装脚本以 root 运行。您应该先阅读它并确保您了解它在做什么。如果您完全不确定,您应该手动遵循 官方说明
$ wget -O - https://raw.githubusercontent.com/pjgpetecodes/dotnet5pi/master/install.sh | sudo bash

安装.NET框架后您可以创建您的项目:

$ dotnet new console --name buildhat

这会在 buildhat 子目录中创建一个默认程序,我们需要在该目录中才能继续:

$ cd buildhat

您现在需要安装以下nuget包:

$ dotnet add package System.Device.Gpio --version 2.1.0
$ dotnet add package Iot.Device.Bindings --version 2.1.0

Run C# Code

您可以使用 dotnet run 命令运行程序。让我们现在尝试一下,以确保一切正常。它应该打印“Hello World!”

$ dotnet run
Hello World!

(当在随后的说明中指示“运行程序”时,您只需重新运行 dotnet run

Edit C# Code

在下面的说明中,您将编辑文件 buildhat/Program.cs,即运行上述命令时生成的C#程序。

任何文本编辑器都可以编辑C#代码,包括预装的IDE/文本编辑器Geany。https://code.visualstudio.com/docs/setup/raspberry-pi/[Visual Studio Code](通常称为“VS Code”)也是一种流行的替代方案。

Use the Build HAT from .NET

Raspberry Pi Built HAT 在乐高®术语中被称为 “Brick”,您可以使用 Build HAT串行协议通过.NET与它直接对话。

您可以创建一个 brick 对象,如下所示,

Brick brick = new("/dev/serial0");

但您需要记住在代码末尾处理 brick

brick.Dispose();
Warning
如果您不调用 brick.Dispose(),您的程序将不会终止。

如果您想避免在最后调用 brick.Dispose,请使用 using 语句创建砖块:

using Brick brick = new("/dev/serial0");

在这种情况下,当到达程序结束时,您的砖块将被自动处理。

显示 Build HAT 信息

您可以收集各种软件版本、签名和输入电压:

var info = brick.BuildHatInformation;
Console.WriteLine($"version: {info.Version}, firmware date: {info.FirmwareDate}, signature:");
Console.WriteLine($"{BitConverter.ToString(info.Signature)}");
Console.WriteLine($"Vin = {brick.InputVoltage.Volts} V");
Note
输入电压在启动时只读取一次,之后不会再次读取。

获取传感器和电机详细信息

功能 GetSensorTypeGetSensor 将允许您检索有关连接传感器的任何信息。

SensorType sensor = brick.GetSensorType((SensorPort)i);
Console.Write($"Port: {i} {(Brick.IsMotor(sensor) ? "Sensor" : "Motor")} type: {sensor} Connected: ");

在此示例中,您也可以使用 IsMotor 静态函数来检查连接的元件是传感器还是电机。

if (Brick.IsActiveSensor(sensor))
{
    ActiveSensor activeSensor = brick.GetActiveSensor((SensorPort)i);
}
else
{
    var passive = (Sensor)brick.GetSensor((SensorPort)i);
    Console.WriteLine(passive.IsConnected);
}

ActiveSensor 有一个高级属性和功能的集合,允许理解传感器的每个元素。也可以从砖块中调用原始函数。这将允许您选择特定模式并进行高级场景。虽然这是可能的,但电机和传感器类已经创建,让您的生活更轻松。

事件

大多数传感器在其特殊属性上实现事件。您可以简单地订阅 PropertyChangedPropertyUpdated。更改后的值将在值更改时触发,而更新后的值将在属性成功更新时触发。根据使用的模式,一些属性可能一直在后台更新,而另一些属性偶尔会更新。

只有当颜色发生变化或电机位置发生变化时,您才会感兴趣,将其用作转速计。在这种情况下,PropertyChanged 就是您需要的!

Console.WriteLine("Move motor on Port A to more than position 100 to stop this test.");
brick.WaitForSensorToConnect(SensorPort.PortA);
var active = (ActiveMotor)brick.GetMotor(SensorPort.PortA);
bool continueToRun = true;
active.PropertyChanged += MotorPropertyEvent;
while (continueToRun)
{
    Thread.Sleep(50);
}

active.PropertyChanged -= MotorPropertyEvent;
Console.WriteLine($"Current position: {active.Position}, eventing stopped.");

void MotorPropertyEvent(object? sender, PropertyChangedEventArgs e)
{
    Console.WriteLine($"Property changed: {e.PropertyName}");
    if (e.PropertyName == nameof(ActiveMotor.Position))
    {
        if (((ActiveMotor)brick.GetMotor(SensorPort.PortA)).Position > 100)
        {
            continueToRun = false;
        }
    }
}

等待初始化

brick可能需要很长时间才能初始化。已实现等待连接传感器。

brick.WaitForSensorToConnect(SensorPort.PortB);

如果您想实现高级功能(例如在一段时间后警告用户并重试),也需要 CancellationToken

Use Motors from .NET

有两种类型的电机,*被动*的和*主动*的。主动电机将提供详细的位置,绝对位置和速度,而被动电机只能控制速度。

可以使用一组通用的功能来控制电机的速度。有两个重要的:SetPowerLimitSetBias

train.SetPowerLimit(1.0);
train.SetBias(0.2);

可接受的值仅为0.0到1.0。功率限制是按比例降低最大功率的方便方法。

偏置值设置为电流端口,它被添加到正电机驱动值中,并从负电机驱动值中减去。这可以用来补偿大多数直流电机在转动之前需要一定的驱动量的事实。

创建电机时的默认值为功率限制0.7,偏置0.3。

无源电机

Train motor
火车电机,https://www.bricklink.com/v2/catalog/catalogitem.page?S=88011-1&name=Train%20Motor&category=%5BPower%20Functions%5D%5BPowered%20Up%5D#T=S&O={%22icOnly%22:0}[图片来自Bricklink]

典型的无源电机是火车和较旧的加电电机。Speed 属性可以设置和读取。它是目标和测量速度,同时这些传感器没有办法测量它们。值从-100到+100。

还提供控制 StartStopSetSpeed 的功能。以下是如何使用它的示例:

Console.WriteLine("This will run the motor for 20 secondes incrementing the PWM");
train.SetPowerLimit(1.0);
train.Start();
for (int i = 0; i < 100; i++)
{
    train.SetSpeed(i);
    Thread.Sleep(250);
}

Console.WriteLine("Stop the train for 2 seconds");
train.Stop();
Thread.Sleep(2000);
Console.WriteLine("Full speed backward for 2 seconds");
train.Start(-100);
Thread.Sleep(2000);
Console.WriteLine("Full speed forward for 2 seconds");
train.Start(100);
Thread.Sleep(2000);
Console.WriteLine("Stop the train");
train.Stop();
Note
列车启动后,您可以调整速度,电机将相应调整。

主动电机

Active motor
活动电机,https://www.bricklink.com/v2/catalog/catalogitem.page?S=88014-1&name=Technic%20XL%20Motor&category=%5BPower%20Functions%5D%5BPowered%20Up%5D#T=S&O={%22icOnly%22:0}[图片来自Bricklink]

有源电机具有 SpeedAbsolutePositionPositionTargetSpeed 等特殊性能。即使电机停止,它们也会连续读取。

代码片段展示了如何获取电机、启动它们并读取属性:

brick.WaitForSensorToConnect(SensorPort.PortA);
brick.WaitForSensorToConnect(SensorPort.PortD);
var active = (ActiveMotor)brick.GetMotor(SensorPort.PortA);
var active2 = (ActiveMotor)brick.GetMotor(SensorPort.PortD);
active.Start(50);
active2.Start(50);
// Make sure you have an active motor plug in the port A and D
while (!Console.KeyAvailable)
{
    Console.CursorTop = 1;
    Console.CursorLeft = 0;
    Console.WriteLine($"Absolute: {active.AbsolutePosition}     ");
    Console.WriteLine($"Position: {active.Position}     ");
    Console.WriteLine($"Speed: {active.Speed}     ");
    Console.WriteLine();
    Console.WriteLine($"Absolute: {active2.AbsolutePosition}     ");
    Console.WriteLine($"Position: {active2.Position}     ");
    Console.WriteLine($"Speed: {active2.Speed}     ");
}

active.Stop();
active2.Stop();
Note
不要忘记在需要时启动和停止电机。

主动电机可使用高级功能。您可以请求移动几秒钟,移动到特定位置,特定的绝对位置。这里有几个例子:

// From the previous example, this will turn the motors back to their initial position:
active.TargetSpeed = 100;
active2.TargetSpeed = 100;
// First this motor and will block the thread
active.MoveToPosition(0, true);
// Then this one and will also block the thread
active2.MoveToPosition(0, true);

每个函数都允许您在执行操作的时间内阻塞或不阻塞线程。请注意,对于绝对和相对位置移动,有几度的容差。

brick.WaitForSensorToConnect(SensorPort.PortA);
var active = (ActiveMotor)brick.GetMotor(SensorPort.PortA);
active.TargetSpeed = 70;
Console.WriteLine("Moving motor to position 0");
active.MoveToPosition(0, true);
Console.WriteLine("Moving motor to position 3600 (10 turns)");
active.MoveToPosition(3600, true);
Console.WriteLine("Moving motor to position -3600 (so 20 turns the other way");
active.MoveToPosition(-3600, true);
Console.WriteLine("Moving motor to absolute position 0, should rotate by 90°");
active.MoveToAbsolutePosition(0, PositionWay.Shortest, true);
Console.WriteLine("Moving motor to position 90");
active.MoveToAbsolutePosition(90, PositionWay.Shortest, true);
Console.WriteLine("Moving motor to position 179");
active.MoveToAbsolutePosition(179, PositionWay.Shortest, true);
Console.WriteLine("Moving motor to position -180");
active.MoveToAbsolutePosition(-180, PositionWay.Shortest, true);
active.Float();

您可以将电机置于浮动位置,这意味着它不再受约束。在将电机用作转速计、移动电机并读取位置时,可以使用这种模式。如果电机上仍有约束,则可能无法移动。

Use Sensors from .NET

就像电机一样,您有主动和被动传感器。最近的传感器是主动的。被动的是灯和简单的按钮。主动的是距离或颜色传感器,以及小型3×3像素显示器。

Button/Touch Passive Sensor

按钮/触摸无源传感器有一个特定属性 IsPressed。按下按钮时,该属性设置为true。这是一个完整的事件示例:

brick.WaitForSensorToConnect(SensorPort.PortA);
var button = (ButtonSensor)brick.GetSensor(SensorPort.PortA);
bool continueToRun = true;
button.PropertyChanged += ButtonPropertyEvent;
while (continueToRun)
{
    // You can do many other things here
    Thread.Sleep(50);
}

button.PropertyChanged -= ButtonPropertyEvent;
Console.WriteLine($"Button has been pressed, we're stopping the program.");
brick.Dispose();

void ButtonPropertyEvent(object? sender, PropertyChangedEventArgs e)
{
    Console.WriteLine($"Property changed: {e.PropertyName}");
    if (e.PropertyName == nameof(ButtonSensor.IsPressed))
    {
        continueToRun = false;
    }
}

被动光源

Passive light
被动光源,https://www.bricklink.com/v2/catalog/catalogitem.page?P=22168c01&name=Electric,%20Light%20Unit%20Powered%20Up%20Attachment和category=%5BElectric,%20Light%20&%20Sound%5D#T=C&C=11[图片来自Bricklink]

被动光源是火车灯。它们可以打开,你可以控制它们的亮度。

brick.WaitForSensorToConnect(SensorPort.PortA);
var light = (PassiveLight)brick.GetSensor(SensorPort.PortA);
// Brightness 50%
light.On(50);
Thread.Sleep(2000);
// 70% Brightness
light.Brightness = 70;
Thread.Sleep(2000);
// Switch light off
light.Off()

主动传感器

有源传感器类是所有有源传感器继承的通用类,包括有源电机。它们包含一组关于它们如何连接到Build HAT、模式、详细的Combi模式、硬件、软件版本和一个名为 ValueAsString 的特定属性的属性。字符串形式的值包含作为字符串集合的最后一个测量值。测量值像 P0C0: +23 -42 0 一样到达,枚举将包含 P0C0:+23-420。这是这样做的,所以如果你使用高级模式并管理自己的Combi模式和命令,你将能够获得测量值。

所有活动传感器都可以运行特定的测量模式或Combi模式。您可以使用 SelectModeAndReadSelectCombiModesAndRead 功能通过高级模式设置一个,并使用您希望持续使用的特定模式。重要的是要了解更改模式或设置新模式将停止以前的模式。

CombiModes 属性中列出了可以在Combi模式中组合的模式。当您设置其中一种模式时,传感器的属性将自动更新。

WeDo 倾斜传感器

WeDo Tilt sensor
WeDo倾斜传感器,https://www.bricklink.com/v2/catalog/catalogitem.page?S=45305-1&name=WeDo%202.0%20Tilt%20Sensor&category=%5BEducational%20&%20Dacta%5D%5BWeDo%5D#T=S&O={%22icOnly%22:0}[图片来自Bricklink]

WeDo倾斜传感器具有特殊的 Tilt 属性。类型是一个点,X是X倾斜,Y是Y倾斜。值从-45到+45,它们被限制为这些值并表示度数。

您可以使用 ContinuousMeasurement 属性设置此传感器的连续测量。

brick.WaitForSensorToConnect(SensorPort.PortA);
var tilt = (WeDoTiltSensor)brick.GetSensor(SensorPort.PortA);
tilt.ContinuousMeasurement = true;
Point tiltValue;
while(!console.KeyAvailable)
{
    tiltValue = tilt.Tilt;
    console.WriteLine($"Tilt X: {tiltValue.X}, Tilt Y: {tiltValue.Y}");
    Thread.Sleep(200);
}

WeDoDistance 传感器

WeDo Distance sensor
WeDo距离传感器,https://www.bricklink.com/v2/catalog/catalogitem.page?S=45304-1&name=WeDo%202.0%20Motion%20Sensor&category=%5BEducational%20&%20Dacta%5D%5BWeDo%5D#T=S&O={%22icOnly%22:0}[图片来自Bricklink]

WeDo距离传感器通过距离属性为您提供以毫米为单位的距离。

brick.WaitForSensorToConnect(SensorPort.PortA);
var distance = (WeDoDistanceSensor)brick.GetSensor(SensorPort.PortA);
distance.ContinuousMeasurement = true;
while(!console.KeyAvailable)
{
    console.WriteLine($"Distance: {distance.Distance} mm");
    Thread.Sleep(200);
}

SPIKE Prime 力传感器

spike force sensor
力传感器,https://www.bricklink.com/v2/catalog/catalogitem.page?P=37312c01&name=Electric%20Sensor,%20Force%20-%20Spike%20Prime和category=%5BElectric%5D#T=C&C=11[图片来自Bricklink]

该力传感器测量施加在其上的压力以及是否被按压。可以通过 ForceIsPressed 属性访问这两个属性。

brick.WaitForSensorToConnect(SensorPort.PortA);
var force = (ForceSensor)brick.GetSensor(SensorPort.PortA);
force.ContinuousMeasurement = true;
while(!force.IsPressed)
{
    console.WriteLine($"Force: {force.Force} N");
    Thread.Sleep(200);
}

SPIKE Essential 3×3 Colour Light Matrix

spike 3×3 matrix
spike 3×3矩阵,https://www.bricklink.com/v2/catalog/catalogitem.page?P=45608c01&name=Electric,%203%20x%203%20Color%20Light%20Matrix%20-%20SPIKE%20Prime和category=%5BElectric%5D#T=C[图片来自Bricklink]

这是一个小型3×3显示器,带有9个不同的LED,可以单独控制。该类公开了能够控制屏幕的功能。以下是使用它们的示例:

brick.WaitForSensorToConnect(SensorPort.PortA);
var matrix = (ColorLightMatrix)brick.GetSensor(SensorPort.PortA);
for(byte i = 0; i < 10; i++)
{
    // Will light every led one after the other like a progress bar
    matrix.DisplayProgressBar(i);
    Thread.Sleep(1000);
}

for(byte i = 0; i < 11; i++)
{
    // Will display the matrix with the same color and go through all of them
    matrix.DisplayColor((LedColor)i);
    Thread.Sleep(1000);
}

Span<byte> brg = stackalloc byte[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Span<LedColor> col = stackalloc LedColor[9] { LedColor.White, LedColor.White, LedColor.White,
  LedColor.White, LedColor.White, LedColor.White, LedColor.White, LedColor.White, LedColor.White };
// Shades of grey
matrix.DisplayColorPerPixel(brg, col);

SPIKE Prime 颜色传感器和颜色与距离传感器

SPIKE颜色传感器:

spike color sensor
spike颜色传感器,https://www.bricklink.com/v2/catalog/catalogitem.page?P=37308c01&name=Electric%20Sensor,%20Color%20-%20Spike%20Prime和category=%5BElectric%5D#T=C&C=11[图片来自Bricklink]

颜色和距离传感器:

Colour distance sensor
颜色距离传感器、https://www.bricklink.com/v2/catalog/catalogitem.page?P=bb0891c01&name=Electric%20Sensor、%20Color%20and%20Distance%20-%20Boost和category=%5BElectric%5D#T=C&C=1[图片来自Bricklink]

这些颜色传感器具有多种特性和功能。您可以获得 ColorReflectedLightAmbiantLight

除此之外,颜色和距离传感器可以测量 Distance 并有一个物体 Counter。它将自动计算进出范围的物体数量。这确实允许计算从传感器前面经过的物体。距离限制在0到10厘米之间。

brick.WaitForSensorToConnect(SensorPort.PortC);

var colorSensor = (ColorAndDistanceSensor)brick.GetActiveSensor(SensorPort.PortC);
while (!Console.KeyAvailable)
{
    var colorRead = colorSensor.GetColor();
    Console.WriteLine($"Color:     {colorRead}");
    var reflected = colorSensor.GetReflectedLight();
    Console.WriteLine($"Reflected: {reflected}");
    var ambiant = colorSensor.GetAmbiantLight();
    Console.WriteLine($"Ambiant:   {ambiant}");
    var distance = colorSensor.GetDistance();
    Console.WriteLine($"Distance: {distance}");
    var counter = colorSensor.GetCounter();
    Console.WriteLine($"Counter:  {counter}");
    Thread.Sleep(200);
}
Note
为了更好的测量,不建议以非常快速的方式更改测量模式,颜色集成可能无法以正确的方式完成。这个例子为您提供了使用传感器可以做什么的全部光谱。此外,这个类不实现连续测量模式。您可以使用 SelectModeAndRead 功能通过高级模式设置一个,并使用您想要的特定模式。重要的是要理解更改模式或设置新模式将停止以前的模式。

SPIKE Prime 超声波距离传感器

Spike distance sensor
距离传感器,https://www.bricklink.com/v2/catalog/catalogitem.page?P=37316c01&name=Electric%20Sensor,%20Distance%20-%20Spike%20Prime和category=%5BElectric%5D#T=C&C=11[图片来自Bricklink]

这是一个距离传感器,它确实实现了一个 Distance 属性,该属性将以毫米为单位给出距离。ContinuousMeasurement 模式也可用在这个上。

brick.WaitForSensorToConnect(SensorPort.PortA);
var distance = (UltrasonicDistanceSensor)brick.GetSensor(SensorPort.PortA);
distance.ContinuousMeasurement = true;
while(!console.KeyAvailable)
{
    console.WriteLine($"Distance: {distance.Distance} mm");
    Thread.Sleep(200);
}

更多资料

你可以从下面链接下载文档,

Python Library 文档的完整详细信息也可以在 ReadTheDocs上找到。您可以在 .NET IoT Github 存储库中找到有关 .NET 库的更多信息。

您还可以关注树莓派基金会的项目,

设备兼容性

Build HAT 库支持SPIKE™产品组合中包含的所有乐高®技术™设备,以及乐高®头脑风暴机器人发明家套件和其他使用PoweredUp连接器的设备。

Important
包含Maker Plate的SPIKE™Prime扩展套件的产品代码为45681。原始扩展套件为45680,不包括Maker Plate。
描述 颜色 乐高产品编号 FW 支持 Python 支持 Alt 编号 BrickLink 可用编号 套装编号 类别 类型 设备 ID

Large Angular Motor

White/Cyan

45602

Yes

Yes

45602

Link

SPIKE Prime Set, SPIKE Prime Expansion Set

45678, 45680

Motor

Active

31

Medium Angular Motor

White/Cyan

45603

Yes

Yes

45603

Link

SPIKE Prime Set

45678

Motor

Active

30

Medium Angular Motor

White/Grey

6299646, 6359216, 6386708

Yes

Yes

436655

Link

Mindstorms Robot Inventor

51515

Motor

Active

4B

Small Angular Motor

White/Cyan

45607, 6296520

Yes

Yes

Link

SPIKE Essentials Set

Motor

Active

41

Light/Colour sensor

White/Black

6217705

Yes

Yes

Link

SPIKE Prime Set, SPIKE Prime Expansion Set, Mindstorms Robot Inventor, SPIKE Essentials

45678, 45680, 51515

ColorSensor

Active

3D

Distance Sensor

White/Black

6302968

Yes

Yes

Link

SPIKE Prime Set, Mindstorms Robot Inventor

45678, 51515

DistanceSensor

Active

3E

System medium motor

White/Grey

45303, 6138854, 6290182, 6127110

Yes

Yes

Wedo 2.0, LEGO Ideas Piano, App controlled Batmobile

76112

Passive

1

Force Sensor

White/Black

6254354

Yes

Yes

45606

Link

SPIKE Prime Set

45678

ForceSensor

Active

3F

3×3 LED

White/Cyan

45608, 6297023

Yes

Yes

Link

SPIKE Essentials

Matrix

Active

40

System train motor

Black

88011

Yes

Yes

28740, 88011-1

Link

Cargo Train, Disney Train and Station, Passenger Train

Passive

2

PoweredUp LED lights

Black

88005

Yes

Link

Passive

8

Medium linear motor

White/Grey

88008

Yes

Yes

26913, 88008-1

Link

Boost, Droid Commander

Motor

Active

26

Technic large motor

Grey/Grey

88013

Yes

Yes

22169

Link

Active

2E

Technic XL motor

Grey/Grey

88014

Yes

Yes

22172, 88014

Link

Active

2F

Colour + distance sensor

White/Grey

88007

Partial

?

26912

Link

Active

25

WeDo 2.0 Motion sensor

White/Grey

45304, 6138855

5003423-1

Link

Active

35

WeDo 2.0 Tilt sensor

White/Grey

45305, 6138856

5003423-1

Link

Active

34

机械图纸

Raspberry Pi Build HAT的机械绘图。

mech build hat