如何使用Arduino和TRIAC构建交流灯调光器

电源/新能源

3400人已加入

描述

  在我们的家庭中,大多数电器都是由交流电源供电的,例如灯、电视和风扇等。如果需要,我们可以通过构建家庭自动化设置使用 Arduino 和继电器以数字方式打开/关闭它们。但是,如果我们需要控制这些设备的功率,例如调暗 AC 灯或控制风扇的速度,该怎么办。在这种情况下,我们必须使用相位控制技术和TRIAC等静态开关来控制交流电源电压的相位。

  所以在本教程中,我们将学习使用 Arduino 和 TRIAC 的交流灯调光器。这里使用 TRIAC 来切换交流灯,因为这是一种电力电子快速开关器件,最适合这些应用。

  使用的组件:

  Arduino UNO-1

  MCT2E光耦-1

  MOC3021光耦-1

  BT136 TRIAC-1

  (12-0)V, 500mA 降压变压器-1

  1K、10K、330ohm电阻器

  10K电位器

  带灯交流灯座

  交流电线

  跳线

  在继续之前,我们将了解过零、TRIAC 和光耦合器。

  过零检测技术

  要控制交流电压,我们要做的第一件事就是检测交流信号的过零。在印度,交流信号的频率为 50 HZ,因为它本质上是交替的。因此,每次信号到达零点时,我们必须检测该点,然后根据功率要求触发 TRIAC。交流信号的过零点如下图所示:

调光器

  TRIAC 工作

调光器

  TRIAC是一种三端交流开关,可由其栅极端的低能量信号触发。在 SCR 中,它仅在一个方向上导通,但在 TRIAC 的情况下,可以在两个方向上控制功率。在这里,我们使用BT136 TRIAC 进行交流灯调光。

调光器

  如上图所示,通过向 TRIAC 施加一个小的栅极脉冲信号以 90 度的触发角触发 TRIAC。时间“t1”是我们必须根据调光要求给出的延迟时间。例如,在这种情况下,由于触发角为 90%,因此功率输出也将减半,因此灯也会以一半的强度发光。

  我们知道这里交流信号的频率是50赫兹。所以时间周期为 1/f,即 20ms。所以对于半个周期,这将是 10ms 或 10,000 微秒。因此,为了控制我们的交流灯的功率,“t1”的范围可以在 0-10000 微秒之间变化。

  光耦合器

调光器

  光耦合器也称为光隔离器。它用于保持两个电路(如直流和交流信号)之间的隔离。基本上,它由发射红外光的 LED 和检测红外光的光电传感器组成。在这里,我们使用MOC3021 光耦合器从微控制器信号(直流信号)控制交流灯。

  电路原理图:

  交流调光器的电路图如下:

调光器

  TRIAC和光耦连接图:

调光器

  我在 perf 板上焊接了 TRIAC 和光耦合器 MOC3021 的电路。焊接后如下图所示:

调光器

  我还在perf 板上焊接了光耦合器 MCT2E ,用于将其连接到变压器以提供交流电源:

调光器

  Arduino Lamp Dimmer的完整电路如下所示:

调光器

为交流调光器编程 Arduino:

成功完成硬件设置后,现在是时候对 Arduino 进行编程了。最后给出了带有演示视频的完整程序。在这里,我们逐步解释了代码,以便更好地理解。

第一步,声明将在整个代码中使用的所有全局变量。这里 TRIAC 连接到 Arduino 的引脚 4。然后声明dim_val以存储我们将在程序中使用的调光步骤的值。

 

诠释灯 = 4;
int dim_val=0;

 

接下来,在设置函数内部将 LAMP 引脚声明为输出,然后配置一个中断以检测过零。在这里,我们使用了一个名为attachInterrupt的函数,它将 Arduino 的数字引脚 2 配置为外部中断,当它在其引脚上检测到任何中断时,它将调用名为zero_cross的函数。

 

无效设置()
{
  pinMode(灯,输出);
  attachInterrupt(digitalPinToInterrupt(2), zero_cross, CHANGE);
}

 

在无限循环中,从连接在 A0 的电位器读取模拟值。然后将其映射到 (10-49) 的值范围。要找出这一点,我们必须做一个小计算。之前我说过,每半个周期相当于 10,000 微秒。所以,让我们需要控制 50 步的调光(这是一个任意值。你也可以改变它)。我将最小步数设为 10,而不是零,因为 0-9 步会产生大致相同的功率输出,实际上不建议采用最大步数。因此,我将最大步数设为 49。

那么每一步的时间可以计算为 10000/50= 200 微秒。这将在代码的下一部分中使用。

 

无效循环()
{
    整数数据=模拟读取(A0);
    int data1 = map(数据, 0, 1023,10,49);
    暗淡=数据1;
}

 

在最后一步,配置中断驱动函数zero_cross。在这里,可以通过将单个步进时间乘以 no 来计算调光时间。的步骤。然后在此延迟时间之后,可以使用 10 微秒的小高脉冲触发 TRIAC,这足以打开 TRIAC。

 

无效的零交叉()
{
  int dimming_time = (200*dim_val);
  延迟微秒(调光时间);  
  数字写入(灯,高);
  延迟微秒(10);
  数字写入(灯,低);
}

 

  Arduino灯调光器电路的工作

  下面是显示使用 Arduino 和 TRIAC 调光交流灯泡的三个阶段的图片。

  1.低调光步长

调光器

  2. 中等调光步骤

调光器

  3. 最大调光步长:

调光器

  这就是使用 TRIAC 和光耦合器轻松构建 AC 调光器电路的方式。下面给出了Arduino调光器代码

诠释灯 = 4;


int dim_val=0;


无效设置()


{


pinMode(灯,输出);


attachInterrupt(digitalPinToInterrupt(2), zero_cross, CHANGE);


}


无效的零交叉()


{


int dimming_time = (200*dim_val);


延迟微秒(调光时间);


数字写入(灯,高);


延迟微秒(10);


数字写入(灯,低);


}





无效循环()


{


整数数据=模拟读取(A0);


int data1 = map(数据, 0, 1023,10,49);


暗淡=数据1;


}

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分