|
在本文中,我们将使用Arduino开发板制作一个交流电压测量装置,测量我们家中交流电源的电压。我们将在Arduino IDE的串行监视器上打印输出该电压,并在万用表上显示出来。
制作数字电压表比模拟电压更容易一些,因为在制作模拟电压表时,您必须具备一些物理参数的知识,如扭矩、摩擦损耗等。然而在制作数字电压表时,您只需使用LCD或LED矩阵或甚至你的笔记本电脑打印输出电压值即可。
所需的元件
● 一个220-12变压器
● 1N4007二极管
● 1uf电容
● 10k和4.7K电阻器
● 齐纳二极管(5v)
● Arduino UNO开发板
● 连接导线
Arduino电压表电路连接示意图
该Arduino电压表的电路图如上所示。
连接方式:
1. 将变压器的高压侧(220V)连接到主电源,将低压(12V)连接到分压器电路。
2. 将10k电阻与4.7k电阻串联,但确保以4.7k电阻为输入电压。
3. 如图所示连接二极管。
4. 将电容和齐纳二极管连接至4.7K电阻。
5. 将二极管N端连接到Arduino的模拟引脚A0。
**注意:请将Arduino的接地引脚连接到图中所示的位置,否则电路将无法工作。
需要分压电路?
当我们使用220/12 V变压器时,我们在lv端可以得到12V的电压。由于该电压不适合作为Arduino的输入,因此我们需要一个分压电路,输出适合的电压值作为Arduino的输入。
为什么要连接二极管和电容?
由于Arduino不使用负电压值作为输入信号,我们首先需要消除降压AC的负循环,从而Arduino采集到的只有正电压值。因此,二极管被连接以整流降压。
这种半波整流电压不平滑,因为它包含不能给出任何精确模拟值的大波纹。因此,连接电容器可以平滑交流信号。
齐纳二极管的用途?
如果电压大于5v,Arduino开发板可能会损坏。因此,连接一个5v齐纳二极管以确保Arduino的安全性,如果该电压超过5v,则会击穿。
Arduino交流电压表的工作原理
1. 在变压器的一端可获得降压电压,适用于正常额定电阻。
2. 然后我们得到4.7k电阻上的合适的电压值
3. 可以通过在proteus上模拟仿真该电路来找到可测量的最大电压。
4. Arduino以0至1023之间的模拟值的形式将该电压作为引脚A0的输入。0为0伏,1023为5v。
5. 然后Arduino将该模拟值转换成相应的电源交流电压,由公式计算。
模拟仿真
在proteus中制作精确的电路,然后模拟仿真。要找到该电路可以测量的最大电压,并使用试验方法。
在交流发电机的峰值电压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),首先使用模拟部分获得的数据进行某种计算:
如仿真照片所示,当输入a.c电压为311伏特时,在引脚A0处获得5v或1023的模拟值。因此:
1023模拟量对应于311伏电源
所以任何随机模拟值对应于(311/1023)* m,其中m是模拟值。
所以我们得到这个公式:
n=(311/1023)*m volts 或者 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
复制代码
代码中指定的所需的a.c电压: - 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();
- }
复制代码
译者注:本文翻译自https://circuitdigest.com/microcontroller-projects/arduino-ac-voltmeter,感谢Ankit Negi做出的贡献,如有错漏,敬请指正。 |