如何制作淋浴用水监控器

电子说

1.3w人已加入

描述

步骤1:防水

监控器

这个项目最困难的方面是让整个事物变得防水。因为它将存在于淋浴中,它必须能够承受极端的湿度和偶尔的飞溅。在这个项目上花费的总时间的大约75%是在计算这个部分。

我认为,有两种选择:设计一个定制的3D打印机箱,或者尝试使用现成的机箱。因为我最近有自己的3D打印机,我决定选择第一个选项。

如果你没有访问3D打印机,这里有一些现成的外壳,我发现它声称是防水的,并且可能会起作用。请注意我没有购买任何这些外壳,所以我不保证所有组件都适合里面!

Banggood - 带透明盖子的100x68x50mm盒子 - $ 5.35

Digikey - 带透明盖子的130x80x70mm盒子 - $ 11.65

对于这一点,当我提到外壳时,我说话关于我的3D打印件。

第2步:我的自定义3D打印机箱!

监控器

监控器

监控器

监控器

监控器

监控器

监控器

监控器

在Fusion 360中工作几个小时后,我想出了这个围栏。它有三个圆形切口,适合两个母头3.5毫米插孔和一个拨动开关。盖子有一个16毫米的孔用于瞬时按钮,一个矩形切口用于屏幕,以及四个安装孔,用于将屏幕固定到位。盖子是一个单独的部分,有一个唇部,有助于防止水分通过接缝进入。盒子角落上的四个孔用于将盖子固定在30mm的支座上。所有螺孔直径均为3mm,适合M3螺丝。

您可以从我的Thingiverse页面下载STL文件。它可以在没有任何筏或支撑的情况下打印,但我使用支撑只是为了安全。我也使用了100%填充。由于墙壁很薄,减少填充百分比并没有真正改变总打印时间或总材料,所以我只是将其保持在100%。

为了使屏幕可见,它可以突出通过外壳盖子上的切口,或放在透明窗口后面。由于屏幕不应该暴露在湿气中,我们坚持第二种选择。不幸的是,带有透明灯丝的3D打印仍然处于起步阶段,所以我们必须要有点创意。

我的解决方案是在盖子上创建一个矩形切口,然后粘上一块透明塑料从一些蔬菜包装。即使您没有使用我的自定义机箱,也可以使用此技术;用工具刀或Dremel简单地切出一个矩形。当然,如果你使用的是带透明盖子的外壳,根本不需要。

我发现透明塑料的最佳来源是生产包装。通常菠菜或其他叶类蔬菜都装在大的透明塑料容器中。在我的情况下,我使用了“辣椒混合物”的包装。

我想要一个5mm的悬垂部分来提供足够的粘合表面积,所以我切出了一个27x77mm的透明塑料矩形。我不得不修剪一些角落,以便螺丝适合。我在切口的周边喷了一条强力胶,然后将透明塑料放在上面。为了确保密封,我在边缘附加了一点强力胶。

Pro-Tip:在胶水干燥时将部件放在小风扇前面。随着超强力胶水的干燥,它往往会留下一个邪恶的白色残留物,我们当然不希望透明窗口。我用一台旧的12V风扇从电脑供电。我让胶水放置12小时,以确保它完全干燥。

步骤3:安装LCD屏幕

监控器

监控器

监控器

监控器

监控器

透明窗口干燥后,可以安装LCD。液晶显示器是一种超级流行的16x2字符显示器,I²C“背包”预先焊接在背面。我强烈建议使用I²C接口获取此屏幕。连接所有并行线路非常烦人,并且引入了更多的错误--I²C版本只有两根电源线和两根信号线。

我使用四个10mm支架来安装屏幕。每个支座的一端有一个阳螺纹,另一端有一个阴螺纹。我将外螺纹穿过LCD上的孔并拧紧一个M3螺母。然后我用四个M3螺钉将支座的母端固定在机箱的盖子上。我得到了这个支架包装,其中有10毫米的支架安装液晶显示器,而较长的支架则将盖子固定在底座上。此外,还有M3螺钉和螺母,因此您无需购买任何其他硬件。

确保螺母非常紧,以便在拧紧螺钉时僵局不转。另外,请确保不要过度拧紧螺钉,否则塑料盖可能会变形而无法正确密封。

LCD上的16个插头引脚排在顶部 - 确保不要将LCD上下颠倒!

步骤4:安装瞬间按钮

监控器

监控器

监控器

我决定在前面板上使用这个看起来很恶心的镀铬按钮。我在之前的项目中使用它们,我非常喜欢它们的外观。它们应该是防水的,它们带有橡胶圈以防止湿气通过螺纹进入外壳。

这一步非常简单。松开螺母,但要打开橡胶圈。将按钮插入盖子上的孔,然后从背面拧紧螺母。避免过度拧紧螺母,否则橡胶圈会被压坏而无法达到目的。

步骤5:电源和充电电路

监控器

监控器

监控器

监控器

监控器

现在我们将把电池组件放在一起。这包括电池,主开关,电池监控/充电板和升压转换器。

我使用的电池是3.7V 1500 mAh单节锂离子电池。我使用的特定一个是从损坏的Playstation控制器中提取的。任何单节锂离子或锂离子电池都可以工作,只要它适合您的机箱。这种类型的电池往往非常薄而且平坦,所以你可以使用两倍大的电池而没有任何问题。 18650单元可以工作,但它不适合我的自定义机箱,因此您需要自己设计,或使用现成的机箱。如果可能的话,我建议使用打捞的电池(就像我一样),因为运输电池通常很贵!

首先应将电池焊接到TP4056充电板上。如果您愿意,可以将JST RCY连接器焊接到电池和充电器以方便(我这样做了),但没有必要。请务必遵守充电器板上标记所指示的正确极性,因为电路板没有防止电池极性反接!

接下来,从充电器的正极输出端(位于旁边)焊接导线正电池线)到升压转换器的正输入端。然后将负极输出(位于负极电池线旁边)的导线焊接到主切换开关的公共(中心)针脚。最后,将导线从开关的常开引脚焊接到升压转换器的负输入。如果将万用表连接到升压转换器的输出并打开主开关,则应显示电压。

由于我们的Arduino,LCD屏幕和流量传感器都需要5V,我们必须将升压转换器的输出设置为5V。这可以通过用小螺丝刀转动电位器上的旋钮来实现。主开关打开,电池连接,万用表连接到升压转换器的输出,慢慢转动电位器,直到输出读数为5V。很难获得准确的5.000V读数,但目标是在4.9V和5.1V之间的电压。

由于我的定制外壳用几个螺丝固定,我们不希望每次需要收费时打开案例。我使用了3.5mm耳机插孔。我使用的确切连接器是Digikey的这个连接器(这是我的外壳中的切口尺寸),但是来自Banggood的连接器应该也能正常工作。

首先,我将连接器插入底部机箱中的最小孔。由于这种情况大部分时间都会被拔掉,因此容易受潮,最好将其安装在底部以防止水滴到里面。安装锁紧垫圈并拧紧螺母后,我将两根电线焊接到连接器上的“尖端”和“套管”标签上。连接器的引脚分布显示在我的一个带注释的图像中。我将“套管”线的另一端焊接到充电器上的负输入端,在微型USB端口旁边。最后,我将“尖端”线焊接到USB端口另一侧的+ 5V焊盘上。充电器上的USB端口将不会被使用,因为很难让USB端口穿透外壳而不会留下水分。

步骤6:充电电缆

监控器

监控器

监控器

监控器

监控器

监控器

监控器

监控器

监控器

由于我们使用3.5毫米音频插孔作为充电端口,我们需要制作一端有3.5毫米插头,USB A插头的转接线另一端。这将允许我们使用任何通用移动设备充电器(例如iPhone充电器)为此设备充电。

你可以买一个USB线连接器,一端是USB A连接器,另一端是镀锡线,但如果你像我一样,你可能有十几根随机的USB线放在你身边不需要。我没有购买USB电缆组件,而是拿到了我不需要的微型USB转USB A线,并将微型USB连接器断开。

接下来,我将电缆上的白色外套剥去仅显示内部的两根电线:红色和黑色电线。有些USB线有四根线:红色,黑色,绿色和白色。绿色和白色用于数据传输,可以忽略。剥开红色和黑色电线的绝缘层。

接下来你需要一个3.5毫米的插头。我用过Banggood的这个。将USB电缆上的红线焊接到中间标签(连接器的尖端),黑色电线连接到长套标签。请参阅我的照片以获得澄清。

我建议在USB插头之前插入3.5mm插头 ,因为插入电缆的过程可能导致插头在金属插座上短路。

步骤7:关于流量传感器

监控器

监控器

监控器

监控器

我以3.87美元的价格从Banggood拿起这个流量传感器。在使用它之前,我决定研究它是如何工作的。

这种设计非常简单和巧妙。电子设备完全与水密封。有一个自由旋转螺旋桨,根据流速旋转更慢或更快。螺旋桨上的一个点是磁铁。在传感器的外部是一个小隔间,其中包含一个带有两个组件的小PCB:一个电阻器和一个霍尔效应传感器。每当磁铁经过霍尔效应传感器时,它就会在高低之间切换。换句话说,每次螺旋桨旋转时,它在5V和0V之间切换。

要读取传感器,我们对红线施加+ 5V,对黑线施加负电压,并从黄线读取数字信号。在示波器的照片中,您可以看到信号在流量打开时如何变化。起初,信号始终为零伏。当流量开始时,脉冲频率快速上升并达到稳定状态。

根据数据表,传感器每升输出450个脉冲。在我们编写软件时,这将很重要。

步骤8:流量传感器接线

监控器

监控器

监控器

监控器

流量传感器配有3针JST-XH连接器。这是不理想的,因为导线太短,并且连接器具有暴露的触点,这些触点很容易被杂散的水滴短路。我从Digikey订购了这个3.5mm音频插头电缆组件。它长3英尺,是一个完美的长度,它有镀锡线,易于焊接。我不建议尝试使用旧的耳机线,因为它们往往有非常薄的漆包线,几乎不可能焊接。

流量传感器有一个塑料盖,由两个Phillips保持螺丝。只需卸下这些螺钉,然后拉出电路板。它不是用任何胶水固定的,它只是用塑料盖保持在原位。接下来,通过用烙铁将它们加热并将它们一次一个地取下来拆焊三根电线。

接下来,将3.5mm音频电缆焊接到焊盘上。我建议按照我的方式匹配颜色。这种配置的尖端为+ 5V,环上有信号,套管上有接地。这与用于充电端口的配置相同,从步骤6.如果您不小心将充电器插入传感器端口,反之亦然,则不会对设备造成任何损坏。

步骤9:安装流量传感器

监控器

监控器

监控器

监控器

《到目前为止,我们所有的工作都在研讨会上进行。但现在,是时候去洗手间了!

首先,我取下了淋浴头。这显示了从墙壁突出的一小段管道,具有1/2“NPS阳螺纹。方便地,我们的流量传感器具有完全相同的螺纹尺寸!唯一的问题是传感器两端都有阳螺纹,所以我们将需要一个女性对女性的耦合。

在我当地的五金店,有1/2“黄铜,铁和PVC的接头。 PVC一个是最便宜的,所以我得到了那个。虽然事后看来,黄铜或钢材看起来更好。

一旦你有了联轴器,只需将流量传感器拧入联轴器,然后将联轴器的另一端拧到管子上。流量传感器具有箭头以指示预期的流动方向。确保不要向后安装,否则测量结果可能不准确。最后,将淋浴头拧到流量传感器的末端。

当然,我假设你的淋浴使用1/2“NPS螺纹,就像我的一样。如果不是这样,您将需要获得额外的适配器。

Pro-Tip:在将各个部件拧在一起以防止泄漏之前,在所有螺纹上添加一些Teflon管道工的胶带。我没有任何在手,但我打算在不久的将来添加它。

第10步:Arduino和Perfboard

监控器

监控器

监控器

监控器

由于我们将不得不做大量的布线,所以最好将一块穿孔板连接到让事情变得更加整洁。我在1英寸乘2英寸处切出一个长方形的穿孔板。然后,我将Arduino Nano放在电路板的中间并标记了插针穿过的位置。然后我切割了两个长度的母头,每个15针长。我将这些焊接到我之前标记的穿孔板上。这将允许我们移除Arduino进行编程。

Pro-Tip:标记Arduino USB端口的方向,以便始终以相同方式将其插入穿孔板。

步骤11:连接所有东西

监控器

监控器

现在是时候把所有东西焊在一起了!我已经提供了一个完整的接线图,您可以遵循,或者如果您更喜欢采用更有指导性的方法,请参阅下面的书面步骤。

首先,我切割了一些公头针并将它们焊接到了多孔板上+ 5V和地线。然后我焊接了两个连接到Arduino上的引脚A4和A5的插头引脚。这些标题允许我们使用女性对女性的跳线连接LCD屏幕。

接下来,我将升压转换器输出端的一对导线焊接到+ 5V和接地导轨。这将为Arduino,LCD和流量传感器供电。

之后,我切断了两根电线并将它们连接到按钮的端子。我将一根导线焊接到接地导轨上,另一根焊接到数字插针3上。

焊接的最后一部分是流量传感器。由于我们已经在传感器上安装了3.5mm插头,我们只需要焊接一个3.5mm的母插孔。首先,我焊接了三根电线 - 一根连接到千斤顶上的每个标签。然后我将千斤顶插入外壳并用螺母将其固定到位。最后,我将套管焊接到地,尖端为+ 5V,环形为数字引脚2.

我选择使用数字引脚2和3作为按钮和流量传感器,因为它们是硬件中断引脚。这样可以更容易地编写代码。

现在我们已完成焊接,但我们仍然需要连接LCD。由于我们焊接了标题,我们只需要四个女性对女性的跳线。将“Vcc”引脚连接到+ 5V,将“Gnd”引脚连接到地,将“SCL”引脚连接到A5,将“SDA”引脚连接到A4。为了使LCD屏幕适合外壳,我们需要向后弯曲插头引脚。多次来回弯曲销钉会使金属疲劳并导致销钉断裂,所以我建议只弯曲一次,并小心地这样做。

现在接线完成了!

步骤12:编程

监控器

现在硬件已全部连接,我们可以对Arduino进行编程。

我希望程序具有以下功能:

在第一行显示快速更新的计数总升

在第二行,显示水的总成本或流量

当淋浴器运行时,按钮在两者之间切换显示成本或流量

当淋浴不运行时,按钮应清除所有数据并重置屏幕

传感器应该是使用中断例程读取以避免粗略轮询方法

更新屏幕时,我们应该只更新已更改的值,而不是每次都覆盖整个屏幕(这会导致明显的闪烁)

该程序遵循一个简单的结构。通过使用 millis()函数,我们可以创建实际上不会停止程序执行的延迟。有关在不使用delay()函数的情况下闪烁LED的示例,请参阅本教程。

millis()函数返回自Arduino打开以来的毫秒数。通过创建变量“ previousMillis ”并减去 Millis() - previousMillis(),我们可以看到自 previousMillis 更新以来经过的时间。

如果我们希望每秒发生一次,我们可以使用以下代码块:

if((millis() - previousMillis) 》= 1000){

previousMillis = millis();

toggleLED();

}

这会检查 millis()《之间是否存在差异/em》(当前时间)和 previousMillis (最后一次)大于或等于1000毫秒。如果是,我们首先要做的是将 previousMillis 设置为等于当前时间。然后我们执行我们想要的任何其他步骤。在这个例子中,我们正在切换LED。然后我们退出这段代码并完成其余的 loop()函数,然后再回到开始并重复一遍。

使用它的好处简单 delay()函数的方法是 delay()在指令之间留出时间间隔,但不考虑执行时间的时间 loop()函数中的其他指令。如果您正在做的事情需要的时间比闪烁的LED更长,例如更新LCD屏幕,那么它所花费的时间是不可忽视的,并且在几个周期之后它会加起来。如果您正在更新时钟上的LCD屏幕,它将很快变得不准确并落后。

现在,我们了解程序的整体结构,是时候插入指令了。我建议您先阅读附带的流程图,而不是在此解释每一行代码,该流程图对程序的功能进行了高级概述。

一旦您看到流程图,请参考看看附带的Arduino代码。我几乎评论了每一行,以明确每行的作用。

您可能希望更改代码中的一些部分。最重要的是每升的成本。在我的城市,水费为每升0.2523¢。找到以下行,并更改该值以匹配您居住的成本:

const float COST_PER_LITRE = 0.2523; // cost per litre, in cents, from city website

如果您更喜欢使用加仑而不是升,请更改所有“LCD.print()”行将“L”或“L/s”称为“G”或“G/s”。然后删除以下行:

const float CONVERSION = 450.0; // keep this uncommented for litres

。..并取消注释该行:

const float CONVERSION = 1703.0; // uncomment this and delete the line above for gallons

在我的代码中你可能已经注意到了一个奇怪的东西。默认字符集不包含“¢”字符,我不想使用美元,因为大多数情况下成本会显示为“$ 0.01”或更低。因此,我被迫创建一个自定义角色。以下字节数组用于表示此符号:

byte cent_sign[] = {

B00100,

B00100,

B01111,

B10100,

B10100,

B01111,

B00100,

B00100

};

创建此数组后,必须“创建”并存储特殊字符。

lcd.createChar(0, cent_sign);

完成后,要打印自定义字符,我们使用以下行:

lcd.write(byte(0)); // print cents sign (¢)

LCD最多可以有8个自定义字符。关于这方面的更多信息在这里。我还遇到了这个有用的在线工具,它允许您使用图形界面绘制自定义角色,它将自动生成自定义字节数组。

步骤13:关闭盖子

监控器

监控器

监控器

监控器

监控器

最后,我们差不多完成了!

是时候将所有电子设备塞进外壳并希望盖子关闭。但首先,我们需要连接30毫米的支架。我买的支架包不包括任何那么长的支架,但它配有20毫米和10毫米可以连在一起的支架。我用四个M3螺丝将四个支架拧入机箱底部的孔中(见图1和图2)。务必将它们牢固地拧紧,但不能太强,否则可能会损坏塑料外壳。

现在我们可以装入所有电子设备。我将充电器和升压转换器连接到带有双面胶带的盖子上,如第三张图所示。然后我在两个3.5毫米插孔上的裸露金属周围缠上一些电气胶带,只是为了确保接触连接器没有任何东西短路。

我能够将Arduino放在一边,在左下角,其USB端口朝右。我使用了更多的双面胶带将电池固定在LCD屏幕下方的机箱底部。

最后,一旦所有东西都或多或少地卡在盒子里,盖子可以用另外四个M3螺丝拧紧。

步骤14:测试

监控器

监控器

监控器

监控器

第一个插头在流量传感器的3.5mm连接器中。我建议在打开设备之前执行此操作,因为插头可能会在插入时进行不必要的连接。

接下来,打开主电源开关。虽然没有水运行,但除了清除总屏幕和清除屏幕外,前面板按钮不应执行任何操作。由于默认情况下总数将为零,因此该按钮似乎无法执行任何操作。

如果您打开淋浴,则总数应该开始增加。默认情况下,会显示成本。如果按前面板按钮,流量将显示在最后一行。只要淋浴器正在运行,按前面板按钮将在显示流速和显示成本之间切换。一旦淋浴停止,按下前面板按钮将重置测量并清除屏幕。

安装

如何选择安装设备取决于淋浴的布局。有些淋浴器可能有一个足够靠近淋浴头的壁架,您只需将设备放在那里即可。在我的淋浴间,我有一个带吸盘的篮子,我将设备放在里面。如果您没有壁架或篮子的奢侈品,您可以尝试使用双面吸盘将设备固定在墙上。这仅适用于使用具有光滑背衬的现成机箱,或者在带有玻璃底板的打印机上打印自定义机箱时。如果您的外壳有粗糙的背衬(如我的那样),您可以尝试使用一些双面胶带,但如果您尝试移除设备,这可能会在您的淋浴墙上留下一些残留物。

疑难解答

屏幕亮起,但背光关闭 - 确保跳线安装在I ² C侧面的两个引脚上模块

屏幕空白,背光打开 - 运行《检查I ² C地址是否正确/em》 I²C扫描仪

屏幕打开,但值保持为零 - 检查传感器是否有来自传感器的信号引脚2上的电压。如果没有信号,请检查传感器是否正确连接。

屏幕空白,背光关闭 - 检查Arduino上的电源指示灯亮,并检查屏幕是否有电

屏幕短暂亮起,然后一切都停止 - 你可能已设置升压转换器的电压过高(元件无法处理超过5V)

设备正常工作,但值不正确 - 确保您使用的流量传感器具有相同的转换系数,即每升450个脉冲。不同的传感器可能具有不同的值。

步骤15:现在开始节水!

改进

当前该软件的版本运行良好,但最终我想添加具有不同用户(家庭成员,室友等)的能力。该设备将存储每个人的统计数据(总水和淋浴总数)以显示每个人的平均用水量。这可以鼓励人们竞争使用最少量的水。

有一种方法可以导出要在电子表格中查看的数据,这样就可以将其绘制成图形。那么你可以看到一年中哪些时候人们更频繁和更长时间的淋浴。

这些功能都需要使用EEPROM - Arduino的内置非易失性存储器。这样即使在设备关闭后也可以保留数据。

另一个有用的功能是电池指示灯。目前,设备需要充电的唯一指示是电池管理器板切断电源。连接额外的模拟输入以测量电池电压很容易。由于电池电压始终小于5V,因此甚至不需要分压器。

其中一些想法接近于功能蔓延,这就是我没有进一步开发软件的原因。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分