Arduino Night Light y Sunrise Alarm Project
Los humanos están naturalmente programados para despertarse con el amanecer; Lamentablemente, la vida moderna está dictada por un reloj arbitrario, que a menudo nos obliga a despertarnos cuando no hay luz natural. Hoy, haremos un despertador al amanecer, que lo despertará suave y lentamente sin recurrir a una máquina ofensiva para hacer ruido..
Si hacer un despertador al amanecer es demasiado para usted, eche un vistazo a estas aplicaciones de iPhone y Android Use estas aplicaciones para ayudarlo a dormir mejor [Android & iOS] Use estas aplicaciones para ayudarlo a dormir mejor [Android & iOS] Después de una agitación día, lo mejor que puedes hacer es conseguir una buena cantidad de sueño. Siempre aparecen nuevos estudios que demuestran lo importante que es realmente el sueño para una persona, mejorando ... Leer más que detectan cuándo es mejor despertarlo con los movimientos del cuerpo ¿Puede una aplicación realmente ayudarlo a dormir mejor? ¿Puede una aplicación realmente ayudarte a dormir mejor? Siempre he sido un poco experimentador del sueño, durante gran parte de mi vida he mantenido un diario de sueños meticulosos y he estudiado todo lo que pude sobre dormir en el proceso. Hay un ... Leer más, asegurándose de que no te aparten de ese asombroso sueño sino que, en cambio, te despiertes sintiéndote brillante y fresco, realmente funcionan..
Perfil del proyecto
La parte principal del proyecto será una tira de luz LED de 5 metros colocada alrededor de la cama. Los alimentaremos con una fuente de alimentación de 12 voltios externa, conmutada utilizando algunos transistores MOSFET N. La configuración de esta parte será idéntica al sistema de iluminación dinámica. Construya su propia iluminación ambiental dinámica para un centro multimedia. Cree su propia iluminación ambiental dinámica para un centro multimedia. Si ve muchas películas en su PC o centro multimedia, estoy Seguro que te has enfrentado al dilema de la iluminación; ¿Apagas completamente todas las luces? ¿Los mantienes en plena explosión? O ... Leer más que construí antes.
El tiempo será un problema, ya que este es un prototipo, configuraré el Arduino para que realice una cuenta regresiva cada vez que se reinicie. En teoría, solo deberíamos perder uno o dos segundos cada día, pero lo ideal sería incluir un “reloj en tiempo real” Chip para hacer esto de manera más confiable. La alarma de la salida del sol comenzará 30 minutos antes de la hora de despertarse, y aumentará lentamente el nivel de salida hasta que esté al 100% de brillo. Esto debería ser suficiente para despertarnos, aunque es una buena idea seguir usando su reloj de alarma regular hasta que su cuerpo esté encendido. acostumbrado.
También incorporaré una luz nocturna en este proyecto, que detecta movimientos y activa una luz discreta de bajo nivel debajo de la cama con un descanso de 3 minutos, separado de las luces LED, ya que eso provocaría que mi esposa y yo nos despertáramos . La iluminación debajo de la cama será una unidad de red comercial, por lo que hackearé un relé dentro de un enchufe para encenderlo y apagarlo. Si no se siente cómodo trabajando con una alimentación de red de 110-240v CA bajo ninguna circunstancia (y esa es generalmente una buena regla), entonces conecte un transmisor inalámbrico de 433 MHz con tomas de conmutación, como se describe en el proyecto de automatización del hogar Raspberry Pi Arduino Guía de automatización del hogar con Raspberry Pi y Arduino Guía de automatización del hogar con Raspberry Pi y Arduino El mercado de la automatización del hogar está inundado de costosos sistemas de consumo, incompatibles entre sí y costosos de instalar. Si tienes una Raspberry Pi y un Arduino, básicamente puedes lograr lo mismo en… Leer más .
Lista de piezas y esquema
- Arduino
- Juego de tiras de luces LED RGB
- Fuente de alimentación de 12 voltios
- 3 x transistores MOSFET N (yo uso el tipo STP16NF06FP)
- Relé y toma de corriente, o tomas controladas inalámbricas y transmisor adecuado
- Su elección de luz de noche (alimentación normal con enchufe está bien)
- Sensor de movimiento PIR (HC-SR501) o un sonar SC-04 (no es tan efectivo)
- Sensor de luz
- Código del proyecto, pero sigue leyendo para asegurarte de que comprendes cómo personalizar todo.
Aquí está el esquema completo.
Cableando un relé
Nota: Omita esta sección si también desea utilizar las luces RGB como luz nocturna. Esto es específicamente para encender una luz de alimentación de red separada..
Para conmutar la alimentación de red, su relé tendrá que estar clasificado para voltaje - 110V o 240 VCA dependiendo de dónde viva, y más del amperaje total que cambiará. El que he usado de este paquete de sensores. (descargo de responsabilidad: esa es mi tienda) es 250VAC / 10A, por lo que debemos estar seguros. Los relés tienen una com puerto, generalmente en el centro, que se debe conectar al cable vivo que entra en el enchufe; a continuación, conecte el terminal de corriente de socket a la NO (normalmente abierto). No debería tener que decirte que no hagas esto mientras esté enchufado a un tomacorriente, o morirás. Si tiene miedo de meterse con la alimentación de red, utilice en su lugar enchufes inalámbricos..
Los cables de tierra y neutro deben ir directamente al zócalo y no tocarán el relé. Es posible que no tenga una línea de tierra en los Estados Unidos.. Es su responsabilidad conocer el código de colores de los cables en su área local - Si de lo contrario no podría conectar un enchufe normal en su casa o volver a cablear un enchufe, no intente incrustar un relé en uno.!
Para probar, conecte el pin de la señal del relé a 12, luego ejecute un programa de parpadeo simple modificado para trabajar en el pin 12, no 13 como está predeterminado. Su zócalo debe encenderse y apagarse cada pocos segundos. La razón por la que no uso el pin 13 se debe a que, durante el proceso de carga, el LED incorporado se enciende en una sucesión rápida para indicar la actividad en serie, lo que provocaría que el relé se activara también.
Obtener la sincronización correcta
Las funciones de temporización y reloj son difíciles sin acceso a una conexión de red o dedicado Reloj en tiempo real (Estas incluyen sus propias baterías para mantener el reloj en marcha incluso cuando el Arduino principal no tiene energía). Para mantener los costos bajos, voy a hacer trampa. Estaré programando una hora de inicio para que Arduino comience la cuenta regresiva; por lo tanto, los tiempos serán relativos a esta hora de inicio. Cada 24 horas, el reloj se reiniciará. El código de función del reloj a continuación asegura que las variables globales currentMillis y actualMinutos son correctas cada día. El Arduino no debería perder más de unos pocos segundos cada 45 días; sin embargo, este estilo de temporización codificado es bastante limitado, ya que un corte de energía o un reinicio accidental romperán todo, por lo que este es un área en la que se puede mejorar. Si la sincronización se desincroniza, simplemente reinicie el Arduino a la hora de inicio establecida.
El código debe ser fácil de entender.
void clock () if (millis ()> = previousMillis + 86400000) // ha transcurrido un día completo, reinicie el reloj; previoMillis + = 86400000; currentMillis = millis () - previousMillis; // esto mantiene nuestro currentMillis el mismo cada día currentMinutes = (currentMillis / 1000) / 60;
Función de luz nocturna
He separado los bucles principales en funciones distintas para que sea más fácil de leer y eliminar o ajustar. los Luz de noche() La función solo funciona entre las horas en que se reinició el Arduino (supongo que probablemente lo hará alrededor de la hora de acostarse o cuando esté oscuro), y hasta que comience a sonar la alarma del amanecer. Inicialmente había intentado usar una resistencia dependiente de la luz, pero no son muy sensibles a la luz azul (que es el color que estoy usando para la luz nocturna) y son difíciles de calibrar. Usar el reloj tiene más sentido, de todos modos. Usaremos el global actualMinutos variable, que se reinicia cada día.
El sensor PIR puede ser un poco peculiar si nunca ha usado uno antes, aunque no es difícil conectarlo, encontrará VCC, GND, y AFUERA claramente etiquetado en la espalda. Hay dos resistencias variables para ti también; el RX etiquetado determina el rango (hasta aproximadamente 7 m), y otro TX marcado determina el retraso. El retraso es de 5 segundos en su configuración más baja (totalmente en sentido contrario a las agujas del reloj), y significa que cualquier movimiento momentáneo disparará al menos 5 segundos de “en” Estado desde el sensor. Sin embargo, también determina el retraso entre los estados activos; por lo tanto, si transcurren 5 segundos y no se detecta ningún movimiento, el sensor enviará una señal baja durante al menos 5 segundos, incluso si hay movimiento durante ese período. Si tiene el retardo establecido realmente alto en alrededor de 30 segundos, puede parecer que el sensor está roto.
Si está durmiendo solo y no le importa usar las mismas luces de tira RGB para la alarma de la salida del sol y la luz de la noche, debería poder ajustar el código con la suficiente facilidad.
void nightlight () // Solo trabaje entre las horas de reinicio -> amanecer. if (currentMinutes) < minutesUntilSunrise) if(digitalRead(trigger) == 1) nightLightTimeOff = millis()+nightLightTimeOut; // activate, or extend the time until turning off the light Serial.println("Activating nightlight"); //Turn light on if needed if(millis() < nightLightTimeOff) digitalWrite(nightLight,HIGH); else digitalWrite(nightLight,LOW);
Alarma de amanecer
Para simplificar, usaré el valor de color RGB 255,255,0 para un amanecer de color amarillo intenso; de esta manera, el incremento en ambos canales de color será el mismo. Si descubre que lo está despertando demasiado pronto, considere comenzar con un rojo intenso y desvanecerse hacia el amarillo o el blanco. El incremento que he usado solo es lineal: es posible que desee investigar utilizando una curva más natural para los valores de brillo..
La función es simple: determina la cantidad de luz que se debe incrementar en cada segundo, por lo que se obtiene el brillo máximo después de un período de 30 minutos; luego multiplica que por muchos segundos que está actualmente en la salida del sol. Si ya tiene el brillo máximo, permanece encendido durante 10 minutos más para asegurarse de que está levantado (y si aún no está levantado, es probable que tenga una alarma de respaldo en su lugar).
void sunrisealarm () // cada segundo durante el período de 30 minutos debe aumentar el valor del color en: incremento de flotación = (flotar) 255 / (30 * 60); // rojo 255, verde 255 nos da un brillo total amarillo si (currentMinutes> = minutesUntilSunrise) // ¡comienza a amanecer! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * increment; Serial.print ("Valor actual para sunrise:"); Serial.println (currentVal); // durante la aceleración, escriba el valor actual de minutos X incremento de brillo si (currentVal < 255) analogWrite(RED,currentVal); analogWrite(GREEN,currentVal); else if(currentMinutes - minutesUntilSunrise < 40) // once we're at full brightness, keep the lights on for 10 minutes longer analogWrite(RED,255); analogWrite(GREEN,255); else //after that, we're nuking them back to off state analogWrite(RED,0); analogWrite(GREEN,0);
Escollos y actualizaciones futuras
He estado usando esto durante las últimas semanas y realmente me está ayudando a despertarme sintiéndome más renovado y en un momento decente; La luz nocturna funciona muy bien también. Sin embargo, no es perfecto, así que aquí hay algunas cosas que necesitan trabajo y lecciones aprendidas durante la construcción.
Mientras realizaba este proyecto, encontré muchos problemas al tratar con grandes números, así que si planea modificar el código, tenga esto en cuenta. En lenguaje C, el escribir sus variables es muy importante - un número no es siempre solo un número Por ejemplo, sin firmar largo Las variables deben usarse para almacenar números súper grandes como los que tratamos cuando hablamos de milisegundos, pero incluso un número tan pequeño como 60,000 no se puede almacenar como un entero regular (un int sin signo hubiera sido aceptable hasta 68,000). El punto es, lea sobre sus tipos de variables cuando use números grandes, y si está encontrando errores extraños, es probable que una de sus variables no tenga suficientes bits.!
También he encontrado un problema con las fugas de voltaje de muy bajo brillo, lo que lleva a que se emita la menor cantidad de luz incluso cuando escritura digital (rojo, 0) la señal se emite: no creo que sea un problema de hardware con las tiras, ya que funcionan bien con los controladores oficiales. Si alguien puede resolver este problema, en la imagen de abajo, estaría muy agradecido. He intentado desplegar resistencias y limitar el voltaje de salida de los pines Arduino. Es posible que deba agregar un circuito de conmutación de alimentación simple para suministrar solo voltaje a la tira de LED cuando sea realmente necesario; o podría ser MOSFETs defectuoso.
Para futuros trabajos, espero agregar un receptor de infrarrojos y duplicar algunas de las características del controlador original, al menos la capacidad de cambiar de color como luz de uso general, ya que en este momento este proyecto convierte a la tira en una noche dedicada ligero. Incluso puedo agregar una función automática de tiempo de espera de 30 minutos.
¿Has probado esto, hecho mejoras o tienes alguna otra idea? Házmelo saber en los comentarios!
Explorar más sobre: Arduino.