Proyecto de alarma de luz nocturna y amanecer de Arduino

  • Lesley Fowler
  • 0
  • 3330
  • 364
Anuncio

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 despertar cuando no hay luz natural. Hoy, haremos un despertador de amanecer, que lo despertará suave y lentamente sin recurrir a una máquina ofensiva que hace ruido.

Si hacer una alarma de amanecer es demasiado para ti, mira estas aplicaciones de iPhone y Android. Usa estas aplicaciones para dormir mejor [Android e iOS] Usa estas aplicaciones para dormir mejor [Android e iOS] Después de un ajetreo día, lo mejor que puede hacer es obtener una cantidad beneficiosa de sueño. Siempre aparecen nuevos estudios que demuestran cuán importante es realmente el sueño para una persona, mejorando ... que detectan cuándo es mejor despertarlo con movimientos corporales ¿Puede una aplicación realmente ayudarlo a dormir mejor? ¿Puede una aplicación realmente ayudarlo a dormir mejor? Siempre he sido un poco experimentador del sueño, ya que durante gran parte de mi vida mantuve un meticuloso diario de sueños y estudié todo lo que pude sobre dormir en el proceso. Hay un ..., asegurando que no te alejes de ese sueño increíble, sino que te despiertas sintiéndote brillante y renovado: 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 un suministro externo de 12 voltios, conmutado con algunos transistores MOSFET N. La configuración para esta parte será idéntica al sistema de iluminación dinámica. Cree su propia iluminación ambiental dinámica para un centro multimedia. Construya 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 a todo volumen? O ... construí antes.

El tiempo será un problema: dado que este es un prototipo, configuraré el Arduino para que haga una cuenta regresiva desde que se restablezca. En teoría, solo deberíamos perder un segundo o dos cada día, pero idealmente incluiríamos un “reloj en tiempo real” chip para hacer esto de manera más confiable. La alarma de amanecer 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 despertador habitual hasta que su cuerpo esté encendido. acostumbrado.

También incorporaré una luz nocturna en este proyecto, que detecta el movimiento y activa una luz discreta de bajo nivel debajo de la cama con un tiempo de espera de 3 minutos, separada de las luces LED, ya que eso causaría que mi esposa y yo nos despertemos. . La iluminación debajo de la cama será una unidad de red comercial, así que piratearé un relé dentro de un enchufe para encenderlo y apagarlo. Si no se siente cómodo trabajando con una alimentación de corriente alterna de 110-240v bajo ninguna circunstancia (y generalmente es una buena regla), conecte un transmisor inalámbrico de 433 MHz con enchufes 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 un Raspberry Pi y un Arduino, básicamente puedes lograr lo mismo en ... .

Lista de piezas y esquema

  • Arduino
  • Conjunto de tiras de luces LED RGB
  • Fuente de alimentación de 12 voltios
  • 3 x transistores MOSFET N (uso el tipo STP16NF06FP)
  • Relé y toma de corriente, o tomas con control inalámbrico y transmisor adecuado
  • Su elección de luz nocturna (la red eléctrica normal con enchufe está bien)
  • Sensor de movimiento PIR (HC-SR501) o una sonda SC-04 (no tan efectiva)
  • Sensor de luz
  • Código del proyecto, pero siga leyendo para asegurarse de que comprende cómo personalizar todo.

Aquí está el esquema completo.

Cableado de un relé

Nota: Omita esta sección si desea utilizar las luces RGB como luz nocturna también; esto es específicamente para encender una luz de red separada.

Para cambiar la alimentación de la red, su relé necesitará un voltaje nominal - 110V o 240V AC 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, entonces deberíamos estar a salvo. Los relés tienen un com puerto, generalmente en el centro, que debe conectarse al cable con corriente que entra en el enchufe; luego conecte el terminal de toma de corriente al NO (normalmente abierto). No debería tener que decirte que no hagas esto mientras esté enchufado a una toma de corriente, o morirás. Si tiene miedo de meterse con la red eléctrica, use enchufes inalámbricos en su lugar.

Los cables de tierra y neutro deben ir directamente al enchufe y no tocarán el relé. Es posible que no tenga una línea de tierra en los EE. UU.. Es su responsabilidad conocer la codificación de color de los cables en su área local. - Si no podría conectar un enchufe normal en su hogar o volver a conectar un enchufe, no intente incrustar un relé en uno!

Para realizar la prueba, 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 en el 13, como está predeterminado. Su enchufe debe encenderse y apagarse cada pocos segundos. La razón por la que no estoy usando el pin 13 es porque durante el proceso de carga, el LED incorporado se dispara en rápida sucesión para indicar actividad en serie, lo que haría que el relé se active también.

Obteniendo el tiempo correcto

Las funciones de temporización y reloj son difíciles sin acceso a una conexión de red o dedicada Reloj en tiempo real (Estos 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. Voy a programar una hora de inicio para que el Arduino comience su 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 se asegura de que las variables globales currentMillis y currentMinutes son correctos cada día El Arduino no debería perder más de unos segundos cada 45 días; sin embargo, este estilo de tiempo codificado es bastante limitado, ya que un corte de energía o un reinicio accidental lo romperán todo, por lo que este es ciertamente un área que podría mejorarse. Si el tiempo no se sincroniza, 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; anteriorMillis + = 86400000;  currentMillis = millis () - previousMillis; // esto mantiene nuestros currentMillis iguales todos los días currentMinutes = (currentMillis / 1000) / 60;  

Función de luz nocturna

He separado los bucles principales en distintas funciones para que sea más fácil de leer, 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, cuando está oscuro), y hasta que la alarma del amanecer comience. Inicialmente intenté usar una resistencia dependiente de la luz, pero no son muy sensibles a la luz azul (que resulta ser el color que estoy usando para la luz nocturna) y son difíciles de calibrar correctamente. Usar el reloj tiene más sentido, de todos modos. Usaremos el global currentMinutes variable, que se restablece cada día.

El sensor PIR puede ser un poco peculiar si nunca ha usado uno antes, aunque conectarlo no es difícil: encontrará VCC, GND, y FUERA claramente etiquetado en la parte posterior. También hay dos resistencias variables; la etiquetada RX determina el rango (hasta aproximadamente 7 m), y otra etiquetada TX determina el retraso. El retraso es de 5 segundos en su configuración más baja (totalmente en sentido antihorario), y significa que cualquier movimiento momentáneo activará al menos 5 segundos de “en” estado del sensor. Sin embargo, también determina el retraso entre los estados activos, por lo que si transcurren 5 segundos y no se detecta movimiento, el sensor enviará una señal baja durante al menos 5 segundos, incluso si hay movimiento durante ese período. Si tiene el retraso configurado realmente alto en alrededor de 30 segundos, puede parecer que el sensor está roto.

Si duermes solo y no te importa usar las mismas tiras de luces RGB tanto para la alarma de amanecer como para la luz nocturna, deberías poder ajustar el código con la suficiente facilidad.

void nightlight () // Solo funciona 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 amarillo intenso, de esta manera el incremento en ambos canales de color será el mismo. Si descubres que te está despertando demasiado temprano, considera comenzar con un rojo intenso y desvanecerse hacia el amarillo o el blanco. La aceleración que utilicé es solo lineal: es posible que desee investigar utilizando una curva más natural para los valores de brillo.

La función es simple: calcula la cantidad de luz que debe incrementarse por segundo para que tenga un brillo máximo después de un período de 30 minutos; luego multiplica eso por la cantidad de segundos que esté en el amanecer. Si ya está a pleno brillo, permanece encendido durante 10 minutos más para asegurarse de que está activo (y si aún no está activo, probablemente debería tener una alarma de respaldo en su lugar).

void sunrisealarm () // cada segundo durante el período de 30 minutos debería aumentar el valor del color en: float increment = (float) 255 / (30 * 60); // rojo 255, verde 255 nos da brillo completo amarillo si (currentMinutes> = minutesUntilSunrise) // comienza el amanecer! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * incremento; Serial.print ("Valor actual para sunrise:"); Serial.println (currentVal); // durante la aceleración, escriba el valor actual de minutos X incremento de brillo if (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);    

Errores y mejoras futuras

He estado usando esto durante las últimas semanas y realmente me está ayudando a despertar sintiéndome más renovado y en un momento decente; la luz nocturna también funciona muy bien. 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, me encontré con muchos problemas al tratar con grandes números, por lo 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 siempre es 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 puede almacenarse como un entero regular (un int sin firmar hubiera sido aceptable por hasta 68,000). El punto es, lea sobre sus tipos de variables cuando use números grandes, y si encuentra errores extraños, probablemente sea porque una de sus variables no tiene suficientes bits!

También he encontrado un problema con fugas de voltaje de muy bajo brillo, lo que lleva a la menor cantidad de luz emitida incluso cuando un digitalWrite (ROJO, 0) se emite la señal: 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 foto a continuación, estaría muy agradecido. He intentado extraer resistencias y limitar el voltaje de salida de los pines Arduino. Es posible que necesite 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 un MOSFET defectuoso.

Para futuros trabajos, espero agregar un receptor IR y duplicar algunas de las características del controlador original, al menos la capacidad de cambiar los colores como una luz de uso general, ya que en este momento este proyecto convierte 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, has hecho mejoras u otras ideas? Házmelo saber en los comentarios!




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.