Project showcase
SCADA Control of a Water Pumping Station

SCADA Control of a Water Pumping Station © GPL3+

A demo SCADA control system to operate and monitor a pumping water station.

  • 5,344 views
  • 1 comment
  • 14 respects

Components and supplies

Apps and online services

About this project

This is a helpful student project that teaches theory and application by applying all the courses learned especially the ones that are about Instrumentation, Process Application, Digital and Analog Electronics, and computer programming.

Delivery of the potable water requires little to no pumping, as the water is gravity fed from the large storage tank. But how it can be controlled and monitored?

SCADA

The project team selected Supervisory Control and Data Acquisition (SCADA) based pumping water station which is designed to collect field information, transfer it to central computer facility, and display real time operational data to the operator graphically or textually. SCADA can turn devices on or off remotely.

SCADA systems are designed to collect field information, transfer it to a central computer facility, and display the information to the operator graphically or textually, thereby allowing the operator to monitor or control an entire system from a central location in real time.

SCADA can:

  • turn devices on or off
  • display real time operational data
  • provide equipment-wide to system-wide views of operation
  • trend data, and alarms
  • SCADA systems consist of both hardware and software.

The project team used the latest technology and components for the main instrumentation and control courses studied to develop this project.

The Process Model

To achieve our aim which is a SCADA system, we had to build a process model (prototype) according to a drawing made by "VISIO" software:

Using three tanks, three pumps, and four valves, the actual model is as follows:

Install one ultrasonic sensor under each cover of the three tanks, thus, the water level in each tank can be measured.

All device wiring in the field gathered to one area. We called it "Central Control Room."

Until now, we have just been preparing our station. In the next part we will see how the control system was implemented.

Hardware Components of a SCADA System

1. RTU (Remote Terminal Unit)

We used an Arduino board. All field equipment is connected to it. It is a representative of a standalone data acquisition and control unit, which monitors and controls equipment in the field. Besides that, the Arduino is connected to a tablet for local control in the field.

2. Communication (transmission system)

Communication hardware allows the transfer of information and data back and forth between the MTU (Master Terminal Unit) and the RTU. The APC220 radio module provides a simple and economic solution to wireless data communications. It integrates an embedded high speed microprocessor and high performance IC that creates a transparent interface. We connect it to the local tablet to transfer information to the MTU.

Here is how to configure it with Windows.

3. MTU (Master Terminal Unit)

We used a Touch-Screen computer placed in a central location with an operator as our MTU. It collects and logs information gathered by the field sites, displays information to the HMI (Human Machine Interface), and may generate action based upon detected events. The operator is able to make set point changes on the distant process.

The general communication flow is as follows:

Software Components OR (Human Machine Interface)

We integrated between C# on the desktop and C++ on the Arduino via USB.

Our strategy here is to build a C++ program to run on the Arduino for the purpose of taking the three Ultrasonic sensor inputs and send them via USB. At the same time, it must listen to the port for any incoming command, such as, turn on the pump.

The desktop program made in C# to work as HMI gives the user control over the plant. We used Microsoft Blend to design the graphical interface and Microsoft Visual Studio for writing the actual code.

There are two directions the plant can work in:

1. Forward, where water travels from the Main tank to the City tank,

2. Backwards, where water comes back from the City tank to the Main tank.

As a result, we have to write the C# code to control these two paths.

Code

ArduinoC/C++
Using Arduino platform
#define trig1 44
#define echo1 45
#define trig2 38
#define echo2 39
#define trig3 30
#define echo3 31


#define led1 2  //pump 1
#define led2 3  //pump 2
#define led3 4  //pump 3
#define led4 5
#define led5 6  //valve 1
#define led6 7  //valve 2
#define led7 8  //valve 3
#define led8 9  //valve 4



String d1,d2,d3;


long duration;
int distance;
char r;

void setup()
{

	Serial.begin(9600);
pinMode(trig1, OUTPUT);
  pinMode(echo1, INPUT);

  pinMode(trig2, OUTPUT);
  pinMode(echo2, INPUT);

  pinMode(trig3, OUTPUT);
  pinMode(echo3, INPUT);
	
	pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 pinMode(led5, OUTPUT);
 pinMode(led6, OUTPUT);
 pinMode(led7, OUTPUT);
 pinMode(led8, OUTPUT);



}
void loop()
{
// ultra 1
  digitalWrite(trig1, LOW);
  delayMicroseconds(2);

  digitalWrite(trig1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig1, LOW);

  duration = pulseIn(echo1, HIGH);
  distance = duration / 58;
  d1 = String(distance);

 // ultra 2
 digitalWrite(trig2, LOW);
  delayMicroseconds(2);

  digitalWrite(trig2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig2, LOW);

  duration = pulseIn(echo2, HIGH);
  distance = duration / 58;
  d2 = String(distance);

  // ultra 3
 digitalWrite(trig3, LOW);
  delayMicroseconds(2);

  digitalWrite(trig3, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig3, LOW);

  duration = pulseIn(echo3, HIGH);
  distance = duration / 58;
  d3 = String(distance);
  //Serial.write(distance);

 // mySerial.println(d1+',' + d2+',' + d3);
  Serial.println(d1+',' + d2+',' + d3);
  
 delay(500);
 //r=mySerial.read();
 r=Serial.read();
 //pump1
 if(r=='a')
 {
   digitalWrite(led1, HIGH);
 }
 if(r=='b')
 {
   digitalWrite(led1, LOW);
 }
 //pump2
 if(r=='c')
 {
   digitalWrite(led2, HIGH);
 }
 if(r=='d')
 {
   digitalWrite(led2, LOW);
 }
 //pump3
 if(r=='e')
 {
   digitalWrite(led3, HIGH);
 }
 if(r=='f')
 {
   digitalWrite(led3, LOW);
 }

//valve1
 if(r=='g')
 {
   digitalWrite(led5, HIGH);
 }
 if(r=='h')
 {
   digitalWrite(led5, LOW);
 }
//valve2
 if(r=='i')
 {
   digitalWrite(led6, HIGH);
 }
 if(r=='j')
 {
   digitalWrite(led6, LOW);
 }
//valve3
 if(r=='k')
 {
   digitalWrite(led7, HIGH);
 }
 if(r=='u')
 {
   digitalWrite(led7, LOW);
 }
 //valve4
 if(r=='y')
 {
   digitalWrite(led8, HIGH);
 }
 if(r=='t')
 {
   digitalWrite(led8, LOW);
 }

  }

 
C#C#
It is important to note that this code in C# is just how we read and analyze the reading from serial port. NOT the whole program code
private void MyPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            in_data = myPort.ReadLine();
            Dispatcher.Invoke(() =>
            {
                
               
                char[] separator = {','};
                string[] splitarray;
           
                in_data = in_data.Trim();
                splitarray = in_data.Split(separator);
              // mailServer();
                try
                {

                    tank1.currentValue = Convert.ToInt32(splitarray[0]);
                    tank2.currentValue = Convert.ToInt32(splitarray[1]);
                    tank3.currentValue = Convert.ToInt32(splitarray[2]);
                    tank1ReadingFun();
                    tank2ReadingFun();
                    tank3ReadingFun();

                }
                catch
                {

                } 
               
               // myPort.WriteLine(i);
              
            });
        }

Schematics

wiring diagram

Comments

Similar projects you might like

Servo Control with TV Remote Control

Project showcase by eldo85

  • 5,596 views
  • 5 comments
  • 17 respects

Arduino Control AC Water Heater temperature

Project tutorial by Mohannad Rawashdeh

  • 9,060 views
  • 0 comments
  • 6 respects

SERENA: Alarm Control Panel

Project tutorial by Michael Marinis

  • 6,907 views
  • 0 comments
  • 13 respects

Control your LED with Cortana

Project tutorial by Mohamed Emam

  • 8,705 views
  • 7 comments
  • 21 respects

Control an LED with the Remote Control

Project showcase by Nicholas_N

  • 3,192 views
  • 2 comments
  • 9 respects
Add projectSign up / Login