The Planted Tank Forum banner
1 - 20 of 74 Posts

· Registered
Joined
·
151 Posts
Discussion Starter · #1 ·
So, I am throwing my hat into the arduino total tank build, and I will try and document as much of my journey as possible here. I have tinkered around with the Arduino in the past, but have never attempted anything of this complexity. I have zero real world programming experience, but enjoy reading sites like hackaday, lifehacker, and such. What I'm saying here is that my code will look pathetically amateurish and possibly unreadable if viewed by a professional...

So, the goals of my personal build will be:
  • Autodosing
  • Keeping track of the fert levels and alarming if they become low (I am rather forgetful and would like a warning)
  • Keeping my light schedule
  • Controlling CO2 solenoid
  • Scheduling an auxiliary RGB strip, as I will shamelessly steal from AnotherHobby Fallen Tree Branch 60cm
  • The aux RGB strip will have sunrise, sunset, and moonlight as AnotherHobby has, ideally
  • Writing all of the alarm times to the DS1307 RAM, in case of a power outage (Unnecessary, but what the heck, why not?)
  • Keeping track of tank temp and cutting power to the tank heater in case of an issue
  • Anything else that I don't need but would like to try and implement

Thus far, my current build consists of:
  • SainSmart Arduino Mega 2560 (Knockoff from Amazon for like $28)
  • Sparkfun DS1307 RTC
  • Adafruit 20x4 LCD display
  • Adafruit 10K Precision Epoxy Thermistor
  • Small piezo buzzer for alarms
  • Assorted buttons, resistors, transistors to make it all work

This is currently it:






So far, I have achieved:
  • RTC is running and keeping time
  • Thermistor is working and updating once a second on the main screen
  • As you can see in the pics, I have the fert bottle levels displaying. Each full block is obviously 20%, and there are half blocks so I can easily see roughly how much fertilizer is in each bottle.
  • I have functions written to store the fert levels in the RTC RAM, and I am able to get them back out again (This required a lot of staring at code I didn't understand until it all kinda clicked)
  • I can now set the on/off times for the main lights
  • I can set the backlight via PWM anywhere between 0-255

So, I haven't gotten too crazy far in yet, but progress has been made. I need to finish getting the on/off time screens programmed in, then I can start writing the code to actually do something with the times!

Here is a link to the code as it stands
Current sketch

And this is the tank, awaiting its master


Good times will be had here, feel free to follow along on the journey :icon_cool
 

· Registered
Joined
·
151 Posts
Discussion Starter · #4 ·
tenthe, I will be reading the water temperature. I have a cable gland on order from adafruit that I will be using to place the temp probe somewhere in the pump line. I'm hoping it may fit into a cerges reactor...
Benjaf, I would use the EEPROM, however I will be reading/writing to it a lot over time, and EEPROM has a limited lifespan. The RAM on the DS1307 however, is unlimited read/writes
 

· Registered
Joined
·
151 Posts
Discussion Starter · #8 · (Edited)
That looks nice hamato! Might I ask what temp probe you are using? I just received my cable gland from adafruit, however the probe wire is too small for it to make a tight fit. I'm thinking of maybe adding some shrink tubing to the probe wire to make it thicker, however I'm not too sure how that will work when it comes to being watertight...

PG-7 Gland nut from adafruit




Doesn't quite fit...


Also, got some more goodies in the mail today. RGB strip light, 12V power supply, motor shield for the dosing pumps, and a capacitive touch sensor board. I'm hoping to place some sensors inside the stand, and be able to "hit" the buttons from the outside of the stand, no physical buttons required... Not too sure if that will pan out or not

 

· Registered
Joined
·
151 Posts
Discussion Starter · #10 ·
hamato, I went ahead and ordered the ds18b20 myself. I looked it up, and there seems to be a one-wire library that is available for it, and it seems pretty easy to use. I am thinking that I will keep the thermistor, and use it to regulate the temperature inside the project box via a 12v computer fan.

I made quite a bit of headway in the programming today. I now have the RGB strip lights working, and have the ability to program the light timers and RGB values for morning, daytime, evening, and moonlight. I was also able to get the capacitive sensing working and tested. It appears that I will be able to use the capacitive buttons through the 3/4" plywood of my stand. This makes me happy, as I no longer need to figure out a way to have buttons unobtrusively stick out of my stand :D

I ran out of time today, but I'm hoping to get a quick video of my progress up to this point posted tomorrow. It'll be nice to have a video snapshot of the project for when I get it all finished, and maybe I can get some constructive criticism from the folks who've already blazed this trail.

Until then, enjoy planting tanks!
 

· Registered
Joined
·
151 Posts
Discussion Starter · #11 ·
Partial build video

So, I posted a video of my controller in action today. It's probably 50% done being coded now. Right now, I can set the times for the lights and co2, however there is no function to actually use that info! So, I still need to add the actual alarm function, a feeding function (to turn off the pump and heater for like 5 min), options to turn each of the components on/off individually, and probably a whole bunch more that I haven't even thought of. But, here it is anyways. Enjoy!

http://youtu.be/AZbJ8RELvgg

P.S. I can't figure out how to embed video, so there is just the link above...
 

· Registered
Joined
·
151 Posts
Discussion Starter · #12 ·
Quick update

So, I've now got the controller programmed at about 90%. I have all the alarms currently working, and everything is currently operating as I want minus the pumps. I just received the pumps in the mail, so now I can get that out of the way...
Meanwhile, I have started to get the proto board ready to go. Here is the voltage regulator I put together today. It uses a LM317T variable voltage regulator set to output 8.12v (close enough to 8!). I chose around 8v to power the arduino as 7v is the minimum cutoff, and 9v or higher would simply create excess heat on the arduinos voltage reguator. The circuit is one I copied from ladyada on her webpage. Seems to work well so far!



Also, I received the DS18B20 in the mail and have that hooked up and reading correctly. It is nice that the cord is larger and now fits into my cable gland snugly!



So, now that I have the programming almost done, and the perfboard getting setup, I am now on the hunt for a box to fit everything. The biggest concern I have now is that the 12V power supply I have is relatively huge. Not too sure where I'm gonna get a wooden or plastic box that big. Oh well... Progress is being made!
 

· Registered
Joined
·
151 Posts
Discussion Starter · #13 ·
Big update

Ok, So I am finally done programming this thing. The final tally was a 42.2kB sketch, and roughly 2000 lines of mostly unoptimized code. But, I managed to get all the ideas I had floating around realized. So, here is the mess I have created, which is everything minus the motor controller board which I took off for measurements:



The next step is to take all of the stuff on the breadboard and move it to the perfboard, and clean it up to look neat. Then its moving to this box:



Right now, I have everything in there just for reference. I will begin cutting holes for all the plugs and everything once I get the controller cleaned up. Right now, you can see the 12v power supply on the left, with the cooling fan sitting on top. Along the bottom are the 3 hobby peristaltic pumps. On the right side is the solid state relays (3 of em, one for the filter, one for the main lights, and one for the heater. The CO2 solenoid doesn't draw enough current to work with the SSRs, so it gets a reed relay.) On the bottom right is the USB extension cable so I can reprogram the board later if need be without taking everything apart. Along the top are the outlets for the filter and lights to plug into. I have a Duemilanove sitting in the middle for reference.
 

· Registered
Joined
·
151 Posts
Discussion Starter · #14 ·
Program breakdown

Ok, as far as the program goes...

Here is the main screen:


On the main screen, you can see the temperature of the tank, the day of the week, the time in hours:minutes:seconds. Then I have symbols for which 120v things are currently on. They are from left to right: filter, CO2, heater, main light. Then on the bottom I have the micro ferts on the left and Macro ferts on the right, with each block representing 20% of the bottle full, and each half block being 10%.


By hitting the select button, you get this screen:


This screen you can see the enclosure box temperature, the actual mL of the micro and macro bottles, and the cooling fan RPMs. After 5 seconds, this screen disappears and you are taken back to the main screen.

From the main screen, if you hit the enter button, it takes you to:


and hitting yes:


The feeding screen turns off the filter and heater for 5 minutes to allow the fish some quiet time to eat. I have an inline heater, which is why the heater is turned off with the pump. After the 5 min, it kicks you back to the main screen.

Moving on past the feeding selection screen, you are taken to the reset bottles screen. Selecting this just resets either the micro or Macro bottles back to being full.


 

· Registered
Joined
·
151 Posts
Discussion Starter · #15 ·
More program updates

Moving on past the reset bottle screen, you are taken to the set light times screen.




Selecting Main Light gives you:





Selecting Aux Lights takes you to:



After the Sunrise RGB, you are taken to similar screens for Sunset RGB, Moonlight on time, Moonlight RGB, and Daytime RGB.

After setting the light times, you can set the main time.


 

· Registered
Joined
·
151 Posts
Discussion Starter · #16 ·
More program....

After setting the main clock, you can set the LCD backlight brightness. This brightness is dimmed down to after 5 seconds of being on the main screen. The LCD will be visible on the outside of my tank stand, so this is needed to keep it from being full brightness all the time.


From there, we can turn on/off all the components independently:





And so on for the CO2, filter, and heater. Next is setting up the dosing pumps.








If you noticed, I have 3 pumps but only the micro and Macro ferts setup on the main screen. I have the 3rd pump setup so that if I keep it at 0 second on time, it just gets skipped over. But if I decide I need it at some point, be it for adding glut or iron or whatever, I can set the timer >0sec and it will dose along with the first two.


After setting the pump speeds and times (which I will use to calibrate the pumps to inject a certain amount of fert...) I will then set how much fert I just calibrated the pumps to. I wanted to keep the freedom of being able to decide later down the road to maybe inject 10mL of fert at a time, or maybe 5mL will be enough. I will be mixing up my liquid ferts using dry powders, so I will have a lot of flexibility. I'm currently thinking of dosing 10mL per dose, and having 500mL bottles. That sets me up for 50 doses, every other day, which means they'll last like 4 months. That may be too long... I dunno :icon_conf


And finally the size of the bottles I'll be filling. Again, I don't know if 500mL bottles will be what I finally decide on. I have this to be set between 100mL and 2000mL. That should cover me.
 

· Registered
Joined
·
151 Posts
Discussion Starter · #18 ·
and finally...

After setting the pump parameters, I can set the temperature alarms.



If the tank or box temperatures go over the alarm setting, it will start an audible alarm that will continue until it is acknowledged by hitting the menu button on the main screen. The alarms are setup so that if the tank temp alarm is reached, the power to the heater is cut. Once the temp goes back below the alarm temp, power is restored to the heater. This gives me protection from the thermometer on the heater going out and frying my fish, and will keep the tank temps hovering around the alarm setpoint until I can fix the problem. The box temp alarm doesn't do anything except alert me to a problem. Speaking of alarms, the alarm is tripped whenever the fertilizer levels reach 10% of the max bottle amount. This alarm is tripped each time the ferts are <10% of max and the ferts are injected. I put this in there to remind me of when its time to mix up a new batch.

And thats pretty much it! As I make progress getting this rats nest of wires cleaned up and put into the box, I will post more pictures and keep ya up to date. Hope this wasn't too long winded!!!
 

· Registered
Joined
·
151 Posts
Discussion Starter · #20 ·
Controlling heater

Shift,
I would rather rely on the Hydor to keep the temps stable and use my own temp probe as a backup, as that gives me redundancy. The heater is being powered through a SSR, so I could just use the Arduino to control the heater using a PID algorithm, but then I'm solely relying on my controller to keep temps in check. I'd rather rely on the engineers at Hydor first, and use myself as a last resort :red_mouth
 

· Registered
Joined
·
151 Posts
Discussion Starter · #21 ·
Temp probe fitting

So, while I wait on some connectors to come in the mail, I tackled how I intend to get the temp probe connected to the filter piping. I was able to cobble together a 3/4 x 3/4 x 1/2 pvc fitting, with the 1/2 side being threaded


I then drilled out the middle of a 1/2 threaded cap and tapped the hole


After tapping the hole and using some teflon tape and an added o-ring, I was able to get the PG-7 cable gland to thread into the cap. Now the temp probe is sitting right in the middle of the 90, which will be coming out of my cerges reactor



 

· Registered
Joined
·
151 Posts
Discussion Starter · #30 · (Edited)
Fluffles,
I did look into that. With the changes in Arduino 1.0, when they made the millis() an unsigned long, as long as you subtract the previous millis from the current millis, the math works out so that you need not worry about rollover. Or at least thats what I've gathered from reading some posts. I am not entirely positive about that, but thats my understanding

edit: Here is a link explaining. There are many articles explaining this in excruciating detail if you care to read
Working with arduino millis (Easy)
Arduino playground explanation in excruciating detail
 

· Registered
Joined
·
151 Posts
Discussion Starter · #33 ·
Box updates

So, I've been working on the project box. I have everything drilled out now, which makes me pretty happy! Now I need to start the final wiring

Top of the box. I have a hole cutout for the fan, which is blowing air out, and the speaker grill which i just drilled a ton of holes for



The front of the box. Here are the pumps and some DIN connectors. The DIN connectors have 5 wires a piece, as well as a gnd if you wanted to use that. 15 connections should be enough for what I'm doing



Here is the USB extension, in case I need to fix some code or add something to it


And the inside of the box as stands. I still need to place the arduino, motor shield, and the perf board in there, but it should all fit easily.
 

· Registered
Joined
·
151 Posts
Discussion Starter · #34 ·
More build pics

So, I have the 120v wiring done, and everything has been test fitted. Here are some more build pics for you guys.

Close-up of the back of the plugs. All the neutral and ground wires are ran together in parallel. The hot wire goes from the inlet plug, to the SSR's, and then back to the outlet plug hot terminals.




Here I have the fan and speaker mounted. You can see the DIN connectors up top, ready to be soldered to.



Here is a closeup of the SSR's. I have one side of the 120v all tied together to the main hot, then the other side of them goes to the outlet plugs. These SSR's are entirely overkill, they are 220v/25A. The most power I will be drawing is from the 200W Hydor heater, and at 120v that only pulls 1.67A. The Finnex Ray 2's are 20W lights, which pull .67A. The Eheim 2217 is also 20W, and pulls the same. The CO2 solenoid is so weak, it doesn't even manage to pull the minimum required current to make the SSR work properly! I tested it out, and it sure enough, it did not work :( Instead it gets a reed relay from RadioShack.



And finally, everythings final resting place. The perf board will get many more things added to it. It needs the relay for the CO2, the resistor for the thermistor, two potentiometers (one for the speaker volume, one for the LCD contrast), and a transistor to control the LCD backlight with PWM.



After this is completed, then I get to cut a hole in my stand. I am very worried that I will screw up making the hole for the display...
 

· Registered
Joined
·
151 Posts
Discussion Starter · #36 ·
Update

Joe,
I have a dremel with the router attachment... It has a straight edge guide, so thats what I'll be using! Hopefully I don't ruin the cabinet, or make it look awful. My woodworking skills are terrible enough as is, that I dont need obvious screw-ups making things worse :icon_neut

I did get some more wiring done today. Wiring this thing is rather tedious... It was much easier just plugging stuff into the breadboard. Oh well, it'll be worth it when I'm done

 
1 - 20 of 74 Posts
This is an older thread, you may not receive a response, and could be reviving an old thread. Please consider creating a new thread.
Top