Edit: Schematic had a bug, the INT pin on the DS3234 should be connected to pin 2 on the arduino, not the 32kHz pin! I updated the schematic.
I bought a small aquarium (54l) as an impulse buy and I needed some lights for it, so naturally I wanted to use LEDs. I also needed a timer for the lights. I also wanted the lights to fade in and out when they were going on or off as a cool effect.
I ordered four Cree XP-G R5 LEDs (cool white, apparently too warm of a light will cause algae growth) and a one amp (switching) constant current supply (with PWM support) from LED-tech.de. I had some Maxim DS3234 real-time clocks with a serial bus (SPI) which looked easy to implement so I decided to use one. I also had one spare Arduino board so that was going to be my microcontroller of choice. I used a laptop power supply as the power source.
The PCB was a pretty simple “shield” for the Arduino, just the RTC, a CR2032 coin cell battery for RTCs memory retention and thats about it. I did manage to get a couple of bugs there though as you can see from the jump wires.
Communicating with the RTC was fairly straightforward. The most complex part of this project was the actual software and to make it easily configurable and work like I wanted it to. The software is configurable via USB (serial port) and you can change the time, the lighting period (how long the lights are on), the PWM speed (how long it takes for the lights to fade in/out), maximum brightness and set the time when the lights are supposed to go on. It also includes user input sanity checking and if the input makes no sense it will print a help page (with all the commands listed).
All in all I’ve been extremely satisfied with it and it has been working flawlessly for a few months now.
If you found this project interesting, please check my other projects at electronics-projects!
Also check out my KiCad tutorial at KiCad tutorial part 1
Update: Here is the schematic:
You can get the code for the timer from here: aquarium_light_rtc_timer.ino
Here is the schematic and the PCB files (made with KiCad, bugs fixed): aquarium_light_timer.zip
The PCB is drawn as a two-layer board but the bottom layer is just a groundfill so you do not actually have to etch the other side. Just etch the front-layer and leave the bottom layer unetched (just drill the through-holes a bit with a large drill bit to make sure they do not contact the ground layer if they are not supposed to).