<kbd id="o8e0c"></kbd>
<samp id="o8e0c"></samp>
  • <strike id="o8e0c"><menu id="o8e0c"></menu></strike>
  • <th id="o8e0c"></th>
  • <cite id="o8e0c"></cite>
    上海鏨科自動化科技有限公司——流量自動化儀表供應(yīng)商。 聯(lián)系電話:18001874240
    語言選擇: English

    當(dāng)前位置:網(wǎng)站首頁> 新聞資訊

    如何使用水流量傳感器?

    時間:2019-12-06 01:12:18 點(diǎn)擊:0
    在本教程中,您將學(xué)習(xí)如何在Arduino板上使用一個水流傳感器。
    水流傳感器由一個塑料閥體,一個水轉(zhuǎn)子和一個霍爾效應(yīng)傳感器組成。當(dāng)水流過轉(zhuǎn)子時,轉(zhuǎn)子會滾動,其速度會以不同的流速變化?;魻栃?yīng)傳感器輸出相應(yīng)的脈沖信號。
    可以在不同的直徑,水壓(MPa)和流速(L / m)范圍內(nèi)找到這種類型的傳感器。確保選擇一種可以滿足您需求的產(chǎn)品。我擁有的傳感器直徑為20mm,水壓lt;1.75Mpa,流量范圍約為30 L / m。
    在本教程中,我們將使用串行監(jiān)視器打印以升/小時為單位的水流速以及自開始以來的總升水量。
    因此,讓我們開始吧!
    步驟1:您需要什么
    對于本教程,您將需要:
    Arduino Uno
    水流量傳感器
    3條面包板電纜
    步驟2:電路
    連接非常簡單,請參見上圖和面包板電路原理圖。
    步驟3:代碼
    這是使用Codebender嵌入的代碼!
    /*
    Liquid flow rate sensor -DIYhacking.com Arvind Sanjeev
    Measure the liquid/water flow rate using this code.
    Connect Vcc and Gnd of sensor to arduino, and the
    signal line to arduino digital pin 2.
    */
    byte statusLed = 13;
    byte sensorInterrupt = 0; // 0 = digital pin 2
    byte sensorPin = 2;
    // The hall-effect flow sensor outputs approximately 4.5 pulses per second per
    // litre/minute of flow.
    float calibrationFactor = 4.5;
    volatile byte pulseCount;
    float flowRate;
    unsigned int flowMilliLitres;
    unsigned long totalMilliLitres;
    unsigned long oldTime;
    void setup()
    {
    // Initialize a serial connection for reporting values to the host
    Serial.begin(9600);
    // Set up the status LED line as an output
    pinMode(statusLed, OUTPUT);
    digitalWrite(statusLed, HIGH); // We have an active-low LED attached
    pinMode(sensorPin, INPUT);
    digitalWrite(sensorPin, HIGH);
    pulseCount = 0;
    flowRate = 0.0;
    flowMilliLitres = 0;
    totalMilliLitres = 0;
    oldTime = 0;
    // The Hall-effect sensor is connected to pin 2 which uses interrupt 0.
    // Configured to trigger on a FALLING state change (transition from HIGH
    // state to LOW state)
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
    }
    /**
    * Main program loop
    */
    void loop()
    {
    if((millis() - oldTime) gt; 1000) // Only process counters once per second
    {
    // Disable the interrupt while calculating flow rate and sending the value to
    // the host
    detachInterrupt(sensorInterrupt);
    // Because this loop may not complete in exactly 1 second intervals we calculate
    // the number of milliseconds that have passed since the last execution and use
    // that to scale the output. We also apply the calibrationFactor to scale the output
    // based on the number of pulses per second per units of measure (litres/minute in
    // this case) coming from the sensor.
    flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
    // Note the time this processing pass was executed. Note that because we#39;ve
    // disabled interrupts the millis() function won#39;t actually be incrementing right
    // at this point, but it will still return the value it was set to just before
    // interrupts went away.
    oldTime = millis();
    // Divide the flow rate in litres/minute by 60 to determine how many litres have
    // passed through the sensor in this 1 second interval, then multiply by 1000 to
    // convert to millilitres.
    flowMilliLitres = (flowRate / 60) * 1000;
    // Add the millilitres passed in this second to the cumulative total
    totalMilliLitres += flowMilliLitres;
    unsigned int frac;
    // Print the flow rate for this second in litres / minute
    Serial.print(quot;Flow rate: quot;);
    Serial.print(int(flowRate)); // Print the integer part of the variable
    Serial.print(quot;L/minquot;);
    Serial.print(quot;\tquot;); // Print tab space
    // Print the cumulative total of litres flowed since starting
    Serial.print(quot;Output Liquid Quantity: quot;);
    Serial.print(totalMilliLitres);
    Serial.println(quot;mLquot;);
    Serial.print(quot;\tquot;); // Print tab space
    Serial.print(totalMilliLitres/1000);
    Serial.print(quot;Lquot;);
    // Reset the pulse counter so we can start incrementing again
    pulseCount = 0;
    // Enable the interrupt again now that we#39;ve finished sending output
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
    }
    }
    /*
    Insterrupt Service Routine
    */
    void pulseCounter()
    嘗試下載Codebender插件,然后單擊”在Arduino上運(yùn)行”按鈕,以使用此草圖對Arduino板進(jìn)行編程。就是這樣,您已經(jīng)使用此草圖對Arduino進(jìn)行了編程!
    您可以通過單擊”編輯”按鈕繼續(xù)進(jìn)行操作,然后開始對代碼進(jìn)行自己的修改。例如,您可以在第58行中更改” 1000” ms延遲時間。
    步驟4:串行監(jiān)視器
    按下面的連接按鈕開始串行通信。
    將傳感器與水龍頭連接,或直接吹水。
    注意:傳感器的背面用一個箭頭顯示正確的流量側(cè)。
    <kbd id="o8e0c"></kbd>
    <samp id="o8e0c"></samp>
  • <strike id="o8e0c"><menu id="o8e0c"></menu></strike>
  • <th id="o8e0c"></th>
  • <cite id="o8e0c"></cite>