本帖最后由 驴友花雕 于 2025-5-21 17:11 编辑
第 3 步:编码和校准
这段代码远非完美,而是匆忙的,只是一个概念证明。当前设置为在 4 个页面之间循环,每次更新显示的信息。使用万用表测量源电压,然后分别修改代码中的 R1 和 R2 以校准显示屏上的电压。接下来,使用相同的电压和源,使用万用表测量负载的电流。然后使用电流传感器参考该读数,并向上或向下修改数字 511 以进行校准。请记住,在测量小电流时它不准确,我建议在校准时使用大约 1 安培的负载。如果您的读数显示为负值,请交换电流传感器上的感应线以轻松纠正。还可以随意使用您自己的位图图像更改代码中的位图图像,以真正自定义仪表的最终外观。
项目开源代码件附件
- #include "U8glib.h"
- int analogInput = A2;
- float vout = 0.0;
- float vin = 0.0;
- float R1 = 101000.0; // resistance of R1 (100K)
- float R2 = 10100.0; // resistance of R2 (10K)
- int value = 0;
- int amp = 0;
- float watt = 0.0;
- float amps = 0.0;
- U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
- const unsigned char PROGMEM ins [] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x01, 0x20, 0x00, 0x10, 0x00, 0x00, 0x81, 0x03, 0xC1, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x02, 0x20, 0x00, 0x10, 0x00, 0x00, 0x83, 0x04, 0x42, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x04, 0x20, 0x00, 0x10, 0x00, 0x00, 0x85, 0x08, 0x24, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x08, 0x2E, 0x0F, 0x10, 0xE0, 0x70, 0x89, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x10, 0x31, 0x10, 0x91, 0x10, 0x88, 0x81, 0x00, 0x20, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x30, 0x21, 0x20, 0x92, 0x09, 0x04, 0x81, 0x00, 0x41, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x50, 0x21, 0x03, 0x92, 0x09, 0x04, 0x81, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x88, 0x21, 0x1C, 0x93, 0xF9, 0xFC, 0x81, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x04, 0x21, 0x20, 0x92, 0x01, 0x00, 0x81, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x04, 0x21, 0x20, 0x92, 0x09, 0x04, 0x81, 0x02, 0x04, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x02, 0x21, 0x21, 0x91, 0x10, 0x88, 0x81, 0x04, 0x06, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x01, 0x21, 0x1E, 0x90, 0xE0, 0x70, 0x81, 0x0F, 0xE1, 0xC0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0xB0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x07, 0x20, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0C, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x20, 0x03, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x00, 0x3F, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x36, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0xF8, 0x07, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x01, 0xFE, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x70, 0x40, 0x03, 0x8E, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x78, 0x40, 0x03, 0x8E, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xF8, 0x40, 0x03, 0xCE, 0x1F, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xCE, 0x31, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0xF8, 0x80, 0x07, 0xFC, 0x39, 0x8F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0xF8, 0x80, 0x03, 0xF8, 0x3F, 0x8F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x80, 0x01, 0xF0, 0x1E, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xF8, 0x80, 0x00, 0x00, 0x04, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0xF9, 0x81, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0xF9, 0x80, 0x0F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0xF9, 0x80, 0x00, 0x1F, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0xF1, 0x00, 0x00, 0x01, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x43, 0xFF, 0xFF, 0xFF, 0xC0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x7F, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00
- };
- void setup() {
- pinMode(analogInput, INPUT);
- pinMode(A1, INPUT);
- }
- void loop() {
- u8g.firstPage();
- do {
- draw();
- } while( u8g.nextPage() );
- delay(1000);
- u8g.firstPage();
- do {
- draw2();
- } while( u8g.nextPage() );
- delay(1000);
- u8g.firstPage();
- do {
- draw3();
- } while( u8g.nextPage() );
- delay(1000);
- u8g.firstPage();
- do {
- draw4();
- } while( u8g.nextPage() );
- delay(1000);
- value = analogRead(analogInput);
- vout = (value * 5.0) / 1024.0;
- vin = vout / (R2/(R1+R2));
- amp = analogRead(A1);
- amps = ((511 - amp) * 75.75 / 1023);
- watt = (amps * vin);
- }
- void draw(){
- u8g.setFont(u8g_font_profont17r);
- u8g.drawStr(31, 12, "VOLTS");
- u8g.setFont(u8g_font_profont29r);
- u8g.setPrintPos(26,45);
- u8g.drawRFrame(3, 18, 125, 35, 10);
- u8g.println(vin);
- u8g.println("V");
- }
- void draw2(){
- u8g.setFont(u8g_font_profont17r);
- u8g.drawStr(38, 12, "AMPS");
- u8g.setFont(u8g_font_profont29r);
- u8g.setPrintPos(26,45);
- u8g.drawRFrame(3, 18, 125, 35, 10);
- u8g.println(amps);
- u8g.println("A");
- }
- void draw3(){
- u8g.setFont(u8g_font_profont17r);
- u8g.drawStr(31, 12, "WATTS");
- u8g.setFont(u8g_font_profont29r);
- u8g.setPrintPos(26,45);
- u8g.drawRFrame(3, 18, 125, 35, 10);
- u8g.println(watt);
- u8g.println("W");
- }
- void draw4(){
- u8g.drawBitmapP( 0, 0, 16, 64, ins);
- }
复制代码
第 4 步:3D 打印外壳
您可以通过多种不同的方式封闭您的项目,但是如果您有 3D 打印机,为什么不打印一个外壳呢。我为我设计的 2 部分外壳提供了 stl 文件,该外壳通过摩擦配合卡在一起。它还具有 2 个用于螺钉的安装孔和独特的堆叠布局。
3D打印文件见附件


|