Auto Calibrate Salinity Probe?
Posted: Mon Apr 12, 2021 7:33 am
Kind of a weird request but any way we can have the controller automatically calibrate the salinity probe at a given time?
Thanks.
Thanks.
Community discussion about Reef Angel Controllers and reefing related subjects
https://forum.reefangel.com/
well, you could easily trigger the calibration screen but it would still require your interaction.howaboutme wrote:Kind of a weird request but any way we can have the controller automatically calibrate the salinity probe at a given time?
Thanks.
All good questions. I thought I should have included my rationale initially. Here goes.binder wrote:well, you could easily trigger the calibration screen but it would still require your interaction.howaboutme wrote:Kind of a weird request but any way we can have the controller automatically calibrate the salinity probe at a given time?
Thanks.
I think it would require some thought to do an auto calibration without user interaction....probably custom code.
how would you get the probe in the reference solution? in essence you would be continuously calibrating it against the solution you are wanting to monitor unless you are always keeping it in a reference solution. I'm sure you probably have a reason but I'm just a little confused.
Sent from my Pixel 2 using Tapatalk
My apologies, I'm still thinking this through.binder wrote:so to make sure I follow, you want the calibration to start and let that calibrate for 30 minutes?
Sent from my Pixel 2 using Tapatalk
Thanks Curt! I have a plus. Appreciate the help.binder wrote:I follow with what you are wanting to do. I will have to take a look at the libraries more closely and see what all can be done.
do you have a Star or Plus controller?
Sent from my Pixel 2 using Tapatalk
No worries at all! I'm not in a hurry and know that this request is unique and probably a bit wack. Appreciate your help.binder wrote:just fyi, I haven't forgotten about this topic. I've been thinking about it and looking into the libraries at how it can work. I think I know how to do it but need to get some test code written.
Sent from my Pixel 2 using Tapatalk
Code: Select all
// THIS CODE GOES ABOVE THE setup() OR loop() functions....somewhere outside the functions
// Set to start at 1:45pm and run for 30 minutes
#define AUTO_SAL_START_HOUR 13
#define AUTO_SAL_START_MINUTE 45
#define AUTO_SAL_RUN_TIME 30
// THIS CODE GOES INSIDE THE loop() FUNCTION //
// Compute the current time
int CurrentTime = NumMins(hour(), minute());
// Compute the starting time for the auto salinity calibration
int AutoSalStartTime = NumMins(AUTO_SAL_START_HOUR, AUTO_SAL_START_MINUTE);
// Compute the ending time for the auto salinity calibration by adding in the run time
int AutoSalEndTime = AutoSalStartTime + AUTO_SAL_RUN_TIME;
// Check if it's time to start the auto salinity calibration
if ( AutoSalStartTime == CurrentTime ) {
// Switch to Salinity Calibration ONLY if we are on the main / default menu
// Don't switch to the calibration menu if we are doing something else (water change, feeding, etc)
if ( (ReefAngel.DisplayedMenu == DEFAULT_MENU) || (ReefAngel.DisplayedMenu == MAIN_MENU) ) {
ReefAngel.ChangeMode = SAL_CALIBRATE_MENU;
}
}
// Check if we are at the end of the Run Time for the auto salinity calibration
if ( AutoSalEndTime == CurrentTime ) {
// Simulate a button press ONLY if we are still on the Salinity Calibration menu screen
if (ReefAngel.DisplayedMenu == SAL_CALIBRATE_MENU) {
ButtonPress++;
}
}
Code: Select all
#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 <Salinity.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <Humidity.h>
#include <DCPump.h>
#include <PAR.h>
#include <ReefAngel.h>
////// Place global variable code below here
// Set to start at 9:45am and run for 10 minutes
#define AUTO_SAL_START_HOUR 9
#define AUTO_SAL_START_MINUTE 45
#define AUTO_SAL_RUN_TIME 10
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.Use2014Screen(); // Let's use 2014 Screen
ReefAngel.AddSalinityExpansion(); // Salinity Expansion Module
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port5Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port5Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port2Bit | Port3Bit | Port8Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Salinity Temp Compensation
ReefAngel.Salinity.SetCompensation(0);
// Ports that are always on
ReefAngel.Relay.On( Port3 );
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port5 );
////// Place additional initialization code below here
ReefAngel.CustomLabels[0]="ATO Pump";
ReefAngel.CustomLabels[1]="Skimmer";
ReefAngel.CustomLabels[2]="Light";
ReefAngel.CustomLabels[3]="Nero3";
ReefAngel.CustomLabels[4]="Return Pump";
ReefAngel.CustomLabels[5]="Unused";
ReefAngel.CustomLabels[6]="Unused";
ReefAngel.CustomLabels[7]="Heater";
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.SingleATOLow( Port1 );
ReefAngel.StandardLights( Port2 ); // putting skimmer on timer
ReefAngel.StandardHeater( Port8 );
////// Place your custom code below here
// First 10 minutes after WC disable ATO for port 1
static time_t wcTimer;
if (ReefAngel.DisplayedMenu == WATERCHANGE_MODE) wcTimer=now();
if (now()-wcTimer > 0 && now()-wcTimer < 600) {
ReefAngel.Relay.Off(Port1);
}
else {ReefAngel.SingleATOLow (Port1 );
}
// Compute the current time
int CurrentTime = NumMins(hour(), minute());
// Compute the starting time for the auto salinity calibration
int AutoSalStartTime = NumMins(AUTO_SAL_START_HOUR, AUTO_SAL_START_MINUTE);
// Compute the ending time for the auto salinity calibration by adding in the run time
int AutoSalEndTime = AutoSalStartTime + AUTO_SAL_RUN_TIME;
// Check if it's time to start the auto salinity calibration
if ( AutoSalStartTime == CurrentTime ) {
// Switch to Salinity Calibration ONLY if we are on the main / default menu
// Don't switch to the calibration menu if we are doing something else (water change, feeding, etc)
if ( (ReefAngel.DisplayedMenu == DEFAULT_MENU) || (ReefAngel.DisplayedMenu == MAIN_MENU) ) {
ReefAngel.ChangeMode = SAL_CALIBRATE_MENU;
}
}
// Check if we are at the end of the Run Time for the auto salinity calibration
if ( AutoSalEndTime == CurrentTime ) {
// Simulate a button press ONLY if we are still on the Salinity Calibration menu screen
if (ReefAngel.DisplayedMenu == SAL_CALIBRATE_MENU) {
ButtonPress++;
}
}
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "howaboutme" );
ReefAngel.ShowInterface();
}
awesome!howaboutme wrote:this morning was the first scheduled auto calibration. looks like everything went smoothly. thank you!