37款傳感器與執行器的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗八十八: 1號霍爾水流量傳感器咖啡機直飲機流量監控模塊
水流傳感器
是指通過對水流量的感應而輸出脈沖信號或電流、電壓等信號的水流量感應儀器,這種信號的輸出和水流量成一定的線性比例,有相應的換算公式和比較曲線,因此可做水控方面的管理和流量計算,在熱力方面配合換能器可測量一段時間介質能量的流失,如熱能表。水流傳感器主要和控制芯片、單片機,甚至PLC配合使用。水流傳感器具有流量控制准確,可以循環設定動作流量,水流顯示和流量累積計算的作用。
流量
是指單位時間內流經封閉管道或明渠有效截面的流體量,又稱瞬時流量。當流體量以體積表示時稱為體積流量;當流體量以質量表示時稱為質量流量。單位時間內流過某一段管道的流體的體積,稱為該橫截面的體積流量。簡稱為流量,用Q來表示。對在一定通道內流動的流體的流量進行測量統稱為流量計量。流量測量的流體是多樣化的,如測量對象有氣體、液體、混合流體;流體的溫度、壓力、流量均有較大的差異,要求的測量准確度也各不相同。因此,流量測量的任務就是根據測量目的,被測流體的種類、流動狀態、測量場所等測量條件,研究各種相應的測量方法,並保證流量量值的正確傳遞。例如河水流量,河流一秒流過某一個點的立方米數。一般來說越是在下游,流量越大,所以辨別地圖上的河流方向時,一般是從窄到寬。河水流量是指單位時間內,通過河流某一橫截(斷)面的水量,一般用立方米每秒表示。流量也可以用一個月、一季、一年流出來的總水量表示。流量,從水力學角度講,應該是:單位時間內通過某一過水斷面的水體體積,其常用單位為每秒立方米,多用於河流、湖泊的斷面的進出水量測量,流量的測量方法,從水文站角度講,可分為浮標法、流速儀法、超聲波法等,流速儀法測量精度最高。
水流傳感器基本原理1
水流量傳感器是利用霍爾元件的霍爾效應來測量磁性物理量。在霍爾元件的正極串入負載電阻,同時通上5V的直流電壓並使電流方向與磁場方向正交。當水通過渦輪開關殼推動磁性轉子轉動時,產生不同磁極的旋轉磁場,切割磁感應線,產生高低脈沖電平。由於霍爾元件的輸出脈沖信號頻率與磁性轉子的轉速成正比,轉子的轉速又與水流量成正比,根據水流量的大小啟動燃氣熱水器。其脈沖信號頻率的經驗公式見式(1)。
f=8.1q-3(1)
式中:f—脈沖信號頻率,H2
q—水流量,L/min
由水流量傳感器的反饋信號通過控制器判斷水流量的值。根據燃氣熱水器機型的不同,選擇最佳的啟動流量,可實現超低壓(0.02MPa以下)啟動。
水流傳感器工作原理2
水流傳感器主要由銅閥體、水流轉子組件、穩流組件和霍爾元件組成。它裝在熱水器的進水端用於測量進水流量。當水流過轉子組件時,磁性轉子轉動,並且轉速隨着流量成線性變化。霍爾元件輸出相應的脈沖信號反饋給控制器,由控制器判斷水流量的大小,調節控制比例閥的電流,從而通過比例閥控制燃氣氣量,避免燃氣熱水器在使用過程中出現夏暖冬涼的現象。水流量傳感器從根本上解決了壓差式水氣聯動閥啟動水壓高以及翻板式水閥易誤動作出現干燒等缺點。它具有反映靈敏、壽命長、動作迅速、安全可靠、連接方便利啟動流量超低(1.5L/min)等優點,深受廣大用戶喜愛。
水流轉子組件主要由渦輪開關殼、磁性轉子、制動環組成。使用水流開關方式時,其性能優於機械式壓差盤結構,且尺寸明顯縮校當水流通過渦輪開關殼,推動磁性轉子旋轉,不同磁極靠近霍爾元件時霍爾元件導通,離開時霍爾元件斷開。由此,可測量出轉子轉速。根據實測的水流量、轉子轉速和輸出信號(電壓)的曲線,便可確定出熱水器的啟動水壓,以及啟動水壓相對應的啟動水流量與轉子的啟動轉速。由控制電路,便可實現當轉子轉速大於啟動轉速時熱水器啟動工作;在轉速小於啟動轉速時,熱水器停止工作。這樣熱水器啟動水壓一般設定在0.01MPa,啟動水流量為3~5L/min(需滿足熱水器標准對最高溫升的限制)。另外,由於水在永磁材料磁場切割下,變成磁化水,水中的含氧量增加,使人洗浴后感覺清爽。制動環的作用是停水時,制止高速旋轉的磁性轉子轉動,終止脈沖信號輸出。控制器接收不到脈沖信號,立即控制燃氣比例閥關閥,切斷氣源,防止干燒。
水流傳感器的作用
1、通水通電,防干燒,有開關信號輸出的和脈沖信號輸出的水流量傳感器(賽盛爾);
2、線型比例輸出脈沖信號,與流量成比例關系,從而實現加熱功率的調整,達到恆溫效果,大部分恆熱熱器和燃氣勢水器都采用這種方式,現在一些電勢水龍頭和洗手寶也有的用水流量傳感器。
3、水流量傳感器從根本上解決了壓差式水氣聯動閥啟動水壓高以及翻板式水閥易誤動作出現干燒等缺點。它具有反映靈敏、壽命長、動作迅速、安全可靠、連接方便利啟動流量超低(1.5L/min)等優點,深受廣大用戶喜愛。
水流量傳感器在運用中要注意的事項
1、當磁性資料或對傳感器發生磁力的資料接近傳感器時其特征能夠有所改變。
2、為了防止顆粒、雜物進入傳感器在傳感器的入水口有必要裝置過濾網。
3、水流量傳感器的裝置要避開有較強轟動和搖晃的環境防止影響傳感器的丈量精度。
引出線方式:
1 紅 IN 接正極
2 黃 OUT 信號輸出線
3 黑 GND 接負極
實驗開源代碼
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗八十八: 1號霍爾水流量傳感器 直飲機流量監控模塊 項目一:串口繪圖器顯示測量的波形 */ void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(0)); delay(100); }
實驗串口繪圖器返回情況
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗九十一: 1號霍爾水流量傳感器 直飲機流量監控模塊
項目二:通過串口檢測是否有工作流量
實驗開源代碼
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗九十一: 1號霍爾水流量傳感器 直飲機流量監控模塊 項目二:通過串口檢測是否有工作流量 */ int readpin = A0; int incoming = 0; void setup (){ pinMode (readpin, INPUT) ; Serial.begin(9600); } void loop (){ incoming = analogRead(readpin) ; if (incoming > 500) { Serial.println("沒有檢測到"); } if (incoming < 500) { Serial.println("檢測到有流量"); } delay(1000); }
吹氣實驗,串口輸出截圖
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗九十一: 1號霍爾水流量傳感器 直飲機流量監控模塊
項目三:使用串口讀取水流速傳感器的累計脈沖數
實驗接線:Uno D2接流量傳感器OUT
實驗開源代碼
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗九十一: 1號霍爾水流量傳感器 直飲機流量監控模塊 項目三:使用串口讀取水流速傳感器的累計脈沖數 實驗接線:Uno D2接流量傳感器OUT */ #define PIN 2 volatile long count = 0;//變量count聲明為volatile類型 void setup() { pinMode(PIN, INPUT); attachInterrupt(0, blinkA, FALLING);//當引腳電平由高電平變為低電平時觸發中斷服務程序 Serial.begin(9600); } void loop() { Serial.print("累計脈沖="); Serial.println(count); delay(1000); } void blinkA() { count++; }
實驗串口輸出截圖
實驗場景圖
記錄脈沖的原理是,在轉盤上設置磁感應點,每次磁場穿過傳感器時,輸出一個電平信號:
采用外部中斷函數計數,當傳感器被磁鐵觸發,程序中斷,執行計數函數,記錄一次。把每1000毫秒的圈數,再乘以30(雙磁鐵)即為實時的轉速。
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗九十一: 1號霍爾水流量傳感器 直飲機流量監控模塊 項目四:通過外部中斷簡易測量轉速(轉/分鍾) 實驗接線:Uno D2接流量傳感器OUT */ const byte interruptPin = 2; const long taketime = 1000; // 每次測量的時間為1000毫秒 unsigned long time; //設置變量 time,計時 float Val = 0; //設置變量 Val,計數 void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(interruptPin), count, FALLING);//觸發信號必須是變化的,上升或下降皆可 time = millis();//開始計時,time獲得當前系統時間 } void loop() { if (millis() >= time) { Serial.print("轉速= "); Serial.println(Val * 30); //轉換成rpm,單磁鐵觸發分辨率為60rpm,2個磁鐵為30rpm time = millis() + taketime;//標記未來的時間點,1000ms后執行if判斷,輸出結果。另,降低刷新頻率,可以提高分辨率 Val = 0;//輸出速度結果后清零,記錄下一秒的觸發次數 } } void count() { Val += 1; }
實驗串口輸出
實驗輸出的實時轉速波形
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗九十一: 1號霍爾水流量傳感器 直飲機流量監控模塊 項目五:簡易測速 */ int rpmcount; //一秒鍾旋圈數 int rpm ;//速度(轉/分鍾) unsigned long sj;//運行時間 void setup (){ Serial.begin(9600); attachInterrupt(0, rpm_fun, CHANGE); rpmcount = 0; rpm = 0; sj = 0; } void loop() { if ((millis() - sj) >= 1000) { rpm = rpmcount * 3; rpmcount = rpmcount / 2; Serial.print("秒轉:"); Serial.print(rpmcount); Serial.println("圈"); Serial.print("轉速= "); Serial.print(rpm); Serial.println("轉/分鍾"); Serial.println(""); sj = millis(); rpmcount = 0; rpm = 0; } } void rpm_fun() { rpmcount++; }
串口輸出截圖
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗九十一: 1號霍爾水流量傳感器 直飲機流量監控模塊 項目六:累計脈沖大於等於50則點亮LED燈 實驗接線:Uno D2接流量傳感器OUT,LED接D13 */ #define pin 2 #define led 13 volatile long count = 0;//變量count聲明為volatile類型 void setup() { pinMode(pin, INPUT); pinMode(led, OUTPUT); attachInterrupt(0, blinkA, FALLING);//當引腳電平由高電平變為低電平時觸發中斷服務程序 Serial.begin(9600); Serial.println("准備就緒OK"); Serial.println(""); } void loop() { Serial.print("累計脈沖="); Serial.println(count); delay(1000); if (count >= 50) { digitalWrite(led, HIGH); Serial.println("點亮LED燈"); } else digitalWrite(led, LOW); } void blinkA() { count++; }
實驗串口返回情況