Acorde-me!
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Sobre este projeto
O inverno está chegando, as noites se tornam mais longas do que os dias, e é um pesadelo para mim acordar às 6h em um quarto escuro e frio. E se houvesse uma maneira de criar um “nascer do sol” artificial para tornar o ambiente muito mais quente e agradável?
Esta é uma tarefa fácil, vou criar uma lâmpada inteligente que cabe na minha lâmpada de teto atual. Ele irá simular um nascer do sol iluminando lentamente a sala. Se funcionar, vou conectá-lo ao meu telefone para torná-lo um despertador adequado.
Lâmpada
Para criar uma lâmpada inteligente, você primeiro precisa de uma lâmpada "burra" por causa de seu soquete que é aparafusado na lâmpada e fornece energia. Eu o esmaguei com um martelo. Este procedimento delicioso removeu o vidro do soquete de alumínio e depois de soldar os fios ao soquete e pino na parte inferior, a base da lâmpada inteligente estava pronta.
Em seguida, você precisa de um suporte para todos os eletrônicos. Usei uma placa de desempenho e cortei para caber em um microcontrolador Arduino Nano, fonte de alimentação de 5 V e todos os componentes eletrônicos.

Circuito de alta tensão
Aviso de segurança: Você está trabalhando com tensões superiores a 50V. O contato com alta tensão pode resultar em ferimentos graves ou morte.
Como estou usando uma lâmpada comum que é alimentada pela tensão da rede elétrica CA, não posso usar o microcontrolador diretamente para controlar a energia que vai para a lâmpada. Eu preciso de um TRIAC. Este pequeno dispositivo atua como um relé que pode ligar e desligar rapidamente. O microcontrolador liga e desliga o triac para alterar a onda senoidal CA, escurecendo ou aumentando o brilho da luz.
No entanto, a tensão CA é controlada de forma diferente da tensão CC. A onda senoidal AC precisa ser cortada de maneira precisa e, portanto, o triac deve ser ligado e desligado em momentos precisos para conseguir isso (veja a imagem abaixo). Em outras palavras, o microcontrolador precisa saber quando a onda senoidal da voltagem da rede elétrica passa de zero para cortar cada uma das meias-ondas do mesmo tamanho. Caso contrário, a luz estaria piscando.

Para detectar o cruzamento zero da tensão da rede elétrica, há um optoacoplador 4N35 (U1) com um transistor que liga quando a onda senoidal cruza o zero. O microcontrolador verá isso como um sinal alto em seu pino de entrada. O optoacoplador tem outra função, é isolar a baixa tensão do circuito de tensão da rede.
O segundo optoacoplador - MOC3063 (U2) - com um triac na saída é usado para isolar o microcontrolador do triac de alta tensão (Q2). Certifique-se de não usar optoacoplador com recurso de cruzamento zero, pois ele só liga quando a onda senoidal cruza o zero.

Circuito de baixa tensão
Como microcontrolador, estou usando o Arduino Nano. Seu principal objetivo é controlar o triac e começar a acender a luz quando chegar a hora definida. Para fornecer relógio em tempo real, há um módulo de relógio em tempo real preciso DS3231 que também preserva o tempo quando a energia é perdida.
Para fornecer 5 V para chips, estou usando uma fonte de alimentação abaixadora de 5 V 700 mA barata conectada à tensão de rede do soquete da lâmpada. Solução agradável e prática!

Código
O programa é bastante simples. Quando a lâmpada é ligada pelo interruptor, ela ilumina a sala e lentamente escurece durante a noite, como uma verificação de que a eletrônica ainda funciona. Durante a noite, ele verifica o relógio em tempo real armazenado no módulo DS3231 e, finalmente, às 6h, a sala é iluminada lentamente até a "luz do dia" total até que a lâmpada seja desligada pelo interruptor.
Verifique o código anexado abaixo. Acho que é autoexplicativo. Se não for, sou um péssimo desenvolvedor!
O que vem a seguir?
Agora vou experimentar por alguns dias ou semanas e se puder me acordar de manhã, vou evoluir este projeto para algo mais inteligente e menos bruto!

Boa noite!
Código
- lightalarm.ino
lightalarm.ino Arduino
Uma lâmpada inteligente que acende quando é hora de sair da cama./ * Uma lâmpada inteligente que se acende quando é hora de sair da cama.Como funciona:1) quando a energia é ligada , a luz é acesa para verificar se funciona2) vai escurecer lentamente até ser completamente desligada3) às 6h da manhã a luz vai se acender lentamente até ser desligada à noite4) a luz não acenderá quando o quarto não estiver escuro mais (fotocélula) Modo de usar:- acenda a luz na hora de dormir e iluminará o quarto ao acordar pela manhã, apague a luz ao sair do quarto para apagá-la.- o tempo será preservado devido para o módulo DS3231 @ autor Jiri Praus (https://twitter.com/jipraus)AC Light control inspirado em http://arduinotehniq.blogspot.com/2014/10/ac-light-dimmer-with-arduino.html* / # include// disponível em http://www.arduino.cc/playground/Code/#include "RTClib.h" #define TRIAC_PIN 2 # define ZERO_CROSS_PIN 3 # define LIGHT_SENSOR_PIN A6 # define FREQUENCY_STEP 75 // Este é o passo de atraso por brilho em microssegundos para 50 Hz (altere o valor em 65 para 60 Hz) #define CHANGE_DIM_LEVEL_EVERY 1 // altera o nível de escurecimento a cada N segundos, lentidão de brilho / escurecimento # define MAX_DIM_LEVEL 128 // off # define MIN_DIM_LEVEL 0 // on # define DARK_THRESHOLD 300 // resistência da fotocélula quando é considerada escura fora // variáveis de controle do triac byte volátil triacCounter =0; // controle triac timervolátil booleano zeroCrossed =false; // Sinalizador cruzado zero da fase AC // dim controlbyte dimLevel =MIN_DIM_LEVEL; // ao ligar, a luz está ligada e diminuirá lentamente como um checkboolean lightOn =false; // despertadorRTC_DS3231 rtc; void setup () {Serial.begin (115200); digitalWrite (TRIAC_PIN, LOW); pinMode (TRIAC_PIN, OUTPUT); pinMode (ZERO_CROSS_PIN, INPUT); pinMode (LIGHT_SENSOR_PIN, INPUT); // relógio em tempo real init if (! rtc.begin ()) {Serial.println ("Não foi possível encontrar RTC"); enquanto (1); } if (rtc.lostPower ()) {Serial.println ("RTC perdeu energia, vamos definir a hora!"); rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); // a linha seguinte define o RTC para a data e hora em que este esboço foi compilado} // inicializar interrupções e temporizadores para o controle triac noInterrupts (); attachInterrupt (digitalPinToInterrupt (ZERO_CROSS_PIN), zeroCrossDetected, RISING); // Anexe uma interrupção ao pino 2 (interrupção 0) para interrupções de detecção cruzada zero (); Timer1.initialize (FREQUENCY_STEP); Timer1.attachInterrupt (triacTimerInterrupt, FREQUENCY_STEP);} void loop () {delay (CHANGE_DIM_LEVEL_EVERY * 1000); checkAlarmClock (); AdjustDimLevel (); debugPrint ();} void zeroCrossDetected () {zeroCrossed =true; // defina o booleano como true para informar a nossa função de escurecimento que ocorreu um cruzamento zero triacCounter =0; // inicia a contagem quando o triac deve ser aberto digitalWrite (TRIAC_PIN, LOW); // apaga a luz} void triacTimerInterrupt () {if (dimLevel> =MAX_DIM_LEVEL) {// apaga permanentemente digitalWrite (TRIAC_PIN, LOW); } else if (dimLevel <=MIN_DIM_LEVEL) {// permanentemente em digitalWrite (TRIAC_PIN, HIGH); } else if (zeroCrossed) {if (triacCounter> =dimLevel) {digitalWrite (TRIAC_PIN, HIGH); // abre triac zeroCrossed =false; // redefine a detecção de cruzamento zero até a próxima metade vawe} else {triacCounter ++; // incrementa o contador de etapas de tempo}}} void AdjustDimLevel () {if (lightOn &&dimLevel> MIN_DIM_LEVEL) {dimLevel--; } else if (! lightOn &&dimLevel
Esquemas


Processo de manufatura