Introduction:


All of a sudden it feels like it has been a long time since I did anything with an Arduino. I almost feel guilty about that idea since Arduino is really what launched me into hobby electronics to start with, so to help me sleep better at night I have taken on a new project. As you can see from the title I plan on creating an automatic reef controller for an aquarium. A friend of mine at work is pretty big into aquariums and reefs, and he asked me if it was possible to put together a control system for a 16 gallon nano reef aquarium (a side project of his own). He mentioned that you can purchase one of these setups commercially “link“, but of course you will pay upwards to $400 bucks. After a little discussion and a cursory look at the cost of sensors we decided that it could be cost effective to build a custom controller to meet his requirements. Block Diagram
Those requirements are:
1. System shall be able to measure pH levels at regular intervals.
2. System shall be able to measure water levels at regular intervals.
3. System shall be able to measure water temperature at regular intervals.
4. System shall support up to 9 electrical outlets.
5. System shall provide the same protection found in modern protected plug outlets.
6. System shall be network enabled for access via the internet.
7. System shall be capable of controlling a water pump system for auto top off.
8. System shall be capable of controlling a fan when the temperature is to high.
9. System shall be capable of controlling a heater when the temperature is to low.
10. System shall be capable of controlling three independent lights.
11. System shall be capable of being configured by a web interface.
12. System shall be capable of providing a heads up display for sensor information.
13. System shall be enclosed in a mountable case.
14. System shall cost less than $200 to design and assemble.

This is without a doubt the most complex project I have taken on to date. I will have to learn as we go, but overall this seems like it will be a great project and I hope to learn a lot. In the coming months you can expect that I will be writing or creating videos on how I plan to tackle each portion of this project. If you have any suggestions or inputs regarding this project feel free to leave a comment below or send me an email. To give you an idea of what we are looking to put together, I have put together an initial system block diagram of each of the components that we will need in our system. Here are some links to components that we initially identified:

July 3, 2014 Update:

First and foremost we need to see what this analog pH sensor can do. We ended up getting this sensor for approximately $30.00 from robotmesh.com; however, we need to make sure that it is going to be accurate enough to use in our design. Our initial impressions right out of the box are very positive. I was able to get a test up and running in under a minute using the provided Arduino sketch and a few wires. The sense wire (blue) was connected to the Analog Pin 0 and the Ground (black) and Positive (red) wires were connected to there appropriate places on the Arduino. After uploading the sketch, I was taking measurements every 800 milliseconds and outputting the reading to a serial monitor window. As you can see in the pictures this sensor is almost spot on without any calibration. After letting it run for approximately 30 minutes, the outputted value was only out 0.09 pH from our sample. With a little tweak of the trim pot found on the control circuit, we should be able to get this thing calibrated. The next question is how well this unit will work over an extended period of time. That kind of testing will have to come later on. For now we have a higher level of confidence that this sensor will meet our needs.

Additionally, we started to put together the outlet box. Adam used a 7/8″ hole saw to cut out a primary position for each of the outlets and then used a knife to trim out the opening to make for a perfect fit. Something that I personally think makes this installation look great is that the finish on the outlets matches the finish on the case. The similarity of the finish was not initially planned, but looks great non the less.

Here is the Arduino sketch that was used in this test setup. The source code was downloaded from the robotmesh.com product page.


/*
# This sample codes is for testing the pH meter V1.0.
 # Editor : YouYou
 # Date   : 2013.10.12
 # Ver    : 0.1
 # Product: pH meter
 # SKU    : SEN0161
*/

#define SensorPin 0          //pH meter Analog output to Arduino Analog Input 0
unsigned long int avgValue;  //Store the average value of the sensor feedback
float b;
int buf[10],temp;

void setup()
{
  pinMode(13,OUTPUT);  
  Serial.begin(9600);  
  Serial.println("Ready");    //Test the serial monitor
}
void loop()
{
  for(int i=0;i<10;i++)       //Get 10 sample value from the sensor for smooth the value
  { 
    buf[i]=analogRead(SensorPin);
    delay(10);
  }
  for(int i=0;i<9;i++)        //sort the analog from small to large
  {
    for(int j=i+1;j<10;j++)     {       if(buf[i]>buf[j])
      {
        temp=buf[i];
        buf[i]=buf[j];
        buf[j]=temp;
      }
    }
  }
  avgValue=0;
  for(int i=2;i<8;i++)                      //take the average value of 6 center sample
    avgValue+=buf[i];
  float phValue=(float)avgValue*5.0/1024/6; //convert the analog into millivolt
  phValue=3.5*phValue;                      //convert the millivolt into pH value
  Serial.print("    pH:");  
  Serial.print(phValue,2);
  Serial.println(" ");
  digitalWrite(13, HIGH);       
  delay(800);
  digitalWrite(13, LOW); 

}

July 16, 2014 Update:

We decided to start the build process with the power control box. Each of the boards are mounted in place using 4-40 countersink screws with a small washer, nylon spacer, and nut (all of which were purchased at Lowes). Using a countersink drill bit allows for the face of the box to remain flat, and that will be essential when a graphic is applied to it later on. I didn’t use any fancy method for measuring the best position to place the boards. I simply put them where I thought it would be best and marked the hole positions prior to drilling. The relay board is slightly off center to allow for additional cables. I then removed all of the old cables from the surge protector circuit and soldered new ones to accommodate the required lengths. The on/off switch had to be taken off the board to be moved to another location in the box.

Finally, I have started on the wiring harness for each of the outlets. As of yet I have only completed the ground connection, but should have the other two done soon. I think it is best to use the connectors on the back of each outlet instead of soldering the wire directly to them. This will allow for disconnecting and easy maintenance later on. The connectors I’m using aren’t really made for two 14 gauge wires, so I had to open the back end up a little prior to crimping it down. Once a partial crimp was done I soldered the connection and cover it with heat shrink.

November 1, 2014 Update:

I just want to mention that this build is still active and very much a project I want to finish in the near future. I have been getting hammered the past semester in school and that hasn’t allowed for a lot of free time to work on the project. My current semester ends after the first week of December, so I anticipate having a bit more time to work on it then. Thanks for following.

December 18, 2014 Update:

July 27, 2015 Update:

Project is currently on hold.