久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4666|回復: 2
打印 上一主題 下一主題
收起左側

YF-S201水流量傳感器控制燃氣熱水器(附Arduino代碼)

[復制鏈接]
跳轉到指定樓層
樓主
ID:219562 發表于 2021-1-6 14:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
它裝在熱水器進水端,用于檢測進水流量,當水通過水流轉子組件時,磁性轉子轉動并且轉速隨著流量變化而變化,霍爾傳感器輸出相應脈沖信號,反饋給控制器,由控制器判斷水流量的大小,進行調控。

1 紅  IN   接正極
2 黃  OUT  信號輸出線

3 黑  GND  接負極

以1L/min的流速為列,就是7.5 * 1* 60就等于流過1升水輸出的脈沖個數  
電壓:3.5-24VDC,電流不能超過10mA,流完一升水輸出450個脈沖
即頻率計算= 常數7.5 * 單位流量(L/min) * 時間(秒)

流量范圍:1-30L/min



Arduino源程序如下:
  1.   EFFECT HALL FLOWMETER
  2.   TECHNICAL DETAILS

  3.   Electrical:
  4.   Working Voltage: 5 to 18VDC
  5.   Max current draw: 15mA @ 5V
  6.   Working Flow Rate: 1 to 30 Liters/Minute
  7.   Working Temperature range: -25 to 80°C
  8.   Working Humidity Range: 35%-80% RH
  9.   Maximum water pressure: 2.0 MPa
  10.   Output duty cycle: 50% +-10%
  11.   Output rise time: 0.04us
  12.   Output fall time: 0.18us
  13.   Flow rate pulse characteristics:
  14.   Flow rate: 1 pulse/s = 7.5 L/min
  15.   Acumulated volume: 1 Liter = 450 pulses
  16.   maximum pulse frequency: 30 L/min-> 225 imp/s -> min period 4.44 ms  (delta 0.1 L/min->0.015 ms)
  17.                           5 L/min-> 37.5 imp/s->     period 26.66 ms (delta 0.1 L/min->0.523 ms)
  18.   minimun pulse frequency:  1 L/min-> 7.5 imp/s -> max period 133.3 ms (delta 0.1 L/min->12.1 ms)
  19.   Durability: minimum 300,000 cycles
  20.   Mechanical:
  21.   1/2" NPS nominal pipe connections, 0.78" outer diameter, 1/2" of thread
  22.   Size: 2.5" x 1.4" x 1.4"
  23.   v02 Add LCD display
  24.    The circuit:
  25. * LCD RS pin to digital pin 12
  26. * LCD Enable pin to digital pin 11
  27. * LCD D4 pin to digital pin 10
  28. * LCD D5 pin to digital pin 9
  29. * LCD D6 pin to digital pin 8
  30. * LCD D7 pin to digital pin 7
  31. * LCD R/W pin to ground
  32. * 10K resistor:
  33. * ends to +5V and ground
  34. * wiper to LCD VO pin (pin 3)
  35. */

  36. #include "PulseSensor.h"
  37. #include <LiquidCrystal.h>

  38. //#define PulseGen A0                     //Pulse generate 5KHz, A0
  39. #define LED13 13
  40. #define REFRESH_INTERVAL  1000          // refresh time, 1 second
  41. #define WRITE_INTERVAL 2000             // values send to serial port, 2 seconds (2 * 1000)
  42. #define PULSE_PIN 2                    // see external interrupt pins available on your Arduino.
  43. #define HotSwitch 4                    // control the heater switch on/off
  44. #define PULSES_2_LITERS 450             // coefficient conversion from pulses to liters
  45. #define PULSES_SEC_2_LITERS_MINUTE 7.5  // (450/60) coefficient conversion pulses/second from to liters/minute
  46. PulseSensor flowmeter;                  // instance to collect data
  47. //variables to process and send values
  48. //int RA0flag = 0;
  49. //int fireNumber = 0;
  50. float flowRate;
  51. float maxRate;
  52. float minRate;
  53. float acumFlow;
  54. float lastAcumFlow;
  55. boolean firstData;
  56. boolean Fireflag;

  57. //unsigned long previousMillis = 0;
  58. //unsigned long currentMillis = 0;
  59. LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

  60. /*
  61.   ISR(TIMER1_OVF_vect)
  62.   {
  63.   TCNT1 = 0X85ED;   // time 2s, 1s = 0XC2F6;
  64.   RA0flag = 1;    // - RA0flag;
  65.   }
  66. */
  67. void setup()
  68. {
  69.   /*
  70.     cli(); //Turn off global interrupt
  71.     TCCR1A = 0; //Register A is configured with PWM. Here we only use the timing function. In fact, it does not need to be configured
  72.     TCCR1B = (1 << CS12) | (1 << CS10); //Register B is used to configure the timing function. Now it is configured with 1024 frequency division
  73.     TCNT1 = 0X85ED; //The initial value of the counter,time 2s, 1s = 0XC2F6; TCNT1= 0XFFFF - 1 / (1024 *(1/16000000))= 0xFFFF –0x3D09=0XC2F6
  74.     TIMSK1 = (1 << TOIE1); //Overflow interrupt enable
  75.     sei(); //Turn on global interrupt
  76.   */
  77.   pinMode(HotSwitch, OUTPUT);
  78.   pinMode(LED13, OUTPUT);

  79.   lcd.begin(16, 2);
  80.   lcd.print("Flowrate = ");
  81.   lcd.setCursor(0, 1);
  82.   lcd.print("litre/second");

  83.   //Serial.begin(9600);
  84.   //delay(1000);
  85.   flowmeter.begin(PULSE_PIN, REFRESH_INTERVAL, PULSES_SEC_2_LITERS_MINUTE, PULSES_2_LITERS);
  86.   //Serial.println("time(s), average flowrate(l/min), max rate, min rate, volume(liters)");
  87.   //Serial.println("Realtime flowrate(litre/second)");

  88.   firstData = false;
  89.   Fireflag = false;
  90.   flowRate = 0;
  91.   maxRate = 0;
  92.   minRate = 0;
  93.   acumFlow = 0;
  94.   digitalWrite(LED13, LOW);
  95.   //tone(PulseGen, 5000);
  96. }

  97. void loop()
  98. {
  99.   //sei();
  100.   if (flowmeter.available())
  101.   {
  102.     flowRate = flowmeter.read();
  103.     //Serial.println(flowRate);
  104.     //lcd.setCursor(0, 1);       //Setup LCD display
  105.     //lcd.print(flowRate); //Display flowRate value
  106.     /*
  107.       if (!firstData) {
  108.       if (maxRate < flowRate) maxRate = flowRate;
  109.       if (minRate > flowRate) minRate = flowRate;
  110.       }
  111.       else {
  112.       maxRate = flowRate;
  113.       minRate = flowRate;
  114.       firstData = false;
  115.       }
  116.     */
  117.     if (!Fireflag)  //Wait for flow enable
  118.     {
  119.       if (flowRate > 2.00)
  120.       {
  121.         digitalWrite(HotSwitch, HIGH);
  122.         Fireflag = true;
  123.         lcd.setCursor(0, 1);       //Setup LCD display
  124.         lcd.print(flowRate); //Display flowRate value
  125.       }
  126.       //if (flowmeter.available())
  127.       //{
  128.       //flowRate = flowmeter.read();
  129.       //}
  130.     }
  131.   }
  132.   if (Fireflag)     //Wait for flow disable
  133.   {
  134.     /*
  135.       currentMillis = millis();
  136.       if (currentMillis - previousMillis >= WRITE_INTERVAL) {
  137.       if (RA0flag)
  138.       {
  139.       previousMillis = currentMillis;
  140.       RA0flag = 0;
  141.       acumFlow = flowmeter.readAcum();
  142.       //flowRate = (acumFlow - lastAcumFlow) * 60 * 1000 / WRITE_INTERVAL; //average flowrate
  143.       lastAcumFlow = acumFlow;
  144.       firstData = true;
  145.     */
  146.     //Serial.print(currentMillis / 1000);
  147.     //Serial.print(",");
  148.     /*
  149.       Serial.print(flowRate);
  150.       Serial.print(",");
  151.       Serial.print(maxRate);
  152.       Serial.print(",");
  153.       Serial.print(minRate);
  154.       Serial.print(",");
  155.       Serial.println(acumFlow);
  156.     */
  157.     if (flowRate <= 0.00)
  158.     {
  159.       digitalWrite(HotSwitch, LOW);
  160.       Fireflag = false;
  161.     }
  162.     /*
  163.       if (acumFlow > 9000000.00)   //9E+6, Floating-point numbers can be as large as 3.4028235E+38 and as low as -3.4028235E+38.
  164.       {
  165.       flowmeter.resetAcum();
  166.       }
  167.     */
  168.     //}
  169.   }
  170. }
復制代碼

所有資料51hei提供下載:
flowmeter_v20201223.zip (4.75 KB, 下載次數: 37)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:334781 發表于 2021-12-22 11:08 | 只看該作者
樓主,這個例程有沒有51單片機的,Arduino代碼看不懂,謝謝1
回復

使用道具 舉報

板凳
ID:591229 發表于 2021-12-23 16:04 | 只看該作者
從72行,才開始程序。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产免费拔擦拔擦8x高清 | 精品亚洲一区二区三区四区五区 | 日韩黄色av | 日韩av成人 | 国产免费高清 | 成年人精品视频在线观看 | 福利视频日韩 | 午夜精品久久久久久久99黑人 | 中文字幕日韩av | 免费簧片视频 | 三级欧美 | 在线观看www高清视频 | 亚洲精品字幕 | www.亚洲一区二区 | 中文字幕第49页 | 欧美日韩视频在线播放 | 国产精品999| 在线永久看片免费的视频 | 成人国产在线观看 | 亚洲欧美男人天堂 | 国产日韩精品在线 | 亚洲成av人影片在线观看 | 久久国产精品偷 | 国产亚洲精品久久久久久豆腐 | 日韩精品免费播放 | 色视频在线播放 | 污污免费网站 | 成人免费视频网址 | 日本三级电影免费观看 | 天天综合永久入口 | 国产精品久久久久久久久婷婷 | 久久久久久久久91 | 久久夜色精品国产 | 亚洲国产成人精品女人久久久 | 亚洲精品一区二区三区中文字幕 | 中文字幕日韩一区 | 99久久久无码国产精品 | 热久色| 国产色在线 | hitomi一区二区三区精品 | 欧美日批 |