martes, 8 de enero de 2013

Iluminación automática eco-suave.


Suave iluminación automática.

Este primer invento que me decido a publicar consiste en un montaje para controlar una iluminación LED mediante un detector de presencia pero controlando el encendido y apagado de forma que se hagan con suavidad.
La idea básica persigue el ahorro energético, la funcionalidad y la comodidad sin olvidar la estética, se compone de una etapa de alimentación de los LED, un led driver, un conjunto de LED de 1W cada uno, un microcontrolador para generar los patrones de subida, mantenimiento y bajada de intensidad luminosa y un detector de presencia para controlar cuando debe activarse.



En el siguiente video se puede ver como funciona:




  Cuando alguien se mueve en el pasillo, la iluminación se activa, lentamente, sube poco a poco, se mantiene unos 30 segundos (en el vídeo he cortado los intervalos de mantenimiento) y luego empieza a bajar lentamente hasta que se apaga, si algo se mueve mientras tanto (como en el ejemplo del vídeo), vuelve a subir y sigue con el ciclo regulando el encendido y el apagado, hasta que si no hay nadie, se apaga.

Al principio hice pruebas con un regulador de diseño propio, con un MOSFET IRF 520 controlado por la salida PWM del arduino, y funciona bastante bien excepto porque la regulación no llega a ser todo lo fina que pretendía y el apagado final tiene un último escalón que no fui capaz de suavizar.
(A pesar de ello este regulador lo tengo funcionando en otro sitio y nadie se ha dado cuenta de ese escalón final).

Entonces, buscando un driver para otra aplicación,  me compré uno como este que os pongo,
 me fijé en que el chip regulador que lleva que es el PT4115 tiene una entrada para regulación (DIM), lo podéis ver en el datasheet:

PT4115 circuits

El pin DIM está soldado a la placa de circuito impreso y tratando de desoldarla y levantarla, rompí uno de los integrados, así que en el siguiente simplemente le soldé encima un cablecito y empecé a hacer las pruebas.
Si os fijáis en el datasheet, podemos ver que la entrada de regulación, además de aceptar una señal PWM, funciona con una señal analógica de entre 0,3V y 2,5V para regular de 0 a 100%, así que calculando un sencillo divisor de tensión, con una resistencia de 39K y un potenciómetro de 10K en serie sobre los 12V de alimentación, tenemos la regulación entre 0 y 2,5V, para el ajuste fino, puse otro potenciómetro entre el principal y masa por si no interesa que se apague del todo.
En el vídeo se puede ver como regula.



Como se puede ver he conectado 2 series de 3 LED de 1W en paralelo para cargar el driver, estos LED de 1W, soportan una corriente máxima de 350mA, por lo que pongo dos ramas en paralelo para los 700mA que da el driver, la serie de 3 se configura para que las tensiones de los LED sumen la tensión de salida del driver.
 Estos son los LED de 1W que he utilizado.
Para las pruebas he utilizado una placa de prototipos sin disipador térmico, pero no los he dejado calentarse.

Finalmente he probado la salida PWM de un Arduino sobre la entrada DIM del regulador y funciona perfectamente, así que pensé en hacer una instalación definitiva en el falso techo.
El programa que controla la regulación es el siguiente:

/*
 Salida en pin 9, PWM
 Entrada por interrupcion en pin 2;
 
 */
int brillo = 0;    // 
int tiempo = 0;    // 
int arranque = 0;

void setup()  
{ 
  pinMode(9, OUTPUT);
  pinMode(2, INPUT);
  attachInterrupt(0, inicio, FALLING);
  digitalWrite(2, LOW);
  Serial.begin(9600);
} 

void loop()  { 
  // espera hasta que se produzca una interrupcion y el flag arranque sea igual a 1:
  if (arranque == 1)
  {
    // empieza el ciclo de subida, unos 2,4 seg
  while (brillo < 180)
    {
     analogWrite(9, brillo); 
    Serial.print(brillo); 
    Serial.print("   ");
    Serial.println(tiempo);
     brillo++;
     delay (20);
    }  

  while (brillo == 180)
    // ciclo de mantenimiento a maximo brillo, 20 seg.
    {
      while (tiempo < 2000 )
      {
      analogWrite (9, brillo);
       Serial.print(brillo); 
        Serial.print("   ");
       Serial.println(tiempo);
       delay (10);
       
       if ( digitalRead (2) == LOW ) // si sigue pulsado, resetea el tiempo, porque sino si seguia habiendo presencia a veces no se enteraba y al no haber flanco de bajada, seguia el contador hasta el final y se apagaba
       { tiempo = 0;}
       tiempo++;
          
     }
     brillo = 179; // al terminar el ciclo de 20 seg, interrumpe el bucle al romper la condicion de brillo =120
    }
    while (brillo > 0)
      // empieza el ciclo de bajada de unos 7,14seg.
    {
     analogWrite(9, brillo); 
    Serial.print(brillo); 
        Serial.print("   ");
    Serial.println(tiempo); 
     brillo--;
     delay (80);
     if ( tiempo == 0)
     { break; }
    }
    if (brillo == 0) 
      {arranque = 0;}
      else
        {arranque = 1;}
  } 
    // arranque = 0;
    tiempo = 0;
    analogWrite(9, brillo);     
}
void inicio ()
  // subrutina que se llama cuando se produce la interrupcion, dispara el ciclo mediante el flag arranque
  {
    arranque =1;
    tiempo = 0;
    delay (10);
  }
    

El montaje final se compone de 2 conjuntos de 6 LED, cada uno con su driver de los indicados arriba, controlados por la misma salida PWM de Arduino ejecutando el programa anterior y un detector de presencia PIR de una alarma conectado a la entrada de interrupción de Arduino.
He insertado los LED en el falso techo haciendo un alojamiento en la escayola alrrededor de los los focos halógenos que hay y cubriéndolo luego de escayola de nuevo, lijando y pintando la canalización de los cablecitos de cada LED con el resultado que podéis ver a continuación:





    Si os fijáis en el programa, veis que la regulación nunca llega al máximo, se limita a 180 (de 255 posible valor máximo) esto se ha hecho así por dos razones:

      • El nivel de iluminación alcanzado por el sistema al máximo es excesivo (para mi gusto), se hace mucho más agradable a un menor nivel.
      • Los LED se han empotrado en la escayola, que no es el mejor conductor de calor, hay que recordar que el montaje previsto por el fabricante es sobre un disipador de calor de aluminio para refrigerar el semiconductor del LED. Por eso tampoco se pueden hacer rendir al máximo, porque no serían capaces de evacuar el calor generado y aunque no se destruyeran al principio, la vida útil se reduciría muchísimo.
 En este video se puede ver la iluminación que conseguía en fase de prototipo, cuando la regulación del PWM estaba limitada al máximo:

Esta es otra de las razones de poner seis LED de 1W para un driver de 3W, para que funcionen a un menor régimen y no tener problemas de duración, se supone que duran 50.000h en las condiciones especificadas por el fabricante.
Uno de los objetivos perseguidos era el de la eficiencia energética, comparando las tres bombillas halógenas de 50W (150W total) con el montaje ejecutado de un consumo aproximado de 6W como mucho, es realmente eficiente, y aunque pusiéramos otro conjunto de 6 LED en el otro foco halógeno, seguiría siendo ventajoso.
No se puede hacer una comparación lineal de los dos sistemas porque no medimos flujos luminosos ni consumos, pero tampoco lo pretendo, el ahorro es importantísimo (hay que tener en cuenta que tampoco llegará a los 6W, se quedará como máximo en un 70% (180/255 del PWM), unos 4,25W más las pérdidas de la fuente de alimentación y el consumo despreciable de microcontrolador y detector PIR ) , la iluminación es suficiente y además el efecto es muy agradable, estos LED sorprendentemente tiene una apertura de haz de casi 180º, los halógenos sólo se encienden en alguna ocasión y desde hace unos meses que está instalado se haría difícil acostumbrarse a tenerlo como antes.

No hay que perder de vista que teniendo niños en casa, es muy difícil controlar las luces que realmente deben estar encendidas en cada momento y las del pasillo son candidatas a quedarse encendidas.

Por último, y aunque en esta ocasión no lo he implementado, si que he pensado que sería muy fácil que esta iluminación funcionase como de emergencia, incorporando una batería, un diodo y otro divisor de tensión para detectar cuando se alimenta de la red y cuando desaparece.



          



1 comentario:

  1. Miro, está genial, tanto esta entrada como la de aplicar el sensor de distancia de Dx.com para comprobar el nivel de un depósito, me vendrán geniales para otros propósitos. Casualmente también tengo los controladores que mencionas, espero que podamos compartir muchas ideas y conocimientos al respecto de Arduino!!
    Un abrazo

    ResponderEliminar