驴友花雕 发表于 2025-5-21 17:00:49

【Arduino 动手做】3D 打印 Arduino OLED 电表

本帖最后由 驴友花雕 于 2025-6-5 06:17 编辑

你有没有想过一件物品使用多少瓦特或多少电流,甚至它的工作电压?这个简单易行的项目可以为您提供重要信息,同时将成本保持在 7 美元以下。我主要将其设计为与常见的太阳能充电控制器结合使用,这些控制器没有任何负载功耗的指示。自从制作它以来,我意识到它在我自制的台式电源上也很有用。事实上,你可以将一个小的位图图像编程到其中,这只是一个额外的好处,每次看它时都会让你感觉很棒。









驴友花雕 发表于 2025-5-21 17:03:10

【Arduino 动手做】3D 打印 Arduino OLED 电表

第 1 步:收集您的零件

Arduino Nano)
ACS 712 30安培电流传感器模块
I2C OLED 显示器 5伏特
10k 和 100k 电阻器
本 instructable 中提供的 Arduino 代码
本说明中提供的 3d 打印案例 Stl(可选)

你可能在房子周围放置的东西包括
松散的电线
烙铁或焊接方式
某种外壳
用于编程的 USB 迷你电缆
装有 Arduino 软件的计算机
用于测试电子电路的面包板
测试电源电压 7-15
测试负载
用于测试的万用表





驴友花雕 发表于 2025-5-21 17:05:45

【Arduino 动手做】3D 打印 Arduino OLED 电表

第 2 步:在面包板上制作原型

我提供了一个简单易懂的图表,显示了所有连接是如何建立的。我建议使用面包板,花点时间,确保在通电之前连接正确。请特别注意确保电阻分压器设置正确。在将其连接到 ardunino 之前,测量中间的电压,它应该是输入端电压的 1/10。





驴友花雕 发表于 2025-5-21 17:08:40

【Arduino 动手做】3D 打印 Arduino OLED 电表

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






驴友花雕 发表于 2025-5-21 17:13:47

【Arduino 动手做】3D 打印 Arduino OLED 电表

第 5 步:焊接和组装

将电线焊接到电路板上,使其尽可能短,参考它们在印刷外壳背面的安装方式。板子和显示器的摩擦配合非常好,一切都保持得很好。最后一步是将正面压在整个东西上,然后就完成了。









驴友花雕 发表于 2025-5-21 17:16:15

【Arduino 动手做】3D 打印 Arduino OLED 电表

本帖最后由 驴友花雕 于 2025-6-5 19:00 编辑

附录
项目链接:https://www.instructables.com/3D-Printed-Arduino-OLED-Watt-Meter/
项目作者:内华达州斯帕克斯 Khaleel123
视频教程:
3D打印文件:
https://content.instructables.co ... FGJLAVIIVO3SL82.stl
https://content.instructables.co ... FZD1Q6TIVO3SL8V.stl
项目开源代码:https://content.instructables.co ... FKEB60DIVO3SLBA.ino



驴友花雕 发表于 2025-5-23 06:20:45

【Arduino 动手做】3D 打印 Arduino OLED 电表






驴友花雕 发表于 前天 06:18

【Arduino 动手做】3D 打印 Arduino OLED 电表




页: [1]
查看完整版本: 【Arduino 动手做】3D 打印 Arduino OLED 电表