Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

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.

Alarme de Nascer do Sol Inteligente: Acorde com Luz Suave
Eletrônica montada em placa perfurada dentro do soquete

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.

Alarme de Nascer do Sol Inteligente: Acorde com Luz Suave
Corte de fase controlado pelo TRIAC sincronizado com passagem por zero

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.

Alarme de Nascer do Sol Inteligente: Acorde com Luz Suave
Circuito de isolamento e acionamento do TRIAC

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.

Alarme de Nascer do Sol Inteligente: Acorde com Luz Suave
Arduino Nano, RTC DS3231 e fonte step-down 5V

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!

Alarme de Nascer do Sol Inteligente: Acorde com Luz Suave

Boa noite!

Esquemáticos

Alarme de Nascer do Sol Inteligente: Acorde com Luz Suave Alarme de Nascer do Sol Inteligente: Acorde com Luz Suave

Processo de manufatura

  1. Explorando Adição de Tensão com Conexões de Baterias em Série
  2. Laboratório de Divisor de Tensão: Projeto, Medição e Verificação da Lei de Tensão de Kirchhoff
  3. Termoeletricidade: Entendendo Termopares e Efeito Seebeck
  4. Voltímetro Potenciométrico: Medição Precisa de Tensão com Carga Mínima
  5. Construa uma Bateria de Batata: Guia Passo a Passo para Energia Eletroquímica DIY
  6. Fonte de Alimentação CA de Baixa Tensão: Componentes de Circuito de Defasagem e Boas Práticas
  7. Experimento de Regulador de Tensão com Diodo Zener de 12 Volts
  8. Amplificador Seguidor de Tensão: Design, Construção e Guia de Medição
  9. Projetando Amplificador Emissor Comum Multi-Estágio de Alto Ganho com Realimentação Negativa
  10. Diodos de Finalidade Especial: Schottky, Tunelamento, LED, Laser, Fotodiodo e Inovações em Células Solares