用Arduino控制交流设备的3种方法
Arduino是广受欢迎的简单易学的单片机控制器,但它们只能直接控制小电流直流设备。今天,我们一起来探讨一下使其能够驱动交流负载的方法
本文翻译自科普大神DroneBotWorkshop.com文章,浅显易懂适合新手入门译者:DIY百事
目录
1 引言
2 安全第一!2.1交流电2.2安全工作台设置
3 控制交流设备3.1硅控制器整流器(SCR)3.2三极管交流开关(TRIAC)3.3固态继电器(SSR)3.4继电器3.5继电器模块
4 将继电器模块与Arduino一起使用4.1继电器模块连接4.2继电器模块示意图
5 在Arduino上使用固态继电器5.1固态继电器连接5.2固态继电器示意图
6 IoT控制继电器
7 结论
由于大多数人可能希望控制使用市电电压的设备,因此我们将特别注意安全性。
介绍
您可以使用Arduino控制很多东西。显示器,LED和其他设备可以轻松地连接到I / O引脚,并可以通过简单的Sketch代码进行控制。
但是Arduino或任何微控制器上的输出端口仅设计用于控制逻辑级设备。与任何需要逻辑电平以上信号的接口都将需要外部组件。
我们已经了解了如何使用BJT(双极结型晶体管)或MOSFET控制直流操作的设备。使用这些组件,我们可以控制电压和电流,否则会损坏我们的微控制器。
控制交流设备需要不同的技术。可以控制直流电流的半导体只能通过部分交流波形,因此不能直接用于控制交流电。
接下来我们探讨一下控制交流电的技术。
但是,在研究使用Arduino控制交流的任何方法之前,我们需要讨论一个非常重要的考虑因素-安全性。
安全第一!
尽管您可能只打算控制低压交流设备,但您更有可能想学习如何控制插入家庭或办公室插座的设备。毕竟,打开台灯比打开LED有用得多。
但是,在开始计划如何使用几个Arduino来控制整个房屋之前,您需要考虑使用高压交流电源所涉及的危险。
交流电
交流电(AC)与直流电(DC)的不同之处在于,交流电不断改变极性,在预定频率下像正弦波一样在正负之间振荡。
请注意,常见的交流电压是220V, 接触如此高的电压可能很危险,实际上,这可能是致命的!
以下是使用AC的一些指导原则:
- 切勿直接用高压交流电进行试验。
- 切勿将高压交流电连接到无焊面包板上。
- 切勿将高压直接连接到微控制器的I / O引脚(或任何引脚)。
- 始终在交流电源关闭的情况下工作。用万用表确认电源确实关闭。
- 始终在通电之前用万用表测试您的接线。
- 请勿使高压设备在无人看管时通电。如果离开,请务必断开电路电源,以免造成他人伤害。
- 如果没有经验,请勿尝试使用高压交流电。
我将向您展示一种安全的交流电源和Arduino实验方法。
在本文的结尾,我将向您展示使用预制产品控制交流设备的最安全方法是什么。
安全工作台设置
如上所述,您永远都不想在工作台上使用220 VAC进行试验。我使用降压变压器来安全地使用交流电–该设备将交流电压降压至较低水平。我选择了28伏变压器,因为它的电压足够低,可以安全使用,但又足够高,可以与固态继电器一起使用(稍后会详细介绍)。
选择降压变压器后,您还需要负载进行测试。我使用了一些28伏的白炽灯泡,但即使是功率电阻器也可以解决问题。您通常可以从较旧的设备中拆下一个变压器来用。
控制交流设备
接下来学习如何使用Arduino或其他逻辑电平设备控制这些电压。
这样做的方法不止一种,我们将介绍其中的几种。
晶闸管(SCR)
SCR是已存在很长时间的组件,并且已发现它可用于调光器和电机速度控制之类的设备中。
SCR
在许多方面,您都可以将SCR视为“可开关二极管”。施加到栅极的直流电压将允许电流流过阳极和阴极。但是,当然,由于该设备的行为非常类似于二极管,因此具有相同的特性-它仅允许电流沿一个方向流动。
SCR的交流输入
SCR的输出 被部分斩波
因此,实际上,SCR在传导直流电方面要比交流电更好。那为什么要使用它们呢?
答案是您需要使用其中两个,将阳极和阴极颠倒并且连接在一起。这将允许电流在两个方向上流动。
双向晶闸管(TRIAC)
背对背连接两个SCR是控制AC的一种方法,但更好的方法是双向晶闸管TRIAC。
TRIAC本质上与单个封装中的两个反向连接的SCR完全相同。使之成为用于开关和控制AC的理想半导体。
从灯调光器到加热器控件,您会在许多设备中找到TRIAC。实际上,它们是我们列表中下一个AC控制器设备中的关键组件之一。
固态继电器(SSR)
固态继电器内部在输出端具有TRIAC,在输入端具有光耦。
SSR示意图
光耦是一种简单的设备,在封闭的包装中带有红外LED和光电晶体管。点亮LED将打开光电晶体管,本质上是通过光学连接传输数字信号。在没有电气连接的情况下,光隔离器是将高压和低压分开的一种好方法。
这种配置使固态继电器成为通过Arduino等微控制器安全控制交流电流的理想组件。这是我建议的两个组件之一。
但是,固态继电器并不完美。您需要了解一些特征:
- 它们比仅仅购买TRIAC和光隔离器还要昂贵。
- 他们中的许多型号都无法在较低的电压下工作,因此控制低压交流电将需要另一种技术。我在演示中使用的那个至少需要24 VAC,这就是为什么我要试验28 VAC变压器的原因。
- 它们让AC正弦波轻微失真。但大多数设备不会受到影响。
对于用于交流开关的半导体解决方案,固态继电器是一个不错的选择。
继电器
继电器是机电组件,而不是电子组件。它的存在时间比您更长,最早的电报系统中的继电器可以追溯到1835年。
继电器的工作原理非常简单。继电器具有一个线圈,该线圈充当电磁体。当电流施加到线圈时,它产生的磁场会吸引金属臂,称为“电枢”。电枢用作开关中的臂,当继电器被激活时连接到一个极,而在不被激活时连接到另一个。当电流从线圈中经过时,继电器内的弹簧将其拉回到其静止位置。
由于继电器本质上是电磁体和开关,因此其规格是双重的:
- 线圈规格,包括所需的电压和消耗的电流。
- 开关规格,包括配置和电流/电压容量。
SPDT(单刀双掷)和DPDT(双刀双掷)开关配置是最常见的,但是也有带有四个或更多刀极的专用继电器。
因为它们本质上是机械开关,所以继电器非常适合同时开关AC和DC。而且,尽管这项技术已经过时,但它们今天仍在大量使用,并且将使用很长时间。
与其他解决方案相比,继电器具有许多优势:
- 它们本质上是一个电磁体和一个开关,因此非常易于使用。
- 它们很便宜。
- 它们可用于各种线圈电压和电流额定值。
- 它们可用于交流和直流低压信号。
- 它们不会以任何方式失真,放大或修改开关信号。
当然,继电器也有一些缺点。
首先,继电器线圈通常消耗比Arduino上的数字I / O端口更多的电流。因此,您需要使用晶体管来驱动它,而不是直接将继电器连接到Arduino。根据线圈规格,您可能还需要单独的电源。
其次,当继电器被激活时,电枢被拉向线圈的动作会产生与施加到线圈的极性相反的电脉冲。此脉冲称为“反电动势”,可能会损坏用于驱动继电器的晶体管。
解决第二个问题的方法是在继电器线圈上安装一个二极管,以吸收反电动势。
其他一些继电器问题:
- 作为机电设备,继电器对振动和冲击敏感。
- 一段时间后,继电器触点会磨损或起弧,从而使连接性能下降甚至损坏继电器。
- 继电器线圈比半导体解决方案消耗更多的电流,因此并不真正适合电池供电的设计。请记住,只要继电器处于活动状态,其线圈就会消耗电流。
因此,尽管它们并不完美,但继电器仍然是控制交流电的绝佳解决方案。
为了使它们更安全,更容易使用,我们将继续进行下一个选择-继电器模块。
继电器模块
继电器模块只是一个已经安装了晶体管驱动器和反电动势抑制二极管的继电器。许多继电器模块的输入端还装有一个光电隔离器,从而增加了一层隔离。
继电器模块通常还有的另一个是螺钉端子,用于将开关设备连接到该螺钉端子。这样可以大大简化输出端高压交流电的安全接线。
继电器模块有多种样式,有些只有一个继电器,有些最多有32个继电器。它们可以绑在一起以使用Arduino电源或独立的电源。
简而言之,继电器模块使继电器与诸如Arduino之类的微控制器的接口连接成为一项简单的任务。因此,它们以及固态继电器是我推荐的将Arduino与高压AC设备接口的两种方法。
在Arduino上使用继电器模块
我们将使用继电器模块开始Arduino接口实验。您可以将任何模块与一个或多个继电器一起使用。实际上,我在实验中使用的模块是双继电器模型,我仅使用其中一个继电器。
驱动继电器模块时,应注意它们通常为“低电平有效”,这意味着您需要向它们发送LOW(0)信号以激活继电器。如果碰巧遇到“高电平有效”模块,则可以更改代码以使用HIGH(1)逻辑而不是LOW逻辑。另一个甚至更简单的解决方案是将输出负载连接到相反的一组触点(NC代替NO)。
为了使实验更加有趣,我使用了光敏电阻(LDR)来感测光,并在光敏电阻降至特定水平以下时激活继电器。
这实际上使该实验变成了一个实用的项目,您可以在光线低于一定水平时打开或关闭某些东西(例如灯)。
继电器模块连接
此处说明了继电器模块实验的连接。
几乎可以使用任何LDR,也可以用其他电阻设备代替它,例如热敏电阻(电阻温度传感器)。我使用的电阻为10k,但您可以尝试使用不同的值来“微调”您的LDR。
在继电器模块上,您将在“ VCC”和“ JD-VCC”引脚之间看到跳线的位置。您需要在此处插入跳线,以便从Arduino电源为继电器供电。我们可以这样做,因为我们仅在模块中使用一个继电器,如果您想使用两个或多个继电器,那么最好自己提供电源并卸下跳线。
我的输出负载是我的28VAC变压器和一个28伏的白炽灯泡。对于此实验,任何负载和任何低压都将起作用。
连线后,您可以加载一些代码。
继电器模块代码
此处用了光敏电阻加继电器:
/* LDR Relay Demo arduino-ldr-relay.ino Uses LDR to drive relay module in low light Relay module is active LOW DroneBot Workshop 2020 https://dronebotworkshop.com */ //Integers for LDR input pin and value int ldrPin = A0; int ldrValue = 0; // Integer for Relay module output pin int relayOut = 8; // Integer for threshold point (change as required) int thresholdPoint = 700; void setup() { // Setup relay pin as output pinMode(relayOut, OUTPUT); // Setup serial monitor to check LDR readings Serial.begin(9600); } void loop() { // Get the sensor value ldrValue = analogRead(ldrPin); // Print value to serial monitor Serial.println(ldrValue); // See if value is below threshold if (ldrValue < 700) { // Turn module on (active LOW) digitalWrite(relayOut, LOW); } else { // Turn module off (active LOW) digitalWrite(relayOut, HIGH); } // Short delay delay(100); }
这是一个非常简单的代码,它所要做的只是测量模拟输入上的电压电平,并在继电器降至指定电平以下时触发继电器。
它通过定义整数来表示代表输入引脚,所得的模拟输入值以及用于继电器输出的引脚,从而进行陈述。这些引脚都不是至关重要的,因此您可以根据需要使用其他引脚。
定义了另一个整数来表示阈值,即继电器将触发的点。您可能需要尝试调整该值来实现适合您的实际情况。
在Setup中,用于继电器的引脚定义为输出。串口监视器也已初始化,您可以使用它来监视从LDR获得的读数,并使用该值来确定最佳阈值。
在loop中,将读取传感器值并将其分配给ldrValue变量。然后,在if-else语句中使用该值来确定要采取的操作。
如果该值低于设定的阈值,则继电器被激活。请注意,当继电器模块输入变为LOW时,继电器将被激活,这似乎违反常规,但这是大多数继电器模块的工作方式。如果碰巧是个高电压输入使能的,则需要相应地更改代码。
否则,将继电器输出设置为高电平以关闭继电器。
最后,我们应用较短的时间延迟,以防止在光线水平接近阈值时继电器“抖动”。这也可以防止由于短暂的光线不足而触发系统(即有人走在传感器前面)。
将代码加载到Arduino并观察操作。当LDR暴露在光线下时,继电器模块将处于非活动状态,并且白炽灯的交流负载将关闭。如果光线降到特定水平以下(您可以将手指放在LDR上以将其遮挡),则继电器模块应触发。
简单的电路,但是有很多潜在的应用。
在Arduino上使用固态继电器
在下一个实验中,我们将使用带有四个固态继电器(SSR)的模块。我们将使用它来构建走马灯效果。
为了安全起见,我将在工作台上使用28伏灯泡,但该电路也可用于驱动全尺寸灯泡,以创建真正的走马灯。您也可以轻松地对其进行修改,使其具有四个以上的单元。
固态继电器连接
走马灯的连接图示如下:
如果没有4-SSR模块,则可以替换为四个单独的固态继电器,该模块可以简化接线。
另外,尽管我在输出上只显示了四个白炽灯泡,但实际上在测试中使用了八个。我并联了其他四个灯泡。
电位器只是一个10K的可调电阻,但很不错,任何超过5K的可调电阻都可以正常工作。
接好线后,我们接下来看代码。
固态继电器代码
再次,我们在项目中使用了一个简单的代码,但是,此代码确实说明了一种减少代码的技术,而我以前从未向您展示过这种代码。因此,作为学习经验也很有价值!
/*
Solid State Switch Chaser Demo
arduino-ssr-chaser.ino
Four Solid State Switches used to control chaser with AC lights
Potentiometer controls chaser speed
Solid State Switches are active LOW
DroneBot Workshop 2020
https://dronebotworkshop.com
*/
// Integer to define the number of output pins
int outputPins = 4;
// Array with pin numbers
int pins[] = {11, 10, 9, 8};
// Integers for potentiometer connection and value
int speedControl = A0;
int speedValue = 0;
void setup() {
// Define pins as outputs and set them HIGH
for (int i = 0; i < outputPins; i++) {
// Set pin as output
pinMode(pins[i], OUTPUT);
// Set it HIGH to turn off SSR
digitalWrite(pins[i], HIGH);
}
}
void loop() {
// Get speed control value and map to delay range (adjust as required)
speedValue = map(analogRead(speedControl), 0, 1023, 40, 400);
// Cycle through outputs, make active output LOW
for (int i = 0; i < outputPins; i++) {
// Set output at index LOW to turn on SSR
digitalWrite(pins[i], LOW);
// Delay period
delay(speedValue);
// Set output at index HIGH to turn off SSR
digitalWrite(pins[i], HIGH);
}
}
我们定义的第一个整数是outputPins,它定义了我们要控制的引脚数。如果要使用多于(或少于)四个输出,则可以相应地调整此变量的值。
- “减少代码”技术从第二个定义开始。我没有定义代表四个输出引脚的离散变量,而是将它们放置在数组中。请注意,阵列中引脚的顺序表示它们将在走马灯中排序的顺序。您可以根据需要添加其他输出引脚或更改顺序。
- 接下来的两个整数定义了速度控制电位计的模拟输入以及该模拟输入电压的值。
- 在setup中,您可以真正看到“代码缩减”的工作方式。
- 我们需要将所有四个引脚定义为输出。我们还需要设置它们,使其初始化为HIGH状态,这将在首次启动项目时使固态继电器保持关闭状态。
- 通常,我们需要八行代码来执行此操作。如果我们扩大输出数量,我们将需要更多,而使用10个输出,我们将需要20行代码来完成此任务。
- 但是,由于我们的输出引脚是在数组中定义的,因此我们可以使用更少的代码。我们使用fo-loop在数组元素之间循环,对于每个元素,我们将其分配为输出并将其设置为HIGH。
- 在循环中,我们获得模拟输入的值并将其映射到产生合理时间延迟的范围,这导致我们可以用电位计调整走马灯的移动速度。
您可能需要在此处进行一些更改,以根据您的个人需求自定义项目:
- 您可以将范围(40-400)更改为更合适的范围。数字越小,速度最快,速度越高,速度越慢。但请记住白炽灯泡无法像LED一样快地做出反应。
- 如果希望电位计沿相反的方向操作,则可以反转数字,许多人可能会觉得更直观。
在获得速度(时间延迟)后,我们进入另一个for循环,就像我们在setup中所做的那样。这次,我们循环读取值并将其设置为低(以激活固态继电器)。然后,在由电位器位置确定的延迟时间内,使SSR保持激活状态,然后将输出设置为HIGH,以关闭SSR。
结果是固态继电器将按顺序激活,从而产生“走马灯”效果。
加载代码并观察输出。如果您的SSR模块与我使用的模块相似,那么您也应该在模块“追逐”上看到LED指示灯。
如前所述,您可以进行调整以微调性能。
这只是一个可爱的小演示,但可以用作构建真实的全尺寸走马灯组件的实用电路。
物联网控制继电器
IoT继电器。它本质上是一个盒子中的机械继电器,带有隔离的控制电路。
该设备有四个插座。其中两个处于常开状态,因此在施加控制信号时它们会打开。一个是常闭的,因此在收到信号时将其关闭。最后一个始终打开,方便为Arduino本身供电。
IoT继电器上的控制输入可以通过一定范围的电压激活,包括直流和交流。在直流侧,它可以在低至3.3伏的电压下激活,使其适用于3.3伏和5伏逻辑器件的控制。
操作很简单–施加控制电压,继电器就被激活。
在视频中,我演示了IoT继电器与Arduino的结合使用。我将继电器输入的正极连接到Arduino输出引脚13,负极连接到Arduino地面。如预期的那样,将高电平信号发送到引脚13将激活继电器。
对于代码,我只是使用了经典的Blink代码!结果是闪烁的灯光。
如果要使用Arduino或任何微控制器或微型计算机控制交流电,这是一种非常好且非常安全的方法。
结论
能够控制交流设备确实可以扩展您可以使用Arduino构建的项目数量,但必须安全进行。在隔离的低压交流电源上进行试验是在开发过程中保持安全的一种方法。
在以后的文章和视频中,我将向您展示如何打开和关闭AC设备,以及如何调节AC以控制灯泡或空间加热器的输出亮度。