Luz da noite arduino e projeto de alarme nascer do sol

Video: Alarme com arduino - Laser e LDR

Os seres humanos são naturalmente programado para acordar com a vida, infelizmente moderna 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 nascer do sol de alarme, que vai suave e lentamente acordá-lo sem recorrer a uma máquina de fazer barulho ofensiva.

Video: Projeto com Arduíno: Alarme de segurança com laser e sensor LDR

Se tornando um relógio nascer do sol de alarme é um pouco demais para você, confira essas iPhone e aplicativos Android que detectam 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.Use Estes Apps para ajudar a dormir melhor [Android & iOS]Use Estes Apps para ajudar a dormir melhor [Android & iOS]Depois de um dia agitado, a melhor coisa que você pode fazer é obter uma quantidade benéfica do sono. Há sempre novos estudos aparecendo que provam como o sono importante realmente é uma pessoa, melhorando ...consulte Mais informação

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 do 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 for reiniciado. Em teoria, só deve perder um segundo ou dois a cada dia, mas o ideal seria incluir um “relógio de tempo real” chip para fazer isso de forma mais confiável. O alarme do nascer do sol vai 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 AC rede elétrica 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.Home Automation com Raspberry Pi e ArduinoHome Automation com Raspberry Pi e ArduinoO mercado de automação residencial é inundado com sistemas de consumo caros, incompatíveis um com o outro e caro para instalar. Se você tem um Raspberry Pi e um Arduino, basicamente você pode conseguir a mesma coisa no ...consulte Mais informação

Lista de peças e esquemática

  • Arduino
  • Conjunto de tira luzes LED RGB
  • fonte de alimentação de 12 volts
  • 3 x transistores MOSFET N (I usar tipo STP16NF06FP)
  • Relé e tomada de corrente, ou soquetes controlado sem fios 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.

nascer do sol-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 rede separadas luz alimentado.

Para comutação de alimentação, o seu revezamento terá de classificados para tensão - 110V ou 240V AC dependendo de onde você vive - e mais do que a amperagem total que você será a mudança. O que eu usei a partir deste portasensores (Disclaimer: essa é a minha loja) é 250 V CA / 10A, por isso deve ser seguro. Relés têm uma com porta, geralmente no centro, o qual deve ser ligado ao fio vivo entrando no plug-in, em seguida, ligar o terminal vivo tomada ao NÃO (Normalmente Aberta). 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 eléctrica, utilização sem fios ligado soquetes vez.

relé-fiação

Video: Arduino com Sensor de PIR e LDR Automaçã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 nos 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 de sinal de relé a 12, em seguida, executar um programa piscar simples modificado para trabalhar no pino 12, e não 13 como é padrão. Sua tomada 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 upload, os incêndios a bordo de LED em rápida sucessão para indicar atividade de série, o que faria com que o relé para ser ativado também.

Video: Arduino + sensor luz + 7 segments

Obtendo momento certo

funções de temporização e relógio são difíceis, sem acesso a uma conexão de rede ou dedicado 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. Eu vou ser hardcoding uma hora de início para o Arduino para começar é horários countdown- será, portanto, em relação ao horário 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 correctas 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 em que um corte de energia ou reinicialização acidental vai quebrar tudo, então este é certamente uma área que poderia ser melhorado . Se tempo não ficar fora de sincronia, simplesmente redefinir o Arduino no seu conjunto de tempo de partida.

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

vazio relógio(){E se(millis() gt; = previousMillis+86400000){// um dia inteiro tenha decorrido, redefinir o Clock-previousMillis +=86400000-}currentMillis = millis() - previousMillis- // isso mantém nossos currentMillis o mesmo diacurrentMinutes = (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. Usaremos 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 fiação-lo não é difícil - você encontrará VCC, GND, e FORA claramente identificados na parte de trás. Há duas resistências variáveis ​​ti também- a um marcado RX determina gama (até cerca de 7m), e outra TX marcado determina atraso. O atraso é de 5 segundos e é o parâmetro mais baixo (totalmente anti-horário), e significa que qualquer movimento momentâneo irá provocar, pelo menos, 5 segundos de estado “ligado” a partir do sensor. No entanto, ele também determina o atraso entre os estados ativo - por isso, se 5 segundos decorrido e nenhum movimento é detectado, o sensor envia um sinal de baixa por 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-sensores

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 luz noturna(){// Somente o trabalho entre as horas de -gt reinicialização; nascer do sol. E se(currentMinutes lt; minutesUntilSunrise){E se(digitalRead(desencadear) == 1){nightLightTimeOff = millis()+nightLightTimeOut- // ativar, ou estender o tempo até desligar a luzSerial.println("ativando nightlight")-}}// Ligue luz sobre se necessárioE se(millis() lt; nightLightTimeOff){digitalWrite(luz noturna,ALTO)-}outro{digitalWrite(luz noturna,BAIXO)-}}

Alarme Sunrise

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

A função é simples - ele funciona o quanto a luz deve ser incrementado por cada segundo tal, é 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á, você provavelmente deve ter um alarme de backup no lugar).

vazio sunrisealarm(){// a cada segundo durante o período minite 30 deve aumentar o valor da cor por:flutuador incremento = (flutuador) 255/(30*60)-// vermelho 255, verde 255 nos dá brilho total amarela E se(currentMinutes gt; = minutesUntilSunrise){// nascer do sol começa! flutuador currentVal = (flutuador)((currentMillis/1000) - (minutesUntilSunrise*60)) * incremento-Serial.impressão("valor atual para o nascer do sol:")-Serial.println(currentVal)-// durante a rampa acima, escreva o valor atual de minutos X incremento de brilhoE se(currentVal lt; 255){analogWrite(VERMELHO,currentVal)-analogWrite(VERDE,currentVal)-}outro E se(currentMinutes - minutesUntilSunrise lt; 40){// uma vez que estamos em pleno brilho, manter as luzes acesas por 10 minutos a maisanalogWrite(VERMELHO,255)-analogWrite(VERDE,255)-}outro{// depois disso, estamos nuking-los de volta para o estado offanalogWrite(VERMELHO,0)-analogWrite(VERDE,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, assim aqui algumas coisas que precisam de trabalho e as lições aprendidas durante a construção.

nascer do sol-alarme

Ao fazer esse projeto, eu encontrei muitos problemas de lidar com números grandes, 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 unsigned int teria sido aceitável para até 68000). O ponto é, ler sobre seus tipos de variáveis ​​ao utilizar 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 de muito baixa tensão brilho - levando à menor quantidade de luz a ser emitida mesmo quando um digitalWrite (VERMELHO, 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 luz. 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!


Artigos relacionados