| 本帖最后由 驴友花雕 于 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打印文件见附件
 
 
  
 
  
 
 
 |