EcoRenovator  

Go Back   EcoRenovator > Improvements > Geothermal & Heat Pumps
Advanced Search
 


Blog 60+ Home Energy Saving Tips Recent Posts


 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Old 08-15-14, 12:42 PM   #11
buffalobillpatrick
Master EcoRenovator
 
Join Date: Mar 2014
Location: Florissant, Colorado
Posts: 599
Thanks: 814
Thanked 59 Times in 55 Posts
Default

I don't mean to step on toes!

Only way I can understand someones code is to start messing with it.

My changes: some time names & blocking_delay >= on delays
Check my changes for being correct?


Ormston_Rev02
Code:
#include <Thermistor.h>


                                    //Got tired of counting zeros
#define  One_Sec              1000
#define  Half_Min            30000
#define  One_Min             60000
#define  Two_Min            120000
#define  Five_Min           300000
#define  Ten_Min            600000
#define  Thirty_Min        1800000





double evaporator, condensor;  //Variables for temperatures from thermistors
float HpLPM;                   //Flow rate from flow meter in L/m
float HpLPM1;                   //Flow rate from flow meter in L/m
int minLPM = 3;                //Minimum flowrate to run HP
int minEv = 2;                //Minimum evaporator temp
int maxCon = 65;              //Maximum condensor temp
byte runHP = false;
byte runCompressor = false;
byte runOutPump = false;       // pump to circulate water to house/tank
byte runInPump = false;        //fan in case of ASHP
const int demandPin = 4;       // input connected to external thermostat to request heat
byte demand = false;               // variable for reading if heat required from thermostat

unsigned long blocking_Time;          // Delay Time
unsigned long hpStart_Time;        // Time HP cycle started
unsigned long hpStop_Time;        // Time HP cycle stopped

volatile int NbTopsFan; //measuring the rising edges of the signal
volatile int NbTopsFan1; //measuring the rising edges of the signal
int hallsensor = 2; //The pin location of the sensor
int hallsensor1 = 3; //The pin location of the sensor
byte led = 13;
byte ledState = false;
byte comp = 5;
byte inPump = 6;
byte outPump = 7;
unsigned long prevMillis = 0;        //used for led blinking
Thermistor temp(0);
Thermistor temp1(1);

// ********************Temperature measurement starts here**************
void readTemps() { //read all temperatures from thermistors
  evaporator = temp.getTemp();
  condensor = temp1.getTemp();
  }

// ********************Temperature measurement ends here**************

// ********************Flow meter reading starts here**************

void hpFlow () //This is the function that the interupt calls
{
  NbTopsFan++;  //This function measures the rising and falling edge of the hall effect sensors signal
}

void hpFlow1 () //This is the function that the interupt calls
{
  NbTopsFan1++;  //This function measures the rising and falling edge of the hall effect sensors signal
}

void readFlows()
{
  NbTopsFan = 0; //Set NbTops to 0 ready for calculations
  NbTopsFan1 = 0; //Set NbTops to 0 ready for calculations
  interrupts(); //Enables interrupts
  delay (One_Sec); //Wait 1 second
  noInterrupts(); //Disable interrupts
  HpLPM = (NbTopsFan / 2.75);
  HpLPM = (NbTopsFan1 / 2.75);
}
// ********************Flow meter reading ends here**************


void setup() {
  pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
  pinMode(hallsensor1, INPUT); //initializes digital pin 3 as an input
  attachInterrupt(0, hpFlow, RISING); //and the interrupt is attached (1 for Leonardo 0 for mega/uno)
  attachInterrupt(1, hpFlow1, RISING); //and the interrupt is attached (0 for Leonardo 1 for mega/uno)
  pinMode(led, OUTPUT);
  pinMode(comp, OUTPUT);
  pinMode(inPump, OUTPUT);
  pinMode(outPump, OUTPUT);
  pinMode(demandPin, INPUT); 
  blocking_Time = millis(); 

}

void loop() {
  readTemps();
  readFlows();
  demand = digitalRead(demandPin);

  unsigned long current_Time = millis();
  
  if ((demand == true) && (blocking_Time >= (current_Time - Two_Min))) 
  //Wait 2 min.
  {
  if (runHP == false) hpStart_Time = current_Time;
  
  runHP = true;
  }
  else 
  {
  if (runHP == true) hpStop_Time = current_Time;
  
  runHP = false;
  }



  //*****HP startup cycle********
  if (runHP == true) runInPump = true;
  
  if ((runHP == true) 
     && (hpStart_Time >= (current_Time - Half_Min)  //Delay compressor start 30s
     && (HpLPM > minLPM)))                          //after starting in pump
  runCompressor = true;
     
  if ((runHP == true) 
     && (hpStart_Time >= (current_Time - One_Min))) 
  {
  runOutPump = true;           //Delay out pump start 60s after starting in pump
  ledState = true;             ///turn on pin 13 led after startup of HP
  }
 
 
  
  //*****HP shutdown cycle********
  if (runHP == false) runCompressor = false;
  
  if ((runHP == false) 
     && (hpStop_Time >= (current_Time - Two_Min))) 
  runInPump = false;
     
  if ((runHP == false) 
     && (hpStop_Time >= (current_Time - Five_Min)))   //delay 5 min.
  {
  runOutPump = false;
  blocking_Time = current_Time;
  ledState = false;               //turn off pin 13 led after shutdown of HP
  }
 
 
  
  //***Check flow rates above min***
  if (HpLPM < minLPM || HpLPM1 < minLPM) 
  {
  runCompressor = false;
  
  if (runHP == true) hpStop_Time = current_Time;
  
  blocking_Time = (current_Time + Ten_Min); //prevent cycle restart for 10m
  runHP = false;
  }



 //***Check evaporator/condensor above/below limits*** 
 //   not intended for defrost purposes, halts system for 30m
  if (evaporator < minEv || condensor > maxCon) 
  {
  runCompressor = false;
  
  if (runHP == true) hpStop_Time = current_Time;
  
  blocking_Time = (current_Time + Thirty_Min); //prevent cycle restart for 30m
  runHP = false;
  }
    
  
  digitalWrite(led, ledState);
  digitalWrite(comp, runCompressor);
  digitalWrite(inPump, runInPump);
  digitalWrite(outPump, runOutPump);


}


Last edited by buffalobillpatrick; 08-15-14 at 01:21 PM..
buffalobillpatrick is offline   Reply With Quote
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -5. The time now is 09:04 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Ad Management by RedTyger
Inactive Reminders By Icora Web Design