Groundwater is a key resource that needs improved monitoring.

What it does

It monitors groundwater levels using an Arduino 101 and an industry standard sensor that uses the SDI-12 protocol. The acquired data from the Arduino 101 is transmitted using LoRaWAN to a gateway. Both private and public gateways are supported. A gateway then transmits the data to the Microsoft IoT Hub, and then the data from the hub is extracted to a web server where it can be viewed with a browser. The power consumption is kept to a minimum by leveraging the sleep mode of the Arduino 101.

How we built it

A rugged groundwater sensor was connected to the Arduino 101 using the SDI-12 protocol. The sensor was powered with 12v that was obtained from an output 3.3V pin of the Arduino 101 through the use of a voltage booster. So the sensor is powered only when a measurement is taken. The SDI-12 protocol requires a 5V data pin, a bidirectional level shifter was used to do the 3.3V to 5V conversion of the data transfer between the sensor and the Arduino 101 data input pin. A serial protocol was used to communicate the measured groundwater level to the mDot LoRaWAN radio chip mounted on the Arduino 101 using a home-built shield. The mDot was used to join two LoRaWAN networks, a public network available in the Palo Alto area and a private network where the gateway mounted in my house. The public network gateway was about two mile away but received the data without any lost of packets. The public network account was configured to transmit the received packets to a Microsoft IoT Hub hosted in the Microsoft Azure cloud. The IoT Hub data was extracted down to a desktop using Node.js scripts running in a Node.js webserver on a laptop. A web page was built to display the downloaded data in a graphical format. We can also transmit the data to a smartphone using bluetooth (BLE).

Challenges we ran into

The SDI-12 protocol implementation requires a careful management of the interrupts on the data pin. Typically, the interrupts are raised on rising edge, falling edge, HIGH, LOW and CHANGE. The Arduino 101 low level interrupt handling supported the CHANGE functionality which was a critical factor. We had to look through the detailed specifications for the Curie module to make sure that it provided what was necessary. We also used the CuriePower library for low power management, and we had to learn the API for that functionality.

What we learned

The Devil is in the details, and you have to get the hardware right and the software right to build something that can be turned into a commercial product.

What's next for Protect your groundwater with Intel IoT and LPWAN

Design of an enclosure that will survive the field conditions without diminishing the functionality is the next challenge. For example, the correct level of Ingression Protection (IP) has to be determined. We will probably use IP-67. We have to determine if we will continue with rubber antenna for the radio (which sticks out and prone to get vandalized) or if we will use a chip antenna. We will create a full blown Bluetooth app to graph the data directly.

Built With

Share this project: