Arduino night light and sunrise projeto alarm

Os seres humanos são naturalmente programado para acordar com a vida moderna infelizmente sunrise- é ditada por um relógio arbitrária, muitas vezes forçando-nos a acordar quando não há luz natural. Hoje, nós estaremos fazendo um relógio do nascer do sol de alarme, que vai suave e lentamente acordá-lo sem recorrer a uma máquina de fazer barulho ofensiva.

Se tornando um relógio do nascer do sol de alarme é um pouco demais para você, confira essas iPhone e aplicativos Android que detectar quando é melhor para acordá-lo por movimentos corporais, garantindo que você não está se afastou esse sonho incrível, mas em vez disso, acorda sentindo-se brilhante e revigorado - eles realmente funcionam.

Esboço do projeto

A parte principal do projeto será de cerca de 5 medidor de luz LED tira colocada ao redor da cama. Vamos alimentar estes com uma fonte externa de 12 volts, ligado usando alguns transistores MOSFET N. A configuração para esta parte será idêntico ao sistema de iluminação dinâmica Eu construí antes.

O sincronismo será um problema - uma vez que este é um protótipo, eu vou ser a criação do Arduino a contagem regressiva de sempre que é reposto. Em teoria, nós só deve perder um segundo ou dois a cada dia, mas o ideal é que incluiria um "relógio de tempo real" chip para fazer isso de forma mais confiável. O alarme do nascer do sol começará 30 minutos antes da hora de despertar e aumentar lentamente o nível de saída até que seja com brilho de 100% - isso deve ser suficiente para nos acordar, mas é uma boa idéia para continuar usando o seu despertador regular até o seu corpo é acostumado.

Eu também vou estar incorporando uma luz noturna para este projecto, que detecta o movimento e ativa uma luz de baixo nível discreto debaixo da cama com um tempo de 3 minutos para fora, separado para as luzes LED como os causaria tanto a minha esposa e eu a acordar . A iluminação debaixo da cama será uma unidade de rede comercial, então eu vou cortar um relé dentro de uma tomada de corrente para transformar essa ligado e desligado. Se você não está confortável trabalhando com 110-240V tomada de corrente eléctrica sob quaisquer circunstâncias (e que geralmente é uma boa regra para ter), em seguida, conectar um transmissor sem fio 433 MHz com tomadas de comutação, conforme descrito no Raspberry Pi Arduino projeto de automação residencial.

Lista de peças e Schematic

  • Arduino
  • Conjunto de tira luzes LED RGB
  • fonte de alimentação de 12 volts
  • 3 x transistores MOSFET N (eu uso tipo STP16NF06FP)
  • Relay e tomada de corrente, ou soquetes controlado sem fio e transmissor adequado
  • Sua escolha de luz da noite (rede regulares alimentados com plug é bom)
  • PIR sensor de movimento (HC-SR501), ou um sonar SC-04 (não tão eficaz)
  • Sensor de luz
  • código do projeto - Mas não continue a ler para ter certeza de entender como personalizar tudo.

Aqui está o esquema completo.

sunrise-alarme-circuito

Fiação até um relé

Nota: Pule esta seção se você quiser usar as luzes RGB como uma luz da noite, bem como - este é especificamente para ligar uma tomada de corrente separadas luz alimentado. 

Para comutação de alimentação eléctrica, o seu relé precisará classificado para a tensão - 110V ou 240V AC dependendo de onde você vive - e mais do que a amperagem total que será a mudança. A que eu usei a partir desta -sensores (Disclaimer: essa é a minha loja) é 250VAC / 10A, por isso, deve ser seguro. Relés têm uma com porto, geralmente no centro, que deve ser conectado ao fio vivo entrando no plug, em seguida, conecte o terminal ao vivo soquete para o NÃO (Normalmente aberto). Eu não deveria ter que dizer-lhe para não fazer isso wile ele está conectado a uma tomada, ou você vai morrer. Se você tem medo de mexer com energia da rede, utilização sem fios ligado soquetes vez.

relay-fiação

A terra e cabos neutros deve ir direto para o soquete e não vai tocar o relé. Você não pode ter uma linha de terra em os EUA. É sua responsabilidade conhecer o código de cores de fios em sua área local - Se você não poderiam conectar um soquete regular em sua casa ou religar um plugue, não tente a incorporação de um relé em um!

Para testar, fio o pino do sinal de retransmissão a 12, em seguida, executar um programa piscar simples modificado para funcionar no pino 12, e não 13, como é o padrão. O soquete deve ligar e desligar a cada poucos segundos. A razão pela qual eu não estou usando o pino 13 é porque durante o processo de carregamento, os incêndios a bordo de LED em rápida sucessão para indicar a atividade de série, o que faria com que o relé para ser ativado também.

Obtendo momento certo

funções de temporização e relógio são difíceis sem acesso a uma conexão de rede ou dedicada Relógio de tempo real (Que incluem suas próprias baterias para manter o relógio indo mesmo quando o principal Arduino não tem poder). Para manter os custos baixos, eu vou fazer batota. Vou ser codificar uma hora de início para o Arduino para começar é timings countdown- será, portanto, em relação a esta hora de início. Cada 24 horas, o relógio irá repor. O código de função de relógio abaixo garante que as variáveis ​​globais currentMillis e currentMinutes estão corretos a cada dia. O Arduino não deve perder mais do que alguns segundos a cada 45 dias- no entanto, este estilo hard-coded de timing é bastante limitado na medida em que um corte de energia ou reinicialização acidental vai quebrar tudo, então este é certamente uma área que poderia ser melhorado . Se os tempos não ficar fora de sincronia, basta redefinir o Arduino em seu aparelho de tempo de partida.

O código deve ser fácil de entender.

relógio void () {if (millis ()> = previousMillis + 86400000) {// um dia inteiro tenha decorrido, redefinir o relógio-previousMillis + = 86400000-} currentMillis = millis () - previousMillis- // isso mantém nossos currentMillis os mesmo a cada daycurrentMinutes = (currentMillis / 1000) / 60-}

Função Night Light

Eu tenho separados os principais circuitos em funções distintas, por isso é mais fácil de ler e remover ou ajustar. o luz noturna() função só funciona entre as horas de quando o Arduino foi reposto (eu estou supondo que você provavelmente vai fazer isso em ou em torno de deitar, quando está escuro), e até que o alarme do nascer do sol é devido a começar. Eu tinha inicialmente tentou usar um resistor dependente da luz, mas eles não são muito sensíveis à luz azul (que passa a ser a cor que estou usando para a luz da noite), e difícil de calibrar direita. Usando o relógio faz mais sentido, de qualquer maneira. Nós vamos usar o mundial currentMinutes variável, que fica redefinir a cada dia.

O sensor PIR pode ser ser um pouco peculiar, se você nunca usou um antes, embora a fiação-lo não é difícil - você encontrará VCC, GND, e FORA claramente identificados na parte de trás. Há dois ti resistências variáveis ​​também- uma marcados RX determina gama (até cerca de 7m), e outra TX marcado determina atraso. O atraso é de 5 segundos em que é menor definição (totalmente anti-horário), e significa que qualquer movimento momentâneo irá disparar pelo menos 5 segundos de estado "ligado" a partir do sensor. No entanto, também determina o atraso entre estados activos - assim se 5 segundos decorrido e nenhum movimento for detectado, o sensor envia um sinal para baixo, pelo menos, 5 segundos, mesmo se não houver movimento durante esse período. Se você tiver o atraso definido muito alto em cerca de 30 segundos, ele pode parecer como o sensor está quebrado.

pir-Sensor

Se você é dormir sozinho e não se importa com as mesmas luzes de tira RGB tanto para o alarme do nascer do sol e luz da noite, você deve ser capaz de ajustar o código com bastante facilidade.

vazio noturna () {// Só funciona entre as horas de redefinição -> sunrise.if (currentMinutes < minutesUntilSunrise){if(digitalRead(trigger) == 1){nightLightTimeOff = millis()+nightLightTimeOut- // activate, or extend the time until turning off the lightSerial.println("Activating nightlight")-}}//Turn light on if neededif(millis() < nightLightTimeOff){digitalWrite(nightLight,HIGH)-}else{digitalWrite(nightLight,LOW)-}}

Alarme Sunrise

Para simplificar, vou usar o valor de cor RGB 255,255,0 para um nascer do sol amarelo forte - desta forma o incremento em ambos os canais de cor será a mesma. Se você acha que está te acordar muito cedo, considere começar com um vermelho escuro e desaparecendo em direção amarelo ou branco. A rampa até que eu usei em apenas linear - você pode querer investigar usando uma curva mais natural para os valores de brilho.

A função é simples - ele funciona o quanto a luz deve ser incrementado por cada segundo como ele se encontra em pleno brilho após 30 minutos de period- seguida, multiplica que por porém muitos segundos atualmente no nascer do sol. Se ele já está em pleno brilho, ele permanece por mais 10 minutos para se certificar de que você está fazendo (e se você ainda não está acima, você provavelmente deve ter um alarme de backup no lugar).

sunrisealarm void () {// a cada segundo durante o período minite 30 deve aumentar o valor da cor por: float incremento = (float) 255 / (30 * 60) - // vermelho 255, verde 255 nos dá yellowif brilho total (currentMinutes> = minutesUntilSunrise) {// nascer do sol começa flutuar currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * incremento-Serial.print ( "valor atual para o nascer do sol:"!) - Serial.println (currentVal) - // durante a rampa acima, escreva o valor atual de minutos X brilho incrementif (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 longeranalogWrite(RED,255)-analogWrite(GREEN,255)-}else{//after that, we`re nuking them back to off stateanalogWrite(RED,0)-analogWrite(GREEN,0)-}}}

Armadilhas e futuras atualizações

Eu tenho usado isso para as últimas semanas e agora ele está realmente ajudando a acordar sentindo mais atualizada e em um decente tempo- o nightlight funciona muito bem também. Não é perfeito, porém, é tão aqui algumas coisas que precisam de trabalho e as lições aprendidas durante a construção.

sunrise-alarme

Ao fazer esse projeto, eu encontrei muitos problemas de lidar com grandes números, por isso, se você está pensando em modificar o código por favor, tenha isso em mente. Em linguagem C, o digitação de suas variáveis ​​é muito importante - Um número nem sempre é apenas um número. Por exemplo, unsigned long variáveis ​​devem ser usados ​​para armazenar super-grandes números como lidamos com quando se fala em milissegundos, mas até mesmo um número tão pequeno quanto 60.000 não pode ser armazenado como um inteiro regulares (Um int não assinado teria sido aceitável para até 68.000). O ponto é, ler sobre os tipos de variáveis quando se utiliza grandes números e, se você está encontrando erros estranhos, provavelmente é porque uma das suas variáveis ​​não tem bits suficientes!

Eu também encontrei um problema com vazamentos muito baixa tensão brilho - levando à menor quantidade de luz a ser emitida mesmo quando um digitalWrite (RED, 0) sinal é emitido - Eu não acho que é problema de hardware com as tiras uma vez que eles trabalham muito bem com os controladores oficiais. Se alguém pode resolver este problema, na foto abaixo, eu ficaria muito grato. Eu tentei puxar para baixo resistores, e limitando a tensão de saída dos pinos do Arduino. I pode precisar adicionar um circuito de comutação de potência simples única tensão de alimentação para a faixa de LED, quando, na verdade, necessário- ou poderia ser MOSFETs defeituosos.

luz de fuga

Para o trabalho futuro, eu estou esperando para adicionar em um receptor de IR e duplicar algumas das características do controlador original - pelo menos a capacidade de mudar de cor como uma luz de uso geral, como agora esse projeto transforma a faixa em uma noite dedicada leve. I pode até mesmo adicionar uma função de desligamento automático de 30 minutos.

Você já tentou isso, fez melhorias, ou tem outras ideias? Deixe-me saber nos comentários!

» » Arduino night light and sunrise projeto alarm