Alarme de Nascer do Sol Inteligente: Acorde com Luz Suave
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino Nano R3 | 1 |
| Módulo RTC DS3231 (Maxim Integrated) | 1 |
Sobre o Projeto
No inverno, as noites são mais longas que os dias e acordar às 6h em um quarto escuro e frio é horrível. A solução: criar uma lâmpada inteligente que simula o nascer do sol, iluminando o quarto gradualmente.
O projeto consiste em uma lâmpada smart que encaixa no soquete do teto. Ela simula o nascer do sol aumentando a luz progressivamente. Se funcionar, pretendo conectá-la ao celular para virar um despertador completo.
Base da Lâmpada
Para criar uma lâmpada smart, precisei de uma lâmpada "burra" pelo soquete. Quebrei o vidro com martelo (procedimento satisfatório!), soldei fios no soquete de alumínio e no pino central – a base estava pronta.
Para os eletrônicos, usei uma placa perfurada cortada sob medida para acomodar: Arduino Nano, fonte 5V e demais componentes.
Circuito de Alta Tensão
⚠ AVISO DE SEGURANÇA: Trabalha com tensões >50V. Contato com alta tensão pode causar ferimentos graves ou morte.
Como a lâmpada é alimentada pela rede AC, não posso controlá-la diretamente com o microcontrolador. Uso um TRIAC – dispositivo que funciona como relé de comutação rápida. O microcontrolador liga/desliga o TRIAC nos momentos precisos para cortar a onda senoidal da rede, controlando o brilho (dimming).
A onda AC deve ser cortada com precisão: o microcontrolador precisa detectar a passagem por zero da tensão de rede para cortar cada meia-onda no mesmo ponto. Caso contrário, a luz pisca.
Detecção de passagem por zero: Optoacoplador 4N35 (U1) com transistor – liga quando a onda cruza zero. O microcontrolador vê sinal HIGH no pino de entrada. Também isola o circuito de baixa tensão da rede.
Acionamento do TRIAC: Segundo optoacoplador – MOC3063 (U2) com TRIAC na saída – isola o microcontrolador do TRIAC de potência (Q2). Importante: não use optoacoplador com detecção de zero-crossing interno, pois só liga na passagem por zero.
Circuito de Baixa Tensão
Microcontrolador: Arduino Nano. Controla o TRIAC e inicia o nascer do sol no horário programado. RTC DS3231 mantém a hora mesmo sem energia.
Fonte 5V 700mA step-down ligada à rede do soquete da lâmpada – solução compacta e prática.
Código
O programa é simples: ao ligar o interruptor, a lâmpada acende e apaga lentamente (teste). Durante a noite, verifica o RTC DS3231. Às 6h, ilumina gradualmente até o brilho máximo até o interruptor ser desligado.
O código está comentado e autoexplicativo. Se não estiver claro, sou um mau desenvolvedor!
/* Lâmpada inteligente que acende na hora de levantar.
* Funcionamento:
* 1) Ao ligar, acende como teste e depois apaga lentamente
* 2) À noite verifica RTC DS3231
* 3) Às 6h acende gradualmente até "luz do dia"
* 4) Não acende se ambiente já estiver claro (fotocélula)
*
* Uso: ligue ao deitar, apague ao sair. Hora preservada pelo DS3231.
* @author Jiri Praus (https://twitter.com/jipraus)
* Controle AC inspirado em https://arduinotehniq.blogspot.com/2014/10/ac-light-dimmer-with-arduino.html
*/
#include <TimerOne.h>
#include "RTClib.h"
#define TRIAC_PIN 2
#define ZERO_CROSS_PIN 3
#define LIGHT_SENSOR_PIN A6
#define FREQUENCY_STEP 75 // 50Hz (use 65 para 60Hz)
#define CHANGE_DIM_LEVEL_EVERY 1 // Altera dim a cada N segundos
#define MAX_DIM_LEVEL 128 // Apagado
#define MIN_DIM_LEVEL 0 // Aceso
#define DARK_THRESHOLD 300 // Limiar de escuridão (fotocélula)
volatile byte triacCounter = 0;
volatile boolean zeroCrossed = false;
byte dimLevel = MIN_DIM_LEVEL;
boolean lightOn = false;
RTC_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);
if (!rtc.begin()) {
Serial.println("RTC não encontrado!");
while(1);
}
if (rtc.lostPower()) {
Serial.println("RTC sem bateria, ajustando hora!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
noInterrupts();
attachInterrupt(digitalPinToInterrupt(ZERO_CROSS_PIN), zeroCrossDetected, RISING);
interrupts();
Timer1.initialize(FREQUENCY_STEP);
Timer1.attachInterrupt(triacTimerInterrupt, FREQUENCY_STEP);
}
void loop() {
delay(CHANGE_DIM_LEVEL_EVERY * 1000);
checkAlarmClock();
adjustDimLevel();
debugPrint();
}
void zeroCrossDetected() {
zeroCrossed = true;
triacCounter = 0;
digitalWrite(TRIAC_PIN, LOW);
}
void triacTimerInterrupt() {
if (dimLevel >= MAX_DIM_LEVEL) {
digitalWrite(TRIAC_PIN, LOW);
} else if (dimLevel <= MIN_DIM_LEVEL) {
digitalWrite(TRIAC_PIN, HIGH);
} else if (zeroCrossed) {
if (triacCounter >= dimLevel) {
digitalWrite(TRIAC_PIN, HIGH);
zeroCrossed = false;
} else {
triacCounter++;
}
}
}
void adjustDimLevel() {
if (lightOn && dimLevel > MIN_DIM_LEVEL) dimLevel--;
else if (!lightOn && dimLevel < MAX_DIM_LEVEL) dimLevel++;
}
void checkAlarmClock() {
if (!lightOn && isRoomDark()) {
DateTime now = rtc.now();
if (now.hour() == 6 && now.minute() == 0) {
lightOn = true; // Inicia nascer do sol às 6h
}
}
}
boolean isRoomDark() {
return analogRead(LIGHT_SENSOR_PIN) < DARK_THRESHOLD;
}
void debugPrint() {
Serial.print("lightOn="); Serial.println(lightOn);
Serial.print("dimLevel="); Serial.println(dimLevel);
DateTime now = rtc.now();
Serial.print("datetime=");
Serial.print(now.year()); Serial.print('/');
Serial.print(now.month()); Serial.print('/');
Serial.print(now.day()); Serial.print(' ');
Serial.print(now.hour()); Serial.print(':');
Serial.print(now.minute()); Serial.print(':');
Serial.println(now.second());
Serial.print("lightLevel="); Serial.println(analogRead(LIGHT_SENSOR_PIN));
}
Próximos Passos
Vou testar por alguns dias/semanas. Se me acordar de manhã, evoluirei para algo mais inteligente e menos rústico!
Boa noite!
Esquemáticos
Processo de manufatura
- Explorando Adição de Tensão com Conexões de Baterias em Série
- Laboratório de Divisor de Tensão: Projeto, Medição e Verificação da Lei de Tensão de Kirchhoff
- Termoeletricidade: Entendendo Termopares e Efeito Seebeck
- Voltímetro Potenciométrico: Medição Precisa de Tensão com Carga Mínima
- Construa uma Bateria de Batata: Guia Passo a Passo para Energia Eletroquímica DIY
- Fonte de Alimentação CA de Baixa Tensão: Componentes de Circuito de Defasagem e Boas Práticas
- Experimento de Regulador de Tensão com Diodo Zener de 12 Volts
- Amplificador Seguidor de Tensão: Design, Construção e Guia de Medição
- Projetando Amplificador Emissor Comum Multi-Estágio de Alto Ganho com Realimentação Negativa
- Diodos de Finalidade Especial: Schottky, Tunelamento, LED, Laser, Fotodiodo e Inovações em Células Solares