Skip to content

Commit

Permalink
hefty rework, half way, not working
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomas Emmert committed Feb 8, 2015
1 parent 9f8ca77 commit 8f6f0d1
Show file tree
Hide file tree
Showing 24 changed files with 822 additions and 553 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Expand Up @@ -36,4 +36,8 @@ Visual Micro/
*.orig
.directory

*.o
*.d

/.project
/Logs
105 changes: 85 additions & 20 deletions Arduheat.ino
@@ -1,12 +1,46 @@
#include <Arduino.h>
#include <avr/pgmspace.h>
// #include <avr/pgmspace.h>
#include "cWarmWater.h"// important for global TimeNow variable
#include "cHeating.h"
#include <cPID.h>

/*
#include "config.h"
#include <SdFat.h>
#include <SdFatUtil.h>
*/
#include <ArduinoJson.h>
#include <avr/pgmspace.h>

/*
#include <SPI.h>
#include <Ethernet.h>
#include <WebServer.h>
#include "fileServer.h"
*/
// Speicherbedarf:
// 2168 ohne logging und webserver
// 4352 mit logging und webserver

/* CHANGE THIS TO YOUR OWN UNIQUE VALUE. The MAC number should be
* different from any other devices on your network or you'll have
* problems receiving packets. */
//static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


/* CHANGE THIS TO MATCH YOUR HOST NETWORK. Most home networks are in
* the 192.168.0.XXX or 192.168.1.XXX subrange. Pick an address
* that's not in use and isn't going to be automatically allocated by
* DHCP from your router. */
//static uint8_t ip[] = { 192, 168, 123, 250 };


/* This creates an instance of the webserver. By specifying a prefix
* of "", all pages will be at the root of the server. */
//#define PREFIX ""
//WebServer webserver(PREFIX, 80);



#include "cTrigger.h"
Expand All @@ -22,24 +56,24 @@ RTC_DS1307 rtc;
DateTime TimeNow;
////////////////////////

cTrigger triggerLog(10000);
cTrigger trigger(10000);
cHeating Heating;


/**
* @fn void setup(void)
* @brief Initializes the serial connection and defines the in- and outputs.
*/
void setup()
{
pinMode(10, OUTPUT); // set the SS pin as an output (necessary!)
digitalWrite(10, HIGH); // but turn off the W5100 chip!
pinMode(53, OUTPUT);
pinMode(53, OUTPUT); // set the SS pin as an output (necessary!)
digitalWrite(53, HIGH); // but turn off the W5100 chip!

//// RTC test //////////
Serial.begin(115200);

PgmPrint("Free RAM: "); // part of sdFatUtil
Serial.println(FreeRam());
//PgmPrint("Free RAM: "); // part of sdFatUtil
//Serial.println(FreeRam());

// RTC
Wire.begin();
Expand All @@ -52,16 +86,34 @@ void setup()
analogReference(DEFAULT);
//analogReference(EXTERNAL);

/*
initSD();
writeConf( &Heating ); // write defaults
if (!readConfig(&Heating)) {
writeConf(&Heating); // If reading config fails, write defaults
Serial.println(F("sd config file did not exist, writing defaults."));
}
ini.close();
writeConf( &Heating); // write defaults
writeConf(&Heating); // write defaults
readConf( &Heating);
writeConf(&Heating); // write defaults
startLogging(&Heating);
/* initialize the Ethernet adapter */
//Ethernet.begin(mac, ip);

//initFileServer();

/* setup our default command that will be run when the user accesses
* the root page on the server */
//webserver.setDefaultCommand(&helloCmd);

/* run the same command if you try to load /index.html, a common
* default page name */
//webserver.addCommand("index.html", &helloCmd);

//webserver.addCommand("rest.html", &restCmd);

// Fileserver
//webserver.setUrlPathCommand(&fsAccessCmd);

/* start the webserver */
//webserver.begin();
}

/**
Expand All @@ -70,19 +122,32 @@ void setup()
*/
void loop()
{
TimeNow = rtc.now();
Heating.Control();
Heating.WarmWater.Control();

if ((triggerLog.get())&&logging) {
/*
if (trigger.get()) {
// Generate new logfile every day at midnight
if (TimeNow.hour()-rtc.now().hour()==23){
stopLogging();
TimeNow = rtc.now();
startLogging(&Heating);
}
TimeNow = rtc.now();
// if(fileerror||sderror) {
// initSD();
// startLogging(&Heating);
// }
logWrite(false, &Heating);
//PgmPrint("Free RAM: "); Serial.println(FreeRam());// part of sdFatUtil
if(logging) logWrite(false, &Heating);
}
if (Serial.available()&&(logging)) {
stopLogging();
}
if (Serial.available()&&(logging)) stopLogging();
char buff[64];
int len = 64;
*/
/* process incoming connections one at a time forever */
//webserver.processConnection(buff, &len);
}
103 changes: 60 additions & 43 deletions PinDefinitions.h
Expand Up @@ -21,52 +21,69 @@
#define PinWarmWaterSwitch 19
#define PinHeatControl 3

// System Temperatures on Multiplexer 3
#define SystemMultiplexer 2
#define MultiplexTempHeatingReturn 0
#define MultiplexTempHeatingLead 1
#define MultiplexTempHeatSource1Lead 3 //2
#define MultiplexTempHeatSource1Return 2 //3
#define MultiplexTempHeatSource1Operation 4
#define MultiplexTempSolarReturn 5
#define MultiplexTempSolarLead 6
#define MultiplexTempBoilerCharge 7
#define MultiplexTempBoilerReserve2 8
#define MultiplexTempBoilerReserve1 9
#define MultiplexTempBoilerHead 10
#define MultiplexTempBoilerTop 11
#define MultiplexTempWarmWater 12
#define MultiplexTempCirculationReturn 13
#define MultiplexSolarIntensity 14
#define MultiplexTempOutside 15
// System Temperatures
#define OffsetTempHeatingLead 0 //6
#define OffsetTempHeatingReturn 0 //-1
#define OffsetTempHeatSource1Lead 0
#define OffsetTempHeatSource1Return 0
#define OffsetTempHeatSource1Operation 0
#define OffsetTempSolarReturn 0
#define OffsetTempSolarLead 0
#define OffsetSolarIntensity 0
#define OffsetTempBoilerCharge 0 //7
#define OffsetTempBoilerReserve1 0
#define OffsetTempBoilerReserve2 0
#define OffsetTempBoilerHead 0
#define OffsetTempBoilerTop 0 //1
#define OffsetTempWarmWater 0 //2.35
#define OffsetTempCirculationReturn 0
#define OffsetTempOutside 0
#define OffsetTempHeatControl 0
// System Temperatures
#define idxTempHeatingReturn 0
#define idxTempHeatingLead 1
#define idxTempSolarFromCollector 3 //2
#define idxTempSolarFromSystem 2 //3
#define idxTempHeatSource1Operation 4
#define idxTempSolarToCollector 5
#define idxTempSolarToSystem 6
#define idxTempBoilerCharge 7
#define idxTempBoilerReserve2 8
#define idxTempBoilerReserve1 9
#define idxTempBoilerHead 10
#define idxTempBoilerTop 11
#define idxTempWarmWater 12
#define idxTempWarmWaterToBoiler 13 // Not Used
#define idxSolarIntensity 14
#define idxTempOutside 15

// Multiplexer Control Pins
const int MultiplexControl[] = {48, 47, 46, 49};

// Multiplexer Temperature Input Pins A12 = 66; A13 = 67; A14 = 68
const int MultiplexInput[] = {66, 67, 68};
#define P(str) (strcpy_P(p_buffer, PSTR(str)), p_buffer)


const int MultiplexChannelRoomsIs[] = {14,12,10,8,6,4,2,0,14,12,10,8,6,4,2,0};
const int MultiplexChannelRoomsSp[] = {15,13,11,9,7,5,3,1,15,13,11,9,7,5,3,1};
const int MultiplexNumberRooms[] = { 0, 0, 0,0,0,0,0,0, 1, 1, 1,1,1,1,1,1};
const PROGMEM int MPChanSys[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
const PROGMEM float SysTempOffset[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.08};

// On system Multiplexer 2
const PROGMEM int MPNumSys[] = {2};
// Multiplexer Control Pins
const PROGMEM int MPControl[] = {48, 47, 46, 49};
// Multiplexer Temperature Input Pins A12 = 66; A13 = 67; A14 = 68
const PROGMEM int MPInput[] = {66, 67, 68};

#endif
/*
Encoding scheme for variable names
Objects
Boiler B
WarmWater W
Burner Bu
Solar S
Source SO
Sink SI
Rooms R
Heating H
Mixer M
Pump P
Valve V
Tempsensor/Temperature T
time t
Postfix
is i
setpoint s
margin m
need n
charge c
sufficientHeat suht
to to
from from
*/
61 changes: 41 additions & 20 deletions cBoiler.cpp
@@ -1,46 +1,67 @@
#include "cBoiler.h"

cBoiler::cBoiler(cRooms* Rooms_,cWarmWater* WarmWater_)
:Valve(PinValveBoilerOpen,PinValveBoilerClose),
pid( 1.05, 0.0, 10.5, REVERSE), //I= 0.063
TempCharge((&MPNumSys[0]),(&MPChanSys[idxTempBoilerCharge]),(&SysTempOffset[idxTempBoilerCharge])),
TempReserve1((&MPNumSys[0]),(&MPChanSys[idxTempBoilerReserve1]),(&SysTempOffset[idxTempBoilerReserve1])),
TempReserve2((&MPNumSys[0]),(&MPChanSys[idxTempBoilerReserve2]),(&SysTempOffset[idxTempBoilerReserve2])),
TempHead((&MPNumSys[0]),&MPChanSys[idxTempBoilerHead],(&SysTempOffset[idxTempBoilerHead])),
TempTop((&MPNumSys[0]),&MPChanSys[idxTempBoilerTop],(&SysTempOffset[idxTempBoilerTop])),
Pump(PinPumpBoiler)
{
Rooms = Rooms_;
WarmWater = WarmWater_;
ChargeMargin = DefaultChargeMargin;
// Set minimal Pump Power to 10%
pid.SetOutputLimits(0.1, 1);
}

void cBoiler::getSP( JsonObject& root )
{
root["BoilerChargeMargin"] = ChargeMargin;
//char p_buffer[80];
//root[P("Bcm")] = ChargeMargin;
root["Bcm"] = ChargeMargin;
}

int cBoiler::setSP( JsonObject& root )
{
int fail = 0;
int posReturn =0;

if(root.containsKey("BoilerChargeMargin")) {
if(root["BoilerChargeMargin"].is<double>()) {
ChargeMargin = root["BoilerChargeMargin"].as<double>();
if(root.containsKey("Bcm")) {
if(root["Bcm"].is<double>()) {
ChargeMargin = root["Bcm"].as<double>();
posReturn++;
}
else fail=1;
}
else fail=1;

if (fail == 0) // If all three parameter objects were successfully filled
return posReturn;
return posReturn;
else
return 0;
return 0;
}

void cBoiler::getData( JsonObject& root )
{
root["BoilerValve"] = static_cast<int>( Valve.get());
//char buffer[30];
//PROGMEM prog_char BoilerValve[] = "BoilerValve";
//strcpy_P(buffer, (char*)pgm_read_word(&(sBoilerValve)));
root["BV"] = static_cast<int>( Valve.get());

root["BoilerTempCharge"] = TempCharge.get();
root["BoilerTempTop"] = TempTop.get();
root["BoilerTempHead"] = TempHead.get();
root["BoilerTempReserve1"] = TempReserve1.get();
root["BoilerTempReserve2"] = TempReserve2.get();
root["BT0"] = TempCharge.get();
root["BT1"] = TempTop.get();
root["BT2"] = TempHead.get();
root["BT3"] = TempReserve1.get();
root["BT4"] = TempReserve2.get();

root["BoilerPumpBoilerCharge"] = PumpBoilerCharge.getPower();
root["BoilerneedChargeWarmWater"] = static_cast<int>( bneedChargeWarmWater);
root["BoilerneedChargeHeating"] = static_cast<int>( bneedChargeHeating);
root["BoilerbDischarging"] = static_cast<int>( bDischarging);
root["BoilerbCharging"] = static_cast<int>( bCharging);
root["BoilerSpTempWarmWater"] = WarmWater->SpTemp();
root["BoilerSpTempCharge"] = getSpTempCharge();
}
root["BP"] = pid.get();
root["BncW"] = static_cast<int>( bneedChargeWarmWater);
root["BncH"] = static_cast<int>( bneedChargeHeating);
root["Bdisc"] = static_cast<int>( bDischarging);
root["Bc"] = static_cast<int>( bCharging);
root["BTsW"] = WarmWater->SpTemp();
root["BTsc"] = getSpTempCharge();
}

0 comments on commit 8f6f0d1

Please sign in to comment.