This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Proyecto: Iluminación Led para escritorio
#21
Triggerr escribió:Con que programa has echo el diseño 3D de la placa? Te ha quedado muy muy curioso

Enviado desde mi Nexus 4 usando Tapatalk 2

Con Eagle + EagleUp + Google SketchUp

http://giltesa.com/2012/10/07/instalacio...ers-en-3d/

Se pueden conseguir cosas muy curiosas: http://www.youtube.com/watch?v=GB1F685NU28

Mola
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.
  Responder
#22
Código:
/**
* Web:       giltesa.com
* Licencia:  CC BY-NC-SA 3.0
*
* ATTiny85 pinout:
*                         _____
*                        |1   8| VCC
*     Tira de leds => D3 |2   7|
*    Potenciometro => A2 |3   6|
*                    GND |4___5| D0 <= Sensor PIR
*/


// PINES
#define LED 3     // Digital PWM  - Tira de leds
#define PIR 0     // Digital      - Sensor movimiento
#define POT A2    // Analogico    - Regulador brillo

// BRILLO:
#define bMinimo   3   // Valor minimo para que el led este encendido.
#define bMargen   4   // Diferencia que ha de haber para que se considere que se ha cambiado el brillo.
byte bAnterior  = 0;
byte bActual    = 0;
byte bAtenuado  = 0;

// MODO AHORRO:
#define tiempoApagado      600000   // Tiempo para entrar en modo ahorro (apagado).
#define tiempoAtenuado     18       // Velocidad que se tarda en aumentar o disminuir cada nivel de brillo.
unsigned long ultimoUso  = 0;       // El momento en el que se utilizo por ultima vez el potenciometro o se detecto al usuario.
boolean enAhorro         = false;   // Indica si los Leds se apagaron por inactividad del usuario.
boolean cambiandoBrillo  = false;   // Indica que se esta cambiando el brillo (aumentandolo o decrementandolo gradualmente)



/**
* Funcion inicial de configuracion.
*/
void setup()
{
    pinMode(LED, OUTPUT);

    // Poniendo el programa en ahorro y las variables de brillo con el mismo valor nos aseguramos
    // de que al reiniciarse el microcontrolador, por un corte de luz, las luces permanezcan apagadas.
    enAhorro    = true;
    bAnterior   = getBrillo();
    bActual     = bAnterior;
}



/**
* Funcion principal.
*/
void loop()
{
    bActual = getBrillo();


    // Se comprueba si el potenciometro ha sido movido. Segun el estado del programa:
    if( getDiferenciaBrillo() > bMargen )
    {
        bAnterior = bActual;
        ultimoUso = millis();

        // Comienza la desactivacion del modo ahorro, los leds se endenderan gradualmente:
        if( enAhorro )
        {
            setBrillo(true);
        }
        // Los leds cambiaran el brillo por el nuevo valor, siempre que el nuevo valor supere el minimo para que estos se enciendan:
        else if( bActual > bMinimo )
        {
            analogWrite( LED, bActual );
        }
        // Si no se supera el minimo los leds se apagan:
        else
        {
            analogWrite( LED, 0 );
        }
    }
    // Prosigue la desactivacion del modo ahorro:
    else if( enAhorro && cambiandoBrillo )
    {
        setBrillo(true);
    }


    // Registra la ultima vez que se detecto la presencia del usuario:
    if( digitalRead(PIR) )
    {
        ultimoUso = millis();

        // Si se estaba activando el modo ahorro, se desactiva gradualmente:
        if( !enAhorro && cambiandoBrillo )
            setBrillo(true);
    }


    // Activa el modo ahorro si el usuario no ha interactuado con los sensores en el tiempoApagado especificado:
    if( !enAhorro  &&  millis()-ultimoUso > tiempoApagado )
    {
        setBrillo(false);
    }

}



/**
* Enciende o apaga el LED con efecto gradual.
*/
void setBrillo( boolean estado )
{

    if( !cambiandoBrillo )
    {
        bAtenuado = estado ? 0 : bActual;
        cambiandoBrillo = true;
    }


    // Sube el brillo:
    if( estado )
    {
        if( bAtenuado < bActual)
        {
            analogWrite( LED, ++bAtenuado );
            delay(tiempoAtenuado);
        }
        else
        {
            enAhorro = false;
            cambiandoBrillo = false;
            bAnterior = bActual;
        }
    }
    // Baja el brillo:
    else
    {
        if( bAtenuado > 0 )
        {
            analogWrite( LED, --bAtenuado );
            delay(tiempoAtenuado);
        }
        else
        {
            enAhorro = true;
            cambiandoBrillo = false;
            bAnterior = bActual;
        }
    }


}



/**
* Lee el valor del potenciometro y devuelve
* el brillo correspondiente para el led.
*/
byte getBrillo()
{
    return map(analogRead(POT), 0, 1023, 0, 255);
}



/**
* Devuelve la diferencia de brillo entre la medicion
* anterior y la actual.
*/
byte getDiferenciaBrillo()
{
    return bAnterior > bActual ? bAnterior-bActual : bActual-bAnterior;
}




Me queda probarlo en el attiny y pedirle a grafisoft que me haga la placa con su cnc :zpalomitas:
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.
  Responder
#23
Muy buen proyecto giltesa!! Está muy bien pensado y queda de maravilla para tener una iluminación buena en cualquier sitio. Tengo una duda con respecto a este trozo del código, y es que no sé muy bien como va:

Código:
return bAnterior > bActual ? bAnterior-bActual : bActual-bAnterior;

¿Funciona como un if?¿Si bAnterior es mayor que bActual devuelve la diferencia bAnterior-bActual, y si bActual es mayor que bAnterior devuelve la diferencia bActual-bAnterior?
  Responder
#24
Regata escribió:Muy buen proyecto giltesa!! Está muy bien pensado y queda de maravilla para tener una iluminación buena en cualquier sitio. Tengo una duda con respecto a este trozo del código, y es que no sé muy bien como va:

Código:
return bAnterior > bActual ? bAnterior-bActual : bActual-bAnterior;

¿Funciona como un if?¿Si bAnterior es mayor que bActual devuelve la diferencia bAnterior-bActual, y si bActual es mayor que bAnterior devuelve la diferencia bActual-bAnterior?

Tambien tengo la duda como funciona esta linea
  Responder
#25
Si, así es, se trata de un if corto. Si se cumple la condicion se hace la primera operacion y si no la segunda.

Esto:

Código:
byte getDiferenciaBrillo()
{
    return bAnterior > bActual ? bAnterior-bActual : bActual-bAnterior;
}

Es igual a la versión larga:

Código:
byte getDiferenciaBrillo()
{
    if( bAnterior > bActual )
    {
        return bAnterior-bActual;
    }
    else
    {
        return bActual-bAnterior;
    }
}

Para cosas sencillas queda muy bien Sonrisa


PD: http://es.wikipedia.org/wiki/Operador_ternario
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.
  Responder
#26
Hostia que bueno, nunca te acostarás sin saber una cosa más, la verdad es que está muy bien. Voy a seguir mirando lo del operador ternario!! Gracias
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
Información DUDA Adafruit Neo Pixel, 2 aros led a diferentes ms...? SOLUCIONADO luciano 1 0 15-07-2023, 06:11 AM
Último mensaje: luciano
  CONTROLAR CUATRO TIRAS LED WS2812B CON ARDUINO NAVIDADES MAFALDA74 10 6,257 28-03-2019, 08:44 AM
Último mensaje: shiryou
  Tiras de Led NeoPixel. hansugrove 2 1,778 01-01-2018, 05:25 PM
Último mensaje: hansugrove
  led rgb tazma 3 1,721 06-05-2016, 03:46 PM
Último mensaje: WeSo
  Proyecto: Base de carga para relojes automáticos miguelgomez18 22 6,469 10-04-2016, 03:49 PM
Último mensaje: miguelgomez18