Luz de la noche de arduino y el proyecto de alarma amanecer
Los seres humanos están programados de forma natural para despertar con el amanecer-vida moderna tristemente es dictado por un reloj arbitraria, a menudo nos obliga a despertar cuando no hay luz natural. Hoy en día, vamos a hacer un reloj de alarma de la salida del sol, que le despertará suavemente y poco a poco sin tener que recurrir a una máquina de ruido de decisiones ofensivo.
Vídeo: Alarma con Sensor de Movimiento PIR - Arduino - Programacion Paso a Paso
Si hacer un reloj de alarma de la salida del sol es un poco demasiado para usted, echa un vistazo a estos y iPhone aplicaciones de Android que detectan cuando mejor para despertar a los movimientos corporales, asegurando que no está apartó de ese sueño increíble, pero en cambio, despierta la sensación brillante y fresco - que realmente hacen el trabajo.Utilice estas aplicaciones para ayudarle a dormir mejor [Android & iOS]Utilice estas aplicaciones para ayudarle a dormir mejor [Android & iOS]Después de un día agitado, lo mejor que puede hacer es conseguir una cantidad beneficiosa de sueño. Siempre hay nuevos estudios que parecían demostrar que lo importante del sueño es realmente a una persona, mejorando ...Lee mas
Perfil del proyecto
La parte principal del proyecto será algo de luz tira de LED 5 metros establecido alrededor de la cama. Vamos a poder que estas con una alimentación externa de 12 voltios, cambiamos el uso de algunos transistores MOSFET N. La configuración de esta parte será idéntica a la sistema de iluminación dinámica He construido antes.
El tiempo será un problema - ya que este es un prototipo, que va a configurar el Arduino la cuenta atrás desde cada vez que se reinicia. En teoría, sólo hay que perder un segundo o dos cada día, pero lo ideal sería incluir un “reloj de tiempo real” chip para hacer esto de manera más fiable. La alarma de la salida del sol se iniciará 30 minutos antes de la hora de despertarse, y poco a poco aumentar el nivel de salida hasta que esté al 100% de brillo - esto debería ser suficiente para despertarnos, a pesar de que es una buena idea para mantener el uso de su reloj despertador regular hasta que su cuerpo es acostumbrado.
También voy a estar incorporando una luz de noche en este proyecto, que detecta el movimiento y activa una luz de bajo nivel discreto debajo de la cama con un tiempo de 3 minutos a cabo, aparte de las luces LED como las que haría que tanto mi esposa y yo a despierto . La iluminación debajo de la cama será una fuente de alimentación comercial, así que voy a cortar un relé dentro de una toma de corriente para encender que encendido y apagado. Si no se siente cómodo trabajando con 110-240 alimentación CA bajo ninguna circunstancia (y que generalmente es una buena regla a tener), a continuación, conectar un transmisor inalámbrico de 433 MHz con tomas de conexión, como se indica en el proyecto de automatización del hogar Frambuesa Pi Arduino.La domótica con Frambuesa Pi y ArduinoLa domótica con Frambuesa Pi y ArduinoEl mercado de la automatización del hogar se inunda con los sistemas de consumo costosos, incompatibles entre sí y costosos de instalar. Si usted tiene un Pi de frambuesa y un Arduino, básicamente se puede lograr lo mismo en ...Lee mas
Lista de partes y esquemática
- Arduino
- Conjunto de luces de tira LED RGB
- fuente de alimentación de 12 voltios
- 3 x MOSFET N transistores (utilizo tipo STP16NF06FP)
- Relay y toma de corriente, o tomas de corriente controlada inalámbrico y el transmisor adecuado
- Su elección de la luz de la noche (red regulares alimentados con enchufe está muy bien)
- sensor PIR movimiento (HC-SR501), o un sonar SC-04 (no es tan eficaz)
- Sensor de luz
- Código del proyecto - pero sigue leyendo para asegurarse de que entiende cómo personalizar todo.
Aquí está el esquema completo.
Hasta el cableado de un relé
Nota: Salte esta sección si desea utilizar las luces RGB como una luz de noche, así - esto es específicamente para la conexión de un cable de alimentación separadas luz accionada.
Para cambiar la fuente de alimentación, el relé se necesitará para la tensión nominal - 110V o 240V AC dependiendo de donde usted vive - y más que el amperaje total que será el cambio. El que yo he usado de este paquete de sensores (Exención de responsabilidad: que es mi tienda) es 250VAC / 10A, por lo que debemos estar seguros. Relés tienen una com puerto, por lo general en el centro, que debe ser conectado al cable de alta tensión que entra en el módulo adicional a continuación, conectar la toma terminal activo a la NO (normalmente abierto). No debería tener que decirle que no lo hiciera Wile está enchufado a una toma, o vas a morir. Si tienes miedo de jugar con la tensión de red, el uso inalámbrico conmuta enchufes en su lugar.
La tierra y los cables neutros deben ir directamente a la toma de corriente y no tocarán el relé. Puede que no tenga una línea de tierra en los EE.UU.. Es su responsabilidad conocer el código de colores de los cables en su área local - si usted no podría de otro modo cablear un enchufe regular en su casa o volver a colocar un tapón, no trate de incorporación de un relé en uno!
Para probar, el pasador de alambre de señal del relé a 12, a continuación, ejecutar un programa sencillo abrir y cerrar modificado para que funcione en el pin 12, no 13, como es el predeterminado. Su toma debe encender y apagar cada pocos segundos. La razón por la que no estoy usando el pin 13 es debido a que durante el proceso de carga, los incendios a bordo de LED en rápida sucesión para indicar la actividad de serie, lo que causaría que el relé se active también.
Conseguir momento adecuado
funciones de temporización y reloj son difíciles que no tienen acceso a una conexión de red o dedicada Reloj en tiempo real (Que incluyen sus propias baterías para mantener el reloj va incluso cuando el principal Arduino no tiene poder). Para mantener los costos bajos, voy a engañar. Voy a estar codificando una hora de inicio para el Arduino para comenzar es, por tanto, los tiempos de countdown- serán relativos a esta hora de inicio. Cada 24 horas, el reloj se reiniciará. El código de función de reloj a continuación se asegura que las variables globales currentMillis y currentMinutes son correctas cada día. El Arduino no debe perder más de unos pocos segundos cada 45 días- sin embargo, este estilo no modificable de tiempo es bastante limitado en el que un corte de energía o reinicio accidental puede romper todo, por lo que este es sin duda un área que podría mejorarse . Si el tiempo no perder la sincronización, sólo tiene que restablecer el Arduino a su hora de inicio programada.
El código debe ser fácil de entender.
vacío reloj(){Si(Millis() gt; = previousMillis+86400000){// ha transcurrido un día completo, restablezca el reloj-previousMillis +=86400000-}currentMillis = Millis() - previousMillis- // esto mantiene nuestros currentMillis la misma cada díacurrentMinutes = (currentMillis/1000)/60-}
Función de luz nocturna
He separado los bucles principales funciones distintas en lo que es más fácil de leer y retirar o ajustar. los Luz de noche() función sólo opera entre las horas de cuando el Arduino se restableció (estoy asumiendo que probablemente va a hacer esto en o alrededor de la hora de acostarse, cuando está oscuro), y la salida del sol hasta que la alarma se debe a comenzar. Había probado inicialmente para usar una resistencia dependiente de la luz, pero no son muy sensibles a la luz azul (que pasa a ser el color que estoy usando para la luz de la noche), y difícil de calibrar la derecha. Usando el reloj tiene más sentido, de todos modos. Usaremos el mundial currentMinutes variable, que se restablece cada día.
El sensor PIR puede ser sea un poco peculiar si nunca ha usado uno antes, aunque el cableado de arriba no es difícil - encontrará VCC, GND, y FUERA claramente etiquetado en la parte posterior. Hay dos resistencias variables thee también- la de la etiqueta RX determina alcance (hasta unos 7 metros), y otro marcado TX determina demora. El retardo es de 5 segundos en él es el más bajo de ajuste (tope a la izquierda), y significa que cualquier movimiento momentáneo se disparará al menos 5 segundos de estado “encendido” del sensor. Sin embargo, también determina el retardo entre estados activos - por lo que si 5 segundos transcurrido y no se detecta movimiento, el sensor envía una señal de baja durante al menos 5 segundos, incluso si hay movimiento durante ese período. Si usted tiene el retardo ajustado muy alto en alrededor de 30 segundos, puede parecer que el sensor está roto.
Vídeo: Proyectos Faciles de Elecetronica Como Hacer un Sensor de Luz (Luz Automatica)
Si estás durmiendo solo y no les importa usar las mismas tiras de luz RGB, tanto para la alarma de la salida del sol y la luz de noche, usted debe ser capaz de ajustar el código con bastante facilidad.
vacío Luz de noche(){// Sólo el trabajo entre las horas de -gt de reposición; amanecer. Si(currentMinutes lt; minutesUntilSunrise){Si(digitalRead(desencadenar) == 1){nightLightTimeOff = Millis()+nightLightTimeOut- // activar, o extender el tiempo hasta apagar la luzDe serie.println("La activación de luz nocturna")-}}// Active luz sobre si es necesarioSi(Millis() lt; nightLightTimeOff){digitalWrite(Luz de noche,ALTO)-}más{digitalWrite(Luz de noche,BAJO)-}}
alarma de la salida del sol
Por simplicidad, voy a utilizar el valor de color RGB 255,255,0 de una salida del sol de color amarillo oscuro - de esta manera el incremento en ambos canales de color será el mismo. Si encuentras que te está despertarse demasiado temprano, considere comenzar con un color rojo oscuro y decoloración hacia el amarillo o blanco. La rampa hasta que he utilizado en apenas lineal - es posible que desee investigar el uso de una curva más natural para los valores de brillo.
Vídeo: Alarma láser y sensor de luz LDR arduino
La función es simple - que funciona cuánto la luz debe ser incrementado por cada segundo que es tal en su brillo máximo después de 30 minutos en período- multiplica entonces por que sin embargo muchos segundos que es actualmente en la salida del sol. Si ya está en su brillo máximo, que permanece encendida durante otros 10 minutos para asegurarse de que está arriba (y si todavía no estás arriba, probablemente debería tener una alarma de marcha atrás en su lugar).
vacío sunrisealarm(){// cada segundo durante el período minite 30 debería aumentar el valor de color por:flotador incremento = (flotador) 255/(30*60)-// rojo 255, verde 255 nos da un brillo intenso color amarillo Si(currentMinutes gt; = minutesUntilSunrise){// amanecer comienza! flotador currentVal = (flotador)((currentMillis/1000) - (minutesUntilSunrise*60)) * incremento-De serie.impresión("El valor actual de la salida del sol:")-De serie.println(currentVal)-// en la aceleración, escribir el valor actual de X minutos incremento de brilloSi(currentVal lt; 255){analogWrite(ROJO,currentVal)-analogWrite(VERDE,currentVal)-}más Si(currentMinutes - minutesUntilSunrise lt; 40){// una vez que estemos en su brillo máximo, mantener las luces encendidas durante 10 minutos másanalogWrite(ROJO,255)-analogWrite(VERDE,255)-}más{// Después de eso, los estamos bombardear de nuevo a estado de apagadoanalogWrite(ROJO,0)-analogWrite(VERDE,0)-}}}
Trampas y las ampliaciones futuras
He estado usando esto para las últimas semanas ahora y es realmente ayudar a despertar sintiéndose más renovado y con un buen tiempo- la luz nocturna funciona muy bien también. No es perfecto, sin embargo, así que aquí tiene algunas cosas que necesitan trabajo y las lecciones aprendidas durante la construcción.
Al hacer este proyecto, me encontré con un montón de problemas de tratar con un gran número, por lo que si usted planea modificar el código por favor tengan esto en cuenta. En el lenguaje C, el tipificación de las variables es muy importante - un número no siempre es sólo un número. Por ejemplo, unsigned long las variables se deben utilizar para almacenar súper grandes números como nos ocupamos cuando se habla de milisegundos, pero incluso un número tan pequeño como 60 000 no se pueden almacenar como un entero regulares (Un unsigned int hubiera sido aceptable para un máximo de 68 000). El punto es, leer sobre sus tipos de variables cuando se utilizan grandes números, y si usted está encontrando errores impares, es probablemente porque una de sus variables no tiene suficientes bits!
También he encontrado un problema con las fugas muy baja tensión de brillo - que conduce a la más pequeña cantidad de la luz que se emite incluso cuando una digitalWrite (RED, 0) señal se emite - no creo que es un problema de hardware con las tiras, ya que trabajan muy bien con los controladores oficiales. Si alguien puede resolver este problema, en la foto de abajo, yo estaría muy agradecido. He intentado resistencias pull abajo, y la limitación de la tensión de salida de los pines de Arduino. I puede ser necesario añadir un circuito de conmutación de potencia simple de tensión de alimentación sólo a la tira de LED cuando en realidad solicitado- o podría ser MOSFETs defectuosos.
Para el trabajo futuro, espero que añadir en un receptor de infrarrojos y duplicar algunas de las características del regulador original - al menos la capacidad de cambiar de color como una luz de uso general, como en este momento este proyecto se vuelve la tira en una noche dedicada ligero. Incluso puede añadir una función automática de tiempo de espera de 30 minutos.
¿Has probado esto, llevado a cabo mejoras, o tiene alguna otra idea? ¡Házmelo saber en los comentarios!