在这个 项目 中,我将向您展示如何制作一个简单的 arduino 电压表。它可以测量超过 30VDC 的电压,具体取决于您的配置方式。您要测量的电压范围越小,仪表就越准确。这个项目将是我正在制作的高斯计的一部分,用于测量磁场强度和磁场极性。这个 instructable 应该为大量需要 Arduino 来监控某物的电压电平的不同应用程序提供良好的基础。
第 1 步:您需要什么
1. Arduino Uno 或类似的微控制器。
2. 128x64 OLED 显示屏
3. 两个电阻器。这些值取决于要测量的电压范围
第 2 步:原理图
如图所示连接您的组件,并根据您要测量的范围选择您的电阻器值。例如,如果要测量0-10V,则可以选择 R1 为 100k,R2为 100k。在将数字插入程序之前,请务必测量电阻器,以确保测量更准确。
要计算所需的电压范围,您需要使用以下分压器公式。
输出电压 = (R2*Vin)/(R1+R2)
ADC 的 Vout 需要为 5V,而 Vin 将是您要测量的最大电压值。
以下是一些电压范围示例:
0-10V : R1=100k, R2=100k
0-15V : R1=100k, R2=50k
0-25V:R1=100k,R2=25k
0-55V:R1=100k,R2=10k
第 3 步:上传代码
在上传代码之前,如果您使用的是 OLED 显示器,则需要从此处下载 U8glib 库。
第 4 步:如何运作
该电压表在模拟引脚上使用 Arduino 的模数转换器,并将 0-5 伏特转换为 0-1023 之间的值。要测量超过 5 伏的电压,您需要使用分压器并在程序中计算电压。这样做的问题是 Arduino 的模数转换器仍然只有 1024 点的分辨率,因此您要测量的电压越高,电压表的准确性就越差。
Arduino 上的 ADC 是 10 位 ADC,这意味着它只能检测 1,024 个离散模拟电平。对于我的高斯仪表,我可能会使用带有 16 位 ADC 的微控制器,用于 65,535 个离散电平,并且总体上更精确。
仅使用此电压表测量正电压,切勿将其与错误的极性连接。在我的高斯计 instructable 中,arduino 将测量负值和正值,因此请等待它以查看如何测量负值。
如果我从中得到足够的反馈,我将制作一个功能齐全的万用表,它可以测量电阻和负值。

项目代码
#include "U8glib.h"//you will need to make sure you have this library installed for this program to work
float VoltageRef = 5.0; //Tweak this value to calibrate your meter
float r1 = 99650;//in ohms
float r2 = 99620;//decrease r2 to increase your measurement range and be sure to measure your resistors.
//the following will need to match whatever OLED display you are using
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
void draw(void) {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 33, 15, "Proto G");
u8g.drawStr( 25, 35, "Voltmeter");
float ADC_Voltage = (analogRead(0) * VoltageRef) / 1024.0;//Converts the analog to digital converter values from 0-1023 to 0-5
float Voltage = ADC_Voltage / (r2 / (r1 + r2));//using the voltage divider formula to calculate the real value from 0-10 in this case
u8g.setPrintPos(50, 55);
u8g.print(Voltage);
}
void setup(void) {
// u8g.setRot180(); //uncomment this line to rotate the OLED screen
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {// assign default color value
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}
}
void loop(void) {
draw();//Calls the draw function defined above
delay(100);//Delays before refreshing the screen
}
【Arduino 动手做】Arduino 电压表原型
项目链接:https://www.instructables.com/Arduino-Voltmeter-Prototype/
项目作者:Proto G (机电工程师、产品设计师、创客。我喜欢制作原型并在此过程中教别人。我从 UCF 毕业,并在 NASA 工作了两年。)
项目代码:https://content.instructables.com/F1F/6W5H/IJHFDQNN/F1F6W5HIJHFDQNN.ino
u8glib 库:https://code.google.com/archive/p/u8glib/

评论