My Neptune Apex web interface compatible DIY reef controller

Fyi. Ebay has the serial orp stamp for 9.00. Looks like the last of the older stamps.

I am pretty sure ORP and pH are exactly the same circuit (and perhaps probe), but just a difference in reading range.

If you look at neptune apex, ph and ORP use the same BNC connector and you can switch mode in configuration settings.

Anyone tried to use a ph probe on atlas ORP stamp? if it works, then it might be worthwhile to get the orp stamp.
 
I am pretty sure ORP and pH are exactly the same circuit (and perhaps probe), but just a difference in reading range.

If you look at neptune apex, ph and ORP use the same BNC connector and you can switch mode in configuration settings.

Anyone tried to use a ph probe on atlas ORP stamp? if it works, then it might be worthwhile to get the orp stamp.

I will try it today to see if it works
 
I tested the I2C and serial together and it seems to work. I think my Pinpoint ph probe is bad, as I am not able to calibrate it. I double checked my connections and they are all fine. I am using the chinese ph probe on my tank and did not want to remove it to test on my test circuit. I will just clean up the code and upload to github tonight. I wrote a Sensor C++ class with subclass for I2C and Serial. Anyone with their own sensor circuit can simply extend this C++ class and implement the init, update, send and getresponse functions. The abstract class makes the code protocol agnostic. Your ph circuit can be direct analog read and you can just create a subclass to implement the functions specific to your circuit.

I ordered another ph probe and bnc extension cable. These are now getting really cheap. $6.12 for the ph probe shipped. I found the extension cable two for $7.25. these probe's cable is only 2ft long, you will need the 3 feet (1m) extension cable unless you position your controller right next to your sump.

I built my own atlas stamp carrier. I tested it using serial and i2c on the conductivity stamp and it works fine. I think I will double the pin header when I make another one so I can daisy chain the I2C connection (for lcd and led). I like the stamp carrier idea, as it can be panel mounted, and just run jumper wires to the board. Same for the rest of the connections, run jumper wires from board to the panel mount TRRS jacks someone gave a link on a few posts back. Using jumpers make the circuit flexible. You can change the pin assignments in software, and simply move the jumper connection around.

f3kEiBV.jpg
 
Last edited:
Having a little trouble wondering if I could get an assist. I'm getting a compilation error.

Utils.ino: In function 'void initializeConf () ':
Utils.ino:65: error: expected ' } " before ';' token
Utits.ino: 68 : error : too many initializers for ' ORec_t'
 
Having a little trouble wondering if I could get an assist. I'm getting a compilation error.

Utils.ino: In function 'void initializeConf () ':
Utils.ino:65: error: expected ' } " before ';' token
Utits.ino: 68 : error : too many initializers for ' ORec_t'

that error means you have a missing closing bracket in your OUTLETSDEFAULT define in config.h
 
ok, doing a little google search, it looks like ph probe measures -414.12mv to 414.12mv where 0mv is a reading of 7.00. while orp probe range is 0-1999mv.

orp calibration is at 225mv and orp in reef can go up to 450mv, so it is past the ph probe range. (unless ph probes can actually measure way past 414mv, then perhaps it can be used as orp probe) It looks like orp probe is built differently than ph, so I think it is only the sensor circuit that is common, as the sensor circuit simply reads the mv voltage coming in to the bnc connector. The atlas orp stamp looks like the ph stamp, so it probably only running a different firmware. So it makes sense that the price of the two stamps are the same.
 
Last edited:
I just tried it on my main controller and test controller and both work fine. What is the error message?

The page at ip:port say

error

I did add CalRX and LEDs Fan control to it awhile back in your early code with no problem, I should take it out and see if that is the problem.
 
D0ughb0y,

I am often getting an apex error when i look at the outlet logs. This error continues until I reset the controller.

M

I'd say your outlet log file is corrupted, but if you don't see the error after you reset, then it can't be the log file. is it a timeout error? go to file manager, and see if perhaps your outlet log file for the day has grown too big. Do you have any outlets that is constantly switching? each time it switch a log entry is added. if the log file is too big, it will take more time than the timeout value to download the entire file.
 
just updated github with latest code that support i2c for atlas stamps.

The atlas stamp initialization now leaves the LED light on. This way, you can see how often the controller takes a sensor reading by looking at the atlas stamps led blinks.

I added a config setting to turn off LCD backlight after 10 minutes.
To turn it back on, simply go to the controller webpage.
If you want backlight to be always on, just comment out the config define for this.

the config.h setup for atlas stamp should be fairly straightforward.

MAKE SURE TO UPLPOAD THE NEW INDEX.GZ TO THE SD CARD
as I made a few bugfixes and changes there.

I will start working on the LED code this weekend.
Let me know of any feature/function suggestions.

For starters, this is for 16 channels. I will include a sunrise/sunset/moonphase feature. This will simply estimate/calculate the sunrise/sunset time and % full moon given a latitude/longitude. I am going to greatly simplify this as I don't see any need to be splitting hairs to make the sunrise calculation accurate down to the second.
 
Last edited:
d0oub0y in the previous code I use this
Code:
void checkCalRX(){
if (getAtlasAvg(phdata[1])>= conf.carxhigh && conf.outletRec[CalXOut].mode==_auto) {
    _outletOn(CalXOut);
  }
if (getAtlasAvg(phdata[1])<= conf.carxlow && conf.outletRec[CalXOut].mode==_auto) {
    _outletOff(CalXOut);
  }
}
To control my calcuim reactor. Now I get phdata not declared and getAtlasAvg is not declared. Do I change phdata to ph and getAtlasAvg to getAvg
 
D0ughb0y I change to this code:

Code:
void checkCalRX(){
if (ph[1]->getAvg()>= conf.carxhigh && conf.outletRec[CalXOut].mode==_auto) {
    _outletOn(CalXOut);
  }
if (ph[1]->getAvg()<= conf.carxlow && conf.outletRec[CalXOut].mode==_auto) {
    _outletOff(CalXOut);
  }
}

Will this be okay
 
Back
Top