亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 与 NeoPixel 光耦合器控制多个继电器

组件和用品

SparkFun LilyPad Rainbow LED(7 色条)
或类似(从 LED 灯条 5m/roll DC5V ws2812b 300led 单独寻址 60leds/m 5050 RGB 切割),各种供应商
× 1
电阻 10k ohm
27 k Ohm
× 4
光敏电阻
也称为 LDR(光敏电阻) https://en.wikipedia.org/wiki/Photoresistor
× 4
RobotGeek Relay
或 https://www.conrad.nl/p/relaiskaart-5vdc-4-voudig- voor-arduino-raspberry-pi-etc-095841
× 4
LED 灯
× 1
Arduino UNO
可以使用任何 Arduino 类型,在这个应用程序中我使用了 Node MCU ESP32
× 1

必要的工具和机器

烙铁(通用)
常用工具
在普通家庭/工作室中可用

应用和在线服务

电影

关于这个项目

该项目是关于从单个 Arduino 输出引脚控制多个继电器或其他执行器。

该解决方案可用于Arduino可用输出引脚数量不足且需要从单个输出引脚并行控制更多执行器(例如继电器)的典型情况。

工作原理基于使用多个 NeoPixel 的 LED 灯条(带有 WS2812B 控制器芯片的 SMD5050 LED)。每个像素都与一个 LDR(光敏电阻)组合在一起,从而创建一个 DIY 光耦合器(任意数量,仅受 LED 灯带长度的限制,例如 300 像素,以及可用的 5V 电源)。这样就创建了一个串行到并行的转换(从 1 到许多)

每个单独的 LED 都来自同一个 Arduino 输出引脚。每个 LDR(与 27kOhm 电阻串联)连接到 5V 继电器。通过这种方式,可以使用 Adafruit NeoPixel 库从 1 个 Arduino 输出 PIN 控制许多 NeoPixel/LDR 组合。也可以连接其他执行器设备而不是继电器,使用 LDR 作为任何电路的输入。

这个项目是更大计划的一部分,使用了 ESP32(NodeMCU);然而,普通的 Arduino Uno(或几乎任何其他型号)都可以完成这项工作。

第 1 步:制作 NeoPixel 光耦合器

DIY光耦由以下材料制成:

  • 一块由 10 个 WS2812 LED 组成的 LED 灯带(从较长的灯带上剪下来),项目中实际使用了 4 个
  • 一块深灰色泡沫
  • 一块面包板
  • 黑鸭胶带

注:点的间距等于LED的间距。

将每个 LED 的光与其他 LED 的 LDR 分开很重要,以避免“光串扰 .” 事实证明,这在实践中几乎是不可能的,因此在软件中将每个处于“开启”状态的 LED 发出的光量设置为低水平。

使用的 LED 灯条是 10 个 LED 长,但在这个项目中只使用了 4 个像素与 4 个 LDR(为了简单起见)

第 2 步:电子设置

在面包板设置中,我使用了 ESP32s (NodeMCU),但是任何 Arduino 都可以完成这项工作。

电路图(用Fritzing制作)如下:

在实践中,这看起来如下:

如您所见,只有 1 个输出引脚用于并行控制 4 个继电器。这个数字可以高达300! (在 5 m 长的条带中提供尽可能多的 LED)。

ESP32 设备的工作电压为 3.3 伏(板载 3.3V 稳压器),而带有 5050 个 LED 的 LED 灯条以 5V 供电。ESP32 由 5V 供电(通过来自 5V 适配器的 USB 端口或 5V移动电源)。 NeoPixel LED 直接从 ESP32 的 5 伏引脚获得 5V 电源,所使用的继电器也是 5V 类型。

本例中使用4个光耦电路控制4个继电器,每个继电器连接到一个230V灯。

使用的输出引脚是 GPIO 引脚 21,继电器通过像素编号 1、2、3、4 进行控制。

第 3 步:制作软件

Arduino Sketch 中的循环函数很简单,由许多“for”循环组成,通过控制每个继电器来显示不同的灯开关模式。

为了控制特定的继电器,从循环代码中调用以下函数:

void ControlRelais (int RelaisNo, bool RelaisState) { strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15); // 打开/关闭属于 RelaisNo 的 LED strip.show(); Serial.print(" RelaisNo "); Serial.print(RelaisNo); Serial.print(" ="); Serial.println(RelaisState); } 

事实上,这个功能所做的只是打开特定的 LED 或关闭。

LED 地址与相应的继电器编号相对应。 LED 以低亮度点亮,刚好足以通过 LDR 触发继电器,从而避免光污染(上文也称为“光串扰”。

所有努力的结果和特定的草图,显示在以下电影中:

代码

  • 通过自制的 NeoPixel 光电耦合器控制多个继电器的草图
通过自制的 NeoPixel 光电耦合器控制多个继电器的草图Arduino
此草图显示了如何通过由 NeoPixels 制成的多个光耦控制多个继电器,这些光耦由 1 个 ARDUINO 输出引脚控制
/* 此代码用于从单个 Arduino 输出引脚控制多个 Relais 或其他执行器,由 Pierre 开发和制作Pennings(2018 年 12 月) 该方案可用于 Arduino 可用输出引脚数量不足且需要并行控制更多 Relais 等执行器的典型情况 工作原理基于使用多个 Neopixels 的条带(带有 WS2812B 控制器芯片的 SMD5050 LED)每个像素都与一个 LDR(光相关电阻器)放在一起,从而创建一个 DIY 光耦合器每个单独的 LED 都从一个相同的 ARDUINO 输出引脚和 LDR(与 27kOhm 电阻器串联)寻址),连接到 5V Relais 这样,可以使用 Adafruit Neopixel 库从 1 个 Arduino 输出 PIN 控制许多 Neopixel/LDR 组合。对于这个项目,它是更大计划的一部分,使用了 ESP 32 (NodeMCU),但是普通的 ARDUINO UNO(或几乎任何其他型号)将完成这项工作(当然,代码中的设置需要调整,例如由于不同的引脚分配)ESP 32 设备在 3.3 伏电平(板载 3.3V 稳压器)下工作,而带有 5050 个 LED 的 LED 灯条在 5 V 上运行 ESP 32 由 5 V 电源供电(通过来自 5V 适配器或 5v 移动电源的 USB 端口) Neopixel LED 直接从 ESP 32 的 5 伏引脚获得 5V 电源,使用的 Relais 也是 5V 类型。在这个例子中,使用了一个由 10 个 LED 组成的 LED 灯条,为简单起见,只制作了 4 个光耦合器电路来控制 4 个连接到一个 230V LEDLamp 的 Relais。使用的输出引脚是 GPIO PIN 21,RELAIS 通过像素编号 1、2、3、4 控制此代码根据 GPL3+ 许可证获得许可。*/#include #define NUM_LEDS 10////// ///////////////////////////////////////// 初始化GPIO pinconst int RelaisPin =21; // 引脚 21 将控制数据 (0 -3.3 V) 发送到 Relaisint RelaisNo =0; // 控制适用 Relais 的变量bool RelaisState =false;int r =0;Adafruit_NeoPixel strip =Adafruit_NeoPixel(NUM_LEDS, RelaisPin, NEO_RGB + NEO_KHZ800);///////////////// /////////////////////////////// 后面的设置代码将在“开机”后或之后运行一次一个 RESETvoid setup() { Serial.begin(115200); pinMode(RelaisPin,输出); // 将 RelaisPin 初始化为输出 strip.begin(); // 将所有 LED 初始化为“关闭” for (int t =0; t <10; t++) { strip.setPixelColor(t, 15, 15, 15); // 通电后测试条的所有 LED 一次 strip.show(); // 注意WS2812 LED灯条的颜色顺序是R,G,B delay (500); strip.setPixelColor(t, 0, 0, 0); // 然后返回关闭 }}//////////////////////////////////////// ///////// 接下来的循环代码将重复运行,直到“断电”或 RESETvoid loop(){ for (int r =1; r <5; r++) // 打开 4 Relais一个接一个计数形式 1 到 4 { delay (500); ControlRelais (r , true);延迟(500); ControlRelais (r, false); }for (int k =4; k> 0; k--) // 依次开启 4 Relais 计数形式 4 到 1 { delay (500); ControlRelais (k , true);延迟(500); ControlRelais (k , false); } for (int r =1; r <5; r++) // 在一个模式中打开 4 个 Relais { for (int k =4; k> 0; k--) { delay (500); ControlRelais (r , true); ControlRelais (k , true);延迟(500); ControlRelais (r, false); ControlRelais (k , false); } }//////////////// 循环结束////////////////////////// ///////////////////////////////////////////////// ///////////////////////////////// 后面跟着控制Relais的Function(从循环内调用) void ControlRelais (int RelaisNo, bool RelaisState) { strip.setPixelColor(RelaisNo, RelaisState*15, RelaisState*15, RelaisState*15); // 打开/关闭属于 RelaisNo 的 LED strip.show(); Serial.print(" RelaisNo "); Serial.print(RelaisNo); Serial.print(" ="); Serial.println(RelaisState); }

示意图

设置用于从单个 Arduino 引脚控制多个继电器或其他执行器 neopixel_optocoupler_relais__hNIrhGIMtD.fzz

制造工艺

  1. 使用真实传感器控制效果
  2. 带有 Arduino 的用于飞行模拟器的 LCD 面板
  3. 用于 FS2020 的带有 Arduino 的开关/LED 面板
  4. NeoPixel Ring 的陀螺仪乐趣
  5. 智能百叶窗
  6. Arduino 带蓝牙控制 LED!
  7. 带有 Arduino 的简单障碍物传感器
  8. 使用 Arduino 和 Android 设备控制 Roomba 机器人
  9. Arduino Quadruped
  10. 使用 Arduino 和 MPU6050 控制伺服电机
  11. 使用 Bolt 和 Arduino 控制 LED 亮度
  12. 使用 Arduino Uno 控制 LED 矩阵