Redundant ATOs

Do you have a question on how to do something.
Ask in here.

Posts: 11
Joined: Thu Sep 06, 2012 10:11 pm
PostPosted: Mon Nov 16, 2020 10:23 pm
I want to have both of my ATOs hanging down and be redundant. So essentially, if low ATO and high ATO are BOTH "active" or in the bottom gravity position. I want to add the ATO Timeout so when I run out of water, it won't keep running the ATO aqualifter pump forever and I'll get an alert.

Box1_Port6 is the ATO pump.

I thought this would work, but nope, it doesn't:
Code: Select all
    if(ReefAngel.HighATO.IsActive())
    {
        ReefAngel.SingleATOLow( Box1_Port6 );
    }


This works properly for both ATO, but it does not take in ATO Timeout, which I'd like to add:
Code: Select all
    unsigned long TempTimeout = 60;
    TempTimeout *= 1000;
    unsigned long ATOTime;
   
    if ( ReefAngel.LowATO.IsActive() && ReefAngel.HighATO.IsActive() && ( !ReefAngel.LowATO.IsTopping()) )
   {
      ATOTime = millis();
      ReefAngel.LowATO.StartTopping();
      ReefAngel.Relay.On(Box1_Port6);
   }

   // If the high switch is activated, this is a safeguard to prevent over running of the top off pump
   if ( !ReefAngel.HighATO.IsActive() || !ReefAngel.LowATO.IsActive() )
   {
      ReefAngel.LowATO.StopTopping();  // stop the low ato timer
      ReefAngel.Relay.Off(Box1_Port6);
   }

Posts: 12713
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Tue Nov 17, 2020 8:18 am
Try this:
Code: Select all
ReefAngel.SingleATOLow( Box1_Port6 );
if(!ReefAngel.HighATO.IsActive()) ReefAngel.Relay.Off( Box1_Port6 )
Roberto.

Posts: 11
Joined: Thu Sep 06, 2012 10:11 pm
PostPosted: Wed Nov 18, 2020 11:29 am
Thanks Roberto.

That works, however, problem:
Whenever the HighATO is trips (IsActive), it'll shut off the Relay and the Relay won't turn on again until !ReefAngel.LowATO.IsActive() and then ReefAngel.LowATO.IsActive(). Functionally speaking: In my configuration, when water is lower than both HighATO and LowATO, but HighATO is inadvertently triggered (thinking water level is high and LowATO didn't catch it), it will shut off the relay (GOOD!) however it will not reset until LowATO is floating and then not floating. This works fine unless I accidently trigger the HighATO, then I have no way of resetting it remotely. I'd have to manually trigger LowATO switch.

Does that make sense? Any suggestions for fixing? Thanks in advance!

Also, the code you provided works exactly the same as the one I posted originally that was missing the above mentioned functionality:
Code: Select all
if(ReefAngel.HighATO.IsActive())
    {
        ReefAngel.SingleATOLow( Box1_Port6 );
    }

Posts: 12713
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Fri Nov 20, 2020 8:22 am
Try this:
Code: Select all
ReefAngel.SingleATOLow( Box1_Port6 );
if(!ReefAngel.HighATO.IsActive()) ReefAngel.Relay.Override(Box1_Port6 ,0);

This will override the relay to off, but you can put to auto remotely.
Roberto.

Return to How do I code ...

Who is online

Users browsing this forum: No registered users and 7 guests