在这个项目中,我们将 使用Arduino制作一个交流电压测量设备, 该设备将测量我们家中交流电源的电压。我们将在Arduino IDE的串行监视器上打印该电压,并在万用表上显示。
制作数字电压表比制作模拟电压表容易得多,因为在模拟电压表的情况下,您必须对扭矩、摩擦损耗等物理参数有很好的了解,而在数字电压表的情况下,您只需使用 LCD 或 LED 矩阵甚至您的笔记本电脑(如本例)为您打印电压值。
所需组件:
一台 12-0-12 变压器
1N4007二极管
1uf电容器
电阻 10k;4.7k。
齐纳二极管(5V)
Arduino UNO
连接线
Arduino电压表电路图:
此Arduino电压表的电路图如上所示。
连接:
将变压器的高压侧(220V)连接到主电源,将低压侧(12V)连接到分压器电路。
将 10k 电阻与 4.7k 电阻串联,但确保将电压作为 4.7k 电阻的输入。
如图所示连接二极管。
连接 4.7k 上的电容器和齐纳二极管
将一根电线从二极管的n端连接到Arduino的模拟引脚A0。
** 注意:将Arduino的接地引脚连接到图中所示的点,否则电路将不起作用。
需要分压器电路吗?
当我们使用 220/12 V 变压器时,我们在 l.v 侧得到 12 v。由于该电压不适合作为Arduino的输入,因此我们需要一个分压器电路,该电路可以提供合适的电压值作为Arduino的输入。
为什么连接二极管和电容器?
由于Arduino不将负电压值作为输入,因此我们首先需要消除降压AC的负循环,以便Arduino仅获取正电压值。因此,连接二极管以整流降压。查看我们的半波整流器和全波整流器电路,了解有关整流的更多信息。
该整流电压不平滑,因为它包含较大的纹波,无法为我们提供任何精确的模拟值。因此,连接电容器以平滑交流信号。
齐纳二极管的用途?
如果将大于 5v 的电压馈送到 Arduino,它可能会受到损坏。因此,连接了一个 5v 齐纳二极管以确保 Arduino 的安全性,如果该电压超过 5v,该二极管会击穿。
基于Arduino的交流电压表的工作:
变压器的L.V侧获得降压电压,适用于正常额定功率电阻器。
2.然后我们在4.7k电阻上得到合适的电压值
通过在变形杆菌上模拟该电路,可以找到可以测量的最大电压(在模拟部分中解释)。
Arduino 将此电压作为引脚 A0 的输入,以 0 到 1023 之间的模拟值的形式出现。0 是 0 伏,1023 是 5V。
然后,Arduino 通过公式将此模拟值转换为相应的电源交流电压。(在代码部分中解释)。
模拟:
精确的电路是在变形杆菌中制造的,然后进行模拟。为了找到该电路可以测量命中的最大电压,请使用试验方法。
在使交流发电机的峰值电压为440(311 r.m.s)时,发现引脚A0上的电压为5伏,即最大。因此,该电路可以测量最大311 r.m.s电压。
对 220 r.m.s 至 440v 之间的各种电压进行仿真。
代码说明:
完整的Arduino电压表代码在本项目结束时给出,并通过评论进行了很好的解释。在这里,我们将解释其中的一小部分。
m 是引脚 A0 上接收到的输入模拟值,即
m= pinMode (A0,INPUT) ; // set pin a0 as input pin
将变量 n 分配给此公式 n=(m * 。 304177), 首先使用在模拟部分获得的数据执行某种计算:
如仿真照片所示,当输入交流电压为 311V 时,在引脚 A0 处获得 5v 或 1023 模拟值。因此:
1023 模拟值对应于 311 伏电源
因此,任何随机模拟值对应于 (311/1023)*m,其中 m 是获得的模拟值。
因此,我们得出这个公式:
n=(311/1023) m 伏特或 n=(m .304177)
现在,该电压值使用串行命令打印在串行监视器上,如下所述。并且还显示在万用表上,如下面的视频所示。
屏幕上打印的值为:
代码中指定的模拟输入值:
Serial.print(" analog input ") ; // this gives name which is “analog input” to the printed analog value
Serial.print(m);// this simply prints the input analog value
代码中指定的所需交流电压:
Serial.print(" ac voltage ") ; // this gives name “ac voltage” to the printed analog value
Serial.print(n) ; // this simply prints the ac voltage value
int m;// initialise variable m
float n;//initialise variable n
void setup()
{
pinMode(A0,INPUT); // set pin a0 as input pin
Serial.begin(9600);// begin serial communication between arduino and pc
}
void loop()
{
m=analogRead(A0);// read analog values from pin A0 across capacitor
n=(m* .304177);// converts analog value(x) into input ac supply value using this formula ( explained in woeking section)
Serial.print(" analaog input " ) ; // specify name to the corresponding value to be printed
Serial.print(m) ; // print input analog value on serial monitor
Serial.print(" ac voltage ") ; // specify name to the corresponding value to be printed
Serial.print(n) ; // prints the ac value on Serial monitor
Serial.println();
}