Now that I have successfully deployed my aquarium controlling nodebot, I want to talk about how it works. The project is divided up into three distinct hardware components: the Raspberry Pi, an interface board, and the lighting system itself, as shown below.
The aquarium lighting system is powered by a 12V DC power source that is integrated into the filter pump power supply (hence why we can't put it on a conventional electrical timer). There are two sets of lights: night-time lighting and day-time lighting. The night-time lighting set is rated at 3W and the day-time lighting set is rated at 15W, which equates to 250 mA and 1.25A, respectively. These numbers are important because it means that the current requirements and voltage requirements are considerably higher than what the Raspberry Pi can output, necessitating a buffering/translation circuit in between, which is detailed in part 2.
The day-time lighting is a natural white color meant to mimic day-time, whereas the night-time lighting is a dim blue color that leaves most of the tank in darkness at night, and is meant to mimic moonlight. After doing some reading, it appears that it is best for the fish to only leave the moonlight on for a few hours after sunset and a few hours before sunrise. This leads to there being five different lighting periods each 24 hour period: off, night, day, night, off. The Node.js software component is in charge of handling the schedule, and a small piece of Python code acts as the glue between the Node.js component and the actual hardware. These software pieces are detailed in part 3.