pH controlled kalkwasser dosing

Do you have a question on how to do something.
Ask in here.
Post Reply
gaberosenfield
Posts: 89
Joined: Thu Mar 08, 2012 5:11 pm
Location: Redwood City, California

pH controlled kalkwasser dosing

Post by gaberosenfield »

I am trying to get a single dosing pump to pump in saturated kalkwasser.
What I want: when the pH drops below xyz, dosing pump on for 10 seconds, then off for 5 minutes. Then if pH still below xyz, repeat. If pH above abc, dosing pump stays off until it drops below xyz again.
I tried to write my own code for this using 2 If loops and 2 timers (one for the 10 seconds on, one for the 300 seconds off), but once the dosing pump turns on, it doesn't turn off after 10 seconds :(
Help please!
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: pH controlled kalkwasser dosing

Post by rimai »

Assuming you are not using any Dosing Pump functions.
Try this:

Code: Select all

#include <Salinity.h>
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <ReefAngel.h>

boolean dosing=false;

void setup()
{
  ReefAngel.Init();  
  ReefAngel.Timer[1].SetInterval(10);
  ReefAngel.Timer[2].SetInterval(310);
}

void loop()
{
  if (ReefAngel.Params.PH<800 && !dosing)
  {
    ReefAngel.Timer[1].Start();
    ReefAngel.Timer[2].Start();
    ReefAngel.Relay.On(Port1);
    dosing=true;
  }
  
  if (ReefAngel.Timer[1].IsTriggered())
  {
    ReefAngel.Relay.Off(Port1);
  }
  
  if (ReefAngel.Timer[2].IsTriggered())
  {
    dosing=false;
  }
  
  
  ReefAngel.ShowInterface();
}
Just change the Port you are using.
Roberto.
gaberosenfield
Posts: 89
Joined: Thu Mar 08, 2012 5:11 pm
Location: Redwood City, California

Re: pH controlled kalkwasser dosing

Post by gaberosenfield »

This code has exactly the same problem as the code I wrote. The dosing pump doesn't turn off when the appropriate timer should be triggered. I am using timers 3 and 5, with timer 5 set to 1 second and timer 3 set to 600 seconds. It should turn on port8 for one second when the pH drops below 8.00, and then wait 10 minutes, and then reassess the pH and repeat as necessary. But instead, if the pH drops below 8.00, port8 comes on and stays on for a really long time (I'm not sure how long exactly it would stay on, but it stays on for at least 5 or 6 minutes as I have observed it staying on for that long). Here is my code:

Code: Select all

#include <Salinity.h>
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <ReefAngel.h>

boolean dosing=false;

void setup()
{
    ReefAngel.Init();  //Initialize controller
   
    ReefAngel.FeedingModePorts = Port3Bit | Port4Bit | Port5Bit | Port6Bit | Port8Bit;
    ReefAngel.WaterChangePorts = Port3Bit | Port4Bit | Port5Bit | Port6Bit | Port8Bit;
    ReefAngel.OverheatShutoffPorts = 0;
    ReefAngel.LightsOnPorts = Port1Bit | Port2Bit;
    ReefAngel.Timer[1].SetInterval(8);//Wavemaker Timer
    ReefAngel.Timer[1].Start();
    ReefAngel.Timer[2].SetInterval(8);
    ReefAngel.Timer[5].SetInterval(1);//Kalk dosing timer
    ReefAngel.Timer[3].SetInterval(600);//Kalk dosing delay timer
    // Ports that are always on
    ReefAngel.Relay.On(Port4); // Return, Circulation Pump, and Aqualifter
    ReefAngel.Relay.On(Port5); // Skimmer
  // Initialize and start the RA Client logging timer
    ReefAngel.Timer[4].SetInterval(15);  // set interval to 15 seconds
    ReefAngel.Timer[4].Start();
}

void loop()
{
    // Specific functions
    ReefAngel.StandardLights(Port1,10,00,20,00); // White Lights
    ReefAngel.StandardLights(Port2,9,00,21,00); // Blue Lights
    ReefAngel.StandardHeater(Port3,788,792); //Heater
    
    
    ReefAngel.ShowInterface();
    
  if (ReefAngel.Timer[1].IsTriggered())//Wavemakers' Control
  {
    ReefAngel.Timer[2].Start();
    ReefAngel.Relay.On(Port6);//Wavemaker 2
  }
  
  if (ReefAngel.Timer[2].IsTriggered())//Wavemakers' Control
  {
    ReefAngel.Relay.Off(Port6);
    ReefAngel.Timer[1].Start();
  }
  
  if (ReefAngel.Params.PH<800 && !dosing)
  {
    ReefAngel.Timer[5].Start();
    ReefAngel.Timer[3].Start();
    ReefAngel.Relay.On(Port8);
    dosing=true;
  }
  
  if (ReefAngel.Timer[5].IsTriggered())
  {
    ReefAngel.Relay.Off(Port8);
  }
  if (ReefAngel.Timer[3].IsTriggered())
  {
    dosing=false;
  }
  // Dump Params
	if(ReefAngel.Timer[4].IsTriggered())
	{
			Serial.flush();
			Serial.print("<RA><T1>");
			Serial.print(ReefAngel.TempSensor.ReadTemperature(ReefAngel.TempSensor.addrT1));
			Serial.print("</T1><T2>");
			Serial.print(ReefAngel.TempSensor.ReadTemperature(ReefAngel.TempSensor.addrT2));
			Serial.print("</T2><T3>");
			Serial.print(ReefAngel.TempSensor.ReadTemperature(ReefAngel.TempSensor.addrT3));
			Serial.print("</T3><PH>");
			Serial.print(ReefAngel.Params.PH);
			Serial.print("</PH><R>");
			Serial.print(ReefAngel.Relay.RelayData,DEC);
			Serial.print("</R><RON>");
			Serial.print(ReefAngel.Relay.RelayMaskOn,DEC);
			Serial.print("</RON><ROFF>");
			Serial.print(ReefAngel.Relay.RelayMaskOff,DEC);
			Serial.print("</ROFF></RA>");
			ReefAngel.Timer[4].Start();
	}

}
Any idea why it won't work?
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: pH controlled kalkwasser dosing

Post by rimai »

Timer 3 and 5 are reserved.
They are used by the controller. In fact only timer 1 and 2 should be used.
I was assuming you were not using timer 1 and 2.
In this case, just declare new timers for you to use above setup():

Code: Select all

Timer DosingTimer;
Timer DelayTimer;
Roberto.
gaberosenfield
Posts: 89
Joined: Thu Mar 08, 2012 5:11 pm
Location: Redwood City, California

Re: pH controlled kalkwasser dosing

Post by gaberosenfield »

I get the error message: "Timer" does not name a type.
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: pH controlled kalkwasser dosing

Post by rimai »

Hurr... Sorry :(

Code: Select all

TimerClass DosingTimer;
TimerClass DelayTimer;
Roberto.
gaberosenfield
Posts: 89
Joined: Thu Mar 08, 2012 5:11 pm
Location: Redwood City, California

Re: pH controlled kalkwasser dosing

Post by gaberosenfield »

rimai wrote:Hurr... Sorry :(
No worries! It works now! Hurrah! I'll post again if it goes awry as time moves on. Thanks!
Post Reply