Skip to main content

Grove Arduino 初学者套件

Grove Arduino 初学者套件是最适合初学者的 Arduino 初学者套件之一。它包含一个 Arduino 兼容板和 10 个额外的 Arduino 传感器,全部采用一体化 PCB 设计。所有模块都已通过 PCB 邮票孔连接到 Seeeduino,因此无需 Grove 线缆连接。当然,您也可以将模块取出并使用 Grove 线缆连接模块。您可以使用这个 Grove Arduino 初学者套件构建任何您喜欢的 Arduino 项目。

硬件概述

旧版本(2025 年 10 月之前)↓

新版本(2025 年 10 月之后)↓

新旧版本迭代说明

与之前版本相比,此新版本更新了某些已停产的传感器。DHT11 温湿度传感器已替换为 DHT20 温湿度传感器;BMP280 气压传感器已替换为 SPA06-003 气压传感器。

注意: 尺寸 - 17.69 11.64 1.88cm

  1. Grove - LED 简单 LED 模块
  2. Grove - Buzzer 压电蜂鸣器
  3. Grove - OLED Display 0.96" 128×64 点分辨率,高亮度、自发光和高对比度,紧凑设计的大屏幕,低功耗。
  4. Grove - Button 瞬时按钮
  5. Grove - Rotary Potentiometer 可调电位器
  6. Grove - Light 检测周围光照强度
  7. Grove - Sound 检测周围声音强度
  8. Grove - Temperature & Humidity Sensor 检测周围温度和湿度值。旧版本使用 DHT11 传感器,2025.10 之后的版本使用 DHT20 传感器。
  9. Grove - Air Pressure Sensor: 检测周围大气压力
  1. Grove - 3-Axis Accelerator 检测物体加速度
  2. Seeeduino Lotus 带 Grove 接口的 Arduino 兼容板

注意: 默认情况下,Grove 模块通过 PCB 邮票孔连接到 Seeeduino。这意味着如果没有分离,您无需使用 Grove 线缆连接。默认引脚如下:

模块接口引脚/地址
LED数字D4
蜂鸣器数字D5
OLED Display 0.96"I2CI2C, 0x78(默认)
按钮数字D6
旋转电位器模拟A0
光线模拟A6
声音模拟A2
温湿度传感器数字D3
气压传感器I2CI2C, 0x77(默认) / 0x76(可选)
3 轴加速度计I2CI2C, 0x19(默认)

分离说明

注意: 使用刀具时请小心不要割伤手部

如果您希望在其他地方使用模块,那么您可以简单地按照程序将模块分离出来!

步骤 1

使用刀具或尖锐物体在连接传感器的邮票孔处切割

步骤 2

上下摇动模块,它应该很容易就能取出来!

零件清单

模块数量
传感器
温湿度传感器x1
3 轴加速度计x1
气压传感器x1
光线传感器x1
声音传感器x1
输入模块
旋转电位器x1
按钮x1
输出模块
LEDx1
蜂鸣器x1
显示模块
OLED 显示屏x1
Grove 线缆x6
Micro USB 线缆(旧版本)/ USB 线缆(2025 年 10 月新版本)x1

学习目标

  • 开源硬件系统基础。
  • Arduino 编程基础。
  • 传感器通信原理和方法。
  • 开源硬件项目的实际实现。

即插即用开箱演示

Grove 初学者套件具有即插即用的开箱演示,当您首次为板子通电时,您可以一次性体验所有传感器!使用按钮和旋转电位器来体验每个传感器演示!

  • 滚动 -> 旋转旋转电位器
  • 选择 -> 短按按钮
  • 退出当前演示 -> 长按按钮

蜂鸣器和 LED 模块用于按键提示。

如何开始使用 Arduino

安装 Arduino IDE

  • Arduino IDE 是 Arduino 的集成开发环境,用于单片机软件编程、下载、测试等。
  • 在此处下载并安装适用于您所需操作系统的 Arduino IDE

安装 USB 驱动程序

  • Arduino 通过 USB 线缆连接到 PC。USB 驱动程序取决于您在 Arduino 上使用的 USB 芯片类型。注意:USB 芯片通常印在开发板的背面。

    • 下载 CP2102 USB 驱动程序注意: 根据您的操作系统下载。
    • 驱动程序安装完成后,用 USB 线缆将 Arduino 连接到 PC 的 USB 端口。
      • 对于 Windows 用户: 您可以在 我的电脑 -> 属性 -> 硬件 -> 设备管理器 中看到它。将出现一个 COM 端口。
      • 对于 Mac OS 用户: 您可以导航到左上角的 ``,然后选择 关于本机 -> 系统报告... -> USB。应该会出现 CP2102 USB 驱动程序。
    • 如果驱动程序未安装,或者驱动程序安装不正确(与芯片型号不匹配),它将在设备管理器中显示为"未知设备"。此时,应重新安装驱动程序。

启动 Arduino IDE

1.在您的 PC 上打开 Arduino IDE。 2.点击 Tools -> Board-> Arduino AVR Boards-> Arduino Uno 选择正确的开发板型号。选择 Arduino Uno 作为开发板。

3.点击 Tools -> Port 选择正确的端口(上一步在设备管理器中显示的串行端口)。在这种情况下,选择 COM11对于 Mac OS 用户,应该是 /dev/cu.SLAB_USBtoUART

4.创建一个新的 Arduino 文件并将其命名为 Hello.ino,然后将以下代码复制到其中:

void setup() {
Serial.begin(9600); // initializes the serial port with a baud rate of 9600
}
void loop() {
Serial.println("hello, world"); // prints a string to a serial port
delay(1000); //delay of 1 second
}

5.在 Arduino IDE 的左上角,有两个按钮,验证和上传。首先,按验证按钮(✓)进行编译。编译成功后,按上传按钮(→)。

6.导航到 Tools -> Serial Monitor,或点击右上角的 Serial Monitor(放大镜符号),您可以看到程序运行结果:

注意: 如果您从我们的 USB 驱动器安装了便携式 Arduino IDE,您可以在 Files -> Sketch Book 中找到所有模块演示,以及所有模块库,都已预装在 Arduino IDE 中!

注意: 所有模块都预先连接在单个电路板上,因此不需要线缆和焊接。但是,如果您分离模块并想用 Grove 线缆连接它们,请查看分离指南。

课程指南

课程 1:LED 闪烁

我们已经完成了输出"Hello world"程序。现在让我们学习如何点亮 LED 模块。我们知道控制系统的三个基本组件:输入、控制和输出。但点亮 LED 只使用输出,不使用输入。Seeeduino 是控制单元,LED 模块是输出单元,输出信号是数字信号。

背景信息:

  • 什么是数字信号

数字信号: 数字信号是指幅度值离散的信号,幅度限制在有限数量的值内。在我们的控制器中,数字信号有两种状态:LOW(0V)表示 0;HIGH(5V)表示 1。因此向 LED 发送 HIGH 信号可以点亮它。

Alt text

涉及的组件

  1. Seeeduino Lotus
  2. Grove LED
  3. Grove 连接线(如果分离使用)

硬件连接

  • 模块连接
    • 通过 PCB 邮票孔默认连接。
  • 通过 USB 线将 Seeeduino 连接到计算机。

-软件代码

  • 打开 Arduino IDE。
  • 复制以下代码,点击验证以检查语法错误。确认没有错误后,您可以上传代码。
//LED Blink
//The LED will turn on for one second and then turn off for one second
int ledPin = 4;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}

代码分析

setup(){
}

setup() 函数在程序开始时被调用。使用它来初始化变量、引脚模式、开始使用库等。setup() 函数在每次 Arduino 板上电或复位后只运行一次。

loop(){
}

在创建了初始化和设置初始值的 setup() 函数后,loop() 函数正如其名称所示,连续循环,允许您的程序改变和响应。使用它来主动控制 Arduino 板。

int ledPin = 4;

描述:

将值转换为 int 数据类型。

语法:

int(x) 或 (int)x(C 风格类型转换)

参数:

x:一个值。允许的数据类型:任何类型。

int 类型的 4 赋值给名为 ledPin 的变量。

pinMode(ledPin, OUTPUT);

描述:

配置指定引脚的行为,使其作为输入或输出。有关引脚功能的详细信息,请参阅数字引脚页面。

从 Arduino 1.0.1 开始,可以使用 INPUT_PULLUP 模式启用内部上拉电阻。此外,INPUT 模式明确禁用内部上拉电阻。

语法:

pinMode(pin, mode)

参数:

pin:要设置模式的 Arduino 引脚编号。

modeINPUTOUTPUTINPUT_PULLUP

将 ledPin 设置为输出模式。

digitalWrite(ledPin, HIGH);

描述:

向数字引脚写入 HIGHLOW 值。

如果引脚已通过 pinMode() 配置为 OUTPUT,其电压将设置为相应值:HIGH 为 5V(或 3.3V 板上为 3.3V),LOW 为 0V(接地)。

如果引脚配置为 INPUT,digitalWrite() 将启用(HIGH)或禁用(LOW)输入引脚上的内部上拉电阻。建议将 pinMode() 设置为 INPUT_PULLUP 以启用内部上拉电阻。有关更多信息,请参阅数字引脚教程。

如果您没有将 pinMode() 设置为 OUTPUT,并将 LED 连接到引脚,当调用 digitalWrite(HIGH) 时,LED 可能显得暗淡。如果没有明确设置 pinMode(),digitalWrite() 将启用内部上拉电阻,它充当大的限流电阻。

语法:

digitalWrite(pin, value)

参数:

pin:Arduino 引脚编号。

valueHIGHLOW

当我们将 ledPin 设置为输出时,HIGH 意味着向引脚发送高电平,LED 点亮。

digitalWrite(ledPin, LOW);

当我们将 LED 设置为输出时,LOW 表示向引脚发送低电平,LED 熄灭。

delay(1000);

描述:

暂停程序指定的时间(以毫秒为单位)。(1 秒有 1000 毫秒。)

语法:

delay(ms)

参数:

ms:要暂停的毫秒数。允许的数据类型:unsigned long。

延迟程序 1000ms(1 秒)。

演示效果和串口打印结果:

LED 模块将 1 秒亮,1 秒灭。

LED 亮度调节:


在 Grove LED 模块上,有一个可以用螺丝刀调节的可变电阻器。 转动它可以让 LED 更亮!

分离指南

如果模块从板上分离。使用 Grove 连接线将 Grove LED 连接到 Seeeduino Lotus 的数字接口 D4

课程 2:按下按钮点亮 LED

我们首先需要知道的是,按钮的输入是数字信号,只有两种状态,0 或 1,因此我们可以基于这两种状态控制输出。

  • 练习: 使用按钮打开和关闭 LED 模块

涉及的组件

  1. Seeeduino Lotus
  2. Grove LED
  3. Grove 按钮
  4. Grove 连接线(如果分离使用)

硬件连接

  • 模块连接:

    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线将 Seeeduino 连接到计算机。

  • 硬件分析

    • 输入:按钮
    • 控制:Seeeduino
    • 输出:LED 模块

传感器和 LED 都使用数字信号,因此它们应该连接到数字接口。

  • 软件代码
    • 打开 Arduino IDE。
    • 复制以下代码,点击验证以检查语法错误。确认没有错误后,您可以上传代码。
//Button to turn ON/OFF LED
//Constants won't change. They're used here to set pin numbers:
const int buttonPin = 6; // the number of the pushbutton pin
const int ledPin = 4; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}

代码分析

pinMode(ledPin, OUTPUT);

将 LED 定义为输出单元。

pinMode(buttonPin, INPUT);

将按钮定义为输入单元。

buttonState = digitalRead(buttonPin);

描述:

从指定的数字引脚读取值,HIGHLOW

语法:

digitalRead(pin)

参数:

pin:您要读取的 Arduino pin 编号

此函数用于读取数字引脚的状态,HIGH 或 LOW。当按钮被按下时,状态为 HIGH,否则为 LOW。

  if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}

描述:

if…​else 通过允许对多个测试进行分组,比基本的 if 语句提供了对代码流的更大控制。如果 if 语句中的条件结果为 false,则执行 else 子句(如果存在)。else 可以继续另一个 if 测试,因此可以同时运行多个互斥测试。

每个测试将继续到下一个,直到遇到真测试。当找到真测试时,运行其关联的代码块,然后程序跳到整个 if/else 构造之后的行。如果没有测试证明为真,则执行默认的 else 块(如果存在),并设置默认行为。

请注意,else if 块可以与终止 else 块一起使用或不使用,反之亦然。允许无限数量的此类 else if 分支。

语法:

if (condition1) {
// do Thing A
}
else if (condition2) {
// do Thing B
}
else {
// do Thing C
}

该语句的用法是:如果括号中的逻辑表达式为真,则执行 if 后大括号中的语句,如果不是,则执行 else 后大括号中的语句。如果按钮的状态为高,LED 引脚输出高电平并点亮 LED,否则关闭 LED。

演示效果和串口打印结果:

按下按钮将点亮 LED 模块。

分离指南

使用 Grove 连接线将 Grove LED 连接到 Seeeduino Lotus 的数字接口 D4。将 Grove 按钮连接到数字接口 D6

课程 3:控制闪烁频率

在上一节中,我们学习了按钮只有两种状态,ON/OFF 状态对应 0V 和 5V,但在实践中,我们经常遇到需要许多状态的情况,而不仅仅是 0V 和 5V。那么您需要使用模拟信号!旋转电位器是使用模拟信号的经典例子。

背景信息:

  • 什么是模拟信号

模拟信号: 信号在时间和值上连续变化,信号的幅度、频率或相位在任何时候都连续变化,例如当前广播的声音信号或图像信号等。模拟信号有正弦波和三角波等。您的微控制器的模拟引脚可以在 0V 和 5V 之间映射到 0 到 1023 的范围,其中 1023 映射为 5V,512 映射为 2.5V 等。

Alt text

涉及的组件

  1. Seeeduino Lotus
  2. Grove LED
  3. Grove 旋转开关
  4. Grove 连接线(如果分离使用)

硬件连接

  • 模块连接:

    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线将 Seeeduino 连接到计算机。

  • 硬件分析:

    • 输入:旋转电位器
    • 控制:Seeeduino Lotus
    • 输出:LED 模块

输入是模拟信号,因此连接到模拟信号接口,LED 模块连接到数字信号接口。

软件

  • 打开 Arduino IDE。
  • 复制以下代码,点击验证以检查语法错误。验证没有错误后,您可以上传代码。
//Rotary controls LED
int rotaryPin = A0; // select the input pin for the rotary
int ledPin = 4; // select the pin for the LED
int rotaryValue = 0; // variable to store the value coming from the rotary

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
pinMode(rotaryPin, INPUT);
}

void loop() {
// read the value from the sensor:
rotaryValue = analogRead(rotaryPin);
// turn the ledPin on
digitalWrite(ledPin, HIGH);
// stop the program for <sensorValue> milliseconds:
delay(rotaryValue);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
// stop the program for for <sensorValue> milliseconds:
delay(rotaryValue);
}

代码分析

int rotaryPin = A0;    // select the input pin for the rotary
int ledPin = 4; // select the pin for the LED

说明:

您可能会发现我们以不同的方式定义 rotatePin 和 ledPin。这是因为旋转电位器产生模拟信号,而 LED 由数字信号控制。

定义模拟引脚,使用 A + 引脚编号(例如这里的 A0)。

定义数字引脚,只使用引脚编号(例如这里的 4)。

rotaryValue = analogRead(rotaryPin);

说明:

从指定的模拟引脚读取值。Arduino 开发板包含一个多通道、10 位模数转换器。这意味着它将 0 和工作电压(5V 或 3.3V)之间的输入电压映射为 0 到 1023 之间的整数值。例如,在 Arduino UNO 上,这产生的读数分辨率为:5 伏特 / 1024 单位,或每单位 0.0049 伏特(4.9 mV)。

语法:

analogRead(pin)

参数:

pin:要读取的模拟输入引脚的名称(大多数开发板上为 A0 到 A5)。

返回值: 引脚上的模拟读数。虽然它受限于模数转换器的分辨率(10 位为 0-1023 或 12 位为 0-4095)。数据类型:int。

此函数用于读取模拟引脚的值(旋转传感器位置),值的范围是:0 ~ 1023。

delay(rotaryValue);

延迟函数,延迟的毫秒持续时间是括号中的值。因为该值是正在读取的旋钮引脚的模拟信号值,所以延迟时间可以通过旋钮控制。

演示效果和串口打印结果:

转动电位器将改变 LED 闪烁的频率。

分离指南

使用 Grove 线缆将 LED 连接到 Seeeduino Lotus 的数字接口 D4,并使用 Grove 线缆将 Grove 旋转开关连接到模拟信号接口 A0

第 4 课:让蜂鸣器发出哔哔声

就像 LED 模块一样,蜂鸣器也是一个输出模块,它不是点亮而是产生哔哔声。这可以用于许多指示目的的情况。让我们学习如何使用蜂鸣器产生声音!

背景信息:

  • 有源蜂鸣器和无源蜂鸣器的区别是什么

有两种类型的蜂鸣器,一种是有源的,另一种是无源的。有源和无源蜂鸣器都用于为电子设备发声。

有源蜂鸣器具有内部振荡源,只要施加电源就会使蜂鸣器发声。有源蜂鸣器广泛用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话、定时器和其他电子产品的发声设备。

无源蜂鸣器没有内部振荡源,需要由方波不同频率驱动。它就像一个电磁扬声器,变化的输入信号产生声音,而不是自动产生音调。

在这个套件中,Grove-蜂鸣器是无源蜂鸣器,因此需要交流信号来控制它。这就引出了下一个问题,如何用 Arduino 产生方波(交流信号)!一个简单的方法是使用 PWM。

  • 什么是 PWM

脉宽调制,或 PWM,是一种通过数字方式获得模拟结果的技术。数字控制用于创建方波,即在开和关之间切换的信号。这种开关模式可以通过改变信号开启时间与信号关闭时间的比例来模拟全开(5 伏特)和关闭(0 伏特)之间的电压。"开启时间"的持续时间称为脉宽。要获得变化的模拟值,您需要改变或调制该脉宽。如果您足够快地重复这种开关模式,结果就像信号是 0 到 5v 之间的稳定电压作为交流信号。参考:Arduino。然后可以使用此 PWM 信号轻松控制无源蜂鸣器。

要在 Arduino 中生成 PWM 信号,您可以使用 analogWrite(),与使用 digitalWrite() 生成直流信号相对。

您的 Seeeduino 上有六个标有符号"~"的数字引脚,这意味着它们可以发出 PWM 信号:3、5、6、9、10、11。它们被称为 PWM 引脚。

涉及的组件

  1. Seeeduino Lotus
  2. Grove 蜂鸣器
  3. Grove 线缆(如果分离)

硬件连接

  • 模块连接
    • 通过 PCB 邮票孔的默认连接。
  • 通过 USB 线缆将 Seeeduino 连接到计算机。

软件代码

  • 打开 Arduino IDE。
  • 复制以下代码,点击验证以检查语法错误。验证没有错误后,您可以上传代码。
int BuzzerPin = 5;

void setup() {
pinMode(BuzzerPin, OUTPUT);
}

void loop() {
analogWrite(BuzzerPin, 128);
delay(1000);
analogWrite(BuzzerPin, 0);
delay(0);
}

代码分析

analogWrite(BuzzerPin, 128);

说明:

向引脚写入模拟值(PWM 波)。可用于以不同亮度点亮 LED 或以不同速度驱动电机。调用 analogWrite() 后,引脚将生成指定占空比的稳定矩形波,直到下次调用 analogWrite()(或在同一引脚上调用 digitalRead() 或 digitalWrite())。

语法:

analogWrite(pin, value)

参数:

pin:要写入的 Arduino 引脚。允许的数据类型:int。

value:占空比:在 0(始终关闭)和 255(始终开启)之间。允许的数据类型:int。

向蜂鸣器写入模拟值(PWM 波)。

演示效果和串口打印结果:

蜂鸣器发出哔哔声。

分离指南

使用 Grove 线缆将 Grove 蜂鸣器连接到 Seeeduino Lotus 的数字接口 D5


PWM 使用

现在我们已经学会了 PWM 的使用,除了使用 PWM 控制无源蜂鸣器外,我们还可以使用 PWM 控制电机的速度和 LED 灯的亮度等。

如下图所示,使用 analogWrite() 生成 PWM 波,占空比百分比越高,LED 越亮。

但是,Grove 初学者套件上的 LED 模块不能直接由 PWM 控制,因为 LED 模块连接到 D4,如上所述,PWM 引脚是 3、5、6、9、10、11,而引脚 4 不是 PWM 引脚。如果您想用 PWM 控制 LED,您需要将其拔下并使用 Grove 线缆连接到具有 PWM 功能的 Grove 端口。

例如,让我们使用 Grove 线缆将 Grove-LED 连接到 D3

!!!Note D3 也与 Grove-温湿度传感器相互连接,因此此示例不能与 Grove-温湿度传感器一起使用。

int LED = 3; // Cable connection from LED to D3
int Potentiometer = A0;

void setup() {
pinMode(LED, OUTPUT);
pinMode(Potentiometer, INPUT);
}

void loop() {
int potentioValue, Value;
potentioValue = analogRead(Potentiometer);
Value = map(potentioValue, 0, 1023, 0, 255); //Mapping potentiometer value to PWM signal value
analogWrite(LED, Value);
}

编译并上传代码后,您应该能够使用 PWM 信号扭转和调整 LED 亮度!

代码分析

Value = map(potentioValue, 0, 1023, 0, 255);

说明:

将数字从一个范围重新映射到另一个范围。也就是说,fromLow 的值将被映射到 toLowfromHigh 的值映射到 toHigh,中间的值映射到中间的值,等等。

不会将值限制在范围内,因为超出范围的值有时是有意的和有用的。如果需要限制范围,可以在此函数之前或之后使用 constrain() 函数。

请注意,任一范围的"下界"可能大于或小于"上界",因此 map() 函数可用于反转数字范围,例如

y = map(x, 1, 50, 50, 1);

该函数也能很好地处理负数,所以这个例子

y = map(x, 1, 50, 50, -100);

也是有效的并且工作良好。

map() 函数使用整数运算,因此当数学运算可能表明应该产生分数时,它不会产生分数。小数余数被截断,不会四舍五入或平均。

语法:

map(value, fromLow, fromHigh, toLow, toHigh)

参数:

value:要映射的数字。

fromLow:值当前范围的下界。

fromHigh:值当前范围的上界。

toLow:值目标范围的下界。

toHigh:值目标范围的上界。

将电位器传感器模拟信号(0 到 1023)映射到 LED 亮度(0 到 255)。

演示效果和串口打印结果:

调节电位器来调节 LED 亮度。

总之,当您想要使用 PWM 功能时,请确保选择那些名称前带有"~"符号的引脚。

课程 5:制作光感应 LED

光传感器包含一个光敏电阻来测量光强度。光敏电阻的阻值随着光强度的增加而减小。如果周围环境较暗,LED 将点亮;如果周围环境较亮,LED 将保持熄灭。

在接下来的章节中,我们将使用串口监视器来观察传感器的结果,所以这里先简单介绍一下!

背景信息:

  • 什么是串口监视器

串口监视器是在 Arduino 上观察结果的有用工具,它在打印传感器结果或一般调试方面非常有用。您还可以通过串口监视器向控制器发送数据来执行某些任务!注意:确保串口数据传输与代码匹配。

您可以通过点击 Tools -> Serial Monitor 来打开串口监视器。

涉及的组件

  1. Seeeduino Lotus
  2. Grove LED
  3. Grove 光传感器
  4. Grove 连接线(如果分离使用)

硬件连接

  • 模块连接:

    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线将 Seeeduino 连接到计算机。

  • 硬件分析:

    • 输入:光传感器
    • 控制:Seeeduino Lotus
    • 输出:LED 模块

软件代码

  • 打开 Arduino IDE。
  • 复制以下代码,点击 Verify 检查语法错误。确认没有错误后,您可以上传代码。
// Light Switch
int sensorpin = A6; // Analog input pin that the sensor is attached to
int ledPin = 4; // LED port
int sensorValue = 0; // value read from the port
int outputValue = 0; // value output to the PWM (analog out)

void setup() {
pinMode(ledPin,OUTPUT);
pinMode(sensorpin, INPUT);
Serial.begin(9600);
}

void loop() {
// read the analog in value:
sensorValue = analogRead(sensorpin);

Serial.println(sensorValue);

if (sensorValue < 200) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}

delay(200);
}

您还可以从串口监视器中查看光强度读数,导航到 Tools -> Serial Monitor

代码分析

Serial.begin(9600);

描述:

设置串口数据传输的数据速率(波特率),单位为每秒位数(baud)。与串口监视器通信时,请确保使用其屏幕右下角菜单中列出的波特率之一。但是,您可以指定其他速率 - 例如,通过引脚 0 和 1 与需要特定波特率的组件通信。

可选的第二个参数配置数据位、奇偶校验位和停止位。默认值为 8 个数据位、无奇偶校验、一个停止位。

运行在计算机上的软件与开发板通信,波特率为 9600。

语法:

Serial.begin(speed)

参数:

speed:串口通信速度。例如 9600115200 等。

将串口波特率设置为 9600。

Serial.println(sensorValue);

描述:

将数据作为人类可读的 ASCII 文本打印到串口,后跟回车符(ASCII 13,或 '\r')和换行符(ASCII 10,或 '\n')。此命令采用与 Serial.print() 相同的形式。

语法:

Serial.println(val) 或 Serial.println(val, format)

参数:

val:要打印的值。允许的数据类型:任何数据类型。

format:指定数字基数(对于整数数据类型)或小数位数(对于浮点类型)。

串口打印光传感器的值。因此您在 IDE 界面上打开串口监视器,就可以看到输出传感器的值。

演示效果和串口打印结果:

如果环境较暗,LED 模块将点亮;如果环境较亮,LED 将保持熄灭。

分离指南

使用 Grove 连接线将 Grove LED 连接到 Seeeduino Lotus 的数字信号接口 D4,将 Grove 光传感器连接到 Seeeduino Lotus 的模拟信号接口 A6

课程 6:声音感应 LED 灯

声音传感器可以检测环境的声音强度,其输出也是模拟的。我相信大家都接触过声控灯,但现在我们可以自己制作一个,有了基础知识,这个实验对您来说会很容易。这里使用串口绘图器来可视化结果。

背景信息:

  • 什么是串口绘图器

串口绘图器类似于串口监视器,允许您将 Arduino 的串口数据实时绘制到计算机上。当需要可视化数据时,这非常有用。

您可以通过点击 Tools -> Serial Plotter 来打开串口绘图器。

  • 实践: 当发出声音时,LED 灯点亮。当没有声音且非常安静时,LED 灯熄灭。

涉及的组件

  1. Seeeduino Lotus
  2. Grove LED
  3. Grove 声音传感器
  4. Grove 连接线(如果分离使用)

硬件连接

  • 模块连接:
    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线将 Seeeduino 连接到计算机。

软件代码

  • 打开 Arduino IDE。
  • 复制以下代码,点击 Verify 检查语法错误。确认没有错误后,您可以上传代码。
//Sound Control Light
int soundPin = A2; // Analog sound sensor is to be attached to analog
int ledPin = 4; // Digital LED is to be attached to digital
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(soundPin, INPUT);
Serial.begin(9600);
}
void loop(){
int soundState = analogRead(soundPin); // Read sound sensor’s value
Serial.println(soundState);
// if the sound sensor’s value is greater than 400, the light will be on.
//Otherwise, the light will be turned off
if (soundState > 400) {
digitalWrite(ledPin, HIGH);
delay(100);
}else{
digitalWrite(ledPin, LOW);
}
}

您还可以从串口绘图器中查看光强度读数,导航到 Tools -> Serial Plotter

注意:您也可以根据周围的光强度调整数值。

代码分析

Serial.begin(9600);

运行在计算机上的软件与开发板通信,波特率为 9600。

Serial.print(" ");

此函数用于从串口输出数据,输出的是双引号中包含的内容。

Serial.println( );

此语句与上面的类似,除了 serial.println 有换行返回。

Serial.println(soundState);

串口打印声音传感器的值。因此您在 IDE 界面上打开串口监视器,就可以看到输出传感器的值。

演示效果和串口打印结果:

如果周围环境足够吵闹,LED 模块将点亮。

分离指南

使用 Grove 连接线将 Grove LED 连接到 Seeeduino Lotus 的数字信号接口 D4,将 Grove 声音传感器连接到 Seeeduino Lotus 的模拟信号接口 A2

课程 7:在 OLED 上显示数据

OLED 显示屏可用于许多情况,您可以用它来可视化传感器读数!

背景信息:

  • 什么是 Arduino 库

Arduino 环境可以通过使用库来扩展,就像大多数其他编程平台一样。库为草图中的使用提供额外的功能,例如与特定硬件配合使用或操作数据。要在草图中使用库,请从 Sketch -> Include Library 中选择它。

更多信息,请访问如何安装 Arduino 库

涉及的组件

  1. Seeeduino Lotus
  2. Grove OLED
  3. Grove 连接线(如果分离使用)

硬件连接

  • 模块连接:
    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线将 Seeeduino 连接到计算机。

软件代码

  • 打开 Arduino IDE。
  • 安装 U8g2 库:导航到 Sketch -> Include Library -> Manage Libraries...,在库管理器中搜索关键词"U8g2"。这是 oliver 的 u8g2 库,点击然后安装。

  • 复制以下代码,点击 Verify 检查语法错误。确认没有错误后,您可以上传代码。
#include <Arduino.h>
#include <U8x8lib.h>

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);

// U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display

void setup(void) {
//u8x8.setBusClock(100000); // If you breakout other modules, please enable this line
u8x8.begin();
u8x8.setFlipMode(1);
}

void loop(void) {
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.setCursor(0, 0);
u8x8.print("Hello World!");
}

!!!注意 如果您拆分所有模块并单独使用 Grove OLED,您可能会发现它无法与此代码一起工作。如果遇到此类问题,请参考本节末尾:拆分指南。

  • 代码分析
#include <>

描述:

#include 用于在您的程序中包含外部库。这使程序员能够访问大量标准 C 库(预制函数组),以及专门为 Arduino 编写的库。

请注意,#include#define 类似,没有分号终止符,如果您添加分号,编译器将产生神秘的错误消息。

#include <U8x8lib.h>

#include 是引入头文件的指令。这里我们使用 U8x8lib.h 库。

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);  

注意

如果您拆分其他模块并仅使用 OLED,您必须使用软件 I2C:

// U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);  

U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

描述:

一旦声明了对象,您就可以使用库中的函数。

u8x8.begin();

描述:

Arduino 环境中显示器的简化设置程序。请参阅设置指南以选择合适的 U8g2 构造函数。

语法:

u8x8.begin()

初始化 u8g2 库

u8x8.setFlipMode(1);

描述:

某些显示器支持内部帧缓冲区的 180 度旋转。此硬件功能可以通过此程序控制。重要提示:更改翻转模式后重新绘制完整显示器。最好先清除显示器,然后更改翻转模式,最后重新绘制内容。屏幕上任何现有内容的结果都将是未定义的。

语法:

u8x8.setFlipMode(mode)

参数:

mode01

将显示器翻转 180 度。

u8x8.setCursor();

描述:

为打印函数定义光标。打印函数的任何输出都将从此位置开始。

语法:

u8x8.setCursor(x, y)

参数:

x, y:打印函数光标的列/行位置。

设置绘制光标位置。

u8x8.setFont()

描述:

为字形和字符串绘制函数定义 u8x8 字体。

语法:

u8x8.setFont(font_8x8)

设置显示器的字体。

u8x8.print();

在 OLED 上绘制内容。

演示效果和串口打印结果:

在 OLED 显示器上打印 Hello World。

U8g2 库参考

如果您想了解更多关于 U8g2 库的信息,请参考这里

拆分指南

使用 Grove 线缆将 OLED 连接到 Seeeduino Lotus 的 I2C 接口(注意:I2C 的默认地址是 0x78)。

!!!注意

  • 如果您拆分其他模块来使用 OLED 但它不工作,或者您想使用最快的 OLED I2C(默认:40KHZ),请按照此说明操作:

点击 "This PC" -> Documents -> Arduino -> libraries -> U8g2 -> src -> U8x8lib.cpp -> 滑动到第 1334 行 -> 删除或禁用此行 -> 保存文件。

Wire.setClock(u8x8->bus_clock);   // just delete or disable this line

或者您可以将总线锁定设置为 100000,然后在 setup() 中添加。

void setup(void) {
u8x8.setBusClock(100000); // it for limit the I2C bus clock
u8x8.begin();
u8x8.setFlipMode(1);
}

第 8 课:检测周围温度和湿度

您是否曾经想知道周围环境的温度和湿度?想知道确切的数字?想根据温度决定今天穿裙子还是外套?让我们制作一个温度计!

背景信息:

  • 什么是协议信号(I2C)

协议信号: 我们使用的协议信号是 I2C,所以这里简要介绍一下 I2C。I2C 总线在设备之间传输信息连接时只需要两根线:SDA(串行数据线)和 SCL(串行时钟线)。

这两条线是双向 I/O 线,主要组件用于启动总线传输数据,并生成时钟以打开传输设备,此时任何被寻址的设备都被视为从设备。

总线上主从(发送方和接收方)之间的关系不是恒定的,而是取决于数据传输的方向。如果主机要向从设备发送数据,主机首先寻址从设备,然后主动向从设备发送数据,最后由主机终止数据传输。如果主机要从从设备接收数据,从设备首先由主机寻址。

然后主机接收从设备发送的数据,主机终止接收过程。在这种情况下,主机负责生成时序时钟并终止数据传输。

  • 实践: 让您的 OLED 显示器显示当前环境温度和湿度。

涉及的组件

  1. Seeeduino Lotus
  2. Grove OLED
  3. Grove 温度和湿度传感器
  4. Grove 线缆(如果拆分)

硬件连接

  • 模块连接:
    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线缆将 Seeeduino 连接到计算机。

注意

一些升级套件已配备 DHT20。如果您套件上的湿度和温度检测器是黑色的,那么检测器是 DHT20,其示例代码在 DHT11 之后。

软件代码(DHT11)

  • 打开 Arduino IDE。
  • 下载并安装所需的
  • 复制以下代码,点击 Verify 检查语法错误。验证没有错误后,您可以上传代码。
//Temperature and Humidity Sensor
#include "DHT.h"
#include <Arduino.h>
#include <U8x8lib.h>

#define DHTPIN 3 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);

void setup(void) {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
u8x8.begin();
u8x8.setPowerSave(0);
u8x8.setFlipMode(1);
}

void loop(void) {

float temp, humi;
temp = dht.readTemperature();
humi = dht.readHumidity();

u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.setCursor(0, 33);
u8x8.print("Temp:");
u8x8.print(temp);
u8x8.print("C");
u8x8.setCursor(0,50);
u8x8.print("Humidity:");
u8x8.print(humi);
u8x8.print("%");
u8x8.refreshDisplay();
delay(200);
}

软件代码(DHT20)

  • 打开 Arduino IDE。
  • 下载并安装所需的
  • 复制以下代码,点击 Verify 检查语法错误。验证没有错误后,您可以上传代码。
//Temperature and Humidity Sensor
#include "DHT.h"
#include <Arduino.h>
#include <U8x8lib.h>
#include "Wire.h"

#define DHTTYPE DHT20 // DHT 20

DHT dht(DHTTYPE);
#if defined(ARDUINO_ARCH_AVR)
#define debug Serial

#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM)
#define debug SerialUSB
#else
#define debug Serial
#endif

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);

void setup(void) {
debug.begin(115200);
debug.println("DHTxx test!");
Wire.begin();

/*if using WIO link,must pull up the power pin.*/
// pinMode(PIN_GROVE_POWER, OUTPUT);
// digitalWrite(PIN_GROVE_POWER, 1);

dht.begin();
dht.begin();
u8x8.begin();
u8x8.setPowerSave(0);
u8x8.setFlipMode(1);
}

void loop(void) {

float temp, humi;
temp = dht.readTemperature();
humi = dht.readHumidity();

u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.setCursor(0, 33);
u8x8.print("Temp:");
u8x8.print(temp);
u8x8.print("C");
u8x8.setCursor(0,50);
u8x8.print("Humidity:");
u8x8.print(humi);
u8x8.print("%");
u8x8.refreshDisplay();
delay(200);
}

点击右上角的 "Monitor" 并查看结果。

代码分析

float temp, humi;

定义变量来存储读数。

temp = dht.readTemperature();
humi = dht.readHumidity();

描述:

用于从传感器读取温度和湿度值的函数。

语法:

dht.readTemperature()dht.readHumidity()。返回类型:float。

调用这些函数来读取温度和湿度并将它们存储在定义的变量中。

演示效果和串口打印结果:

周围的温度和湿度出现在 OLED 屏幕上。

拆分指南

使用 Grove 线缆将 OLED 连接到 Seeeduino Lotus 的 I2C 接口(注意:I2C 的默认地址是 0x78)。将 Grove 温度和湿度传感器连接到 Seeeduino Lotus 的数字信号接口 D3

第 9 课:测量周围气压

Grove 气压传感器是用于测量大气压力的分线板。之前的版本(2025 年 10 月之前)使用 BMP280 传感器,而新版本(2025 年 10 月之后)使用 SPA06-003 传感器。两种传感器都可以准确测量温度和大气压力。由于大气压力随海拔高度变化,它们也可以测量某个地方的大致海拔高度。

涉及的组件

  1. Seeeduino Lotus
  2. Grove 气压传感器(BMP280 或 SPA06-003)
  3. Grove 线缆(如果拆分)

硬件连接

  • 模块连接:
    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线缆将 Seeeduino 连接到计算机。

软件代码

适用于 BMP280(2025 年 10 月之前的旧版本)

  • 打开 Arduino IDE。
  • 安装 Grove Barometer Sensor library:导航到 Sketch -> Include Library -> Manage Libraries... 并在 Library Manager 中搜索关键词 "Grove BMP280",然后安装。

  • 复制以下代码,点击 Verify 检查语法错误。确认没有错误后,您可以上传代码。
  • 在此程序中,气压传感器信息通过 I2C 总线从传感器发送到 Seeeduino,然后 Seeeduino 将其打印到串口监视器上。打开串口监视器查看结果。
//Air pressure detection
#include "Seeed_BMP280.h"
#include <Wire.h>

BMP280 bmp280;

void setup() {
Serial.begin(9600);
if (!bmp280.init()) {
Serial.println("Device not connected or broken!");
}
}

void loop() {

float pressure;

//get and print temperatures
Serial.print("Temp: ");
Serial.print(bmp280.getTemperature());
Serial.println("C"); // The unit for Celsius because original arduino don't support speical symbols

//get and print atmospheric pressure data
Serial.print("Pressure: ");
Serial.print(pressure = bmp280.getPressure());
Serial.println("Pa");

//get and print altitude data
Serial.print("Altitude: ");
Serial.print(bmp280.calcAltitude(pressure));
Serial.println("m");

Serial.println("\n");//add a line between output of different times.

delay(1000);
}

代码分析

#include <Wire.h>

#include 是引入头文件的指令。这里我们使用 Wire.h 库,该库包含在 Arduino IDE 中。

#include "Seeed_BMP280.h"

表示引入当前路径的 Seeed_BMP280.h 头文件。

if (!bmp280.init()) {
Serial.println("Device not connected or broken!");
}

描述:

使用 bmp280.init() 初始化气压传感器。进一步使用 if 条件检查是否正常启动,如果正常则跳过消息。如果初始化有问题,则打印消息,因为 ! 在编程中表示 NOT(非)。

语法:

bmp280.init()

如果气压传感器没有正常启动,则向串口监视器输出错误信息。

Serial.print(bmp280.getTemperature());

描述:

用于从传感器读取温度值的函数。

语法:

bmp280.getTemperature()。返回类型:float

将温度数据打印到串口监视器。

Serial.print(pressure = bmp280.getPressure());

描述:

用于从传感器读取气压值的函数。

语法:

bmp280.getPressure()。返回类型:float

打印当前气压。

Serial.print(bmp280.calcAltitude(pressure));

描述:

获取压力值并将其转换为海拔高度。

语法:

bmp280.calcAltitude(float)。返回类型:float

参数:

float:压力值。

打印海拔高度。

演示效果和串口打印结果:

气压读数显示在串口监视器上。

分离指南

使用 Grove 线缆将 Grove 气压传感器连接到 Seeeduino Lotus 的 I2C 接口(注意:I2C 默认地址为 0x77 或 0x76)。

适用于 SPA06-003(2025 年 10 月后的新版本)

SPA06-003 是一款高精度气压传感器,可以测量压力和温度。以下是如何在 Arduino 中使用它:

库安装:

  • 下载并安装适用于 Arduino 的 SPL07-003 库

  • 该库提供读取压力、温度和计算海拔高度的函数

描述: 此程序与 SPL07-003 压力和温度传感器接口,持续监测大气条件。它使用特定的采样配置初始化传感器(压力 4Hz 32 个样本,温度 4Hz 1 个样本),实时读取压力、温度和计算的海拔高度值,并通过串口通信显示结果。

#include <Wire.h>
#include "SPL07-003.h"

// Define SPL07-006 I2C address
#define SPL07_ADDR SPL07_ADDR_DEF // Default I2C address (SDO=high)
// #define SPL07_ADDR SPL07_ADDR_ALT // Alternate I2C address (SDO=low)

// Create SPL07-003 sensor instance
SPL07_003 spl;

//HardwareSerial SerialOut(PA10, PA9); //for STM32F103C8Tx

// Runs at startup
void setup() {

// Begin Serial
Serial.begin(115200);

// Configure & start I2C
//Wire.setSDA(PB7); //for STM32F103C8Tx
//Wire.setSCL(PB6); //for STM32F103C8Tx
Wire.begin();

// Connect to SPL07-003
if (spl.begin(SPL07_ADDR,&Wire) == false) {
Serial.println("Error initializing SPL07-003 :(");
while (1) {}
}//if
Serial.println("Connected to SPL07-003! :)");

// Set pressure & temperature sampling settings
spl.setPressureConfig(SPL07_4HZ, SPL07_32SAMPLES);
spl.setTemperatureConfig(SPL07_4HZ, SPL07_1SAMPLE);

// Set SPL07-003 to continuous measurements
spl.setMode(SPL07_CONT_PRES_TEMP);

}//setup()


// Runs continuously
void loop() {

// Wait for available reading
if (spl.pressureAvailable() || spl.temperatureAvailable()) {
// Read latest values
double pres = spl.readPressure();
double temp = spl.readTemperature();
double altitude = spl.calcAltitude();
// Print to serial
Serial.print("Pres: ");
Serial.print(pres, 3);
Serial.print(" Pa, Temp: ");
Serial.print(temp, 3);
Serial.print(" C, Altitude: ");
Serial.print(altitude, 3);
Serial.println(" m");
}//if

}//loop()

第 10 课:感知运动

这是最后一个传感器,三轴加速度计,使用这个模块,您可以轻松地为您的设计添加运动监测功能。因此我们可以在运动的基础上做很多有趣的小实验。

  • 练习: 当检测到运动时,蜂鸣器发出警报,表示物体正在运动。

涉及的组件

  1. Seeeduino Lotus
  2. Grove 三轴加速度计
  3. Grove 线缆(如果分离)

硬件连接

  • 模块连接:
    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线缆将 Seeeduino 连接到计算机。

软件代码

  • 打开 Arduino IDE。
  • 从 Github 下载 3-Axis Digital Accelerometer( ±2g to 16g)。点击 Sketch > Include library > Add .ZIP library,将库导入到 IDE 中。
  • 复制以下代码,点击 Verify 检查语法错误。确认没有错误后,您可以上传代码。
  • 在此程序中,加速度信息通过 I2C 总线从传感器发送到 Seeeduino,然后 Seeeduino 将其打印到串口监视器上。打开串口监视器查看结果。
//Gravity Acceleration
#include "LIS3DHTR.h"
#ifdef SOFTWAREWIRE
#include <SoftwareWire.h>
SoftwareWire myWire(3, 2);
LIS3DHTR<SoftwareWire> LIS; //Software I2C
#define WIRE myWire
#else
#include <Wire.h>
LIS3DHTR<TwoWire> LIS; //Hardware I2C
#define WIRE Wire
#endif

void setup() {
Serial.begin(9600);
while (!Serial) {};
LIS.begin(WIRE, 0x19); //IIC init
delay(100);
LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ);
}
void loop() {
if (!LIS) {
Serial.println("LIS3DHTR didn't connect.");
while (1);
return;
}
//3 axis
Serial.print("x:"); Serial.print(LIS.getAccelerationX()); Serial.print(" ");
Serial.print("y:"); Serial.print(LIS.getAccelerationY()); Serial.print(" ");
Serial.print("z:"); Serial.println(LIS.getAccelerationZ());

delay(500);
}

代码分析

#include "LIS3DHTR.h"
#ifdef SOFTWAREWIRE
#include <SoftwareWire.h>
SoftwareWire myWire(3, 2);
LIS3DHTR<SoftwareWire> LIS; //Software I2C
#define WIRE myWire
#else
#include <Wire.h>
LIS3DHTR<TwoWire> LIS; //Hardware I2C
#define WIRE Wire
#endif

使用软件 I2C 或硬件 I2C 初始化模块。

while (!Serial) {};

如果不打开串口监视器,代码会在这里停止,所以请打开串口监视器。

LIS.begin(WIRE, 0x19);
LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ);

描述: 初始化加速度计。

语法: LIS.begin(Wire, address)

描述: 设置加速度计的输出数据速率。

语法: LIS.setOutputDataRate(odr_type_t odr)

初始化加速度计并将输出速率设置为 50Hz。

Serial.print("x:"); Serial.print(LIS.getAccelerationX()); Serial.print("  ");
Serial.print("y:"); Serial.print(LIS.getAccelerationY()); Serial.print(" ");
Serial.print("z:"); Serial.println(LIS.getAccelerationZ());

描述:

用于从传感器读取 X 轴值的函数。

语法:

LIS.getAccelerationX()。返回类型:float。

描述:

用于从传感器读取 Y 轴值的函数。

语法:

LIS.getAccelerationY()。返回类型:float。

描述:

用于从传感器读取 Z 轴值的函数。

语法:

LIS.getAccelerationZ()。返回类型:float。

将三轴数据打印到串口监视器。

演示效果和串口打印结果:

三轴加速度计读数显示在串口监视器上。

分离指南

使用 Grove 线缆将 Grove 三轴加速度计连接到 Seeeduino Lotus 的 I2C 接口(注意:I2C 默认地址为 0x19)。

奖励项目

项目 1:音乐动态节拍灯

  • 项目描述: 在这个实验中,我们将让蜂鸣器播放悦耳的音乐,LED 灯根据音乐频率和节拍闪烁。

涉及的组件

  1. Seeeduino Lotus
  2. Grove LED
  3. 蜂鸣器
  4. Grove 线缆(如果分离)

硬件连接

  • 模块连接:
    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线将 Seeeduino 连接到计算机。

软件代码

  • 打开 Arduino IDE。
  • 复制以下代码,点击 Verify 检查语法错误。确认没有错误后,您可以上传代码。
//Music Dynamic Rhythm Lamp
#define NTD0 -1
#define NTD1 294
#define NTD2 330
#define NTD3 350
#define NTD4 393
#define NTD5 441
#define NTD6 495
#define NTD7 556

#define NTDL1 147
#define NTDL2 165
#define NTDL3 175
#define NTDL4 196
#define NTDL5 221
#define NTDL6 248
#define NTDL7 278

#define NTDH1 589
#define NTDH2 661
#define NTDH3 700
#define NTDH4 786
#define NTDH5 882
#define NTDH6 990
#define NTDH7 112

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625

int tune[]=
{
NTD3,NTD3,NTD4,NTD5,
NTD5,NTD4,NTD3,NTD2,
NTD1,NTD1,NTD2,NTD3,
NTD3,NTD2,NTD2,
NTD3,NTD3,NTD4,NTD5,
NTD5,NTD4,NTD3,NTD2,
NTD1,NTD1,NTD2,NTD3,
NTD2,NTD1,NTD1,
NTD2,NTD2,NTD3,NTD1,
NTD2,NTD3,NTD4,NTD3,NTD1,
NTD2,NTD3,NTD4,NTD3,NTD2,
NTD1,NTD2,NTDL5,NTD0,
NTD3,NTD3,NTD4,NTD5,
NTD5,NTD4,NTD3,NTD4,NTD2,
NTD1,NTD1,NTD2,NTD3,
NTD2,NTD1,NTD1
};

float durt[]=
{
1,1,1,1,
1,1,1,1,
1,1,1,1,
1+0.5,0.5,1+1,
1,1,1,1,
1,1,1,1,
1,1,1,1,
1+0.5,0.5,1+1,
1,1,1,1,
1,0.5,0.5,1,1,
1,0.5,0.5,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,0.5,0.5,
1,1,1,1,
1+0.5,0.5,1+1,
};

int length;
int tonepin=5;
int ledp=4;

void setup()
{
pinMode(tonepin,OUTPUT);
pinMode(ledp,OUTPUT);
length=sizeof(tune)/sizeof(tune[0]);
}

void loop()
{
for(int x=0;x<length;x++)
{
tone(tonepin,tune[x]);
digitalWrite(ledp, HIGH);
delay(400*durt[x]);
digitalWrite(ledp, LOW);
delay(100*durt[x]);
noTone(tonepin);

}
delay(4000);
}

代码分析

#define NTD

这里是 D 调的频率定义,分为低音、中音和高音。

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625

注意:节拍分为一拍、半拍、1/4 拍、1/8 拍,我们规定一拍音符时间为 1;半拍为 0.5;1/4 拍为 0.25;1/8 拍为 0.125。

int tune[]=...

根据乐谱列出频率。

float durt[]=...

根据乐谱列出节拍。

delay(100*durt[x]);

分别控制 LED 灯的开关。

演示效果和串口打印结果:

蜂鸣器将播放一段旋律,同时 LED 模块将以相同频率闪烁。

分离指南

将 Grove LED 连接到 Seeeduino Lotus 的数字信号接口 D4,将蜂鸣器连接到 Seeeduino Lotus 的数字信号接口 D5

项目 2:制作智能声光感应台灯

  • 项目描述: 顾名思义,这个项目是制作一个由声音和光线控制的小灯。我们需要使用 LED 模块作为输出。光传感器和声音传感器用于输入信号。这样,您可以实现智能台灯的功能:如果周围的声音级别超过某个预设值,则 LED 点亮,或者如果周围的光强度低于某个值,LED 模块也会点亮。

涉及的组件

  1. Seeeduino Lotus
  2. Grove LED
  3. 光传感器
  4. 声音传感器
  5. Grove 线缆(如果分离使用)

硬件连接

  • 模块连接:
    • 通过 PCB 邮票孔默认连接。
  • 然后通过 USB 线将 Seeeduino 连接到计算机。

软件代码

  • 打开 Arduino IDE。
  • 复制以下代码,点击 Verify 检查语法错误。确认没有错误后,您可以上传代码。
//light Induction Desk Lamp
int soundPin = A2; // Analog sound sensor is to be attached to analog
int lightPin = A6; //Analog light sensor is to be attached to analog
int ledPin = 4; // Digital LED is to be attached to digital

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(lightPin, INPUT);
pinMode(soundPin, INPUT);
}

void loop(){
int soundState = analogRead(soundPin); // Read sound sensor’s value
int lightState = analogRead(lightPin); // Read light sensor’s value
// if the sound sensor's value is greater than 500 or the sound sensor's is less than 200, the light will be on.
//Otherwise, the light will be turned off
if (soundState > 500 || lightState < 200) {
digitalWrite(ledPin, HIGH);
delay(500); //You can add the "//" to remove the delay
}else{
digitalWrite(ledPin, LOW);
}
}

代码分析

if (soundState > 500 || lightState < 200) {
...
}

括号内是一个逻辑表达式。&&|| 都是逻辑表达式中常用的运算符。常见用法是 if (表达式 1 || 表达式 2)if (表达式 1 && 表达式 2)

|| 表示"",满足其中一个条件,整个表达式就为真,满足 if 判断的条件。

&& 表示"",只有当括号内的所有表达式都为真时,才执行 if 中的语句。

演示效果和串口打印结果:

如果周围声音足够大或光强度较低,LED 模块将以更高的强度点亮。

分离指南

将 Grove LED 连接到 Seeeduino Lotus 的数字信号接口 D4,将光传感器连接到 Seeeduino Lotus 的模拟信号接口 A1。使用 Grove 线缆将声音传感器连接到 Seeeduino Lotus 的模拟信号接口 A2

制作您自己的模块和开发板

经过这段时间的学习,您已经对 Arduino 和开源硬件有了系统的了解,那么为什么不更进一步,尝试制作自己的模块或开发板呢?

EDA

要设计自己的开发板,您需要设计自己模块的原理图,这需要 EDA 工具来完成。这里推荐一个开源的 EDA 软件。

  • KiCAD

KiCad 是一个免费的电子设计自动化软件套件。它便于设计电子电路的原理图并将其转换为 PCB 设计。它具有原理图捕获和 PCB 布局设计的集成环境。该程序处理原理图捕获和 PCB 布局,并输出 Gerber 文件。该套件可在 Windows、Linux 和 macOS 上运行,并在 GNU GPL v3 许可下发布。

  • Upverter

如果您不想自己处理原理图或布局,但想将基于 Seeed 模块的原型转换为集成产品,我们强烈建议您尝试 Upverter。

请访问 Grove Beginner Kit for Arduino Upverter 指南 了解更多信息。

PCB 服务

完成设计后,请查看 Seeed Fusion PCBA 服务,它可以帮助将您的设计转化为实际运行的设备。

Seeed Studio 拥有自己的开放零件库 (OPL),这是一个包含超过 10,000 个常用组件的集合,专门为 Seeed Fusion PCBA 服务采购。为了加快 PCB 设计过程,Seeed 正在为 KiCad 和 Eagle 构建组件库。当所有组件都来自 Seeed 的 PCBA OPL 并与 Seeed Fusion PCB 组装 (PCBA) 服务一起使用时,整个 PCBA 生产时间可以从 20 个工作日缩短到仅 7 天。

常见问题

1. 如何拆下单个电子模块使用?

image.png

仔细观察 Grove Beginner Kit For Arduino,您会看到每个单独模块和背板之间有 3 个小孔。您只需要使用一对斜口钳从小孔处切断模块周围的 PCB 背板。

image.png


注意:小心沿着小孔的外围切割,不要切到小孔(以防止内部布线短路从而损坏模块);如果意外切到小孔,请使用刀子清理小孔以防止短路


image.png

原理图在线查看器

资源

  1. Grove Beginner Kit for Arduino Wiki [PDF]

  2. 原理图设计文件

  3. Github 上的模块库:

  4. 传感器数据手册

  5. 初始 Arduino 固件演示

  6. Grove Arduino 初学者套件资源合集 [20200401] (7z)

  7. Grove Arduino 初学者套件 Codecraft 图形化编程课程 web v8

更多学习资源

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...