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 estos iPhone y Aplicaciones de Android Use estas aplicaciones para dormir mejor [Android e iOS]Después de un día agitado, lo mejor que puede hacer es dormir bien. Siempre aparecen nuevos estudios que prueban la importancia del sueño para una persona, mejorando ... Lee mas que detectan cuando es mejor despertarte por movimientos corporales ¿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 diario de sueños meticuloso y estudié todo lo que pude sobre dormir en el proceso. Hay un... Lee mas
, asegurándote de que no te alejas de ese sueño increíble, sino que 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 de esta parte será idéntica a la sistema de iluminación dinámica Construya su propia iluminación ambiental dinámica para un centro multimediaSi ve muchas películas en su PC o centro multimedia, estoy seguro de que se ha enfrentado al dilema de la iluminación; ¿Apagas completamente todas las luces? ¿Los mantienes a todo volumen? O... Lee mas Yo 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 chip de "reloj en tiempo real" para hacer esto de manera más confiable. La alarma de amanecer se activará 30 minutos antes de la hora de despertarse y aumentará lentamente el nivel de salida hasta alcanzar un brillo del 100%. esto debería ser suficiente para despertarnos, aunque es una buena idea seguir usando su despertador habitual hasta que su cuerpo esté acostumbrado eso.
También incorporaré una luz nocturna en este proyecto, que detecta el movimiento y activa un nivel bajo discreto luz debajo de la cama con un tiempo de espera de 3 minutos, separado de las luces LED, ya que eso causaría que mi esposa y yo nos despertemos arriba. La iluminación debajo de la cama será una unidad de red comercial, por lo que piratearé un relé dentro de un enchufe para encenderlo y apagarlo. Si no se siente cómodo trabajando con una fuente de alimentación de CA de 110-240 V bajo ninguna circunstancia (y eso es generalmente una buena regla), luego 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 ArduinoEl mercado de la automatización del hogar está inundado de sistemas de consumo caros, incompatibles entre sí y costosos de instalar. Si tienes un Raspberry Pi y un Arduino, básicamente puedes lograr lo mismo en ... Lee mas .
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 de proyecto - pero sigue leyendo para asegurarte de que entiendes 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á una tensión 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 vas a morir. 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 pudieras conectar un enchufe normal en tu hogar o volver a conectar un enchufe, ¡no intentes insertar 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é también se active.
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 funcionando 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 sincronización 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 haga a la hora de acostarse o cerca de esa hora, cuando está oscuro), y hasta que comience la alarma del amanecer. 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. Utilizaremos 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, GNDy AFUERA claramente etiquetado en la parte posterior. También hay dos resistencias variables; la etiquetada RX determina el alcance (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 del estado "encendido" del sensor. Sin embargo, también determina el retraso entre los estados activos, por lo que si transcurren 5 segundos y no hay movimiento detectado, 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 luces de tira 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
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 en cada segundo, de modo 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é actualmente en el amanecer. Si ya está a pleno brillo, permanece encendido durante 10 minutos más para asegurarse de que está levantado (y si todavía no está levantado, 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) {// una vez que tengamos el brillo completo, mantenga las luces encendidas durante 10 minutos más analogWrite (RED, 255); analogWrite (VERDE, 255); } else {// después de eso, los volveremos a colocar en estado desactivado analogWrite (RED, 0); analogWrite (VERDE, 0); } } }
Errores y mejoras futuras
He estado usando esto durante las últimas semanas y realmente me está ayudando a despertar sintiéndome más fresco 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). La cuestión es, lea sobre sus tipos variables cuando usa 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 una 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, en 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!
James tiene una licenciatura en Inteligencia Artificial y está certificado por CompTIA A + y Network +. Es el desarrollador principal de MakeUseOf, y pasa su tiempo libre jugando VR paintball y juegos de mesa. Ha estado construyendo computadoras desde que era un niño.