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 nos forçando a acordar quando não há luz natural. Hoje, estaremos fazendo um despertador do nascer do sol, que acordará lenta e suavemente, sem recorrer a uma máquina ofensiva de fazer barulho.
Se fazer um despertador do nascer do sol é um pouco demais para você, confira estes iPhone e aplicativos Android Use esses aplicativos para ajudá-lo a dormir melhor [Android e iOS]Após um dia agitado, a melhor coisa a fazer é dormir bem. Sempre aparecem novos estudos que comprovam a importância do sono para uma pessoa, melhorando ... consulte Mais informação que detectam quando melhor acordá-lo pelos movimentos do corpo Um aplicativo pode realmente ajudá-lo a dormir melhor?Eu sempre fui um experimentador do sono, tendo, durante a maior parte da minha vida, mantido um diário dos sonhos meticuloso e estudado o máximo que pude sobre dormir no processo. Há um ... consulte Mais informação
, garantindo que você não se afaste desse sonho incrível, mas acorde sentindo-se brilhante e revigorado - eles realmente funcionam.Esboço do Projeto
A parte principal do projeto será uma faixa de LED de 5 metros colocada ao redor da cama. Nós os forneceremos com uma fonte externa de 12 volts, comutada usando alguns transistores MOSFET N. A configuração desta peça será idêntica à sistema de iluminação dinâmica Crie sua própria iluminação ambiente dinâmica para um Media CenterSe você assiste a muitos filmes no seu PC ou centro de mídia, tenho certeza de que enfrentou o dilema da iluminação; você apaga completamente todas as luzes? Você os mantém a todo vapor? Ou... consulte Mais informação Eu construí antes.
O tempo será um problema. Como esse é um protótipo, configurarei a contagem regressiva do Arduino sempre que for redefinido. Em teoria, devemos perder apenas um ou dois segundos por dia, mas idealmente incluiríamos um chip de "relógio em tempo real" para fazer isso de maneira mais confiável. O alarme do nascer do sol inicia 30 minutos antes da hora do despertador e aumenta 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 seu despertador regular até que seu corpo esteja acostumado a isto.
Também incorporarei uma luz noturna neste projeto, que detecta movimento e ativa um nível discreto e baixo luz debaixo da cama com um intervalo de 3 minutos, separado das luzes de LED, pois isso causaria a minha esposa e eu acordar acima. A iluminação embaixo da cama será uma unidade comercial, portanto, hackeamos um relé dentro de uma tomada para ligar e desligar. Se você não se sentir confortável trabalhando com a alimentação elétrica de 110-240 V CA sob nenhuma circunstância (e isso geralmente é uma boa regra), conecte um transmissor sem fio de 433 MHz com soquetes de comutação, conforme descrito na Projeto de automação residencial Raspberry Pi Arduino Guia de automação residencial com Raspberry Pi e ArduinoO mercado de automação residencial é inundado por sistemas de consumo caros, incompatíveis entre si e com instalação dispendiosa. Se você tem um Raspberry Pi e um Arduino, basicamente pode conseguir a mesma coisa em ... consulte Mais informação .
Lista de peças e esquema
- Arduino
- Conjunto de luzes de LED RGB
- Fonte de alimentação de 12 volts
- 3 x transistores MOSFET N (eu uso o tipo STP16NF06FP)
- Relé e tomada de energia, ou tomadas controladas sem fio e transmissor adequado
- Sua opção de luz noturna (a rede elétrica regular com plugue é adequada)
- Sensor de movimento PIR (HC-SR501) ou um sonar SC-04 (não é tão eficaz)
- Sensor de luz
- Código do projeto - mas continue a ler para garantir que você entende como personalizar tudo.
Aqui está o esquema completo.

Fiação de um relé
Nota: Pule esta seção se desejar usar as luzes RGB como luz noturna - especificamente para ligar uma luz separada.
Para alternar 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, você estará trocando. O que eu usei neste pacote de sensores (isenção de responsabilidade: essa é minha loja) é 250VAC / 10A, então devemos estar seguros. Os relés possuem um com porta, geralmente no centro, que deve ser conectada ao fio ativo que entra no plugue; depois conecte o terminal ativo do soquete ao NÃO (normalmente aberto). Eu não deveria ter que dizer para você não fazer isso enquanto estiver conectado a uma tomada ou você morrerá. Se você tem medo de mexer na rede elétrica, use soquetes comutados sem fio.

Os cabos terra e neutro devem ir direto para o soquete e não tocam no relé. Você pode não ter uma linha de terra nos EUA. É sua responsabilidade conhecer o código de cores dos fios na sua área local - se você não conseguir conectar uma tomada comum em sua casa ou reconectar um plugue, não tente incorporar um relé em um!
Para testar, conecte o pino do sinal do relé no 12 e execute um programa simples de piscar 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 não estou usando o pino 13 é porque, durante o processo de upload, o LED onboard dispara em rápida sucessão para indicar atividade em série, o que também causaria a ativação do relé.
Acertando o tempo
As funções de temporização e relógio são difíceis sem o acesso a uma conexão de rede ou Relógio de tempo real (incluem baterias próprias para manter o relógio funcionando mesmo quando o Arduino principal não tem energia). Para manter os custos baixos, vou trapacear. Vou codificar uma hora de início para o Arduino começar sua contagem regressiva; os horários serão, portanto, relativos a esse horário de início. A cada 24 horas, o relógio é reiniciado. O código da função do 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 de alguns segundos a cada 45 dias; no entanto, esse estilo de tempo codificado é bastante limitado, pois um corte de energia ou redefinição acidental quebrará tudo; portanto, essa é certamente uma área que pode ser melhorada. Se o tempo estiver fora de sincronia, basta redefinir o Arduino no horário definido.
O código deve ser fácil de entender.
void clock () {if (millis ()> = previousMillis + 86400000) {// um dia inteiro passou, redefina o relógio; previousMillis + = 86400000; } currentMillis = millis () - previousMillis; // isso mantém nosso currentMillis o mesmo a cada dia currentMinutes = (currentMillis / 1000) / 60; }
Função de luz noturna
Separei os loops principais em funções distintas para facilitar a leitura, a remoção ou o ajuste. o luz noturna() A função funciona apenas entre as horas em que o Arduino foi redefinido (suponho que você provavelmente faça isso antes ou antes da hora de dormir, quando está escuro) e até o alarme do nascer do sol começar. Inicialmente, tentei usar um resistor dependente da 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. De qualquer forma, usar o relógio faz mais sentido. Nós vamos usar o global currentMinutes variável, que é redefinida a cada dia.
O sensor PIR pode ser um pouco peculiar, se você nunca usou um antes, embora a conexão não seja difícil - você encontrará VCC, GNDe FORA claramente rotulado na parte de trás. Também existem dois resistores variáveis; o rotulado como RX determina o alcance (até cerca de 7m) e o outro rotulado como TX determina o atraso. O atraso é de 5 segundos na configuração mais baixa (totalmente no sentido 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 - portanto, se decorrem 5 segundos e nenhum movimento é detectado, o sensor enviará um sinal baixo por pelo menos 5 segundos, mesmo se houver movimento durante esse período. Se o atraso estiver realmente alto em cerca de 30 segundos, pode parecer que o sensor está quebrado.

Se você está dormindo sozinho e não se importa de usar as mesmas luzes RGB para o alarme do nascer do sol e a luz noturna, você deve ajustar o código com bastante facilidade.
void nightlight () {// Funciona apenas entre as horas de reset -> nascer do sol. if (currentMinutes
Sunrise Alarm
Por simplicidade, usarei o valor de cor RGB 255.255,0 para um nascer do sol amarelo profundo. Dessa forma, o incremento nos dois canais de cores será o mesmo. Se você achar que está acordando cedo demais, considere começar com um vermelho escuro e desbotar em amarelo ou branco. A aceleração que usei apenas linearmente - convém investigar usando uma curva mais natural para valores de brilho.
A função é simples - calcula 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 que, por muitos segundos, está atualmente no nascer do sol. Se já estiver com brilho total, ele permanecerá ativado por mais 10 minutos para garantir que você esteja acordado (e se ainda não estiver acordado, provavelmente deverá ter um alarme de backup).
void sunrisealarm () {// cada segundo durante o período de 30 minutos deve aumentar o valor da cor: float increment = (float) 255 / (30 * 60); // vermelho 255, verde 255 nos dá brilho total amarelo se (currentMinutes> = minutesUntilSunrise) {// nascer do sol! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * incremento; Serial.print ("Valor atual para o nascer do sol:"); Serial.println (currentVal); // durante a aceleração, escreva o valor atual de minutos X incremento de brilho if (currentVal <255) {analogWrite (RED, currentVal); analogWrite (VERDE, valor atual); } else if (currentMinutes - minutesUntilSunrise <40) {// quando estiver com brilho total, mantenha as luzes acesas por mais 10 minutos analogWrite (RED, 255); analogWrite (VERDE, 255); } else {// depois disso, estamos colocando-os novamente no estado off analogWrite (RED, 0); analogWrite (VERDE, 0); } } }
Armadilhas e atualizações futuras
Eu tenho usado isso nas últimas semanas e está realmente ajudando a acordar me sentindo mais revigorado e em um momento decente; a luz noturna também funciona muito bem. Porém, não é perfeito, então aqui estão algumas coisas que precisam de trabalho e lições aprendidas durante a construção.

Ao fazer este projeto, encontrei muitos problemas ao lidar com grandes números; portanto, se você planeja modificar o código, lembre-se disso. Na linguagem C, o digitar suas variáveis é muito importante - um número nem sempre é apenas um número. Por exemplo, não assinado por muito tempo variáveis devem ser usadas para armazenar números super grandes, como lidamos quando falamos em milissegundos, mas mesmo um número tão pequeno quanto 60.000 não pode ser armazenado como um número inteiro regular (um int não assinado seria aceitável por até 68.000). O ponto é, leia seus tipos de variáveis ao usar números grandes e se você encontrar erros estranhos, provavelmente é porque uma de suas variáveis não possui bits suficientes!
Também encontrei um problema com vazamentos de tensão de brilho muito baixo - levando à menor quantidade de luz emitida mesmo quando um digitalWrite (VERMELHO, 0) o sinal é emitido - não acho que seja um problema de hardware com as tiras, pois elas funcionam bem com os controladores oficiais. Se alguém puder resolver esse problema, na foto abaixo, ficaria muito grato. Eu tentei puxar 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 tensão apenas à faixa de LED quando realmente necessário; ou pode haver MOSFETs com defeito.

Para trabalhos futuros, espero adicionar um receptor de infravermelho e duplicar alguns dos recursos do controlador original - em menos a capacidade de alterar as cores como uma luz de uso geral, pois agora esse projeto transforma a tira em uma noite dedicada luz. Posso até adicionar uma função automática de tempo limite de 30 minutos.
Você já tentou isso, fez melhorias ou teve outras idéias? Deixe-me saber nos comentários!
James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.