My Neptune Apex web interface compatible DIY reef controller

Instead of doing this tables can you just gather info about temp and weather conditions from a weather website and adjust heaters and lights accordingly ? It shouldn't be that hard. Make a tab in the settings to point to the location which you want to monitor and get info about it water temp/sun state and moon states.
 
I got my lcd and rtc today and wired up my test circuit on a breadboard and setup the cond sensor.

to those with cond stamps, change the init string to this

data.saddr.print("\rresponse,0\rl,0\rc,0\ro,ec,0\ro,tds,0\ro,sg,0\ro,s,1\rk,1.0\rr\r");

The EZO needs the first \r in order to autodetect the baud rate. That is all that is missing. Everything works fine.

The calibration part for conductivity is not complete yet. I have to switch over to EC reading, then switch back to S reading after calibration. If you want the LED light on, change the l,0 in the string to l,1

I will also make the EZO stamps work on I2C.

I also setup 5 temp sensors using 4.7k pullup and it works fine. But these are just chips and don't have the long wires.
 
moomin, I think you reverse season for light to save energy, but not for temp.

so for summer, you want to run the tank at a higher temp, and in winter, lower temp. If you use reverse season, you will need to heat up your tank to a higher temp during your winter time since it is summer down under.

for light, you use reverse season. During summer, you run the light shorter, and winter, you run the lights longer.

The current chauvet code sort of will do the temp change for you, but only twice a year. For fan, you set the on/off temp, say around 78F, and for heater, you set the on/off temp, say around 74F. During summer, only the fan will activate and temp is higher, and during winter, only the heater will activate, and it keeps the tank temp lower. This keeps it simple. If the temp setting is variable everyday, then you can end up running the heater in summer and the fan during winter.

I don't know if I want to run my tank at 69F (21C).

Peak of Aussie summer is in Jan when their water temp is at 29C.

Great Barrier Reef Water Temperature peak summer 29C - mid winter (~July) 21C
{1Jan=29.00,1Feb=29.00,1Mar=28.75,1Apr=27.75,1May=26.00,1Jun=23.50,1Jul=21.50,1Aug=21.00,1Sept=22.75,1Oct=25.25,1Nov=27.75,1Dec=28.25}

adjusted Season for UK
{1Jan=21.50,1Feb=21.00,1Mar=22.75,1Apr=25.25,1May=27.75,1Jun=28.25,1Jul=29.00,1Aug=29.00,1Sept=28.75,1Oct=27.75,1Nov=26.00,1Dec=23.50}

Hours of daylight
{1Jan=13.50,1FEB=12.38,1MAR=12.15,1APR=11.90,1MAY=11.50,1JUN=11.20,1Jul=11.10,1AUG=11.40,1SEP=11.75,1OCT=12.25,1Nov=12.73,1DEC=13.10}

adjusted Daylight for UK
{1Jan=11.20,1FEB=11.10,1MAR=11.40,1APR=11.75,1MAY=12.25,1JUN=12.73,1Jul=13.10,1AUG=13.5,1SEP=12.38,1OCT=12.15,1Nov=11.90,1DEC=11.50}

Great Barrier Reef Water Chemistry
Mg/Ca =4.1 PPT
Sr/Ca =7.1 PPT
Ba/CA =4.4 PPT
DO =5.25%
Ph =7.99-8.13
SG =1.0212 @ 25C
 
Last edited:
Ok, I'm a bit confused what is the benefit/purpose of having both a touch and web interface.

Slow, which part is slow? it is after all an aquarium controller, we are not exactly plotting particle collisions, lol

Because we can!
No, actually because I'm using Ethernet for logging purposes (graphs of everything) and touchscreen because I want an independent system.
Also the webbrowser / touch interface is slow, even if I'm not using both at the same time. Although I'm moving all static files to a CDN. Last reason is that the Due controller isn't more expensive, so it's more the question, why not?
 
I unhook the 5v supply from my temp probes and atlas stamps, and start using the arduino 5v. And for a couple of day I wasn't having the problem of the temp going from 0 to the right temp. Its is only in the third probe. This has been running for a few days now. This is what I getting now. Also you can see the spikes in the orp and cond.
 

Attachments

  • Today.jpg
    Today.jpg
    46.8 KB · Views: 4
Peak of Aussie summer is in Jan when their water temp is at 29C.

That's exactly what I meant.
What is your house temp during Jan in London?
If it is closer to 20, then your heater will almost run constantly to keep the tank at 29C. 29C is 84.2F, 21C is 69.8F, I'm not sure anyone would really want to run their tank at that temperature.

rrbigdog, can you scan through the temp values on apex to see what the max and min values are?
 
I got my lcd and rtc today and wired up my test circuit on a breadboard and setup the cond sensor.

to those with cond stamps, change the init string to this

data.saddr.print("\rresponse,0\rl,0\rc,0\ro,ec,0\ro,tds,0\ro,sg,0\ro,s,1\rk,1.0\rr\r");

The EZO needs the first \r in order to autodetect the baud rate. That is all that is missing. Everything works fine.

The calibration part for conductivity is not complete yet. I have to switch over to EC reading, then switch back to S reading after calibration. If you want the LED light on, change the l,0 in the string to l,1

I will also make the EZO stamps work on I2C.

I also setup 5 temp sensors using 4.7k pullup and it works fine. But these are just chips and don't have the long wires.

Cool!

For the Void calibration low, cond section I got to this

else if (data.type==_cond)
{
data.saddr.print("T,"); //Temp compensation for calibrate
data.saddr.print(getTemp(1)); //Use Ambient Temp Probe dev (1)
data.saddr.print("\r"); //<CR>
data.saddr.print("o,s,0\ro,ec,1\r"); //change probe from S to EC
data.saddr.print("cal,dry\r"); //Dry Calibration
data.saddr.print("o,s,1\ro,ec,0\r"); //Change back from EC to S
}

for the void calibrationHigh cond section this

else if (data.type==_cond)
{
data.saddr.print("T,"); //Temp compensation for calibrate
data.saddr.print(getTemp(0)); //Use Water Temp Probe dev (0)
data.saddr.print("\r"); //<CR>
data.saddr.print("o,s,0\ro,ec,1\r"); //change probe from S to EC
data.saddr.print("cal,one,");
data.saddr.print(val);
data.saddr.print("\r");
data.saddr.print("o,s,1\ro,ec,0\r"); //Change back from EC to S
}
 
That's exactly what I meant.
What is your house temp during Jan in London?
If it is closer to 20, then your heater will almost run constantly to keep the tank at 29C. 29C is 84.2F, 21C is 69.8F, I'm not sure anyone would really want to run their tank at that temperature.

rrbigdog, can you scan through the temp values on apex to see what the max and min values are?

House temp in Jan, maintained between 15-21C, house Temp in July 20-32C.
I agree, I don't think I would want water T to swing 8C over the year, but so long as the inhabitents arent stressed, I see a $ value in seasonal change.

Sorry I was suggesting that in Jan my tank temp was around 21, and in july perhaps 27.5C

This approach would save around 20% of the tank heating costs.
 
I unhook the 5v supply from my temp probes and atlas stamps, and start using the arduino 5v. And for a couple of day I wasn't having the problem of the temp going from 0 to the right temp. Its is only in the third probe. This has been running for a few days now. This is what I getting now. Also you can see the spikes in the orp and cond.

I'll go over the Serial code for atlas stamps. I know currently, all three are run simultaneously instead of in sequence. I don't think that should be a problem, but I wanted to change the code to operate the sensors sequentially. Meaning, get reading for sensor1 first, then sensor2, then sensor3, then back to sensor1. Right now, it sends the "r\r" command to all 3 on the same loop. Then the results just come back whenever they are ready via SerialEvent.

There is a trick to clean up your data.

using curl command, download the sensor data file as follows
curl http://login@ip/sen/2014/09/30.txt>30.txt

If the bad data is on Oct 1, just change the path to the correct date.

Edit the 30.txt file, look for the outlier data, then fix it and save the file.

Then upload it back to the controller

curl -0 -T 30.txt http://login@ip/upload/sen/2014/09/30.txt

Then check you nice graph again (you need to reload the webpage) :)
 
Cool!

For the Void calibration low, cond section I got to this

else if (data.type==_cond)
{
data.saddr.print("T,"); //Temp compensation for calibrate
data.saddr.print(getTemp(1)); //Use Ambient Temp Probe dev (1)
data.saddr.print("\r"); //<cr>
data.saddr.print("o,s,0\ro,ec,1\r"); //change probe from S to EC
data.saddr.print("cal,dry\r"); //Dry Calibration
data.saddr.print("o,s,1\ro,ec,0\r"); //Change back from EC to S
}

for the void calibrationHigh cond section this

else if (data.type==_cond)
{
data.saddr.print("T,"); //Temp compensation for calibrate
data.saddr.print(getTemp(0)); //Use Water Temp Probe dev (0)
data.saddr.print("\r"); //<cr>
data.saddr.print("o,s,0\ro,ec,1\r"); //change probe from S to EC
data.saddr.print("cal,one,");
data.saddr.print(val);
data.saddr.print("\r");
data.saddr.print("o,s,1\ro,ec,0\r"); //Change back from EC to S
}


It needs a bit more code change than this. the EC value is continuously read and displayed on the calibration page.

I will change this to use two point calibration.

</cr></cr>
 
House temp in Jan, maintained between 15-21C, house Temp in July 20-32C.
I agree, I don't think I would want water T to swing 8C over the year, but so long as the inhabitents arent stressed, I see a $ value in seasonal change.

Sorry I was suggesting that in Jan my tank temp was around 21, and in july perhaps 27.5C

This approach would save around 20% of the tank heating costs.

I see, you want to reverse the season for temp.

You save heating/cooling cost by matching the tank temp to your house ambient temp. Which is what the current code can do. Set temp control for fan within your house ambient temp range during summer, and set the temp control for heater within your house ambient temp range during winter. This is the simplest temp control design I can think of.

If you look at the Apex link jross gave, the way I understand it works is as follows.

Say the temp for today is 75F. The apex is programmed to turn the heater on if tank temp gets to 75F-0.5 or 74.5, and turns the fan/chiller on if the temp gets to 75F+0.5 or 75.5. You need to do this in order to maintain the temp of 75F for the day to within 1degree. I can see how this method can keep the temp correct, but I cannot see how it can save on electricity cost. Is this what you were thinking on controlling temp with respect to a given seasonal temp?
 
I unhook the 5v supply from my temp probes and atlas stamps, and start using the arduino 5v. And for a couple of day I wasn't having the problem of the temp going from 0 to the right temp. Its is only in the third probe. This has been running for a few days now. This is what I getting now. Also you can see the spikes in the orp and cond.


wgraham,

Can you give me a valid range of values for ORP?
and also for PH when used in a calcium reactor.
I think a valid salinity range is 29 to 40?
I can add code to toss out outlier value readings.
 
I think one of my jebao wp-25 propeller needs replacement. It stops spinning a day after I clean it. I'll swap it with the other pump just to make sure it is a bad propeller before I order one ($7 on ebay). New wp-25 now sells for $52 (for those building this controller, you can get pump only for $45). I think I paid over $80 for this last December.
 
I see, you want to reverse the season for temp.

You save heating/cooling cost by matching the tank temp to your house ambient temp. Which is what the current code can do. Set temp control for fan within your house ambient temp range during summer, and set the temp control for heater within your house ambient temp range during winter. This is the simplest temp control design I can think of.

If you look at the Apex link jross gave, the way I understand it works is as follows.

Say the temp for today is 75F. The apex is programmed to turn the heater on if tank temp gets to 75F-0.5 or 74.5, and turns the fan/chiller on if the temp gets to 75F+0.5 or 75.5. You need to do this in order to maintain the temp of 75F for the day to within 1degree. I can see how this method can keep the temp correct, but I cannot see how it can save on electricity cost. Is this what you were thinking on controlling temp with respect to a given seasonal temp?

Where my head got to was this.

To raise water 1C carries a 4% energy penalty.

To Cool water 1C carries a upto a 30% energy penalty.

So for every 1C I dont have to shift the temp either way will save that energy value.

so if I have a constant tank T of 26C, and a 24hr avg temp of 19C I carry an energy penalty of 28%.

The energy penalty may widen in the summer where cooling may be required during summer days, and ?some? heating may be required over night.

The closer for any period of time the water temp approaches the ambient the lower any energy penalty.
 
Last edited:
I'm not sure I follow, particularly the need to use seasonal temp.

the current temp control setup will do exactly that, minimize fan and heater on time. And you can verify/validate that by going over your outlet logs over this past summer.
I check my outlet logs and the fan barely turned on this summer. And during winter, the heater only comes on when it is really cold and during the early morning hours. The objective is to have fan or heater turn on the absolute minimum time.

If you can show how using seasonal temp can improve on the simple design (with respect to energy efficiency), I'll implement it.

I think the apex design is more for maintaining a seasonal temp, and not about energy efficiency.

Ok, I just reviewed my logs.
This summer, the fan turned on for 1 hour on hot days only, maybe less than 10 days all summer.
The past winter, the heater turned on quite a bit, about 5 hours a day. I think I have to set the temp lower. It was set at 78 and my house thermostat is set lower than that. I might move it down to 72 this winter.
 
Last edited:
I'm not sure I follow, particularly the need to use seasonal temp.

the current temp control setup will do exactly that, minimize fan and heater on time. And you can verify/validate that by going over your outlet logs over this past summer.
I check my outlet logs and the fan barely turned on this summer. And during winter, the heater only comes on when it is really cold and during the early morning hours. The objective is to have fan or heater turn on the absolute minimum time.

If you can show how using seasonal temp can improve on the simple design (with respect to energy efficiency), I'll implement it.

I think the apex design is more for maintaining a seasonal temp, and not about energy efficiency.

Ok, I just reviewed my logs.
This summer, the fan turned on for 1 hour on hot days only, maybe less than 10 days all summer.
The past winter, the heater turned on quite a bit, about 5 hours a day. I think I have to set the temp lower. It was set at 78 and my house thermostat is set lower than that. I might move it down to 72 this winter.

Lol, I am considering moving to southern France, warmer, housing is cheaper, less traffic, and the roads are a better quality.

However at home the heater spends a lot of time on in the winter, and the cooler is on in the summer. Perhaps it is just a UK thing! damp air, large shift in ambients, we could see a 12C shift in temp in 24hrs.
 
That's exactly what I meant.
What is your house temp during Jan in London?
If it is closer to 20, then your heater will almost run constantly to keep the tank at 29C. 29C is 84.2F, 21C is 69.8F, I'm not sure anyone would really want to run their tank at that temperature.

rrbigdog, can you scan through the temp values on apex to see what the max and min values are?

Max 80.5
Min 75
 
wgraham,

Can you give me a valid range of values for ORP?
and also for PH when used in a calcium reactor.
I think a valid salinity range is 29 to 40?
I can add code to toss out outlier value readings.

I use the range for calcium reactor to turn on if it goes over 6.8 and off at 6.4
I using 31 to 36 on salinity and orp I'm using 300 to 450. I haven't seen my orp go under 300 and over 450mv
 
I use the range for calcium reactor to turn on if it goes over 6.8 and off at 6.4
I using 31 to 36 on salinity and orp I'm using 300 to 450. I haven't seen my orp go under 300 and over 450mv

I'll set a valid range as follows

ph 6-10
orp 300-500
cond 30-40

any reading outside of this will be tossed out.

I'll change this as needed.
 
Back
Top