Solenoid Valves - Is this schematic correct? Parts sourcing?

wildbill:
1 has the faint smell of power issues, but hard to be sure - does the system settle down if you turn the solenoid off again?
2 says software. Please post your code.

  1. No, the system never settles down even if I shut off the relays and solenoids, only when I complete unplug the Arduino, reset doesn't cut it.

  2. I warn you I am not the best coder on the planet... I'm welcome to any changes to clean things up as well.

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

#define maxLength 60

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x5A, 0xFA };
byte ip[] = { 192,168,0, 177 };

Server server(80);

String inString = String(maxLength);
long previousMillis = 0;
int setferm1 = 300;
int setferm2 = 300;
int setferm3 = 300;
int setferm4 = 300;
int Posa = 0;
int Posb = 0;
int Posc = 0;
int Posd = 0;
int whichTank = -1;
int chillValue = 10;
char tempBuff[4];
int chill = 0;
int valveToOpenIdx = -1;
double volts = 0.48535;
int TempSensor1 =0;
int TempSensor2 =0;
int TempSensor3 =0;
int TempSensor4 =0;


void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
 
  Serial.begin(9600); 
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  
 
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, LOW);
  
 }

void loop()
{
  //Get Temps off sensors
  analogRead(1);
  delay(10);
  TempSensor1 = 0;
  for (int i = 0; i < 10; i++) {
    TempSensor1 = TempSensor1 + round(volts*analogRead(1)); 
  } 
  analogRead(2);
  delay(10);
  TempSensor2 = 0;
  for (int i = 0; i < 10; i++) {
    TempSensor2 = TempSensor2 + round(volts*analogRead(2)); 
  } 
  analogRead(3);
  delay(10);
  TempSensor3 = 0;
  for (int i = 0; i < 10; i++) {
    TempSensor3 = TempSensor3 + round(volts*analogRead(3)); 
  }
  analogRead(4);
  delay(10);
  TempSensor4 = 0;
  for (int i = 0; i < 10; i++) {
    TempSensor4 = TempSensor4 + round(volts*analogRead(4)); 
  }  
  TempSensor1 = round(TempSensor1/10);
  TempSensor2 = round(TempSensor2/10);
  TempSensor3 = round(TempSensor3/10);
  TempSensor4 = round(TempSensor4/10);
    
  
  // Web Interface
  int bufLength = 4;
  // listen for incoming clients
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
   // Serial.println(client.read());

    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (inString.length() < maxLength) {
          inString += c;
         }        
        
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          if (inString.indexOf("?") > -1) {
            Posa = inString.indexOf("a");
            Posb = inString.indexOf("b");
            Posc = inString.indexOf("c");
            Posd = inString.indexOf("d");
            
            inString.substring((Posa+2), (Posb-1)).toCharArray(tempBuff, bufLength);  //transfer substring to buffer
            setferm1 = atoi(tempBuff);
            inString.substring((Posb+2), (Posc-1)).toCharArray(tempBuff, bufLength);  //transfer substring to buffer
            setferm2 = atoi(tempBuff);
            inString.substring((Posc+2), (Posd-1)).toCharArray(tempBuff, bufLength);  //transfer substring to buffer
            setferm3 = atoi(tempBuff);
            inString.substring((Posd+2), (Posd+5)).toCharArray(tempBuff, bufLength);  //transfer substring to buffer
            setferm4 = atoi(tempBuff);
           
         }

          
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          
          client.print("<font size=32 color=CDAD00><b><u>HGB Fermenter Control</u></b></font>

 ");
          
          // output the value of each analog input pin
          client.print("<font size=32>Temperature of Fermenter 1 is ");client.print(TempSensor1);client.println("</font>
");
          client.print("<font size=32>Temperature of Fermenter 2 is ");client.print(TempSensor2);client.println("</font>
");
          client.print("<font size=32>Temperature of Fermenter 3 is ");client.print(TempSensor3);client.println("</font>
");
          client.print("<font size=32>Temperature of Fermenter 4 is ");client.print(TempSensor4);client.println("</font>
");
          
          client.print("

<form method=get><font size=32>");
          client.print("Setpoint Fermenter 1: <input type=text style=font-size:32pt size=3 name=a value="); client.print(setferm1);client.print(" />");
          if (valveToOpenIdx == 0) {
            client.print(" Open");
          }
          else {
            client.print(" Closed");
          }
          client.print("
");
          client.print("Setpoint Fermenter 2: <input type=text style=font-size:32pt size=3 name=b value="); client.print(setferm2);client.print(" />");
           if (valveToOpenIdx == 1) {
            client.print(" Open");
           }
           else {
            client.print(" Closed");
          }
          client.print("
");
          client.print("Setpoint Fermenter 3: <input type=text style=font-size:32pt size=3 name=c value="); client.print(setferm3);client.print(" />");
           if (valveToOpenIdx == 2) {
            client.print(" Open");
           }
          else {
            client.print(" Closed");
          }
          client.print("
");
          client.print("Setpoint Fermenter 4: <input type=text style=font-size:32pt size=3 name=d value="); client.print(setferm4);client.print(" />");
           if (valveToOpenIdx == 3) {
            client.print(" Open");
           }
          else {
            client.print(" Closed");
          }
          client.print("
");
          client.println("
");
          client.print("<input type=submit value=Update-Temps style=height:6em; width:24em />");
          client.print("</font></form>");
          client.println("
");
                  
          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);
    inString = " ";
    // close the connection:
    client.stop();
  }   
  // Valve Control Logic 
 
  delay(2000); 
  
 Serial.println(TempSensor1);
 Serial.println(TempSensor2);
 Serial.println(TempSensor3);
 Serial.println(TempSensor4);
 Serial.println(digitalRead(6));
  
    switch ( whichTank ) {
      case 0: chillValue = TempSensor1-setferm1;
              break;
      case 1: chillValue = TempSensor2-setferm2;
              break;
      case 2: chillValue = TempSensor3-setferm3;
              break;
      case 3: chillValue = TempSensor4-setferm4;
              break;    
    }
    
    if (chillValue < -1 && valveToOpenIdx != -1) {
      digitalWrite(6, LOW);
      delay(1000);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
      volts = 0.48535;
      delay(100);
       //Serial.println("Closed ");
      // Serial.println(valveToOpenIdx);
       chill = 0; 
    }
    
    
    if (chill == 0) {    
      int tankSetTemps[4] = {setferm1, setferm2, setferm3, setferm4};
      int tankTemps[4] = {TempSensor1, TempSensor2, TempSensor3, TempSensor4};
      int curTankDiff;
      int maxTankDiff = 0;
 
      valveToOpenIdx = -1;
      
      for (int i = 0; i < 4; i++) {
        curTankDiff = tankTemps[i] - tankSetTemps[i];
        if (curTankDiff > maxTankDiff) {
          valveToOpenIdx = i;
          whichTank = i;
          maxTankDiff = curTankDiff;
        }
      }
      
    if (valveToOpenIdx != -1) {  
        digitalWrite(valveToOpenIdx + 2, LOW);
        
        digitalWrite(6, HIGH);
        volts = 0.48535;
       // Serial.println("Opened ");
       // Serial.println(valveToOpenIdx);
        chill = 1;
      }  
    }