Arduino Night Light e Sunrise Alarm Project

Hoje, faremos um despertador do nascer do sol, que vai gentil e lentamente acordá-lo sem recorrer a uma máquina ofensiva de fazer barulho.

Hoje, faremos um despertador do nascer do sol, que vai gentil e lentamente acordá-lo sem recorrer a uma máquina ofensiva de fazer barulho.
Propaganda

Os seres humanos são naturalmente programados para acordar com o nascer do sol; Infelizmente, a vida moderna é ditada por um relógio arbitrário, muitas vezes forçando-nos a despertar quando não há luz natural. Hoje, faremos um despertador do nascer do sol, que vai gentil e lentamente acordá-lo sem recorrer a uma máquina ofensiva de fazer barulho.

Se criar um despertador do nascer do sol for um pouco demais para você, confira esses aplicativos para iPhone e Android Use estes aplicativos para ajudar você a dormir melhor [Android e iOS] Use esses aplicativos para ajudar você a dormir melhor [Android e iOS] dia, a melhor coisa que você pode fazer é obter uma boa quantidade de sono. Há sempre novos estudos aparecendo que provam o quão importante é realmente o sono para uma pessoa, melhorando ... Leia mais que detectar quando melhor para acordá-lo por movimentos do corpo Pode um aplicativo realmente ajudá-lo a dormir melhor? Pode um aplicativo realmente ajudar você a dormir melhor? Sempre fui um pouco experiente no sono, tendo durante grande parte da minha vida mantido um diário de sonhos meticulosos e estudado o máximo que pude sobre dormir no processo. Há um ... Read More, garantindo que você não seja afastado desse sonho incrível, mas em vez disso, acorde sentindo-se brilhante e revigorado - eles realmente funcionam.

Esboço do Projeto

A parte principal do projeto será uma fita LED de 5 metros colocada ao redor da cama. Vamos alimentá-los com uma fonte externa de 12 volts, usando alguns transistores MOSFET N. A configuração para esta peça será idêntica ao sistema de iluminação dinâmica Crie sua própria iluminação ambiente dinâmica para um Media Center Crie sua própria iluminação ambiente dinâmica para um Media Center Se você assistir a muitos filmes no seu PC ou na central de mídia, com certeza você já enfrentou o dilema da iluminação; você desliga completamente todas as luzes? Você os mantém em plena explosão? Ou ... Leia mais eu construí antes.

O tempo será um problema - como este é um protótipo, eu configurarei o Arduino para fazer a contagem decrescente a partir de quando ele for reinicializado. Em teoria, devemos perder apenas um ou dois segundos a cada dia, mas, idealmente, incluiríamos um chip de "relógio de tempo real" para fazer isso de maneira mais confiável. O alarme do nascer do sol iniciará 30 minutos antes do tempo de despertar e aumentará lentamente o nível de saída até atingir 100% de brilho - isso deve ser suficiente para nos acordar, embora seja uma boa ideia continuar usando o despertador normal até que seu corpo acostumado.

Também estarei incorporando uma luz noturna neste projeto, que detecta movimento e ativa uma discreta luz de baixo nível embaixo da cama com um intervalo de 3 minutos, separado das luzes de LED, pois isso faria com que minha esposa e eu acordássemos. . A iluminação embaixo da cama será uma unidade de rede comercial, então eu vou hackear um relé dentro de uma tomada para ligá-lo e desligá-lo. Se você não estiver confortável em trabalhar com energia de 110-240v AC em nenhuma circunstância (e geralmente é uma boa regra), conecte um transmissor sem fio de 433 MHz com soquetes de comutação, conforme descrito no projeto de automação residencial Raspberry Pi Arduino. Home Automation Guide Com Raspberry Pi e Arduino Home Automation Guide Com Raspberry Pi e Arduino O mercado de automação residencial é inundado com sistemas de consumo caros, incompatíveis entre si e de instalação dispendiosa. Se você tem um Raspberry Pi e um Arduino, basicamente pode conseguir a mesma coisa em ... Leia Mais.

Lista de peças e esquemática

  • Arduino
  • Conjunto de luzes de tira LED RGB
  • Fonte de alimentação de 12 volts
  • 3 x transistores MOSFET N (eu uso o tipo STP16NF06FP)
  • Relé e tomada, ou soquetes controlados sem fio e transmissor adequado
  • Sua escolha de luz noturna (rede elétrica normal com plugue está bem)
  • Sensor de movimento PIR (HC-SR501), ou um sonar SC-04 (não tão eficaz)
  • Sensor de luz
  • Código do projeto - mas leia para ter certeza de que você sabe como personalizar tudo.

Aqui está o esquema completo.

circuito de alarme do nascer do sol

Ligando um relé

Nota : Pule esta seção se você quiser usar as luzes RGB como uma luz noturna também - isto é especificamente para ligar uma luz separada alimentada pela rede elétrica.

Para trocar a energia da rede elétrica, seu relé precisará ser classificado para tensão - 110V ou 240V AC, dependendo de onde você mora - e mais do que a amperagem total que você estará trocando. O que eu usei deste pacote de sensor (disclaimer: essa é minha loja) é 250VAC / 10A, então devemos estar seguros. Os relés têm uma porta de comunicação, geralmente no centro, que deve ser conectada ao fio ligado ao plugue; em seguida, conecte o terminal ao vivo do soquete ao NO (normalmente aberto). Eu não deveria ter que dizer para você não fazer isso enquanto estiver ligado a uma tomada, ou você vai morrer. Se você tem medo de mexer com o poder da rede elétrica, use soquetes comutados sem fio.

relé de fiação

Os cabos terra e neutro devem ir diretamente para o soquete e não tocarão no relé. Você pode não ter uma linha de terra nos EUA. É sua responsabilidade conhecer o código de cores dos fios em sua área local - se você não conseguir conectar uma tomada comum em sua casa ou religar um plugue, não tente incorporar um relé em um só!

Para testar, conecte o pino do sinal de relé a 12 e, em seguida, execute um programa de piscada simples modificado para funcionar no pino 12, e não 13, como é padrão. Seu 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 upload, o LED onboard dispara em rápida sucessão para indicar a atividade serial, o que faria com que o relay fosse ativado também.

Obtendo o tempo certo

As funções de temporização e relógio são difíceis sem acesso a uma conexão de rede ou ao Realtime Clock dedicado (elas incluem suas próprias baterias para manter o relógio funcionando mesmo quando o Arduino principal não tem energia). Para manter os custos baixos, vou trapacear. Vou codificar a hora de início para o Arduino começar a contagem regressiva; os horários serão, portanto, relativos a esse horário de início. A cada 24 horas, o relógio será redefinido. O código de função do relógio abaixo garante que as variáveis ​​globais currentMillis e currentMinutes estejam corretas a cada dia. O Arduino não deve perder mais do que alguns segundos a cada 45 dias; no entanto, esse estilo de tempo embutido é bastante limitado, pois um corte de energia ou uma reinicialização acidental quebrará tudo, então essa é certamente uma área que poderia ser melhorada. Se o sincronismo ficar fora de sincronia, simplesmente redefina o Arduino no horário de início definido.

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

void clock(){ if(millis()>= previousMillis+86400000){ // a full day has elapsed, reset the clock; previousMillis +=86400000; } currentMillis = millis() - previousMillis; // this keeps our currentMillis the same each day currentMinutes = (currentMillis/1000)/60; } 

Função de Luz Noturna

Eu separei os loops principais em funções distintas para facilitar a leitura e a remoção ou ajuste. A função nightLight () só opera entre as horas de quando o Arduino foi reinicializado ( suponho que você provavelmente fará isso por volta da hora de dormir, quando estiver escuro), e até o início do alarme do nascer do sol. Inicialmente, tentei usar um resistor dependente de luz, mas eles não são muito sensíveis à luz azul (que é a cor que estou usando para a luz noturna) e difíceis de calibrar corretamente. Usar o relógio faz mais sentido, de qualquer maneira. Usaremos a variável global currentMinutes, que é redefinida a cada dia.

O sensor PIR pode ser um pouco esquisito se você nunca usou um antes, embora a fiação não seja difícil - você encontrará VCC, GND e OUT claramente rotulados na parte de trás. Existem duas resistências variáveis ​​para você também; o RX identificado determina o alcance (até cerca de 7m) e outro TX identificado determina o atraso. O atraso é de 5 segundos na configuração mais baixa (totalmente anti-horário) e significa que qualquer movimento momentâneo acionará pelo menos 5 segundos do estado “ligado” do sensor. No entanto, também determina o atraso entre os estados ativos - assim, se 5 segundos se passarem e nenhum movimento for detectado, o sensor enviará um sinal baixo por pelo menos 5 segundos, mesmo se houver movimento durante esse período. Se você tiver o atraso definido muito alto em cerca de 30 segundos, pode parecer que o sensor está quebrado.

sensor pir

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

 void nightlight(){ // Only work between the hours of reset ->sunrise. 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); } } 

Alarme do nascer do sol

Para simplificar, usarei o valor de cor RGB 255, 255, 0 para um nascer do sol amarelo profundo - dessa forma, o incremento em ambos os canais de cor será o mesmo. Se você perceber que está acordando muito cedo, considere começar com um vermelho profundo e passar para amarelo ou branco. O aumento que usei em apenas linear - você pode querer investigar usando uma curva mais natural para os valores de brilho.

A função é simples - elabora quanto a luz deve ser incrementada a cada segundo, de modo que fica com brilho total após um período de 30 minutos; então multiplica isso por quantos segundos ele estiver atualmente no nascer do sol. Se ele já estiver com brilho total, ele permanecerá por mais 10 minutos para garantir que você esteja funcionando (e, se ainda não estiver ativo, provavelmente deve ter um alarme de backup no lugar).

 void sunrisealarm(){ //each second during the 30 minite period should increase the colour value by: float increment = (float) 255/(30*60); //red 255, green 255 gives us full brightness yellow if(currentMinutes>= minutesUntilSunrise){ //sunrise begins! float currentVal = (float)((currentMillis/1000) - (minutesUntilSunrise*60)) * increment; Serial.print("Current value for sunrise:"); Serial.println(currentVal); //during ramp up, write the current value of minutes X brightness increment 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); } } } 

Armadilhas e Upgrades Futuros

Eu tenho usado isso nas últimas semanas e isso está realmente ajudando a acordar sentindo-se mais revigorado e em um momento decente; a luz noturna funciona muito bem também. Não é perfeito, então aqui estão algumas coisas que precisam de trabalho e lições aprendidas durante a construção.

alarme do nascer do sol

Ao fazer este projeto, encontrei muitas questões de como lidar com grandes números, por isso, se você planeja modificar o código, tenha isso em mente. Na linguagem C, a digitação de suas variáveis ​​é muito importante - um número nem sempre é apenas um número. Por exemplo, variáveis longas não assinadas devem ser usadas para armazenar números super grandes como lidamos quando falamos de milissegundos, mas mesmo um número tão pequeno quanto 60.000 não pode ser armazenado como um inteiro regular (um int não assinado teria sido aceito até 68.000 ) . O ponto é, leia seus tipos de variáveis ​​ao usar números grandes, e se você está encontrando bugs estranhos, é provavelmente porque uma de suas variáveis ​​não tem bits suficientes!

Eu também encontrei um problema com vazamentos de baixa luminosidade - levando à menor quantidade de luz emitida mesmo quando um sinal digitalWrite (RED, 0) é emitido - eu não acho que seja problema de hardware com as tiras, já que elas funcionam bem com os controladores oficiais. Se alguém puder resolver este problema, na foto abaixo, ficaria muito grato. Eu tentei baixar os resistores e limitar a tensão de saída dos pinos do Arduino. Talvez eu precise adicionar um circuito de comutação de energia simples para fornecer apenas tensão à fita de LED quando for realmente necessário; ou pode ser MOSFETs defeituosos.

vazamento de luz

Para trabalhos futuros, espero adicionar um receptor IR e duplicar alguns dos recursos do controlador original - pelo menos a capacidade de alterar as cores como uma luz de uso geral, já que agora esse projeto transforma a faixa em uma noite dedicada luz. Posso até adicionar uma função de tempo limite automático de 30 minutos.

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

In this article