Puede descargarse el código del github del LittleSmart Sun, así como la etiqueta utilizada para la caja. El código hace uso de la librería de Arduino TimerOne, aunque podrían usarse otras para manejar el RTC.
Se opta por dejar que el usuario decida si se controla el tiempo o la cantidad de luz recibida, por si en algún momento prefiere saltarse todo el control automático. Todo se configura con los controles analógicos externos de la caja, salvo la hora interna del reloj.
La hora del reloj se configura o bien cada vez que se carga el código, momento en el cual el reloj se pone en hora de acuerdo con la hora del ordenador desde el cual se carga el código; o bien pulsando un botón situado en el interior de la caja, lo que pone en hora el reloj exactamente a las 12:00 pm. Es decir, que el usuario debería estar a las 12h del mediodía justo delante del aparato y pulsar el botón para que tomara la hora correcta según el reloj local. Lo cual no es tan difícil… 😉
El usuario selecciona la hora del amanecer y el atardecer con dos potenciómetros, así como el umbral de luz ambiental que hace que se apague la luz artificial. El amanecer y el atardecer están programados para durar 60 minutos.
En la galería puede observarse, en el circuito del atenuador, el uso de optoacopladores para no pasar directamente señales de voltajes altos a nuestro microcontrolador Arduino.
Es interesante el uso que se hace en el código de las interrupciones, que detectan por determinados pines del Arduino en qué momento la señal sinusoidal del voltaje de alterna de entrada cruza el cero voltios (que ocurre cada 10ms a 5oHz), momento en el cual el microcontrolador comienza a “contar” para mandar señal de apertura al TRIAC solo durante una porción del ciclo completo. Permitiendo atenuar la bombilla. Puede verse esto en el osciloscopio y es bastante instructivo (estoy buscando las fotos que hice en su día…). En el tutorial de Instructablesl lo cuentan con más detalles.