Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Умный будик «Рассвет»: пробуждение мягким светом

Компоненты и материалы

Arduino Nano R31
Модуль реального времени DS3231 (Maxim Integrated DS3231MPMB1)1

О проекте

Зимой ночи длинные, а вставать в 6 утра в тёмном и холодном помещении неприятно. Идея — создать умную лампочку, которая имитирует рассвет, постепенно освещая комнату. Если получится, добавим управление с телефона для полноценного будильника.

Лампочка

Основа — обычная лампочка: её колпак разбит молотком, стекло удалено. К цоколю и центральному контакту припаяны провода — получается база умной лампочки.

На макетной плате размещены Arduino Nano, блок питания 5В и остальная электроника.

Умный будик «Рассвет»: пробуждение мягким светом

Силовая часть (высокое напряжение)

ПРЕДУПРЕЖДЕНИЕ: РАБОТА С НАПРЯЖЕНИЕМ ВЫШЕ 50В. КАСАНИЕ ВЫСОКОГО НАПРЯЖЕНИЯ МОЖЕТ ПРИВЕСТИ К ТЯЖЕЛЫМ ТРАВМАМ ИЛИ СМЕРТИ.

Управление лампой насточной сети осуществляется через триак. Микроконтроллер открывает и закрывает триак в точно определённые моменты, отсекая половины синусоиды сетевого напряжения для регулировки яркости (фазовое управление).

Для синхронизации с переходом через ноль используется оптопара 4N35 (U1) с транзистором на выходе. Она также гальванически разделяет низковольтную и сетевую части.

Вторая оптопара — MOC3063 (U2) с триаком на выходе — управляет силовым триаком (Q2) и обеспечивает гальваническую развязку. Важно: не используйте оптопару с функцией перехода через ноль (например, MOC3041), она не подойдёт для фазового управления.

Умный будик «Рассвет»: пробуждение мягким светом
Умный будик «Рассвет»: пробуждение мягким светом

Низковольтная часть

Микроконтроллер — Arduino Nano. За время отвечает модуль DS3231 (точные часы с батарейкой). Питание 5В берётся от дешёвого понижающего модуля 700 мА, подключённого к сети через цоколь лампы.

Умный будик «Рассвет»: пробуждение мягким светом

Код

Программа простая: при включении лампа загорается и плавно гаснет (тест). Ночью проверяет часы DS3231, и в 6:00 начинает плавно увеличивать яркость до максимума («день») до выключения выключателем. В коде есть фоторезистор: если комната уже светла, будильник не срабатывает (экономия).

/* A smart light bulb that lights up when its time to get out of your bed.
 * How it works:
 * 1) when power is turned on, the light is switched on as a check that it works
 * 2) it will slowly dim until turned off completely
 * 3) at 6 am in the morning light will slowly turn on until switched off at the evening
 * 4) light will not turn on when room is not dark anymore (photocell)
 * How to use:
 * - turn on the light when going to bed and it will light up the room when you wake up in the morning, turn off light when leaving room to turn it off.
 * - the time will be preserved due to the DS3231 module
 * @author Jiri Praus (https://twitter.com/jipraus)
 * AC Light control inspired by 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 // задержка на шаг яркости в мкс для 50Гц (для 60Гц — 65)
#define CHANGE_DIM_LEVEL_EVERY 1 // менять яркость каждые N секунд
#define MAX_DIM_LEVEL 128 // выкл
#define MIN_DIM_LEVEL 0   // вкл
#define DARK_THRESHOLD 300 // порог освещённости фоторезистора

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("Couldn't find RTC");
    while(1);
  }
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    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;
    }
  }
}

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(), DEC); Serial.print('/');
  Serial.print(now.month(), DEC); Serial.print('/');
  Serial.print(now.day(), DEC); Serial.print(' ');
  Serial.print(now.hour(), DEC); Serial.print(':');
  Serial.print(now.minute(), DEC); Serial.print(':');
  Serial.println(now.second(), DEC);
  Serial.print("lightLevel="); Serial.println(analogRead(LIGHT_SENSOR_PIN));
}

Что дальше?

Протестирую несколько дней/недель. Если будит хорошо — развиваю проект: добавлю Bluetooth/Wi‑Fi для настройки времени и сценариев, сделаю корпус аккуратнее.

Умный будик «Рассвет»: пробуждение мягким светом

Спокойной ночи!

Схемы

Умный будик «Рассвет»: пробуждение мягким светом
Умный будик «Рассвет»: пробуждение мягким светом

Производственный процесс

  1. Исследовение сложения напряжений при последовательном соединении батарей
  2. Лаборатория делителя напряжения: дизайн, измерение и верификация закона Кирхгофа о напряжении
  3. Термоэлектричество: понимание термопар и эффекта Зеебека
  4. Потенциометрический вольтметр: Точное измерение напряжения с минимальной нагрузкой
  5. Сборка картофельной батареи: Пошаговое руководство по DIY электрохимическому питанию
  6. Низковольтный AC источник питания: Компоненты схемы сдвига фазы и лучшие практики
  7. Эксперимент со стабилизатором напряжения на зенерном диоде 12 В
  8. Усилитель-повторитель напряжения: Проектирование, сборка и измерения
  9. Проектирование высоковольтного многоступенчатого общеэмиттерного усилителя с отрицательной обратной связ…
  10. Специальные диоды: Шоттки, туннельные, светодиоды, лазерные, фотодиоды и солнечные элементы