LED and aquarium controller with TFT LCD touch screen

Yep, it took me a while to get back to my project :roll_eyes:
Meantime other people kept it going, I've seen Jarduino as well, especially I like its moonlight implementation, I plan to do something similar.

I bought second Mega board and another screen so I don't have to test my sketches on 'live' controller and scare my fish :slight_smile:
I plan to add more channels, moonlights and I have an idea for simple ATO.

Regarding ph probe, where did you buy it? I have seen info somewhere that it's useful life is about one year?

Hello Vasco!

I am writing a program based on your code. He was very helpful.

If you want to know my project can find it here:

https://github.com/FernandoGarcia/Ferduino

Here's more information but, in Portuguese. Sorry.

http://reefcorner.org/forum/topic.asp?TOPIC_ID=135383&whichpage=2

Thank you for your provided code.

Hug.

Fernando Garcia

Hi Fernando,

I'm glad you liked my idea.
I don't understand Portuguese so I looked at pictures on your thread and I have to say it looks really good!
Lots of innovation and new features.
Keep it coming!

Meantime I'm upgrading my own code as well, I have added more LED channels and moonlights and now I'm tidying up the code.

Take care.
Daniel

I have finished updating my project and Stilo 3.0 is now ready and can be downloaded from my project site www.code.google.com/p/stilo

List of features:

  • up to five separate PWM signals for independent control of leds colors;
  • moonlight channel with simple and real time modes;
  • dusk and down effect for LEDs and moonlight;
  • real time clock;
  • water and LEDs heatsink temperature sensors;
  • too high and too low water temperature alarm;
  • safety dimming light when LEDs temperature too high;
  • speed control for heatsink fans;
  • all settings are saved to EEPROM memory;
  • screen brightness control;
  • simple ATO (water top up system) controlled by one float switch.

The number of controlled LEDs channels (colours) can be changed and accordingly the main screen, leds menu, test and color mixer screens will display info only for configured LEDs channels. Also the names and colours of bars are configurable for each channel.

Moonlights can work in two modes: simple and real time.
In simple mode moonlight is on between preconfigured times (the same for every day).
In real time mode moonrise and moonset times are calculated for current day and configured latitude / longitude. So the times when moonlight is on will vary from day to day the same as for real moon. Moonrise and moonset times are displayed on main screen.

Moonlight configuration screen:

Redesigned screen to change LEDs output values:

Colour mixer that allow to check LEDs colour blending:

For all features and screenshots see the documentation.
If something is missing or not clear as it should be please let me know.

Hey, your controller looks great. However, I am having trouble getting the code to compile i keep getting the following errors:

/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'uint8_t DS1307new::isPresent()':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:47: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'void DS1307new::stopClock()':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:55: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:58: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:60: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:61: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'void DS1307new::startClock()':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:68: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:71: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:73: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:74: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'void DS1307new::getTime()':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:82: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:85: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:86: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:87: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:88: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:90: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:91: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:92: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'void DS1307new::setTime()':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:106: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:107: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:108: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:109: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:110: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:111: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:112: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:113: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'void DS1307new::getCTRL()':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:121: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:128: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'void DS1307new::setCTRL()':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:135: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:136: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'void DS1307new::getRAM(uint8_t, uint8_t*, uint8_t)':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:146: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:156: error: 'class TwoWire' has no member named 'read'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp: In member function 'void DS1307new::setRAM(uint8_t, uint8_t*, uint8_t)':
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:166: error: 'class TwoWire' has no member named 'write'
/Users/DJW/Documents/Arduino/libraries/DS1307new/DS1307new.cpp:169: error: 'class TwoWire' has no member named 'write'

OK all the errors are gone, but now the screen just flashes and refreshes every second or two. Could it be because I haven't installed the RTC module yet?

No, I don't think so. If arduino can't see RTC then some weird numbers are displayed instead of time and date.
I think it something with the screen, did you manage to successfully run examples from UTFT library?

Vasco,

I want to thank you as seeing your controller a few months back was one of the main reasons I decided to try and make my own. For ATO I have implemented freescales MPXV5004GC7U pressure sensor in order to get accurate water levels. It is extremely simple to use and is quite accurate. Here is a link to the product

Nick D.

vasco:
No, I don't think so. If arduino can't see RTC then some weird numbers are displayed instead of time and date.
I think it something with the screen, did you manage to successfully run examples from UTFT library?

Yeah, all the examples work properly, and I can even get some simple sketches that I created to run no problem. Weird part is, i commented out a a section of the sketch pertaining to the clock (forgot where it is, ill try to look for it) and it caused the main screen to load fully, but right after loading it went to a menu screen with options to adjust the clock, led stuff, and some other things, but I couldnt tap on anything.

DerekPDX:
Yeah, all the examples work properly, and I can even get some simple sketches that I created to run no problem. Weird part is, i commented out a a section of the sketch pertaining to the clock (forgot where it is, ill try to look for it) and it caused the main screen to load fully, but right after loading it went to a menu screen with options to adjust the clock, led stuff, and some other things, but I couldnt tap on anything.

That's the problem, quite a lot of functions like leds values calculations, moonlights etc relies on RTC so if you commented that code out then unpredictable behaviour will happen.
I'd leave the code as it is, it should work without RTC clock connected, there will be just weird numbers instead of time and date.

nkd5025:
Vasco,

I want to thank you as seeing your controller a few months back was one of the main reasons I decided to try and make my own. For ATO I have implemented freescales MPXV5004GC7U pressure sensor in order to get accurate water levels. It is extremely simple to use and is quite accurate. Here is a link to the product
http://www.digikey.com/product-detail/en/MPXV5004GC7U/MPXV5004GC7U-ND/951844

Nick D.

That's the good find! (and not expensive:)

That's the problem, quite a lot of functions like leds values calculations, moonlights etc relies on RTC so if you commented that code out then unpredictable behaviour will happen.
I'd leave the code as it is, it should work without RTC clock connected, there will be just weird numbers instead of time and date.

That was after I first started the sketch. When I first ran it (without editing the code) it would flash the main screen then reset everything. I was then messing around with it, commented out the RTC stuff, then i got past the main screen to a menu and that wouldnt let me do anything. Thats understandable though, and just an observation.

OK, got the RTC installed, but now its doing what I mentioned before (I'm using the original, unedited sketch): Finishes drawing the main screen then immediately goes the option menu with Time and DATE, TEMP. SETTINGS, ATO, SETTINGS, etc, but I can't select anything anywhere on the screen. I've done the calibration example and button test, those both work no problem.

That's weird if examples works fine.
Try to do debug - put serial.println(dispScreen) in main loop and check if it changes from 0 (main screen) to 1 (menu screen).
Also compare line by line touch screen configuration from example sketches with Stilo, there may be some typo if it's not working with Stilo.

There may be other problem as well - memory leak. I used to have a lot of problems with String objects that were crashing board while compiled on IDE 1.0.2 (but the same sketch was working fine with 1.0.1). The symptoms were similar - the screen stopped responding, but this doesn't explain why it goes to menu screen (all String objects are replaced now with char strings in the sketch).
Maybe some wrong connections or something is causing crashes? Try to put serial.println("1"), serial.println("2") etc in main loop after every function and see which one is causing crash, then do the same in this function to see which command is crashing the board.
Time consuming but there is no proper debug function.

GOT IT!!! I just had to change the pins and the screen type. Its the littlest things that get overlooked... Thanks for all the help vasco! This controller is excellent!

got the same strange behavior like DerekPDX, all demos like utouch and examples from UTFT will work fine but with stilo the screen will be refreshed every 2 seconds even if i adapt settings to the values of these examples

@DerekPDX: which settings/pins you've changed

Hi mate,

Check those two lines:

UTFT myGLCD(SSD1289,38,39,40,41);  
UTouch      myTouch(46,45,44,43,42);

They have to be the same as in examples (if the examples are working fine).
Also be sure you are using examples from right libraries.

Cheers,
Daniel

Hi Daniel,
thank's for your reply. Fiddeling around a little yesterday and out of a sudden it worked out. Not really sure whether i changed anything but now it works using a ITDB Screen and a ITDB Mega shield with following settings

//Change screen type and pins if required
UTFT        myGLCD(ITDB32S, 38,39,40,41);   // Remember to change the model parameter to suit your display module!
UTouch      myTouch(6,5,4,3,2);

The first led drivers are connected and now i can start adding the rest of the hardware.

Thank's a lot for that code as i'm not that perfect in programming :wink:

cheers
Detlef

edit:
is there a reason why you're using two pins for the onewire and not daisy chaining two sensors at one pin?

Do you really care about water temps. No fish or bowl pics :P\

Due to the lack of much on the market normal people can afford I want to build a controller
for my 80G reef aquarium. I have never done a Arduino project before so I am the newest of
new beginners. This looks like a good project to start with but it's a bit unorganized (maybe just me
not knowing what I am looking at yet). I don't see any kind of parts list and schematic of this controller,
is there one? Also some of the links don't seem to work.

Should I look for a simpler project for my first? I have a basic electronics understanding but know
programming experience.

Thanks :slight_smile: