監測記錄加壓馬達運作
續上篇,我們要如何界定運轉多久才算逾時呢?本篇談談如何界定的過程。對加壓馬達的控制原理有一般基礎的概念後,我希望在不更動加壓馬達元件的情況下,補強有疑慮的部分。不去更動的理由是為了簡化日後的維護保養,因為一旦改裝後,就不是原廠的規格品,將來就很難找到願意(或會)維修的廠商。既然不動它的硬體部分,就只能從加壓運作的「行為」了解加壓馬達於用水加壓時的各種情況,然後思考如何防範加壓馬達故障釀成災難

為了達到這個目的,首先想到功能強大能包山包海的「Python」。談到Python,不但網路上有取之不盡的免費資源,而且因係高階語言,雖博大精深卻簡單容易入門,當作中間過程測試工具真是再適當不過了。為了事半功倍,規劃用「Python」當高階媒介工具,控制Arduino微控制器,監測加壓馬達的工作狀態。作法是,首先,Arduino配合電子電路偵測加壓馬達的ON-OFF;接著Python把Arduino偵測到的訊息轉成CSV檔寫入EXCEL,供後續分析。

Aduino如何偵測加壓馬達的ON-OFF
判定馬達是否運轉很容易,只考慮一般正常情況,只要偵測到有電流就表示馬達運轉。半馬力的加壓馬達,工作電流以4A概估;因此,若偵測到4A電流表示馬達運轉,反之(0A),表示馬達未運轉。馬達ON/OFF之間有4A的電流差,這種情況很容易偵測。

偵測電流,依所需精確度有很多偵測方法,本製作只偵測電流有無,對電流大小精確度需求很低。考慮較節省成本的方式有二種,第一種是電源電路串入電阻,藉著電阻壓降來判斷是否有電流流過。這種方式的困難點是,電阻不能用太大,因為工作時運轉電流和啟動電流相差510倍。若此電阻以取0.5歐姆為例,流過4A可得2V壓降,可直接驅動光偶和電晶體,看似簡單好用,但是馬達啟動瞬間可能會產生10V以上的壓降,電壓幾乎少了10%,是否影響啟動很難說。若此電阻值降低,壓降隨之降低,但是可能需要一組能隔離電源的放大電路,這個會較棘手。

土法煉鋼手繞電流感應線圈
另一種簡單的方式是動手繞一個變壓器,用磁場感應的方式偵測電流。手邊還有數個以前玩D類擴大器留下的「鐵氧體磁環(KING CORE)」,正好可以物盡其用派上用場。要從4A電流感應出後續易於處理的電壓,不難,但是有些挑戰。挑戰是因為既沒有任何數據可供參考,也沒有任何繞製工具,只能試著用手工去繞去試。首先沿著磁環一圈一圈繞鋪一層,測了一下,示波器上除了雜訊,看不出有意義的信號。看樣子還差得遠。心一橫乾脆取一長段約二米漆包線,慢慢繞,磁環是封閉的環,愈長愈不好繞,圈圈工整有序的要求只能放旁邊,還好要求不高。原想把整個磁環繞滿再測,沒想到線取得不夠長,線繞完只測得約50mV,雖不算很滿意,但至少已足可供運算放大器後續處理。

(P2.1)繞得很醜又繞得毫無章法的電流感應線圈

P2.1-DIY電流偵測線圈.jpg

 

加壓馬達控制介面電路
Arduino實在是很好用的控制處理器,但是前提是要把各式各樣類比信號量化,變成Arduino能處理的數位信號,這通常是較具挑戰的部分。本電路是藉手繞感應線圈在馬達ON時感應出約50mV的電壓,再用運算放大器整流取出直流信號、積分,以此得到High-Low信號,讓Arduino據此判斷馬達ON-OFF狀態。

(P2.2)完整電路圖

P2.2 加壓馬達控制介面電路圖.png

 

(P2.2.1)電路先用麵包板實現,測試完,後續再設計PCB完成作品

P2.2.1介面電路.JPG

 

(P2.2.2)感應電壓放大後波形。

P2.2.2感應電壓.jpg

因為事先未規劃好繞線圈數,後來發現圈數不足再追加,幾次追加後線圈前後重疊,方向也亂了,加上磁環的非線性特性,結果預期的正弦感應電壓變得有些畸形難看,不過經過「整容後」,信號仍穩定能用(自我安慰)。

(P2.2.3)感應電壓全波整流後波形

P2.2.3感應電壓全波整流.jpg

 

(P2.2.4)全波整流後積分波形

P2.2.4整流電壓積分.jpg

 

(P2.2.2.1)全部製作完成後,實在嚥不下(P2.2.2)如此畸形的波形,
又再重繞一遍所得波形。

綠波重繞後感應電壓(濾波).JPG

 

Python存取Arduino資料
Arduino 有內建pyfirmat可以直接和Python互動。作法很簡單,打開Arduino IDE,選擇「檔案」下拉式功能表,依序選擇「Examples\Firmata\StandardFirmata」,載入StandardFirmata,然後「Upload」上傳至Arduino開發板,完成後Arduino就可以透過Python直接控制。

(P2.3)上傳pyfirmatArduino開發版

P2.3 Firmata.jpg

 

Python 寫入Excel
pyfirmat上傳到Arduino微控制器後,就可以直接用Python 高階語言透過Arduino取得低階的硬體資料。本製作需要收集一些加壓馬達的運作實況,Python可以直接將從Arduino讀取所需資料,並以CSV型態寫入Excel 檔案,供後續分析。

以下是所用的Python簡易測試程式,程式是一個while無窮迴路,可以讓你一值測試;要停止時,先用滑鼠激活測試視窗,再用CTRL+C,停止程式,程式停止同時Python也會將測試資料存檔,打開檔案就可以看到測試資料。

# --(P2.4)(P2.5) Python簡易測試程式------

import csv
import pyfirmata
from time import sleep
from datetime import datetime

global RunFlag
RunFlag=False

port = 'COM3'
board = pyfirmata.Arduino(port)

it = pyfirmata.util.Iterator(board)
it.start()

with open('MotorRunningDataStore.csv', 'w',newline='') as f: 
        w = csv.writer(f)
        w.writerow(["Motor On", "Motor Off", "Keep Running Time(H:M:S)","Keep Running Time(S)"])

      def TimeDelta(StartT,StopT):
              a=datetime.strptime(StartT,'%Y%m%d%H%M%S') # convert string to time
              b=datetime.strptime(StopT,'%Y%m%d%H%M%S') # convert string to time
              diff=b-a
              return(diff,diff.total_seconds())
      
     MotorRunPin = board.get_pin('d:2:i')
     while True:        
            MotorState=MotorRunPin.read() #True=high=motor off;False=low=mortor on
            #print('MotorState=', MotorState)
            if not MotorState:#D2=LOW
                  if RunFlag:   #keep running           
                      print('Motor is running !')
                      sleep(1)
                  else:
                       StartTime=datetime.now().strftime('%Y%m%d%H%M%S') #Start running for calculating time delta
                      ST= datetime.now().strftime("%Y-%m-%d %H:%M:%S")#start time for storing to csv file                     
                      RunFlag=True
                      print('Motor start running !')
                      sleep(1)
            else:
                  if RunFlag:
                      RunFlag=False
                      StopTime=datetime.now().strftime('%Y%m%d%H%M%S') #Stop running for calculating time delta
                      StopT=datetime.now().strftime("%Y-%m-%d %H:%M:%S")#stop time for storing to csv file
                      print('Motor Stop !')                     
                      PeriodTime, PeriodTime_s=TimeDelta(StartTime,StopTime)
                                                                                                  
                      row = [ST,StopT, PeriodTime,PeriodTime_s]                    
                      w.writerow(row)
                      print(row)
                      print ('Write 1_row into CSV Done.')
                      sleep(1)
                  else:
                      print('Motor Off !')
                      sleep(1)
#----------------------------------------------------------------------------------
---

撒網捕魚記錄加壓馬達工作實況
以上所有軟硬體都完成後,就可以開始蒐集資料,觀察加壓馬達工作情形。為了便於分析觀察,我並不是整天24小時開著監測(當然要的話也可以),原因是,一方面是懶;另一方面是,這樣事後會很難追蹤分析加壓馬達是在什麼用水情況下工作?是洗衣服、洗澡、其他?分段監測可以較易理解用水與加壓馬達工作ON-OFF關係。例如,下圖是監測記錄洗衣服時加壓馬達工作情況。

(P2.6) 監測記錄洗衣服時加壓馬達工作情況

P2.6 Excel data.jpg

有了這些資料,就可以進一步用圖表分析加壓馬達運握情形。
 

(P2.7)衣物較多時,洗衣機用水時序圖

P2.7Excel-fig1.jpg

上圖顯示整個洗衣流程費時86.5分鐘,每次進水間隔約至少一分鐘,最長進水時間320秒。

(P2.8) 衣物較少時,洗衣機用水時序圖

P2.8Excel-fig2.jpg

上圖顯示衣物較少時整個洗衣流程費時68分鐘,每次進水間隔至少0.5分鐘,最長進水時間215秒。

(P2.9)沐浴用水分析圖

P2.9Excel-fig3.jpg

上圖顯示洗戰鬥澡費時6.5分鐘,每次進水間隔至少0.5分鐘,最長進水時間135秒。

(P2.10)頻繁用水階段監測記錄

P2.10Excel-fig4.jpg

上圖顯示家人頻繁用水時段連續監測82.5分鐘,每次進水間隔至少一分鐘,最長進水時間95秒。

監測資料分析與結論
透過上面的監測資料,好像沒有什麼重大發現?但監測過程至少可以看到家庭用水的全貌。回到設計初衷在不更動加壓馬達原有硬體設計的情況下,補強原設計的不足,以期強化保護機制。以上資料所提供的線索,雖然資料有點簡單陽春,但已足可界定加壓馬達是否處於「異常」的運作模式,最後總結監測結果為下述二點,後續的軟體要依據這二點來規劃。

1. 連續用水最長時間是洗衣機用水320秒,但這時間非定值會隨著衣物的多寡而變化。從幾張具代表性的表中,可以看到家中各種用水情況,除洗衣外,其餘洗澡、洗碗、沖馬桶、洗臉…,在正常情況下,連續用水時間都不會超過洗衣機裝滿衣物,第一次注水時間。利用這個資訊,可以設定加壓馬達最合宜的「最長持續運轉」時間,超過此時間即判定為故障,並做必要的處置,以確保加壓馬達故障時不會擴大災情。

2. 用水最小間隔時間約0.5分鐘(推估來的,因為python寫入Excel是簡單地以“分”為單位)。這個資訊可以讓我們易於偵測流量開關是否故障於「開路」狀態,當流量開關故障並處在「開路」狀態時,用水時加壓馬達會不斷ON-OFF循環,此時出水會忽大忽小強弱不穩定,使用者亦可察覺,偵測電路可以示警提醒,以免拖延燒毀馬達;此訊息若納入監控(不需另加硬體電路),運氣好可以捕捉到漏水時週期性的ON/OFF,這要看漏水時週期性啟動是否在監控周期內。

---------------------待續,加壓馬達保護措施實作---------------------

 

 

arrow
arrow

    錫安居 發表在 痞客邦 留言(0) 人氣()