Índice:

Wakeup Light: 7 etapas (com imagens)
Wakeup Light: 7 etapas (com imagens)

Vídeo: Wakeup Light: 7 etapas (com imagens)

Vídeo: Wakeup Light: 7 etapas (com imagens)
Vídeo: How to Wake Up at 5 AM and NOT Feel Tired: 7 Actionable Steps 2024, Julho
Anonim
Wakeup Light
Wakeup Light

No momento em que escrevo isto, estamos no meio do inverno no hemisfério norte, o que significa dias curtos e noites longas. Estou acostumada a acordar às 06:00 e no verão o sol já deve estar brilhando. No inverno, porém, amanhece às 09:00 se tivermos sorte de ter um dia que não esteja nublado (o que … não é frequente).

Há algum tempo li sobre uma “luz de despertar” feita pela Philips que foi usada na Noruega para simular uma manhã de sol. Nunca comprei um, mas ficava pensando em fazer um porque fazer você mesmo é mais divertido do que simplesmente comprá-lo.

Suprimentos:

Porta-retrato "Ribba" 50 x 40 cm da IKEA

cartão perfurado de loja de ferragens

Placa de desenvolvimento STM8S103 via Ebay ou outros

Relógio em tempo real DS1307 (Mouser, Farnell, Conrad, etc)

Cristal de relógio de 32.768 Hz (Mouser, Farnell, Conrad, etc)

3 V coincidência de lítio + suporte de coincidência

MOSFETs de canal N BUZ11 ou IRLZ34N (3x)

BC549 (ou qualquer outro transistor NPN)

quantos leds branco, vermelho, azul, verde, etc. você quiser

alguns resistores e capacitores (consulte o esquema)

Powerbrick, 12V a 20V, 3A ou mais (por exemplo, fonte de alimentação para laptop antigo)

Etapa 1: Tornando (um pouco) mais fácil se levantar

Tornando (um pouco) mais fácil se levantar
Tornando (um pouco) mais fácil se levantar

A ideia é que é difícil sair da cama pela manhã quando ainda está escuro. E se você mora perto ou mesmo acima do círculo ártico, ficará escuro por muito tempo. Em lugares como Tromsö, na Noruega, não haverá luz alguma, pois lá o sol se põe na metade de novembro apenas para reaparecer na metade de Januari.

Portanto, o que a Philips fez foi simular o nascer do sol.

A Philips aumenta lentamente o brilho da lâmpada, que provavelmente é feita com vários leds, mas está escondida atrás de um único difusor. Seu tempo de desligamento até o brilho total leva 30 minutos.

As luzes de despertar Philips não são tão caras, mas têm apenas uma cor e parecem um pouco pequenas. Acho que posso fazer melhor.

Etapa 2: mais cor

Mais cor
Mais cor

Minha luz de despertar usa quatro cores, branco, vermelho, azul e verde. Primeiro vêm os leds brancos, depois os vermelhos e, por último, alguns leds azuis e verdes. Minha ideia era que eu pudesse simular não só o aumento do brilho, mas também a mudança da cor da luz da manhã, começando com um pouco de branco, adicionando um pouco de vermelho mais tarde e misturando azul e verde no final. Não tenho certeza se realmente se parece com a luz da manhã real, mas gosto da tela colorida como está agora.

O meu também é mais rápido que a luz de despertar da Philips, ao invés dos 30 minutos da luz da Philips, a minha vai de 0% a 100% de brilho em menos de 5 minutos. Então meu sol nasce muito mais rápido.

NOTA:

É MUITO difícil tirar fotos do meu wakeup light, tentei com várias câmeras e smartphones, mas todas as fotos que fiz não fazem justiça ao real.

Etapa 3: curva sigmóide, oscilação e "resolução"

Curva sigmóide, tremulação e
Curva sigmóide, tremulação e

Claro que eu queria tornar o brilho o mais suave possível. Os olhos humanos são logarítmicos em sensibilidade, o que significa que na escuridão total eles são mais sensíveis do que em plena luz do dia. Um pequeno aumento no brilho quando os níveis estão baixos “parece” o mesmo que um passo muito maior quando a luz está com, digamos, 40% de brilho. Para conseguir isso, usei uma curva especial chamada Sigmóide (ou curva S). Esta curva começa como uma curva exponencial que se estabiliza na metade. Descobri que é uma maneira muito boa de aumentar (e diminuir) a intensidade.

A frequência do relógio do microcontrolador (e dos temporizadores) é 16 MHz e eu uso a resolução máxima de TIMER2 (65536) para criar três sinais de largura de pulso (PWM). Portanto, os pulsos vêm 16000000/65536 = 244 vezes por segundo. Isso está muito acima do limite dos olhos para ver qualquer cintilação.

Assim, os leds são alimentados com um sinal PWM que é feito com este 16 bittimer do microcontrolador STM8S103. No mínimo, este sinal PWM pode estar LIGADO com comprimento de 1 pulso e os 65.535 comprimentos de pulso restantes desativados.

Assim, os leds conectados a esse sinal PM estarão LIGADOS 1/65536-th do tempo: 0,0015%

No máximo, eles estão ON 65536/65536-th do tempo: 100%.

Etapa 4: Eletrônica

Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos
Eletrônicos

Microcontrolador

O cérebro da luz de ativação é um microcontrolador STM8S103 da STMicroelectronics. Gosto de usar peças que tenham recursos suficientes para um trabalho. Para uma tarefa simples como essa não é necessário usar microcontroladores STM32 (meus outros favoritos), mas um Arduino UNO não era suficiente, pois eu queria três sinais PWM com resolução de 16 bits e não há temporizador com três canais de saída em um UNO.

Relógio de tempo real

A hora é lida a partir de um relógio de tempo real DS1307 que funciona com um cristal de 32768 Hz e tem uma bateria de backup de 3V.

O ajuste da hora atual, dia e hora de despertar é feito com dois botões e mostrado em um display LCD de 16 x 2 caracteres. Para manter meu quarto realmente escuro à noite, a luz de fundo do display LCD é ligada somente quando os leds estão mais brilhantes do que a luz de fundo e quando você está definindo a hora, o dia e a hora de despertar.

Poder

A energia vem de uma fonte de alimentação de laptop antigo, a minha produz 12V e pode fornecer 3A. Quando você tiver outra fonte de alimentação, pode ser necessário ajustar os resistores em série com os fios de led. (Veja abaixo)

Leds

Os leds são conectados na alimentação de 12V, o restante da eletrônica funciona em 5V feito com regulador linear 7805. No esquema diz que eu uso um regulador TO220, que não é necessário porque o microcontrolador, display e relógio de tempo real usam apenas alguns miliamperes. Meu relógio usa uma versão menor do TO92 do 7805, capaz de fornecer 150mA.

A comutação das strings de led é feita com MOSFETs de canal N. Novamente, no esquema mostra outros dispositivos além dos que usei. Acontece que eu tinha exatamente três MOSFETs BUZ11 muito antigos em vez dos MOSFETs IRLZ34N mais recentes. Eles funcionam bem

Claro que você pode colocar quantos leds quiser, contanto que os MOSFETs e a fonte de alimentação possam lidar com a corrente. No esquema, desenhei apenas um cordão de qualquer cor; na realidade, existem vários cordões de cada cor paralelos aos outros cordões dessa cor.

Etapa 5: Resistores (para os Leds)

Resistores (para os Leds)
Resistores (para os Leds)

Sobre os resistores nas cordas de led. Os leds branco e azul geralmente têm uma voltagem de 2,8 V sobre eles quando estão com brilho total.

Os leds vermelhos têm apenas 1,8 V, os meus leds verdes têm 2 V sobre eles com brilho total.

Outra coisa é que seu brilho total não é o mesmo. Então, foi necessário alguns experimentos para torná-los igualmente brilhantes (aos meus olhos). Ao tornar os leds igualmente brilhantes com brilho total, eles também parecerão igualmente brilhantes em níveis mais baixos, o sinal de largura de pulso sempre os liga com brilho total, mas durante tempos mais longos e mais curtos, seus olhos cuidam da média.

Comece com um cálculo como este. A fonte de alimentação fornece (no meu caso) 12V.

Quatro leds brancos em série precisam de 4 x 2,8 V = 11,2 V, o que deixa 0,8 V para o resistor.

Eu descobri que eles eram brilhantes o suficiente a 30mA, então o resistor precisa ser:

0,8 / 0,03 = 26,6 ohm. No esquema, você vê que coloquei um resistor de 22 ohms, tornando os leds um pouco mais brilhantes.

Os leds azuis eram muito brilhantes a 30 mA, mas em comparação com os leds brancos a 15 mA, eles também tinham cerca de 2,8 V sobre eles a 15 mA, então o cálculo foi 4 x 2,8 V = 11,2 V novamente deixando 0,8 V

0,8 / 0,015 = 53,3 ohm, então escolhi um resistor de 47 ohm.

Meus leds vermelhos também precisam de uns 15 mA te serem tão brilhantes quanto os outros, mas eles só têm 1,8 V nessa corrente. Então eu poderia colocar mais em série e ainda ter algum “espaço” para o resistor.

Seis leds vermelhos me deram 6 x 1,8 = 10,8 V, então o resistor foi 12 - 10,8 = 1,2 V

1,2 / 0,015 = 80 ohm, cheguei a 68 ohm. Assim como os outros, um pouco mais brilhante.

Os leds verdes que usei são tão brilhantes quanto os outros em cerca de 20mA. Eu precisava de apenas alguns (assim como os azuis) e optei por colocar quatro em série. A 20mA eles têm 2,1 V acima deles, dando 3 x 2,1 = 8,4 V

12 - 8,4 = 3,6 V para o resistor. E 3,6 / 0,02 = 180 ohms.

Se você construir esta luz de wakeup, é improvável que você tenha a mesma fonte de alimentação, você terá que ajustar o número de leds em série e os resistores necessários.

Um pequeno exemplo. Digamos que você tenha uma fonte de alimentação que forneça 20V. Eu escolheria definir 6 leds azuis (e brancos) em série, 6 x 3 V = 18 V então 2 V para o resistor. E digamos que você goste do brilho a 40mA. O resistor então precisa ser 2V / 0,04 = 50 ohm, um resistor de 47 ohm será suficiente.

Aconselho não ir além de 50mA com leds comuns (5mm). Alguns podem aguentar mais, mas gosto de estar do lado seguro.

Etapa 6: Software

Todo o código pode ser baixado de:

gitlab.com/WilkoL/wakeup_light_stm8s103

mantenha o código-fonte aberto, ao lado do resto deste instrutível se quiser seguir a explicação.

Main.c

Main.c primeiro configura o relógio, temporizadores e outros periféricos. A maioria dos “drivers” que escrevi usando a Biblioteca Padrão da STMicroelectronics e se você tiver alguma dúvida sobre eles, escreva em um comentário abaixo do instrutível.

Eeprom

Deixei o código “text to display” que usei para colocar os textos na eeprom do STM8S103 como comentários. Eu não tinha certeza se tinha memória flash suficiente para todo o meu código, então tentei colocar o máximo possível no eeprom para ter todo o flash para o programa. No final, isso não foi necessário e mudei o texto para piscar. Mas eu deixei como texto comentado no arquivo main.c. É bom tê-lo, quando preciso fazer algo semelhante mais tarde (em outro projeto)

O eeprom ainda é usado, mas apenas para armazenar a hora de despertar.

Uma vez por segundo

Depois de configurar os periféricos, o código verifica se um segundo se passou (feito com um temporizador).

Cardápio

Se for esse o caso, ele verifica se um botão foi pressionado, em caso afirmativo entra no menu onde você pode definir a hora atual, o dia da semana e a hora de despertar. Lembre-se de que leva cerca de 5 minutos para desligar o brilho máximo, então defina a hora de despertar um pouco mais cedo.

A hora de despertar é armazenada no eeprom para que, mesmo após uma queda de energia, ele “saiba” quando despertar. A hora atual é armazenada no relógio de tempo real, é claro.

Comparação da hora atual e de despertar

Quando nenhum botão foi pressionado, ele verifica a hora atual e a compara com a hora de despertar e o dia da semana. Não quero que me acorde no fim de semana:-)

Na maioria das vezes, nada precisa ser feito, então ele define a variável “leds” para OFF e para ON. Esta variável é verificada em conjunto com o sinal “change_intensity”, que também vem de um temporizador e está ativo 244 vezes por segundo. Assim, quando a variável “leds” está LIGADA, a intensidade aumenta 244 vezes por segundo e quando está DESLIGADA diminui 244 vezes por segundo. Mas o aumento ocorre em etapas únicas, em que a diminuição ocorre em etapas de 16, o que significa que, quando a luz de ativação espera ter feito seu trabalho, ela apaga 16 vezes mais rápido, mas ainda sem problemas.

Suavidade e SEM MEMÓRIA

A suavidade vem do cálculo da curva sigmóide. O cálculo é bastante simples, mas precisa ser feito em variáveis de ponto flutuante (duplas) por causa da função exp (), consulte o arquivo sigmoid.c.

Na situação padrão, o compilador / vinculador Cosmic não tem suporte para variáveis de ponto flutuante. Ligá-lo é fácil (depois que você o encontra), mas vem com um aumento no tamanho do código. Esse aumento foi muito para fazer o código caber na memória flash quando combinado com a função sprintf (). E essa função é necessária para converter números em texto para o display.

Itoa ()

Para solucionar esse problema, criei a função itoa (). Esta é uma função Integer To Ascii bastante comum, mas não incluída na biblioteca padrão STMicroelectronics, nem nas bibliotecas Cosmic.

Etapa 7: IKEA (o que faríamos sem eles)

IKEA (o que faríamos sem eles)
IKEA (o que faríamos sem eles)
IKEA (o que faríamos sem eles)
IKEA (o que faríamos sem eles)
IKEA (o que faríamos sem eles)
IKEA (o que faríamos sem eles)

A foto foi comprada na IKEA. É uma moldura Ribba de 50 x 40cm. Este quadro é bastante espesso e isso o torna ótimo para esconder eletrônicos atrás dele. Em vez de um pôster ou imagem, coloquei um pedaço de papelão perfurado. Você pode comprá-lo na loja de ferragens onde às vezes é chamado de “tábua da cama”. Tem pequenos orifícios que o tornam ideal para colocar leds. Infelizmente os orifícios na minha placa eram um pouco maiores que 5 mm, então tive que usar cola quente para “montar” os leds.

Fiz um orifício retangular no centro da placa rígida para a tela 16x2 e pressionei. A placa de circuito impresso com todos os componentes eletrônicos está pendurada nesta tela, não é montada em mais nada.

A placa de fibra perfurada foi pintada de preto com spray, mas atrás do tapete. Fiz dois furos na moldura para os botões para definir a hora e a data, uma vez que a moldura é bastante grossa, tive de alargar os orifícios no interior da moldura para fazer os botões sobressairem o suficiente.

Recomendado: