Guide: Arduino based LED controller for Current Satellite LED+
Planted Tank Forums
Your Tanks Image Hosting *Tank Tracker * Plant Profiles Fish Profiles Planted Tank Guide Photo Gallery Articles

Go Back   The Planted Tank Forum > Specific Aspects of a Planted Tank > DIY


Reply
 
Thread Tools Display Modes
Old 07-24-2013, 04:26 PM   #1
Indychus
Planted Tank Enthusiast
 
Indychus's Avatar
 
PTrader: (8/100%)
Join Date: Feb 2013
Location: Irmo, SC
Posts: 646
Default Guide: Arduino based LED controller for Current Satellite LED+

So I made an off-hand comment in one of Current USA's threads last night about an Arduino controller for their LED+ freshwater fixture. In the 12 or so hours since posting that, I have probably received a dozen PM's requesting code, IR protocol, sketches, or other information. Instead of responding to each request for information separately, it became obvious that I just needed to put together a thread for my project. This is that thread.

First, a disclaimer. While I'm not your average DIY tinkerer, I'm also not an electronics expert. I'm a mechanical engineer by day, and like to think of myself as a modern mad scientist by night. If you decide to build your own controller based on this thread, be aware that you're on your own. That's not to say I won't help... I think open source is the way of the future and love to pass knowledge on. I just mean that if you burn up your Arduino, yourself, or your house, that it's on you.

I'm putting together a guide to follow along, but none of the steps should be considered the last step. The nice thing about Arduino is how easy it is to constantly modify your code and add features. Throughout this thread, I will periodically post my newest code so that you can upload it and get the newer features. If you're experienced with Arduino, feel free to hack my code apart and have your way with it.

This process should work for any light fixture with some tweaking!

I'm writing this step-by-step so hopefully anyone can follow along. The more Arduino users we have in the world, the better life can be for everyone! If you're new to Arduino, don't be overwhelmed... it's not as difficult as it seems at first glance. And if you're an old hand please don't bash my primitive coding too much!



Everything in this post should be considered open source and public domain. Feel free to use my code, distribute it, hack it up, whatever.
__________________
The Fraternity of Dirt
Check out my open-source Arduino-Powered Light Controller Guide for Current LED+ and other IR switchable lights.

Last edited by Indychus; 07-24-2013 at 08:52 PM.. Reason: Edit
Indychus is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 04:33 PM   #2
Indychus
Planted Tank Enthusiast
 
Indychus's Avatar
 
PTrader: (8/100%)
Join Date: Feb 2013
Location: Irmo, SC
Posts: 646
Default

Check this post for the most up to date code and features.

Most Current Version : 3.6
Other versions can be found throughout this thread.

Functionality:
  • Allows user to set up to 24 triggers to activate pre-defined functions at any time.
  • Random thunderstorms.
  • RTC support maintains time even if power is lost.
  • Range of around 10 feet for IR emitter.
  • No modification to the fixture or remote required.
  • Can be powered by USB or via a wall wart.
  • Factory remote still functions. Will return to programmed functions at next trigger.
  • All factory functions can be programmed to activate at any time.
  • Supports a 20 x 4 LCD screen.

Default scheduling:
  • 07.00 am - Dawn/Dusk
  • 09.00 am - Cloud2
  • 11.00 am - FullSpec
  • 03.00 pm - Cloud2
  • 07.00 pm - Dawn/Dusk
  • 09.00 pm - Night2

Required libraries:
  • Time
  • TimeAlarms
  • RTClib
  • IRremote
  • LiquidCrystal

Code:
///////////////////////////////////////////////////////////////////
// Current Satellite LED+ Controller  V3.6                       //
//   Indychus...Dahammer...mistergreen @ plantedtank.net         //
//   This code is public domain.  Pass it on.                    //
//   Confirmed on Arduino UNO 1.0.5                              //
//   Req. Time, TimeAlarms, RTClib, IRremote                     //
///////////////////////////////////////////////////////////////////
//
// This version uses Ken Shirriff's IRremote library to Rx/Tx the IR codes
// http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html
// 
// This code does NOT use PIN 13 on the Uno, as do previous versions
// Instead PIN 3, which is a PWM pin, is used. So you'll need to connect
// your LED to PIN 3 instead of PIN 13 for it to work.

// Install LCD per instructions at http://learn.adafruit.com/character-lcds/overview

#include <Wire.h>
#include <RTClib.h>
#include <Time.h>
#include <TimeAlarms.h>
#include <IRremote.h>
#include <LiquidCrystal.h>

RTC_DS1307 RTC;
IRsend irsend;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

/*********** BEGIN USER DEFINED VARIABLES ***********/
// DEBUG_IR adds the option to test the IR commands via the Arduino software's serial monitor
// You can send any value from 1 to 32 and it send the corresponding IR code
// The codes follow the remote controller, left to right, top to bottom
// e.g 1 = Orange, 2 = Blue, 21 = Moon1, etc
#define DEBUG_IR

int postDelay = 100;         // Delay after codes are sent
int randAnalogPin = 0;       // This needs to be set to an unused Analog pin, Used by ThunderStorm()

// Current Satellite+ IR Codes (NEC Protocol)
unsigned long codeHeader = 0x20DF; // Always the same

// Remote buttons listed left to right, top to bottom
unsigned int codeOrange = 0x3AC5;
unsigned int codeBlue = 0xBA45;
unsigned int codeRose = 0x827D;
unsigned int codePowerOnOff = 0x02FD;
unsigned int codeWhite = 0x1AE5;
unsigned int codeFullSpec = 0x9A65;
unsigned int codePurple = 0xA25D;
unsigned int codePlay = 0x22DD;
unsigned int codeRedUp = 0x2AD5;
unsigned int codeGreenUp = 0xAA55;
unsigned int codeBlueUp = 0x926D;
unsigned int codeWhiteUp = 0x12ED;
unsigned int codeRedDown = 0x0AF5;
unsigned int codeGreenDown = 0x8A75;
unsigned int codeBlueDown = 0xB24D;
unsigned int codeWhiteDown = 0x32CD;
unsigned int codeM1Custom = 0x38C7;
unsigned int codeM2Custom = 0xB847;
unsigned int codeM3Custom = 0x7887;
unsigned int codeM4Custom = 0xF807;
unsigned int codeMoon1 = 0x18E7;
unsigned int codeMoon2 = 0x9867;
unsigned int codeMoon3 = 0x58A7;
unsigned int codeDawnDusk = 0xD827;
unsigned int codeCloud1 = 0x28D7;
unsigned int codeCloud2 = 0xA857;
unsigned int codeCloud3 = 0x6897;
unsigned int codeCloud4 = 0xE817;
unsigned int codeStorm1 = 0x08F7;
unsigned int codeStorm2 = 0x8877;
unsigned int codeStorm3 = 0x48B7;
unsigned int codeStorm4 = 0xC837;

void SetAlarms()
{
  // Set up your desired alarms here
  // The default value of dtNBR_ALARMS is 6 in Alarms.h.
  // This code sets 12 alarms by default, so you'll need to change dtNBR_ALARMS to 12 or more
  Alarm.alarmRepeat(7,00,0, DawnDusk);
  Alarm.alarmRepeat(9,00,0, Cloud2);     // (HR,MIN,SEC,FUNCTION)
  Alarm.alarmRepeat(11,00,0, FullSpec);
  Alarm.alarmRepeat(15,00,0, Cloud2);
  Alarm.alarmRepeat(19,00,0, DawnDusk);
  Alarm.alarmRepeat(21,00,0, Moon2);
  
  // Comment these out if you don't want the chance of a random storm each day
  Alarm.alarmRepeat(12,00,00, ThunderStorm);
  ThunderStorm();  // Sets up intial storm so we don't have wait until alarm time
}
/************* END USER DEFINED VARIABLES *************/

void setup()
{
  Wire.begin();
  RTC.begin();
  lcd.begin(20, 4);
  Serial.begin(9600);
      //Serial.println(freeRam());
  
  if (! RTC.isrunning()) { 
    Serial.println("RTC Error");
    RTC.adjust(DateTime(__DATE__, __TIME__));}  //Adjust to compile time
    
  
  setSyncProvider(syncProvider);     //reference our syncProvider function instead of RTC_DS1307::get()
  
  Alarm.timerRepeat(900, digitalClockDisplay);  // Display the time every 15 minutes
  digitalClockDisplay();
  SetAlarms();
 Serial.print("SRAM : ");          //un-comment these line to check available SRAM
 Serial.println(freeRam());}   

void loop()
{
#ifdef DEBUG_IR 
  if (Serial.available() > 0) {
    delay(5); //Wait for transmission to finish
    CurrentCMDs(SerialReadInt());
  }
#endif
  Alarm.delay(100); 
  // Service alarms & wait (msec)
  lcdClockDisplay();
}

time_t syncProvider()
{
  //this does the same thing as RTC_DS1307::get()
  return RTC.now().unixtime();
}

void ThunderStorm ()
{ 
  // Schedules a storm between 1 & 9 in the evening
  // It sets Storm2, followed by Cloud2 or DawnDusk or Moon2, depending on when the storm is over
  randomSeed(analogRead(randAnalogPin));  // Generate random seed on unused pin
  byte RH = random(23);                   // Randomizer for thunderstorm
  byte RM = random(59);
  byte RS = random(59);
  byte TSDurationH = random(2);
  byte TSDurationM = random(59);
  
  if (RH <= 12)
    {
      Serial.println("No storm today");
      lcd.setCursor(0,1);
      lcd.print("No storm today");
      return;
    }
      
  if (RH > 12)                             // If random value is after 1 pm, allow storm
    {
      Alarm.alarmOnce(RH,RM,RS,Storm2);
      Serial.print("Next Storm: ");
      Serial.print(RH);
      printDigits(RM);
      printDigits(RS);
      Serial.print("   ");
      Serial.print("Duration = ");
      Serial.print(TSDurationH);
      printDigits(TSDurationM);
      Serial.println();
     lcd.setCursor(0,1);
     lcd.print("Next Storm: ");
     lcdHRdigits(RH);
     lcdDigits(RM);}
      
      if ((RH + TSDurationH) < 19)   // Return to Cloud2 if storm ends between 1-7pm
        {Alarm.alarmOnce((RH + TSDurationH),(RM + TSDurationM),RS,Cloud2);}
      else if ((RH + TSDurationH) < 21)  // Return to DawnDusk if storm ends between 7-9pm
        {Alarm.alarmOnce((RH + TSDurationH),(RM + TSDurationM),RS,DawnDusk);}
      else                                       // Return to Night2 if storm ends after 9pm
        {Alarm.alarmOnce((RH + TSDurationH),(RM + TSDurationM),RS,Moon2);}
    }


void digitalClockDisplay()          // Digital clock
{ 
  Serial.print("Time = ");
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println(); }

  
void lcdClockDisplay()  
  {lcd.setCursor(0,0);
    lcdHRdigits(hour());
  lcdDigits(minute());}

void printDigits(int digits)        // Add :
{
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

void lcdDigits(int digits)        // Add :
{
  lcd.print(":");
  if(digits < 10)
    lcd.print('0');  
  lcd.print(digits);
}
void lcdHRdigits(int HRdigits)        // Preface hour with 0
{
  if(HRdigits < 10)
    lcd.print('0');  
  lcd.print(HRdigits);
}

#ifdef DEBUG_IR
int SerialReadInt()
{
  int i, numAva;
  char inBytes[3];                  // Array to hold the bytes
  char * inBytesPtr = &inBytes[0];  // Pointer to the first element of the array
      
    numAva = Serial.available();    // Read number of input bytes
    if (numAva > 2)
      numAva = 2;                   // Only allow 2 characters to prevent overflow
      
    for (i=0; i<numAva; i++)        // Load input bytes into array
      inBytes[i] = Serial.read();
    inBytes[i] =  '\0';             // Put NULL character at the end
    return atoi(inBytesPtr);        // Call atoi function and return result
}

void CurrentCMDs (int cmd)
{switch (cmd)
  {
    case 1:
      Orange();
      break;
    case 2:
      Blue();
      break;
    case 3:
      Rose();
      break;
    case 4:
      PowerOnOff();
      break;
    case 5:
      White();
      break;
    case 6:
      FullSpec();
      break;
    case 7:
      Purple();
      break;
    case 8:
      Play();
      break;
    case 9:
      RedUp();
      break;
    case 10:
      GreenUp();
      break;
    case 11:
      BlueUp();
      break;
    case 12:
      WhiteUp();
      break;
    case 13:
      RedDown();
      break;
    case 14:
      GreenDown();
      break;
    case 15:
      BlueDown();
      break;
    case 16:
      WhiteDown();
      break;
    case 17:
      M1Custom();
      break;
    case 18:
      M2Custom();
      break;
    case 19:
      M3Custom();
      break;
    case 20:
      M4Custom();
      break;
    case 21:
      Moon1();
      break;
    case 22:
      Moon2();
      break;
    case 23:
      Moon3();
      break;
    case 24:
      DawnDusk();
      break;
    case 25:
      Cloud1();
      break;
    case 26:
      Cloud2();
      break;
    case 27:
      Cloud3();
      break;
    case 28:
      Cloud4();
      break;
    case 29:
      Storm1();
      break;
    case 30:
      Storm2();
      break;
    case 31:
      Storm3();
      break;
    case 32:
      Storm4();
      break;
    default:
      Serial.println("Invalid Choice");}}
#endif

void SendCode (unsigned int code, byte numTimes, const char *sMessage)
{unsigned long irCode = (codeHeader << 16) + code; // Header is 2 bytes, shift all the way to left & add code to it
  
  for( int i = 0; i < numTimes; i++)
  {irsend.sendNEC(irCode,32); // Send code
    Alarm.delay(postDelay);}
    
  Serial.println(sMessage);  // Print message
  lcd.setCursor(6,0);
  lcd.print(sMessage);
  for(byte i = sizeof(sMessage); i <= 14; i++)
    lcd.print(" ");
  digitalClockDisplay();}

void Orange()
{SendCode(codeOrange, 2, "Orange");}

void Blue()
{SendCode(codeBlue, 2, "Blue");}

void Rose()
{SendCode(codeRose, 2, "Rose");}

void PowerOnOff()
{SendCode(codePowerOnOff, 1, "Power On/Off");}

void White()
{SendCode(codeWhite, 2, "White");}

void FullSpec()
{SendCode(codeFullSpec, 2, "Full Spectrum");}

void Purple()
{SendCode(codePurple, 2, "Purple");}

void Play()
{SendCode(codePlay, 1, "Play/Pause:");}

void RedUp()
{SendCode(codeRedUp, 1, "Red Up");}

void GreenUp()
{SendCode(codeGreenUp, 1, "Green Up");}

void BlueUp()
{SendCode(codeBlueUp, 1, "Blue");}

void WhiteUp()
{SendCode(codeWhiteUp, 1, "White Up");}

void RedDown()
{SendCode(codeRedDown, 1, "Red Down");}

void GreenDown()
{SendCode(codeGreenDown, 1, "Green Down");}

void BlueDown()
{SendCode(codeBlueDown, 1, "Blue Down");}

void WhiteDown()
{SendCode(codeWhite, 1, "White Down");}

void M1Custom()
{SendCode(codeM1Custom, 2, "Custom Mix 1");}

void M2Custom()
{SendCode(codeM2Custom, 2, "Custom Mix 2");}

void M3Custom()
{SendCode(codeM3Custom, 2, "Custom Mix 3");}

void M4Custom()
{SendCode(codeM4Custom, 2, "Custom Mix 4");}

void Moon1()
{SendCode(codeMoon1, 2, "Moonlight 1");}

void Moon2()
{SendCode(codeMoon2, 2, "Moonlight 2");}

void Moon3()
{SendCode(codeMoon3, 2, "Moonlight 3");}

void DawnDusk()
{SendCode(codeDawnDusk, 2, "Dawn/Dusk");}

void Cloud1()
{SendCode(codeCloud1, 2, "Cloud Cover 1");}

void Cloud2()
{SendCode(codeCloud2, 2, "Cloud Cover 2");}
  
void Cloud3()
{SendCode(codeCloud3, 2, "Cloud Cover 3");}

void Cloud4()
{SendCode(codeCloud4, 2, "Cloud Cover 4");}

void Storm1()
{SendCode(codeStorm1, 2, "Thunderstorm 1");}

void Storm2()
{SendCode(codeStorm2, 2, "Thunderstorm 2");}

void Storm3()
{SendCode(codeStorm3, 2, "Thunderstorm 3");}

void Storm4()
{SendCode(codeStorm4, 2, "Thunderstorm 4");}

int freeRam () {
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

Last edited by Indychus; 08-12-2013 at 04:02 PM.. Reason: Edit
Indychus is offline   Reply With Quote Quick reply to this message
Old 11-25-2013, 09:15 PM   #3
Tiger Muskie
Newbie
 
PTrader: (0/0%)
Join Date: Nov 2013
Location: Colorado
Posts: 2
Default

Hi Indychus and others:

Thank you very much for providing this clear step-by-step guide for the project. I have it up and running on my 29 gallon tank with the RTC and LCD display.

Question: Has anyone worked out a method for turning off the LCD backlight at night?
My fish all gather in the corner of the tank by the LCD and stare at it all night, and more importantly, my wife doesn't like it!

Thanks!

Last edited by Tiger Muskie; 11-26-2013 at 04:19 AM.. Reason: Clarification
Tiger Muskie is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 04:44 PM   #4
Indychus
Planted Tank Enthusiast
 
Indychus's Avatar
 
PTrader: (8/100%)
Join Date: Feb 2013
Location: Irmo, SC
Posts: 646
Default

Here's what you need to get started. These parts can be had at radioshack or other electonics supplies, although e b a y and Amazon are great sources.
  • Arduino: I used an Uno for this project, which is $29 straight from Arduino, or around $9 for a knock-off board. I prefer the genuine Arduino, but many of the knock-offs are very nice. Boards other than Uno can be used, but some of the pins may be different. I am using a Revision 3 board running Arduino version 1.0.5. If you're new to this, I'd suggest a starter kit that includes a breadboard, jumpers, and an assortment of goodies.

  • IR Receiver: The Current system uses a 38 kHz frequency just like most A/V equipment. At least, my 48" Satellite LED+ does. You can use an oscilloscope and photodiode to determine the frequency if you are trying to control a light other than Current. Any 38 khz IR receiver should work. They are around $2-3 usually, but can be had for as cheap as $.50 if you buy more than one. I used a TSOP4838.

  • IR Emitter LED: Again, any emitter should work, and they are dirt cheap. I used Lite-On LTE-5208A which are around $0.12 each. Buy a pack of 20 or so, you'll find uses for them.

  • 150 ohm Resistor: If you use the same parts as I have listed above, a 150 ohm resistor is needed. One resistor is around $0.02. Again, I recommend buying an assortment since they're so cheap. If you're not using identical components as those listed above, you will need to figure out what resistor is needed for your specific needs. I can help with this if needed.

  • Real Time Clock: An RTC is needed so that your Arduino knows what time it is and your program can resume operation properly after a power outage. I recommend any RTC based on the DS1307. You can buy kits that must be assembled, assembled boards that need the headers soldered on, or complete plug and play units. It's up to you. Cost is between $5-$25.

  • LCD Screen: The code supports a 20 x 4 LCD screen, but it is completely optional. If you want the extra ease of use and eye-candy, I suggest the 20 x 4 backlit LCD from Adafruit.
__________________
The Fraternity of Dirt
Check out my open-source Arduino-Powered Light Controller Guide for Current LED+ and other IR switchable lights.

Last edited by Indychus; 08-12-2013 at 04:39 PM.. Reason: Edit
Indychus is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 04:52 PM   #5
O2surplus
Planted Tank Enthusiast
 
O2surplus's Avatar
 
PTrader: (4/100%)
Join Date: Jan 2010
Location: "The Land of Fruits & Nuts"
Posts: 679
Default

Do the Current Led fixtures accept a 5V PWM dimming signal directly?
__________________
225 Gal, Glass "Reef Ready" w/ twin Iwaki Pumps & 2 Ocean Clear inline filters. Custom 320 watt LED Lighting system utilizing a 6' Maker's Heat Sink, 12 BridgeLux Vero 18's,3 purpose built 5 channel A6211 Led driver/Controllers,iAqua Aquarium Controller , and a 20lb CO2 system w/ Milwaukee Ph Controller.
O2surplus is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 05:04 PM   #6
Indychus
Planted Tank Enthusiast
 
Indychus's Avatar
 
PTrader: (8/100%)
Join Date: Feb 2013
Location: Irmo, SC
Posts: 646
Default

Quote:
Originally Posted by O2surplus View Post
Do the Current Led fixtures accept a 5V PWM dimming signal directly?
I'm not sure what is going on on the Current side of things. One of my goals was to maintain the remote functionality, so I chose to go with the IR and haven't looked into the fixture itself much. I'm fairly sure that it will be 5V PWM if you investigate it though.

I have the IR protocol in hex, I'll be posting it shortly! You should be able to skip the IR stuff and wire the IR lead from the fixture directly to the Arduino if wanted.
__________________
The Fraternity of Dirt
Check out my open-source Arduino-Powered Light Controller Guide for Current LED+ and other IR switchable lights.
Indychus is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 05:40 PM   #7
O2surplus
Planted Tank Enthusiast
 
O2surplus's Avatar
 
PTrader: (4/100%)
Join Date: Jan 2010
Location: "The Land of Fruits & Nuts"
Posts: 679
Default

Quote:
Originally Posted by Indychus View Post
I'm not sure what is going on on the Current side of things. One of my goals was to maintain the remote functionality, so I chose to go with the IR and haven't looked into the fixture itself much. I'm fairly sure that it will be 5V PWM if you investigate it though.

I have the IR protocol in hex, I'll be posting it shortly! You should be able to skip the IR stuff and wire the IR lead from the fixture directly to the Arduino if wanted.
Oh I see what you're up to now. Don't you have to install the Arduino between the IR controller and the internal led drivers? Seems to me that you would, as the IR controller is only programmed to perform the commands that it receives from the IR remote control? The Arduino could then perform other programmed "tricks" that aren't available from the IR remote, and the IR controller would simply become an input to the Arduino.
__________________
225 Gal, Glass "Reef Ready" w/ twin Iwaki Pumps & 2 Ocean Clear inline filters. Custom 320 watt LED Lighting system utilizing a 6' Maker's Heat Sink, 12 BridgeLux Vero 18's,3 purpose built 5 channel A6211 Led driver/Controllers,iAqua Aquarium Controller , and a 20lb CO2 system w/ Milwaukee Ph Controller.
O2surplus is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 05:44 PM   #8
Indychus
Planted Tank Enthusiast
 
Indychus's Avatar
 
PTrader: (8/100%)
Join Date: Feb 2013
Location: Irmo, SC
Posts: 646
Default

Quote:
Originally Posted by O2surplus View Post
Oh I see what you're up to now. Don't you have to install the Arduino between the IR controller and the internal led drivers? Seems to me that you would, as the IR controller is only programmed to perform the commands that it receives from the IR remote control? The Arduino could then perform other programmed "tricks" that aren't available from the IR remote, and the IR controller would simply become an input to the Arduino.
Yeah, it's certainly possible to do it that way, and that's what I plan to do eventually. Right now, the Arduino is basically just mimicking the remote, so custom functions are not possible. I figured this method would be more appetizing to most people since they wouldn't have to modify their fixture.
__________________
The Fraternity of Dirt
Check out my open-source Arduino-Powered Light Controller Guide for Current LED+ and other IR switchable lights.
Indychus is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 06:24 PM   #9
O2surplus
Planted Tank Enthusiast
 
O2surplus's Avatar
 
PTrader: (4/100%)
Join Date: Jan 2010
Location: "The Land of Fruits & Nuts"
Posts: 679
Default

Quote:
Originally Posted by Indychus View Post
Yeah, it's certainly possible to do it that way, and that's what I plan to do eventually. Right now, the Arduino is basically just mimicking the remote, so custom functions are not possible. I figured this method would be more appetizing to most people since they wouldn't have to modify their fixture.
I have to admit that I'm not familiar with the remote controls functionality with regards to the Current lighting fixture, but your approach to automating the fixture is novel. Since you've hacked the IR control protocols, it should be relatively easy to program the arduino to act as a "stand in" for the human thumb and perform different commands to the lighting system based on pre programmed code. Since the Micro-Controller controlled IR transmitter and receiver electronics have a much faster reaction time than the human finger, custom lighting effects should be possible.
__________________
225 Gal, Glass "Reef Ready" w/ twin Iwaki Pumps & 2 Ocean Clear inline filters. Custom 320 watt LED Lighting system utilizing a 6' Maker's Heat Sink, 12 BridgeLux Vero 18's,3 purpose built 5 channel A6211 Led driver/Controllers,iAqua Aquarium Controller , and a 20lb CO2 system w/ Milwaukee Ph Controller.
O2surplus is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 05:04 PM   #10
crazymittens
Planted Tank Enthusiast
 
PTrader: (0/0%)
Join Date: Jun 2012
Location: Oshawa
Posts: 674
Default

Someone in the lighting sub-forum was asking about this...I'm curious if there are any biological benefits to this. Is this cool (it is), or functionally cool?
crazymittens is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 05:11 PM   #11
Indychus
Planted Tank Enthusiast
 
Indychus's Avatar
 
PTrader: (8/100%)
Join Date: Feb 2013
Location: Irmo, SC
Posts: 646
Default

Quote:
Originally Posted by crazymittens View Post
Someone in the lighting sub-forum was asking about this...I'm curious if there are any biological benefits to this. Is this cool (it is), or functionally cool?
I've seen a few studies implying that fish in a system with dynamic lighting are more sexual active, and therefor healthier... But I don't think anything absolutely conclusive has been done. My main goal is the cool factor. With the Current product announcement and their own controllers out now, there isn't much reason to build your own economically speaking (I was a little shocked at how low their MSRP is), but this does allow you more control and the ability to tailor it exactly to your needs.

When I first started this, Current had no controller available. So I had a nice new light with dozens of functions that I had to control manually. It was a bit of a bummer.
__________________
The Fraternity of Dirt
Check out my open-source Arduino-Powered Light Controller Guide for Current LED+ and other IR switchable lights.
Indychus is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 06:53 PM   #12
JJBTEXAS
Algae Grower
 
PTrader: (1/100%)
Join Date: Jul 2013
Location: Houston Tx/Auburn Al
Posts: 65
Default

Quote:
Originally Posted by Indychus View Post
With the Current product announcement and their own controllers out now, there isn't much reason to build your own economically speaking (I was a little shocked at how low their MSRP is)
What controllers? I can't find anything about this online.
JJBTEXAS is offline   Reply With Quote Quick reply to this message
Old 07-24-2013, 08:03 PM   #13
Indychus
Planted Tank Enthusiast
 
Indychus's Avatar
 
PTrader: (8/100%)
Join Date: Feb 2013
Location: Irmo, SC
Posts: 646
Default

Quote:
Originally Posted by JJBTEXAS View Post
What controllers? I can't find anything about this online.
They literally just announced it last night at some big expo. They should be on the market soon. MSRP for controlling a single fixture is supposed to be $39... dual is more. This Arduino setup can control an infinite number of fixtures though, provided their IR sensors are within range of the emitter on the Arduino.
__________________
The Fraternity of Dirt
Check out my open-source Arduino-Powered Light Controller Guide for Current LED+ and other IR switchable lights.
Indychus is offline   Reply With Quote Quick reply to this message
Old 07-25-2013, 02:37 AM   #14
Vermino
Planted Tank Enthusiast
 
Vermino's Avatar
 
PTrader: (3/100%)
Join Date: Jun 2012
Location: Las Vegas
Posts: 571
Default

Quote:
Originally Posted by Indychus View Post
With the Current product announcement and their own controllers out now, there isn't much reason to build your own economically speaking (I was a little shocked at how low their MSRP is), but this does allow you more control and the ability to tailor it exactly to your needs.
Yeah sorry to let that cat out of the bag on that one. There are still people wanting to have more control than a "out of the box" controller though. Anything I buy, I usually tweak like a mad scientist. Love the DIY picture BTW indychus =)
Vermino is offline   Reply With Quote Quick reply to this message
Old 07-25-2013, 03:13 AM   #15
Indychus
Planted Tank Enthusiast
 
Indychus's Avatar
 
PTrader: (8/100%)
Join Date: Feb 2013
Location: Irmo, SC
Posts: 646
Default

Quote:
Originally Posted by Vermino View Post
Yeah sorry to let that cat out of the bag on that one. There are still people wanting to have more control than a "out of the box" controller though. Anything I buy, I usually tweak like a mad scientist. Love the DIY picture BTW indychus =)
Yeah, I emailed current a few weeks ago and they said they wouldn't release the IR protocol but that they had a controller coming out, so I knew it was coming soon. I didn't expect it to be so affordable though.
__________________
The Fraternity of Dirt
Check out my open-source Arduino-Powered Light Controller Guide for Current LED+ and other IR switchable lights.
Indychus is offline   Reply With Quote Quick reply to this message
Reply

Tags
arduino, automation, current led+, diy, light controller

Quick Reply
Message:
Options

Register Now

In order to be able to post messages on the The Planted Tank Forum forums, you must first register.
Please enter your desired user name, your email address and other required details in the form below.
User Name:
Password
Please enter a password for your user account. Note that passwords are case-sensitive.
Password:
Confirm Password:
Email Address
Please enter a valid email address for yourself.
Email Address:

Log-in

Human Verification

In order to verify that you are a human and not a spam bot, please enter the answer into the following box below based on the instructions contained in the graphic.



Thread Tools
Display Modes

Posting Rules
You may post new threads
You may post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 11:36 AM.


Powered by vBulletin®
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Copyright Planted Tank LLC 2012