智能家居系列已經出過不同的項目。例如幫你管理衣物的《MAKER的衣櫃:樹莓派+RFID實現智能衣櫃》,一手操作的《炫酷的「滅霸手套」家電控制終端》,看家護院的《貓咪走開!計算機視覺噴水驅貓裝備》。本期我們來做一個環保節能的項目——噴頭水量監測儀。在噴頭上安裝流器傳感器,通過記錄用水量、實時水費等信息,鼓勵人們節約用水、提高用水效率。
項目將顯示每次洗澡所用水量,水的流量以及水費等數據,是個實用性很強的項目,製作思路也非常嚴謹。這個功能當然也可以被用在其他需要用水的地方。
材料清單
Arduino Nano × 1
流量傳感器 × 1
液晶屏顯示器 × 1
升壓轉換器 × 1
鋰電池充電器 × 1
防水開關 × 1
防水按鈕 × 1
M3 螺絲 × 若干
M3 螺母 × 若干
銅鑼柱 × 4
銅鑼柱帶螺栓 × 4
3.5mm 母頭插座 × 2
3.5mm 公頭插頭 × 1
3.5mm 3英寸電纜組件 × 若干
USB電纜組件 × 若干
1/2英寸 NPS 母對母連接器 × 1
500mAh 3.7V 鋰電池 × 1
烙鐵×1 × 1
焊錫 × 1
線 × 若干
鉗子 × 1
雙面膠 × 1
十字螺絲刀 × 1
3D打印機(可選) × 1
3D 打印外殼
外殼的防水處理應該是這個項目最難的部分。因為節水裝置要安裝在噴頭旁,必須防潮以及偶爾飛濺的水花。你可以有兩種選擇,自己定製一款 3D 打印外殼或者直接買現成的外殼。我選擇自制外殼。
使用 Fusion 360 軟件對外殼進行設計。
所有材料 100% 填充。
外殼底部:三個圓形孔用於安裝兩個母頭 3.5mm 的插孔和一個開關。
外殼蓋子:一個 16mm 的孔用於瞬時按鈕,一個矩形窗口用於安裝屏幕,四個孔用於固定屏幕以及角落上的另外四個孔用於固定外殼的蓋子。使用 3M 螺絲。
用於安裝屏幕的矩形窗口需要添加防水薄膜防止水分從縫隙中流入。如果你使用的是透明蓋子的外殼,則不需要此步驟。
防水薄膜的尺寸大約為 5mm 厚,27x77mm 大的透明塑料矩形。安裝時要修剪一下邊角,以便不妨礙四周的孔。用強力膠水將防水薄膜粘貼在窗口上。
溫馨提示:膠水封口時,用小風扇幫助吹乾,最後靜置十二個小時,確保它完全乾燥。
安裝 LCD 屏幕
液晶顯示器是 16×2 字符顯示器,支持 I2C,接線很簡單,兩根電源線和兩根信號線。
使用了四個 10mm 的銅鑼柱來安裝屏幕。每個銅鑼柱的一端是公頭螺絲,另一端是母頭螺絲。如圖所示逐步安裝。
1、將公頭螺絲穿過 LCD 並用 M3 螺母檸緊。
2、用四個 M3 螺釘將支座的一端固定在外殼的蓋子上。
3、固定好螺柱。注意不要過度擰緊螺絲,以免塑料蓋變形。安裝 LCD 時,要注意方向,要將帶有十六根排針的放於頂部。
安裝瞬時按鈕
採用的是瞬時按鈕,鍍鉻材質並帶有橡膠圈防止溼氣通過螺絲進入外殼。
如圖所示安裝按鈕。
1、鬆開螺母,但橡膠圈要套在上面。
2、將按鈕插入蓋子上的孔中,然後從背面擰緊螺母。注意不要過度擰緊螺母,防止橡膠圈被破壞而起不到防水的作用。
電源和充電電路
這一步要將電池組件放在一起。包括電池,主開關,鋰電池保護板和升壓轉換器。使用 3.7V 1500 mAh 的單節鋰電池,它的大小剛好與外殼匹配。你也可以使用 18650 電池,不過外殼的大小要進行調整。
1、將電池焊接到 TP4056 充電板上。將 JST RCY 連接器焊接到電池和充電器(此步驟可選)。焊接時請注意電池的正負極性,確保安裝正確。
2、將電線從充電器的正極輸出端口(位於正極電池線旁邊)焊接到升壓轉換器的正極輸入端口。然後將負極輸出(位於負極電池線旁邊)的電線焊接到主開關的公共(中心)針腳。最後,將電線從開關的常開引腳焊接到升壓轉換器的負極輸入。如果將萬用表連接到升壓轉換器的輸出並打開主開關,則會顯示電壓。
3、Arduino、LCD 屏幕和流量傳感器都需要 5V 電源,所以升壓轉換器的輸出設置為 5V。使用螺絲刀轉動電位器上的按鈕來調整。打開主開關,連接電池,讓萬用表連接到升壓轉換器的輸出,慢慢轉動電位器,直到輸出讀數為 5V。
4、使用 3.5mm 耳機插座用於充電,避免每次打開外殼。將連接器插入外殼最底部的孔中(因為充電的插頭,大部分時間會被拔掉,為了防止水濺到裡面,孔必須在下方)。安裝鎖緊墊圈並擰緊螺母后,將兩根電線分別焊接到連接器上的“頭”和“地”線上。
5、連接器的引腳分佈如圖所示。將“地”線的另一端焊接到充電器的負極輸入端口(在微型 USB 端口旁)。將“頭”的線焊接到 USB 端口另一側的 +5V 焊盤上。不使用充電器上的 USB 端口,因為不能保證防水。
製作充電線
如圖所示,自制一根電源適配器,使用一根帶有 USB A 插頭的線和一根帶有 3.5mm 插孔的線,最後將 3.5mm 音頻插孔作為充電端口,USB A 作為插頭。
1、處理 USB 線。從白色電線上剝下白色線管,露出紅線和黑線,然後剝開紅線和黑線的絕緣層。有些 USB 線裡面有四根線:紅線、黑線、綠線和白線。綠線和白線用於數據傳輸,可以不用管。
2、將 3.5mm 插頭連接到 USB 線上。將 USB 的紅線連接到中間的焊接腳上,黑線連接到接地端的焊接腳上。
流量傳感器
1、流量傳感器的工作原理:
流量傳感器十分簡潔、小巧且防水。傳感器帶有一個轉子組件,根據水流的大小而轉動。轉子組件上帶有磁鐵。在傳感器的外部帶有一個小型 PCB 板並附帶一個電阻器、一個霍爾效應傳感器。每當磁鐵經過霍爾效應傳感器時,就會高低切換。也就是說,每當轉子組件旋轉時,它在 5V 和 0V 之間切換。
為了讀取傳感器,將紅線連在 +5V 上,將黑線連到負極上,從黃線讀取數字信號。
如圖所示,流量打開時,信號的變化。起初信號始終為零。當流量開始時,脈衝頻率快速上升並趨於穩定。
編寫程序時需要注意,根據數據顯示,傳感器每升輸出450個脈衝。
2、流量傳感器接線
流量傳感器配有三針 JST-XH 連接器。由於連接器的導線太短並且帶有容易引起短路的暴露點,所以要連到一個帶有 3.5mm 音頻插頭的線上。大約三英寸長,是鍍錫線,易於焊接。
打開流量傳感器蓋子取出電路板,用烙鐵加熱三根電線並將它們分別焊接到三根電線上。
再將 3.5mm 音頻電線焊接到焊盤上。按照電線的顏色來焊接。+5V 在頂端,信號在環上,接地線在地上。與充電端口的設置相同。如果你不小心將充電器插入傳感器端口,也不會對設備造成傷害。
3、安裝流量傳感器
取下噴頭,將流量傳感器與噴頭導管相連,由於傳感器兩端都是公頭,需要製作一個母對母聯軸器。用1/2英寸黃銅管制作一個聯軸器,其他材質亦可(確保管道與傳感器端口的尺寸相匹配)。
將聯軸器的一端與流量傳感器相連,另一端與管道相連。流量傳感器有個箭頭代表水流流動的方向。確保不要反向安裝,否則測量結果會不準確。最後,將噴頭安裝到流量傳感器的末端。
安裝時,為防止漏水,管道之間可以纏繞生膠帶。
將 Arduino 安裝到電路板
1、取一塊 1×2英寸的矩形電路板,將 Arduino Nano 安裝到電路板中間並標記了針腳穿過的位置。
2、取兩個母頭針頭,每個帶十五個針頭。將其焊接到電路板上。Arduino 可以移除便於編程。
注意標記 Arduino USB 端口的方向,以同樣的方向插入到電路板上。
組裝
組件連接方法如圖所示。
1、切割了一些公頭排針並將它們焊接到電路板的 +5V 和接地導軌上。再焊接兩個排針分別連接到 Arduino 的 A4 引腳和 A5 引腳。使用母對母跳線連接 LCD 屏幕。
2、將升壓轉換器輸出端口的兩根線分別焊接到 +5V 和接地導軌上。為 Arduino、LCD 和流量傳感器供電。切割兩根電線並將它們連接到按鈕的端口上。一根電線接到地線,另一根線接到數字引腳 3。
3、焊接流量傳感器。由於傳感器上已經安裝 3.5mm 插頭,只需要再安裝一個 3.5mm 的母頭插孔。首先焊接了三根電線,每一根都標記好。然後將插頭插入外殼並用螺母固定到位。將地(sleeve)焊接到接地端,頭(tip)焊接到 +5V,環(ring)焊接到數字引腳 2。我將數字引腳 2 和 3 分別連接到按鈕和流量傳感器,因為它們是中斷引腳,易於編程。
4、固定 LCD。需要四根母對母的跳線。將“Vcc”引腳連接到 +5V,將“Gnd”引腳連接到接地端,將“SCL”引腳連接到 A5,將“SDA”引腳連接到 A4。為了使 LCD 屏幕更好的與外殼相吻合,需要向後彎曲引腳。操作時需要小心處理,不要重複彎曲引腳。
Arduino 編程
通過編程實現以下幾個功能:
1、LCD 第一行顯示水量的總升數,第二行顯示水的總成本或流速。
2、打開噴頭時,切換按鈕時可以別分顯示成本和流速。
3、噴頭關閉時,按鈕清除所有數據並重置屏幕。
4、使用中斷程序讀取傳感器,避免計數誤差。
5、更新屏幕時,只更新已改變的值,而不是每次刷新整個屏幕(這會導致閃屏)。
該程序遵循一個簡單的結構。通過使用 millis() 函數,創建一個延遲,但不會停止程序的執行。請點擊參考這個教程https://www.arduino.cc/en/tutorial/BlinkWithoutDelay ,這是一個關於不使用 delay() 函數的情況下閃爍 LED 的案例。
Arduino 打開後,millis() 函數將返回其毫秒數。通過創建變量“previousMillis”並減去 Millis() -previousMillis(),就可以看到 previous Millis 更新用的時間。
如果希望每秒發生一次,可以編寫以下代碼:
這將幫助檢查 millis()(當前時間)和 previous Millis(最後一次)之間的差異是否大於或等於 1000 毫秒。如果是,將 previous Millis 設置為當前時間。然後再進行其他步驟。
在該項目中,接下來切換 LED。然後退出這段代碼並完成 loop() 函數的其餘部分,然後再回到開始並重復。使用這種方式比簡單 delay() 函數要好。因為 delay() 在指令之間設置了時間間隔,但沒有考慮執行 loop() 函數中的運行其他指令所花費的時間。如果你要做的事情比閃爍 LED 更費時,例如更新 LCD 屏幕,那麼它所花費的時間是不可忽視的並且運行幾個週期之後它會累積。如果你準備更新時鐘上的 LCD 屏幕,它將會出現延遲。
整個程序的結構介紹完畢,現在可以插入指令。請認真查看流程圖。每一段 Arduino 代碼都有說明,請認真閱讀。相關文件請在項目文件庫中下載。
https://make.quwj.com/project/137
因為每個城市的水費存在差異,請根據事情情況進行更改,修改每升水的成本。在本市水費每升為0.2523¢。請自行更改:
1const float COST_PER_LITRE = 0.2523; // cost per litre, in cents, from city website
如果你選擇計量水的單位是加侖而不是升,請將所有“LCD.print()”行中的“L”或“L/s”更改為“G”或“G/s”。然後刪除以下行:
1const float CONVERSION = 450.0; // keep this uncommented for litres
並取消註釋這一行。
1
const float CONVERSION = 1703.0; // uncomment this and delete the line above for gallons
你會注意到“¢”字符,我不想使用美元,因為大多數情況下成本會顯示為“$ 0.01”或更低。因此,我自定義一個特性。以下字節數組用於表示此符號:
創建此數組後,必須“創建”並存儲這個特性。
1
lcd.createChar(0, cent_sign);
完成後,打印自定義特性,使用以下行:
1
lcd.write(byte(0)); // print cents sign (¢)
顯示屏最多可包含8個自定義特性。
同時使用在線工具,它幫助你使用圖形界面繪製自定義特性並自動生成自定義字節數組。
封閉外殼
到目前為止,項目快要完成。將所有電子設備放入殼中併合上外殼。
1、取四根 30mm 連接的銅螺柱。我用四個 M3 螺絲將其固定到外殼底部的孔中。
2、檢查所有電子設備是否固定好。將充電器和升壓轉換器連接到帶有雙面膠的蓋子上。
3、在兩個 3.5mm 插孔的外部的金屬周圍纏上一些膠帶,確保連到連接器上不短路。
4、將 Arduino 安裝至側面的左下角,USB 端口朝右。使用雙面膠將電池固定在 LCD 屏幕下方,朝向外殼底部。
5、所有組件安裝好後,用四個 M3 合上外殼。
測試
1、將 3.5mm 連接器插入流量傳感器。再打開設備請進行操作。
2、打開主電源開關。沒有水流入時,除了清除總數和清屏外,前板按鈕不會執行任何操作。默認總數為零,按鈕不會執行任何操作。
3、如果打開噴頭時,總量就會開始增加。默認情況下,會顯示成本。如果按下前板按鈕,水的流量將顯示在最後一行。按下前板按鈕將切換顯示流速和成本。關閉噴頭時,按下前按鈕將重新測量並清除屏幕。
注意事項
1、如何安裝設備將取決於你浴室的佈局。可以放置在浴室的鐵架上,如果沒有可以使用吸盤,但只適合於表面光滑的外殼。
2、故障排除
屏幕打開,背光關閉——確保跳線安裝在 I2C 模塊側面的兩個引腳上。
屏幕空白,背光打開——通過 I2C 掃描儀檢查 I2C 地址是否正確。
屏幕打開,數值為零——通過測量引腳 2 上的電壓來檢查傳感器是否有信號。如果沒有信號,請檢查傳感器是否連接正確。
屏幕空白,背光關閉——檢查 Arduino 上的電源的 LED 是否亮起,並檢查屏幕是否有電。
屏幕閃開,然後一切都停止——你可能將升壓轉換器的電壓設置得太高(組件無法承受超過 5V 的電壓)。
設備工作,數值不正確——確保你使用的流量傳感器具有相同的轉換系數,即每升450個脈衝。不同的傳感器具有不同的值。
改進方向
目前,該軟件運行良好,但還可以添加不同用戶(如家庭其他成員,室友等)的能力。該設備將存儲每個人的統計數據(總水量和淋浴總數)並顯示每個人的平均用水量。這可以鼓勵更多人節約用水。
1、添加安裝 EEPROM,Arduino 的內置非易失存儲器。這樣即使在設備關閉後也可以保留數據。我們可以創建一些特定的電子表格,通過查看數據並繪製成圖形,這樣就可以更清楚明瞭的看出,一年中人們哪個季節更頻繁洗澡和用更長的時間沐浴。
2、添加電池指示器。目前,設備需要充電的唯一指示是電池管理器板切斷電源。連接額外的模擬輸入以測量電池電壓非常的簡單。由於電池電壓始終小於 5V,不需要安裝分壓器。
閱讀更多 芯板坊 的文章