From b65908ea2420ab8b4637a4e8a4c3cdb187f5919d Mon Sep 17 00:00:00 2001 From: Sisinty Sasmita Patra Date: Wed, 14 Sep 2016 11:37:08 -0700 Subject: [PATCH] WFS: Added water flow sensor without grove dependency Signed-off-by: Sisinty Sasmita Patra --- docs/images/wfs.jpg | Bin 0 -> 92097 bytes examples/c++/CMakeLists.txt | 1 + examples/c++/wfs.cxx | 78 +++++++++++++++++++ examples/java/CMakeLists.txt | 1 + examples/java/WFSSample.java | 44 +++++++++++ examples/javascript/wfs.js | 66 +++++++++++++++++ examples/python/wfs.py | 64 ++++++++++++++++ src/wfs/CMakeLists.txt | 5 ++ src/wfs/javaupm_wfs.i | 21 ++++++ src/wfs/jsupm_wfs.i | 8 ++ src/wfs/pyupm_wfs.i | 11 +++ src/wfs/wfs.cxx | 124 +++++++++++++++++++++++++++++++ src/wfs/wfs.hpp | 140 +++++++++++++++++++++++++++++++++++ 13 files changed, 563 insertions(+) create mode 100755 docs/images/wfs.jpg create mode 100644 examples/c++/wfs.cxx create mode 100644 examples/java/WFSSample.java create mode 100644 examples/javascript/wfs.js create mode 100644 examples/python/wfs.py create mode 100644 src/wfs/CMakeLists.txt create mode 100644 src/wfs/javaupm_wfs.i create mode 100644 src/wfs/jsupm_wfs.i create mode 100644 src/wfs/pyupm_wfs.i create mode 100644 src/wfs/wfs.cxx create mode 100644 src/wfs/wfs.hpp diff --git a/docs/images/wfs.jpg b/docs/images/wfs.jpg new file mode 100755 index 0000000000000000000000000000000000000000..557830ba9bc47bab3edff9c53f04d14e7d4a32e4 GIT binary patch literal 92097 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

e%6)0hTR;0%3 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 literal 0 HcmV?d00001 diff --git a/examples/c++/CMakeLists.txt b/examples/c++/CMakeLists.txt index 93441dbe..85b40b85 100644 --- a/examples/c++/CMakeLists.txt +++ b/examples/c++/CMakeLists.txt @@ -212,6 +212,7 @@ add_example (zfm20) add_example (zfm20-register) add_example (uln200xa) add_example (grovewfs) +add_example (wfs) add_example (isd1820) add_example (sx6119) add_example (si114x) diff --git a/examples/c++/wfs.cxx b/examples/c++/wfs.cxx new file mode 100644 index 00000000..24bb97f5 --- /dev/null +++ b/examples/c++/wfs.cxx @@ -0,0 +1,78 @@ +/* + * Author: Jon Trulson + * Copyright (c) 2014 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#include "wfs.hpp" + +using namespace std; + +int shouldRun = true; + +void sig_handler(int signo) +{ + if (signo == SIGINT) + shouldRun = false; +} + + +int main() +{ + signal(SIGINT, sig_handler); + +//! [Interesting] + // Instantiate a Water Flow Sensor on digital pin D2 + upm::WFS* flow = new upm::WFS(2); + + // set the flow counter to 0 and start counting + flow->clearFlowCounter(); + flow->startFlowCounter(); + + while (shouldRun) + { + // we grab these (,illis and flowCount) just for display + // purposes in this example + uint32_t millis = flow->getMillis(); + uint32_t flowCount = flow->flowCounter(); + + float fr = flow->flowRate(); + + // output milliseconds passed, flow count, and computed flow rate + cout << "Millis: " << millis << " Flow Count: " << flowCount; + cout << " Flow Rate: " << fr << " LPM" << endl; + + // best to gather data for at least one second for reasonable + // results. + sleep(2); + } + + flow->stopFlowCounter(); +//! [Interesting] + + cout << "Exiting..." << endl; + + delete flow; + return 0; +} diff --git a/examples/java/CMakeLists.txt b/examples/java/CMakeLists.txt index 5dbf2905..ddcf73af 100644 --- a/examples/java/CMakeLists.txt +++ b/examples/java/CMakeLists.txt @@ -72,6 +72,7 @@ add_example(GroveVDivSample grovevdiv) add_example(WaterSample water) add_example(GroveWaterSample grovewater) add_example(GroveWFSSample grovewfs) +add_example(WFSSample wfs) add_example(GUVAS12DSample guvas12d) add_example(H3LIS331DLSample h3lis331dl) add_example(HCSR04Sample hcsr04) diff --git a/examples/java/WFSSample.java b/examples/java/WFSSample.java new file mode 100644 index 00000000..c0c0a14a --- /dev/null +++ b/examples/java/WFSSample.java @@ -0,0 +1,44 @@ +/* + * Author: Stefan Andritoiu + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +//NOT TESTED!!! +public class WFSSample { + + public static void main(String[] args) throws InterruptedException { + // ! [Interesting] + // Instantiate a Water Flow Sensor on digital pin D2 + upm_wfs.WFS flow = new upm_wfs.WFS(2); + + flow.clearFlowCounter(); + flow.startFlowCounter(); + + while (true) { + System.out.print("Millis: " + flow.getMillis() + " FlowCount: " + flow.flowCounter()); + System.out.println(" Flow Rate: " + flow.flowRate() + " LPM"); + + Thread.sleep(2000); + } + // ! [Interesting] + } +} diff --git a/examples/javascript/wfs.js b/examples/javascript/wfs.js new file mode 100644 index 00000000..f24481d9 --- /dev/null +++ b/examples/javascript/wfs.js @@ -0,0 +1,66 @@ +/* +* Author: Zion Orent +* Copyright (c) 2015 Intel Corporation. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +var waterFlow_lib = require('jsupm_wfs'); + +// Instantiate a Grove Water Flow Sensor on digital pin D2 +var myWaterFlow_obj = new waterFlow_lib.WFS(2); + +// set the flow counter to 0 and start counting +myWaterFlow_obj.clearFlowCounter(); +myWaterFlow_obj.startFlowCounter(); + + +var millis, flowCount, fr; +var myInterval = setInterval(function() +{ + // we grab these (millis and flowCount) just for display + // purposes in this example + millis = myWaterFlow_obj.getMillis(); + flowCount = myWaterFlow_obj.flowCounter(); + + fr = myWaterFlow_obj.flowRate(); + + // output milliseconds passed, flow count, and computed flow rate + outputStr = "Millis: " + millis + " Flow Count: " + flowCount + + " Flow Rate: " + fr + " LPM"; + console.log(outputStr); + + // best to gather data for at least one second for reasonable + // results. +}, 2000); + + +// When exiting: clear interval and print message +process.on('SIGINT', function() +{ + clearInterval(myInterval); + myWaterFlow_obj.stopFlowCounter(); + myWaterFlow_obj = null + waterFlow_lib.cleanUp(); + waterFlow_lib = null; + + console.log("Exiting"); + process.exit(0); +}); diff --git a/examples/python/wfs.py b/examples/python/wfs.py new file mode 100644 index 00000000..ce7f70af --- /dev/null +++ b/examples/python/wfs.py @@ -0,0 +1,64 @@ +#!/usr/bin/python +# Author: Zion Orent +# Copyright (c) 2015 Intel Corporation. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import time, sys, signal, atexit +import pyupm_wfs as upmwfs + +# Instantiate a Water Flow Sensor on digital pin D2 +myWaterFlow = upmwfs.WFS(2) + + +## Exit handlers ## +# This stops python from printing a stacktrace when you hit control-C +def SIGINTHandler(signum, frame): + raise SystemExit + +# This function lets you run code on exit, +# including functions from myWaterFlow +def exitHandler(): + myWaterFlow.stopFlowCounter() + print "Exiting" + sys.exit(0) + +# Register exit handlers +atexit.register(exitHandler) +signal.signal(signal.SIGINT, SIGINTHandler) + + +# set the flow counter to 0 and start counting +myWaterFlow.clearFlowCounter() +myWaterFlow.startFlowCounter() + +while (1): + # we grab these (millis and flowCount) just for display + # purposes in this example + millis = myWaterFlow.getMillis() + flowCount = myWaterFlow.flowCounter() + + fr = myWaterFlow.flowRate() + + # output milliseconds passed, flow count, and computed flow rate + outputStr = "Millis: {0} Flow Count: {1} Flow Rate: {2} LPM".format( + millis, flowCount, fr) + print outputStr + time.sleep(2) diff --git a/src/wfs/CMakeLists.txt b/src/wfs/CMakeLists.txt new file mode 100644 index 00000000..ce50d56a --- /dev/null +++ b/src/wfs/CMakeLists.txt @@ -0,0 +1,5 @@ +upm_mixed_module_init (NAME wfs + DESCRIPTION "UPM WFS Module" + CPP_HDR wfs.hpp + CPP_SRC wfs.cxx + REQUIRES mraa) diff --git a/src/wfs/javaupm_wfs.i b/src/wfs/javaupm_wfs.i new file mode 100644 index 00000000..35f7ee08 --- /dev/null +++ b/src/wfs/javaupm_wfs.i @@ -0,0 +1,21 @@ +%module javaupm_wfs +%include "../upm.i" + +%ignore flowISR; + +%{ + #include "wfs.hpp" +%} + +%include "wfs.hpp" + +%pragma(java) jniclasscode=%{ + static { + try { + System.loadLibrary("javaupm_wfs"); + } catch (UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load. \n" + e); + System.exit(1); + } + } +%} diff --git a/src/wfs/jsupm_wfs.i b/src/wfs/jsupm_wfs.i new file mode 100644 index 00000000..52cbaf23 --- /dev/null +++ b/src/wfs/jsupm_wfs.i @@ -0,0 +1,8 @@ +%module jsupm_wfs +%include "../upm.i" + +%{ + #include "wfs.hpp" +%} + +%include "wfs.hpp" diff --git a/src/wfs/pyupm_wfs.i b/src/wfs/pyupm_wfs.i new file mode 100644 index 00000000..b722c47c --- /dev/null +++ b/src/wfs/pyupm_wfs.i @@ -0,0 +1,11 @@ +// Include doxygen-generated documentation +%include "pyupm_doxy2swig.i" +%module pyupm_wfs +%include "../upm.i" + +%feature("autodoc", "3"); + +%include "wfs.hpp" +%{ + #include "wfs.hpp" +%} diff --git a/src/wfs/wfs.cxx b/src/wfs/wfs.cxx new file mode 100644 index 00000000..98ea4a6d --- /dev/null +++ b/src/wfs/wfs.cxx @@ -0,0 +1,124 @@ +/* + * Author: Jon Trulson + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include + +#include "wfs.hpp" + +using namespace upm; +using namespace std; + +WFS::WFS(int pin) +{ + if ( !(m_gpio = mraa_gpio_init(pin)) ) + { + throw std::invalid_argument(std::string(__FUNCTION__) + + ": mraa_gpio_init() failed, invalid pin?"); + return; + } + + mraa_gpio_dir(m_gpio, MRAA_GPIO_IN); + + initClock(); + m_flowCounter = 0; + m_isrInstalled = false; +} + +WFS::~WFS() +{ + if (m_isrInstalled) + stopFlowCounter(); + + mraa_gpio_close(m_gpio); +} + +void WFS::initClock() +{ + gettimeofday(&m_startTime, NULL); +} + +uint32_t WFS::getMillis() +{ + struct timeval elapsed, now; + uint32_t elapse; + + // get current time + gettimeofday(&now, NULL); + + // compute the delta since m_startTime + if( (elapsed.tv_usec = now.tv_usec - m_startTime.tv_usec) < 0 ) + { + elapsed.tv_usec += 1000000; + elapsed.tv_sec = now.tv_sec - m_startTime.tv_sec - 1; + } + else + { + elapsed.tv_sec = now.tv_sec - m_startTime.tv_sec; + } + + elapse = (uint32_t)((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000)); + + // never return 0 + if (elapse == 0) + elapse = 1; + + return elapse; +} + +void WFS::startFlowCounter() +{ + initClock(); + // install our interrupt handler + mraa_gpio_isr(m_gpio, MRAA_GPIO_EDGE_RISING, + &flowISR, this); + + m_isrInstalled = true; +} + +void WFS::stopFlowCounter() +{ + // remove the interrupt handler + mraa_gpio_isr_exit(m_gpio); + + m_isrInstalled = false; +} + +void WFS::flowISR(void *ctx) +{ + upm::WFS *This = (upm::WFS *)ctx; + This->m_flowCounter++; +} + +float WFS::flowRate() +{ + uint32_t millis = getMillis(); + uint32_t flow = flowCounter(); + + // 7.5 comes from the seeedstudio page, see the confusing datasheet :) + float flowRate = (float(flow) * 7.5) / ((float(millis) / 1000.0) * 60.0); + + return flowRate; +} diff --git a/src/wfs/wfs.hpp b/src/wfs/wfs.hpp new file mode 100644 index 00000000..2cd20795 --- /dev/null +++ b/src/wfs/wfs.hpp @@ -0,0 +1,140 @@ +/* + * Author: Jon Trulson + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#pragma once + +#include +#include +#include +#include + +namespace upm { + + /** + * @brief Grove Water Flow Sensor library + * @defgroup wfs libupm-wfs + * @ingroup seeed gpio liquid eak + */ + + /** + * @library wfs + * @sensor wfs + * @comname Grove Water Flow Sensor + * @type liquid + * @man seeed + * @web http://www.seeedstudio.com/wiki/index.php?title=G1/2_Water_Flow_sensor + * @con gpio + * @kit eak + + * @brief API for the Grove Water Flow Sensor + * + * This sensor is used to measure water flow in liters per + * minute (LPM). It incorporates a Hall Effect sensor. The UPM module + * defines an interrupt routine to be triggered on each low pulse, + * keeping count. This device requires a 10K pull-up resistor for + * the signal line (yellow wire). There is a schematic diagram on + * the SeeedStudio site (3/2015): + * http://www.seeedstudio.com/wiki/index.php?title=G1/2_Water_Flow_sensor + * + * However, be careful when wiring this up - the schematic appears to + * have a bug in it: the lower left connection of the signal line + * (yellow) to Vcc (red) should not be there. The sensor can work + * with this connection, but probably not for very long. + * + * @image html wfs.jpg + * @snippet wfs.cxx Interesting + */ + class WFS { + public: + /** + * Grove Water Flow sensor constructor + * + * @param pin Digital pin to use + */ + WFS(int pin); + /** + * WFS destructor + */ + ~WFS(); + /** + * Returns the number of milliseconds elapsed since initClock() + * was last called. + * + * @return Elapsed milliseconds + */ + uint32_t getMillis(); + + /** + * Resets the clock + * + */ + void initClock(); + + /** + * Resets the flow counter to 0. The flow counter should be + * stopped via stopFlowCounter() prior to calling this function. + * + */ + void clearFlowCounter() { m_flowCounter = 0; }; + + /** + * Starts the flow counter + * + */ + void startFlowCounter(); + + /** + * Stops the flow counter + * + */ + void stopFlowCounter(); + + /** + * Gets the flow counter + * + * @return Flow counter + */ + uint32_t flowCounter() { return m_flowCounter; }; + + /** + * Computes the flow rate in liters per minute (LPM) + * + * @return Computed flow rate + */ + float flowRate(); + + private: + /** + * Flow interrupt service routine (ISR) + * + */ + static void flowISR(void *ctx); + + volatile uint32_t m_flowCounter; + struct timeval m_startTime; + mraa_gpio_context m_gpio; + bool m_isrInstalled; + }; +} + +