Introduction: Monitor Liquid Level

Introduction

This project is about a simple and easy way to monitor and measure any liquid level at your house. This is tested and fully working at the tank that I have at my basement full of petroleum. There are many times especially at the winder that I need to be aware of the level. Furthermore, It is quite useful to record how much petroleum have you consumed per year and gather all these information to economic analysis.

Step 1: Hardware Parts

For this project I will be using the following:

  • Arduino Uno
  • Ethernet shield
  • HC-SR04 UltraSonic Sensor
  • Wires for connecting the sensor to arduino
  • CAT5 cable
  • Router
  • Laptop

Step 2: Upload the Software

Upload the software to the arduino before doing anything else. Please notice that the following code uses an ethernet shield and HTTP request to answer to a client (browser). So, in the next step we will see that the server responds with a HTTP request as written below. If you want for any reason to use a Wi-Fi shield or anything else you may need to modify the code.

The value (integer) that the user gets is simply what the sensor detects. So, actually its not the liquid level. BUT you can simply calculate the level if you abstract from the full tank the hypothetical liquid according to the value you just got. Simple mathematical equations.

/*****************************************************************************
An idea for Future Smart Homes

Oil Monitoring is a project that lets you monitor the ammount of oil
at yourhome. Alerts you with a message on facebook, gmail or even SMS
at your personal phone and more important gives you statistics about
the past. 

* Arduino Uno
* Ethernet shield and ethernet cable | Wireless shield
* UltraSonic Distance Sensor
* Wires for arduino pins

Developed by Tzivaras Vasilis
Last Update: [10-06-2015]
*****************************************************************************/

#define echoPin 7
#define trigPin 8

#include <SPI.h>
#include <Ethernet.h>

// UltraSonic sensor min and max value to be accepted.
int maximumRange = 200;
int minimumRange = 0;

long duration, distance;

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

IPAddress ip(192, 168, 1, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
   
   // Open serial communications and wait for port to open:
  Serial.begin(9600);

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void getSensorValue() {
	digitalWrite(trigPin, LOW); 
	delayMicroseconds(2); 

	digitalWrite(trigPin, HIGH);
	delayMicroseconds(10); 

	digitalWrite(trigPin, LOW);
	duration = pulseIn(echoPin, HIGH);

	//Calculate the distance (in cm) based on the speed of sound.
	distance = duration/58.2;
}

void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          
		  getSensorValue();
		  client.print("{\"id\":");
		  client.print("1770,");
		  client.print("\"measurement\":");
		  client.print(distance);
		  client.print("}");
		  
          client.println("<br />");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

Step 3: Connecting the Hardware

This is pretty easy to do. Grab four wires and connect them to the sensor and the Ethernet shield. Mount the shield over the arduino. Notice that the sensor has one GND (ground) one 5V (power) and two more pins named echo and trig. Echo is connected to 7 digital pin in arduino and trig to the 8 digital pin.

After that use cat5 cable to connect the shield with the router. Power up your laptop and go to the next step.

Step 4: Test Everything Out

Now we are ready to test this out. Open a browser at your laptop and type 192.168.1.177. It should be working :)
Notice that at the code we uploaded we said that the arduino has the above IP. You can change it if you want. Now you can place the device at the tank.Place a router there and go to your home and type the IP and see how much water, or petroleum is left in your tank.

for any questions please comment bellow.

Home Automation

Participated in the
Home Automation