Grove-4-Channel SPDT Relay
Grove - 4-通道 SPDT继电器 有四个单刀双掷(SPDT)开关。开关。它只需要通过低电压和低电流信号来控制通断。具体地讲,您可以使用 5V DC 来控制最大 250V AC 或者 110V DC。
我们使用板载 STM32F030F4P6分别控制各个通道。从Arduino或者其他的板子指令通过IIC接口传输,板载 STM32F030F4P6 将会解析指令,因此您可以根据需要控制开关。
产品特点¶
- 耐高温塑料外壳
- 高电压负载
- 低功耗
- 持久工作
- 可选IIC地址
- 0x00 ~ 0x7F
产品规格¶
项目 | 参数 |
---|---|
工作电压 | 5V |
额定线圈电流 | 89.3mA |
TUV认证负载 | 10A 250VAC/10 30VDC |
UL认证负载 | 10A 125VAC/10A 28VDC |
最大允许电压 | 250VAC/110VDC |
功耗 | 约 0.45W |
接触电阻 | 最大100mΩ |
绝缘电阻 | 最小100MΩ(500VDC) |
最大开关频率 | 30次操作/分钟 |
环境温度 | -40℃ 到 +85℃ |
工作湿度 | 45% 到 85%(相对湿度) |
触点材料 | 银氧化镉 |
输入接口 | IIC |
默认 IIC 地址 | 0x11 或者 0x12 |
可用IIC地址 | 0x00 ~ 0x7F |
输出接口 | 3引脚直插式绿色端子 |
!!!提示
1 |
|
产品应用¶
- 家用电器
- 办公设备
- 遥控电视接收器
- 监视器显示
- 音响设备高冲电流应用
硬件概述¶
引脚映射¶
!!!注意 - 开关1-4具有相同的引脚功能,因此对于其他开关,您可以参考 NC1/COM1/NO1. - 在PCB的背面,有两个接口:SWD和IIC。在编程烧写固件时,默认使用SWD接口。如果要使用IIC接口(实际用作引导UART),则应将 BOOT 置高。
原理图¶
**继电器控制 **
K2**是继电器模块,在K2的 **引脚1 和 引脚3 之间有一个线圈。默认情况下,COM2**与 **NC2**连通。如果K2的引脚3连接到地,那么线圈将会‘打开’,**COM2**将会连接到 **NO2;
开启此线圈,需要约90mA的电流,然而,一般情况下Arduino的GPIO引脚只能提供20mA(最大40mA)。因此我们使用了一个可以提供500mA的NPN三极管S9013 。
当 PA7 通过10K电阻R2拉低时,如果没有信号, Q2 的基极是0V,Q2关闭,那么K2将处于关闭状态。当 PA7 是5V时,Q2将被打开。K2的 引脚3 会被连接到系统的GND,那么K2的 引脚3 和 引脚1 之间将会有5V的压差,线圈会被打开,然后 COM2 将会与 NO2 连接。
!!!提示
1 |
|
双向电平转换电路
这一个连接在IIC总线差分电压部分的典型双向电平转换电路。传感器的IIC总线使用3.3V,而Arduino的IIC总线使用的是5V,因此这个电路是必须的。如上面的原理图所示,Q17 和 Q18 是作为双向开关的N沟道场效应管2N7002A。为了更好地理解这一部分,您可以参考AN10441
!!!提示
1 |
|
兼容平台¶
Arduino | Raspberry Pi | BeagleBone | Wio | LinkIt ONE |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
!!!注意
1 |
|
入门指导¶
使用Arduino¶
硬件连接¶
材料需求
Seeeduino V4.2 | Base Shield | Grove - 4-通道 SPDT 继电器 |
---|---|---|
![]() |
![]() |
![]() |
点击购买 | 点击购买/a> | 点击购买 |
!!!注
1 2 3 |
|
-
步骤 1. 将Grove - 4-Channel SPDT 继电器连接到Base Shield的 IIC 接口。
-
步骤 2. 将Base Shield插到Seeeduino上。
-
步骤 3. 通过USB线缆将Seeeduino连接到PC端。
!!!注
1 |
|
Seeeduino | Grove - 4-通道 SPDT 继电器 |
---|---|
5V | 红 |
GND | 黑 |
SDA | 白 |
SCL | 黄 |
软件代码¶
Attention
如果这是您第一次使用Arduino,我们强烈建议您先看一下Arduino 入门指导.
-
步骤 1. 从Github上下载多通道继电器Arduino库 库。
-
步骤 2. 请参考如何为Arduino安装库如何安装库文件。
-
步骤 3. 重启Arduino IDE。 通过路径:**File → Examples → Multi Channel Relay Arduino Library → four_channel_relay_control**打开示例程序。
或者,您可以点击这个位于代码块右上方的图标将以下代码拷贝进Arduino IDE。
#include <multi_channel_relay.h>
Multi_Channel_Relay relay;
void setup()
{
Serial.begin(9600);
while(!Serial);
/* Scan I2C device detect device address */
uint8_t old_address = relay. ;
if((0x00 == old_address) || (0xff == old_address)) {
while(1);
}
Serial.println("Start write address");
relay.changeI2CAddress(old_address, 0x11); /* Set I2C address and save to Flash */
Serial.println("End write address");
/* Read firmware version */
Serial.print("firmware version: ");
Serial.print("0x");
Serial.print(relay.getFirmwareVersion(), HEX);
Serial.println();
}
void loop()
{
/**
* channle: 8 7 6 5 4 3 2 1
* state: 0b00000000 -> 0x00 (all off)
* state: 0b11111111 -> 0xff (all on)
*/
/* Begin Controlling Relay */
Serial.println("Channel 1 on");
relay.turn_on_channel(1);
delay(500);
Serial.println("Channel 2 on");
relay.turn_off_channel(1);
relay.turn_on_channel(2);
delay(500);
Serial.println("Channel 3 on");
relay.turn_off_channel(2);
relay.turn_on_channel(3);
delay(500);
Serial.println("Channel 4 on");
relay.turn_off_channel(3);
relay.turn_on_channel(4);
delay(500);
relay.turn_off_channel(4);
relay.channelCtrl(CHANNLE1_BIT |
CHANNLE2_BIT |
CHANNLE3_BIT |
CHANNLE4_BIT);
Serial.print("Turn all channels on, State: ");
Serial.println(relay.getChannelState(), BIN);
delay(2000);
relay.channelCtrl(CHANNLE1_BIT |
CHANNLE3_BIT);
Serial.print("Turn 1 3 channels on, State: ");
Serial.println(relay.getChannelState(), BIN);
delay(2000);
relay.channelCtrl(CHANNLE2_BIT |
CHANNLE4_BIT);
Serial.print("Turn 2 4 channels on, State: ");
Serial.println(relay.getChannelState(), BIN);
delay(2000);
relay.channelCtrl(0);
Serial.print("Turn off all channels, State: ");
Serial.println(relay.getChannelState(), BIN);
delay(2000);
}
- 步骤 4. 上传代码。如果您不知道如何上传代码,请点击如何上传代码。
- 步骤 5. 通过点击 Tool-> Serial Monitor 打开Arduino IDE的 Serial Monitor 。或者同时按下 ctrl+shift+m 。如果一切运行正常,您将会看到以下运行结果。
Success
如果一切运行正常,您将会看到以下运行结果。同时,您也会看到板载LED灯交替闪烁。
Scanning...
I2C device found at address 0x12 !
Found 1 I2C devices
Start write address
End write address
firmware version: 0x1
Channel 1 on
Channel 2 on
Channel 3 on
Channel 4 on
Turn all channels on, State: 1111
Turn 1 3 channels on, State: 101
Turn 2 4 channels on, State: 1010
Turn off all channels, State: 0
Channel 1 on
Channel 2 on
!!!注
1 |
|
功能说明¶
功能 | 描述 |
---|---|
changeI2CAddress(uint8_t old_addr, uint8_t new_addr) | 改变设备地址, old_addr 是当前地址; new_addr 是您想要使用的新地址。只有当输入正确的旧地址,新地址才能够被成功设置。 |
scanI2CDevice() | 获得old_addr (当前地址) |
getChannelState() | 获得每个通道的状态,例如"State: 1111", 表示所有继电器都是开通状态 |
getFirmwareVersion() | 获得板载MCU的固件版本 |
channelCtrl(uint8_t state) | 立即更改您所选择的通道状态,状态参数列表: CHANNLE1_BIT 或者 0x01 CHANNLE2_BIT 或者 0x02 CHANNLE3_BIT 或者 0x04 CHANNLE4_BIT 或者 0x08 例如: channelCtrl(CHANNLE2_BIT|CHANNLE3_BIT),将会打开通道2和通道3 channelCtrl(01|02|08), 将会打开通道1、通道2和通道4 channelCtrl(0), 将会关闭所有通道. |
turn_on_channel(uint8_t channel) | 打开单个通道 例如: turn_on_channel(3), 将会打开通道3 |
turn_off_channel(uint8_t channel) | 关闭单个通道 例如: turn_off_channel(3), 将会关闭通道3 |
如果您想更改地址,则需要在使用前设置地址。 例如,我们想将其更改为0x2f。 我们可以使用以下代码。
#include <multi_channel_relay.h>
Multi_Channel_Relay relay;
void setup()
{
Serial.begin(9600);
while(!Serial);
/* Scan I2C device detect device address */
uint8_t old_address = relay. ;
if((0x00 == old_address) || (0xff == old_address)) {
while(1);
}
Serial.println("Start write address");
relay.changeI2CAddress(old_address,0x2f); /* Set I2C address as 0x2f and save it to the EEPRom */
Serial.println("End write address");
/* Read firmware version */
Serial.print("firmware version: ");
Serial.print("0x");
Serial.print(relay.getFirmwareVersion(), HEX);
Serial.println();
}
FAQ¶
Q1: 如何烧写固件?
A1: 我们建议您使用J-LINK下载器通过SWD接口烧写固件。
您可以点击出厂固件进行下载。
我们建议您使用 J-flash软件。