redtop's Ferduino controller

Fernando
You have done an incredible Job on this program.
I had a chance to look over some of the code and I am amazed at all the features you have already included in it.
I see you have even reserved room for future wireless connection.
Thank you for allowing us to use your program.:dance:
God Bless
Donato

Fernando has a power monitoring system built into the code as well, I'm not gonna use it but thought it was a nice addition and would have been nice to have back when I was running halide lights, just to see exactly how much power my tank was consuming, and would have gave my wife more to complain about LOL
 
L.O.L to that one, I here you redtop03.
My wife was complaining when I was running 220W fluorescents on my planted aquarium.
Might have to make a suggestion to hide the power meter on one of the back menu's so our wives can't see it when they walk by.
I am planning 300W DIY Leds for my future Reef tank.
 
Just ordered a stack of parts so I can get playing with this controller - your photos inspired me to give it a shot as it meets all of my needs.

One product I'm looking at is this covers three shields into one item which might be quite nice.

http://shop.aqualed-light.com/product_info.php?cPath=1_17&products_id=34&language=en

I've been out of the aquariums for three years - and it's time to jump back in!

I've registered on the ferruginous site awaiting confirmation.
 
Just ordered a stack of parts so I can get playing with this controller - your photos inspired me to give it a shot as it meets all of my needs.

One product I'm looking at is this covers three shields into one item which might be quite nice.

http://shop.aqualed-light.com/product_info.php?cPath=1_17&products_id=34&language=en

I've been out of the aquariums for three years - and it's time to jump back in!

I've registered on the ferruginous site awaiting confirmation.

thank you for posting a link to that, I had not seen that shield before, that would make life so much easier for any of these touch screen controller builds and keep the stack down...very nice
 
Just ordered a stack of parts so I can get playing with this controller - your photos inspired me to give it a shot as it meets all of my needs.

One product I'm looking at is this covers three shields into one item which might be quite nice.

http://shop.aqualed-light.com/product_info.php?cPath=1_17&products_id=34&language=en

I've been out of the aquariums for three years - and it's time to jump back in!

I've registered on the ferruginous site awaiting confirmation.

that shield uses the DS1307 RTC and that's fine, it is a good RTC but I'm now using the DS3231 RTC, it's supposed to be a lot more accurate than the 1307 and the cool thing is, it will run just fine on the 1307 libraries

so any controller out there that uses the 1307 RTC, the DS3231 RTC is an easy and painless upgrade that (on Amazon at least) is less expensive than the 1307s LOL
 
redtop03 did you translate Fernando's new Portuguese version to English? or are you using his normal English version?
 
redtop03 did you translate Fernando's new Portuguese version to English? or are you using his normal English version?

right now I'm using Fernandos English version, all I've been doing is translating his side notes and comments that are off to the side, not part of the code...

mostly just to be doing something, but to use the code, what I'm doing is useless, it's just to satisfy my curiosity LOL
 
I've had the Chauvet running on my tank for a few days now just watching the temp and the WP25s run with it, and I can say that the wave action is flat out awesome.....

the only thing I'm seeing that I have a question about is the temp, I have the Ferduino monitoring the temp as well as my old AC. Jr, both the Ac Jr and the Ferduino show my temp to be 77.5 and 77.7

the Chauvet is showing 79.5, about 2 degrees more than the other 2, I assume that it is a faulty probe but it is at least working and since this is a sealed probe and I can't easily change out the DS18B20, is there any way to correct this reading or a way to calibrate these sensors ?
 
Last edited:
Hello Fernando
long time no see on the forums here. After seeing all the excitement redtop has with your build I have ordered a new 3.2W LCD screen just to make your build I hope you go further with the web control part it will make your controller a lot more useful for when people are away from there tanks.. Do you have any plans on using a larger screen maybe be the first to go to a 5 inch or a 7 inch screen I am sure you get asked that a lot
 
Hi!

The temperature of my code is updated to each 60 seconds and use an average of 12 values.

Also use resolution of 10 bits.

You need check if parameters are equals to compare banana with banana.

Try use this example to see if is a problem of code.

Code:
#include OneWire.h
#include DallasTemperature.h

// Data wire is plugged into port 49 on the Arduino
#define ONE_WIRE_BUS 49
#define TEMPERATURE_PRECISION 10

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

int numberOfDevices; // Number of temperature devices found

DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address

void setup()
{
  // start serial port
  Serial.begin(9600);
 
  while(!Serial)
  {
    ; // Wait for serial
  }
   
  Serial.println("Dallas Temperature IC Control Library Demo");
  Serial.println();
 
  // Start up the library
  sensors.begin();

  // Grab a count of devices on the wire
  numberOfDevices = sensors.getDeviceCount();

  // locate devices on the bus
  Serial.print("Locating devices...");

  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");
  Serial.println();

  // report parasite power requirements
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode())
 {
   Serial.println("ON");
 }
  else
  {
    Serial.println("OFF");
  }

  Serial.println();
 
  // Loop through each device, print out address
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
    {
      Serial.print("Found device ");
      Serial.print(i, DEC);
      Serial.print(" with address: ");
      printAddress(tempDeviceAddress);
      Serial.println();

      Serial.print("Setting resolution to ");
      Serial.println(TEMPERATURE_PRECISION, DEC);

      // set the resolution to TEMPERATURE_PRECISION bit (Each Dallas/Maxim device is capable of several different resolutions)
      sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);

      Serial.print("Resolution actually set to: ");
      Serial.println(sensors.getResolution(tempDeviceAddress), DEC);
      Serial.println();
    }
    else
    {
      Serial.print("Found ghost device at ");
      Serial.print(i, DEC);
      Serial.print(" but could not detect address. Check power and cabling");
    }
  }

}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
}

void loop()
{
  delay(5000);
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");


  // Loop through each device, print out temperature data
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
    {
      // Output the device ID
      Serial.print("Temperature for device: ");
      Serial.println(i,DEC);

      // It responds almost immediately. Let's print out the data
      printTemperature(tempDeviceAddress); // Use a simple function to print out the data
      Serial.println();
    }
    //else ghost device! Check your power requirements and cabling

  }
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

Best regards.

Fernando Garcia
 
Hello Fernando
long time no see on the forums here. After seeing all the excitement redtop has with your build I have ordered a new 3.2W LCD screen just to make your build I hope you go further with the web control part it will make your controller a lot more useful for when people are away from there tanks.. Do you have any plans on using a larger screen maybe be the first to go to a 5 inch or a 7 inch screen I am sure you get asked that a lot

Hi!

No, it's hard work. :D

I have many things to make still.

Best regards

Fernando Garcia
 
just thought I would I ask I know it is a lot of work your will be the 3rd one I have seen here where you can change values from the web I know you seen Doughb0y have you seen Joopie's build

Sorry redtop didn't mean to hijack your thread :)
 
just thought I would I ask I know it is a lot of work your will be the 3rd one I have seen here where you can change values from the web I know you seen Doughb0y have you seen Joopie's build

Sorry redtop didn't mean to hijack your thread :)

no worries with hijacking, I do it all the time everywhere else on the forum LOL

I thought about trying to upscale the code to fit on a bigger screen, I've been messing around in there with the coordinates, if you noticed in the pic of my home screen, the temp and pH readings have been moved....I can see that it would take a long time and a lot of work.....

I think that if just a few of the more important screens, especially the home screen, were up-scaled, the text would be easier to read, my eyes aren't as good as they used to be and I have to use a magnifying glass on some of this stuff, the temp probe addresses I cannot see at all without the magnifying glass LOL

in the Jarduino, I did up-size the text in a few places, I've not tried it with the Ferduino yet.....having the Joy-reef web interface makes things look much bigger and better...I can see stuff on my 23" monitor that I can't on my 3.2 LOL
 
Willie when using the wide version of the LCD card 400x320 I can use a regular TFT 3.2 to mount the lcd on right I don't need to buy any special wide screen type? just the wide screen LCD
 
Hi!

root,

I seen Joopie's build.

Why 400 x 320?

The resolution is 400 x 240.

You can use any size higher than 400 x 240 but, the image will not fill the screen.

Example: If you already have a TFT of 5 or 7" is possible use.

Only download the UTFT.h from Henning's website.

Best regards

Fernando Garcia
 
Willie when using the wide version of the LCD card 400x320 I can use a regular TFT 3.2 to mount the lcd on right I don't need to buy any special wide screen type? just the wide screen LCD

as far as I know, all the screens will work on the same shield and vise versa, I have used the same shield on a 2.8, 3.2S and 3.2WD and all have work just fine.....and like Fernando said, it's a 400 x 240 resolution for the 3.2WD screen that's used with the Ferduino,

any larger size resolution will have the black edges and just the 400 x 240 part of the lower left side is all that the code will be displayed on, unless you wanna upscale the code :)
 
Hi!

The temperature of my code is updated to each 60 seconds and use an average of 12 values.

Also use resolution of 10 bits.

You need check if parameters are equals to compare banana with banana.

Try use this example to see if is a problem of code.

Code:
#include OneWire.h
#include DallasTemperature.h

// Data wire is plugged into port 49 on the Arduino
#define ONE_WIRE_BUS 49
#define TEMPERATURE_PRECISION 10

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

int numberOfDevices; // Number of temperature devices found

DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address

void setup()
{
  // start serial port
  Serial.begin(9600);
 
  while(!Serial)
  {
    ; // Wait for serial
  }
   
  Serial.println("Dallas Temperature IC Control Library Demo");
  Serial.println();
 
  // Start up the library
  sensors.begin();

  // Grab a count of devices on the wire
  numberOfDevices = sensors.getDeviceCount();

  // locate devices on the bus
  Serial.print("Locating devices...");

  Serial.print("Found ");
  Serial.print(numberOfDevices, DEC);
  Serial.println(" devices.");
  Serial.println();

  // report parasite power requirements
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode())
 {
   Serial.println("ON");
 }
  else
  {
    Serial.println("OFF");
  }

  Serial.println();
 
  // Loop through each device, print out address
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
    {
      Serial.print("Found device ");
      Serial.print(i, DEC);
      Serial.print(" with address: ");
      printAddress(tempDeviceAddress);
      Serial.println();

      Serial.print("Setting resolution to ");
      Serial.println(TEMPERATURE_PRECISION, DEC);

      // set the resolution to TEMPERATURE_PRECISION bit (Each Dallas/Maxim device is capable of several different resolutions)
      sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);

      Serial.print("Resolution actually set to: ");
      Serial.println(sensors.getResolution(tempDeviceAddress), DEC);
      Serial.println();
    }
    else
    {
      Serial.print("Found ghost device at ");
      Serial.print(i, DEC);
      Serial.print(" but could not detect address. Check power and cabling");
    }
  }

}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
}

void loop()
{
  delay(5000);
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");


  // Loop through each device, print out temperature data
  for(int i=0;i<numberOfDevices; i++)
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
    {
      // Output the device ID
      Serial.print("Temperature for device: ");
      Serial.println(i,DEC);

      // It responds almost immediately. Let's print out the data
      printTemperature(tempDeviceAddress); // Use a simple function to print out the data
      Serial.println();
    }
    //else ghost device! Check your power requirements and cabling

  }
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

Best regards.

Fernando Garcia

I just now noticed the compare banana with banana comment LOL all three of these probes are within 3 inches of each other in my sump, so the parameter should be about as close for comparison as possible....

none of the 3 are touching any pumps or anything to cause any of them to give a false reading, 2 are mounted in the probe holder and the third is just stuck down between the other 2, high flow area next to a sump baffle so the water temp reading should be as accurate as possible, if the probes are correct that is :)

I think it's a flaw with that one probe, may have been the thermal paste I used in the bottom of the probe housing, that thermal paste is probable 12 to 13 years old but was still white and in a paste form :)
 
I just ordered a 7 inch touch screen....

41%2BFMZL5V2L.jpg
41kBJpPZNwL.jpg


41c6yECoNTL.jpg
51TOEviYX2L.jpg


I think I'll see what I can do about up-scaling the code just for the heck of it :) might end up pulling the last 3 or 4 hairs on my head out LOL

gotta figure out how to load the library to the IDE for it first though LOL
 
well, I now have the UTFT library set up for the 5 inch and 7 inch screens, at least I hope it's set up, when I select those screens in the code now, it compiles just fine, we will see how it works once I have the screen though :)

I think, since both the 5 inch and 7 inch screens share the same 480 x 800 resolution, that IF , and that's a big if LOL

but if I can successfully up-scale the code, it should work on either screen...
 
Back
Top