Pressure Regulatory system for Solar Plant

In this project I am going to automate the pressure regulatory system for a solar plant for community cooking and water heating

Similar projects worth following
This system is developed for non profit organisation where two parabolic reflectors are installed for producing steam to be used in cooking and for water heating using solar energy.
The heat energy from the receiver is used to convert water into steam and then to store the steam into pressurized accumulator. The input steam pressure to the accumulator needs to be fixed at particular point.
In this project, the pressure regulatory system for the steam accumulator is designed using Arduino and ethernet.

This project is developed to control the speed of the three phase water pumping motor using VFD with respect to pressure

We have two solar parabolic reflectors installed at our premises as shown in the attached photo. We are using them for heating the water as well as for cooking for a group of 150-200 people.

The solar reflectors are concentrating their energy in the form of heat on the metal receiver which gets heated up to 250° - 300° C. Then the water is pumped through these receivers using piston pump and motor. Due to the heat of the receiver, water gets heated and is converted into steam.

This steam is then taken to the steam accumulator, where we are storing the energy in pressurized accumulator so that it can be used for the whole day. The input pressure to this accumulator needs to be fixed at 5 BAR. This input pressure to the accumulator is dependent on the frequency of the motor as well as the usage of the steam from the accumulator. When the usage is more, the pressure drops and when the usage is less the pressure rises.

So to keep this pressure fixed at 5 BAR, a system is designed using Arduino and Ethernet shield, Let us call it Arduino VFD Controller.

The system needs to monitor the pressure to the accumulator and accordingly vary the frequency of the motor using VFD. A Graphical User Interface(GUI) is also provided to the user to control the Motors as well as to monitor the frequency the VFD.

Two VFDs are needed for two dishes and a pressure sensor at the input of the accumulator. The Arduino VFD Controller is kept with VFD & three phase motor which are near dishes. The actual distance between the pressure accumulator and these solar dishes is too much and thus pressure sensor can not be connected directly to the Arduino. So one more system was designed just to read the pressure and send it to the Arduino VFD Controller. The communication between these two systems as well as communication to the GUI is implemented on ethernet layer using UDP protocol. Arduino Ethernet shiled with W5100 is used for this purpose.

To implement pressure regultor with arduino PID logic is implemented using PID library from...

One Arduino is going to control two VFDs. So two PID instances were created. According to the input pressure, the PID logic will calculate the output frequency separately for both the VFDs.

To control the frequency of the motor, the analog port of the VFDs could have been used. But it requires 0-10V signal level,which would have added another voltage regulator & a DAC with Arduino. The selected VFDs support MODBUS over RS485, So RS485 communication link is used to communicate between VFD and Arduino using MODBUS protocol. VFD is from FUJI drives with inbuit MODBUS protocol over RS485 communication link.

FUJI MAKE VFD part Number: FRN0007C2S-4A

Now the actual flow goes like:

  1. Arduino VFD Controller will get pressure on UDP port over ethernet from another pressure sender installed at accumulator...
  2. It will process using PID logic and will give two output frequency for two VFDs...
  3. These two output frequency will be then sent to the two VFDs using MODBUS protocol on RS485 link...
  4. VFDs will be driving at these new frequency...
  5. Meanwhile if user wants to monitor or control the VFDs run using GUI: GUI will be communicating with the Arduino VFD Controller using UDP protocol. Arduino will be sending this information to the GUI as well as will stop or run the motor as per commanded from the GUI...

Please see the "Instructions" section to learn how to simulate or to test the actual system.


Arduino sketch for VFD Controller

ino - 12.83 kB - 08/23/2016 at 15:13



GUI to monitor running frequency of motors and to control them.

RAR Archive - 242.48 kB - 08/15/2016 at 12:08



To simulate VFD.

x-msdownload - 32.50 kB - 08/15/2016 at 12:08



To simulate Pressure sender. This will be sending accumulator instantaneous pressure to the Arduino VFD controller.

x-msdownload - 34.50 kB - 08/15/2016 at 12:08


  • 1 × Arduino Uno
  • 1 × Arduino ethernet shield W5100
  • 1 × ADM2484 RS485 IC
  • 1 × ethernet switch
  • 1 × CAT6 STP ethernet cable

  • Developing Pressure Sender Hardware

    Krunal08/20/2016 at 13:58 0 comments

    Till now I have all the Pressure regulating hardware and software ready. All the tests are performed successfully. GUIs are used to monitor as well to control the motors.

    The Hardware also is tested with the actual VFDs and motors. Till now, the steam pressure to the accumulator was simulated using another GUI. So now I have started to work on pressure sender hardware.

    The main purpose of Pressure sender hardware is to read the pressure of the steam to the accumulator and send this to the VFD controller PCBs in the field over ethernet layer using UDP protocol. The actual distance between steam accumulator and the parabolic dishes is more than 100 meter, so direct connection of pressure sensor to the VFD controllers was not possible.

    Apart from sensing pressure, steam temperature also needs to be monitored so the the heat energy in the receivers can be predicted. So a K-type thermocouple is also going to be used.

    The pressure sensor is going to be standard with output range of 0V - 10V DC. This value is then stepped down to 0 - 5V DC using resistor network so as to make it compatible with arduino voltage levels.

    For temperature sensing K-type thermocouple is to be used. AD8495 from Analog devices is used to amplify very small signals of thermocouple to higher range. AD8495 provides the resolution of 5mV/°C.

    I am going to use the same hardware of VFD controller with slight modifications. RS485 interface is not required, so that part will be removed and resistor divider for pressure sensor and AD8495 IC for thermocouple will be added.

  • Developing GUIs

    Krunal08/15/2016 at 12:02 0 comments

    Three GUIs have been developed to test the code: The GUIs can be found here...

    Two GUIs have been developed just to simulate Pressure sender and VFD to test the development...

    1. Pressure Sender Simulator: This pressure sender PCB's work is in progress, so GUI simulation is used. It is acting as Pressure sender installed near accumulator. This GUI only send pressure to the Arduino VFD Controller. Pressure can be varied with track bar from 0 - 8 BAR in the step of 0.01 BAR. This GUI works on UDP protocol.

    2. MODBUS Simulator: It is acting like VFD. Only Write one register of MODBUS fuction can be tested with this GUI. This GUI works on MODBUS protocol. This should be connected to the serial port of the Arduino VFD Controller while any other program using serial port of the Arduino should be closed before... (This is just test GUI and so I could not add all the MODBUS functions, however, all the codes are tested with actual VFD.)

    3. VFD Controller GUI shows the real time frequency of the both the motors, Also it shows the connection status of the VFDs. If any VFD is disconnected, it will show that in Red color else will be showing green in normal operation. User can even control each motor and can run/stop individual motor. We need to specify the IP address of the Arduino VFD controller to this GUI using settings tab(Default IP: This GUI is not a functional requirement for the Arduino VFD Controller, but it is just for monitoring purpose.

    When both VFDs are connected and RS485 communication proper, then GUI will be green showing the actual running frequency of the VFD.

    When there is any problem or if the communication fails, the GUI turn RED indicating loss of communication or some problem.

  • Making the actual hardware...

    Krunal08/15/2016 at 10:30 0 comments

    After testing the code on these hardware prototypes, I designed my customized hardware. The schematic is provided below.

    To be mentioned:

    1. I used switching regulator LM2596 as linear regulator was getting heated up a lot.

    2. The interrupt pin of W5100 is connected to interrupt pin of Arduino.

    3. Added buzzer for when there is any problem, buzzer will be made ON.

    4. Used ADM2484 as RS485 transreceiver IC.

    The schematic file can be downloaded from "Files" section.

  • Initial Tests with Arduino and ethernet shield

    Krunal08/15/2016 at 05:59 0 comments

    First of all I worked on hardware. I used Arduino Duimilanove and ethernet shield. I developed the code on this hardware prototype.

    ADM2484 IC was used as RS485 transreceiver IC.

    Arduino needs to do many works like:

    1.Getting pressure reading from anther arduino system through ethernet

    2. Process the data and calculating output frequency for each VFD by implementing PID.

    3. Driving the VFDs with this new frequency using MODBUS over RS485.

    4. Meanwhile if GUI asks for informatin then it has to send data packets to the GUI over ethernet.

    To perform these many functions, the code needs to be free from polling the resources. So I decided to keep all the communications interrupt based.

    The ethernet libraries for arduino are polling based and we need to check fr the received data regularly. To make use of interrupt capability of ethernet shield, you need to short INT jumper of ethernet shield.

    1. I implemented MODBUS protocol on my own. Please note, for this I did not use inbuilt serial library as I wanted to control the serial receiver interrupt on my own. With USART RX ISR, I can monitor each byte and can process the data more faster as compared to polling method that would have required for inbuilt serial library.

    2. While implementing UDP protocol, I needed to poll the UDP RX buffer to check the received data and thus it was taking a lot to respond to the information requested by the GUI. So I implemented interrupt based ethernet communication. Interrupts for all sockets has been enabled.

    Finally I had the working prototype ready. Next step was to get everything on the same PCB.

View all 4 project logs

  • 1
    Step 1

    To simulate the system without VFD: To simulate the system you will need two computers with different IP address. One to act as server for monitoring & other to act as pressure sender.

    1. Hookup the Ethernet shield to the Arduino. Don't forget to short the INT jumper on bottom side of the official Arduino ethernet shield, as we are using interrupt based communication for ethernet stuff.
    2. Connect Arduino to the USB port. Add ArduinoPID library in library folder of Arduino, compile & then upload the sketch provided here. Close Arduino IDE. Connect ethernet wire to the ethernet shield. It should get in the network. Try to ping
    3. Open MODBUS Simulator GUI & connect it to the serial port of the Arduino.
    4. Open Pressure sender GUI in the same computer(This computer IP should be: the GUI and Enter IP address as & port as 1937. Press "Start Sending" button and it will start sending the pressure to that is Arduino VFD controller.
    5. Open VFD Controller GUI in another computer(This computer IP should be: Change the IP addres in settings tab to & Port to 1937. Restart the GUI. Now, you can see the frequncy of both motors.
    6. Now if you close MODBUS Simulator GUI, the background of the VFD dials in the VFD Controller GUI will turn red indicating that the communication link is broken. If you again start the MODBUS Simulator GUI, the background color of the dials will turn green.

    Testing the system with VFD:

    1. Hookup the Ethernet shield to the Arduino. Don't forget to short the INT jumper on bottom side of the official Arduino ethernet shield, as we are using interrupt based communication.
    2. Connect Arduino to the USB port. Add ArduinoPID library in library folder of Arduino, compile & then upload the sketch. Close Arduino IDE. Connect ethernet wire to the ethernet shield. It should get in the network. Try to ping
    3. For RS485 link,any RS485 shield can be used. Code uses standard hardware arduino serial pins (0 & 1) for communicating over RS485 with pin 8 as direction control of RS485 as it is half duplex system.
    4. Power up VFD using 3phase supply & connect its RS485 output to the arduino RS485 output (A+ goes to A+ & B- goes to B-). (BE CAREFUL WITH THE THREE PHASE SUPPLY. CONNECT UNDER SUPERVSION OF EXPERIENCED ELECTRICIAN)
    5. Also power up the pressure sender and have it in the network. (I have implemented pressure sender using another arduino+ ethernet shield + analog pressure sensor)
    6. If everything is OK, it will start rotating the motor according to the pressure input.

    Default IPs:

    Arduino VFD Controller:

    Pressure Sender:

    Server IP(VFD Controller GUI):

    Default UDP Port: 1937...

View all instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates