제조공정
| 아두이노 나노 R3 | 1 | |
| Maxim DS3231MPMB1 RTC 모듈 | 정확한 실시간 시계, 정전 시에도 시간 유지 | 1 |
겨울철 새벽 6시, 어둡고 추운 방에서 일어나는 건 고역입니다. 인공적인 '일출'을 만들어 방을 서서히 밝고 따뜻하게 해준다면 어떨까요?
기존 천장 등기구에 끼울 수 있는 스마트 전구를 제작합니다. 해가 뜨듯 서서히 조도를 높여 자연스러운 기상을 유도하고, 향후 스마트폰과 연동해 제대로 된 알람 시계로 발전시킬 계획입니다.
일반 전구를 망치로 깨서 유리구를 제거하고, 알루미늄 소켓과 바닥 단자에 전선을 납땜해 스마트 전구의 베이스로 활용했습니다.
⚠ 안전 경고: 50V 이상 고전압을 다룹니다. 감전 시 중상 또는 사망할 수 있습니다.
일반 전구는 교류 전원으로 작동하므로 마이크로컨트롤러로 직접 제어할 수 없습니다. TRIAC을 사용해 교류 파형의 위상을 제어, 디밍을 구현합니다. 교류 사인파의 제로크로싱(영점 교차) 시점을 정확히 맞춰야 깜빡임 없는 부드러운 디밍이 가능합니다.
제로크로싱 검출: 4N35 옵토커플러(U1)로 교류 영점 교차 시 트랜지스터가 턴온되어 MCU에 하이 신호 전달. 저전압 회로와 메인 전압 회로 절연 역할도 겸함.
TRIAC 구동: MOC3063 옵토커플러(U2, 출력단에 TRIAC 내장)로 MCU와 고전압 TRIAC(Q2) 완전 절연. 제로크로싱 기능이 없는 옵토커플러를 사용해야 임의 위상에서 턴온 가능.
아두이노 나노가 TRIAC 제어 및 알람 시각 관리를 담당. DS3231 RTC 모듈로 정확한 시각 유지(배터리 백업). 5V 전원은 소켓에서 들어오는 교류를 5V 700mA 강압형 SMPS로 변환해 공급.
코드는 비교적 단순하며 자명합니다. 이해 안 되면 제가 개발을 못 한 겁니다!
며칠~몇 주간 실사용해 보고 기상 효과가 검증되면, 더 스마트하고 정교한 버전으로 발전시킬 예정입니다.
/* 스마트 전구 - 기상 시각에 맞춰 서서히 점등
* 1) 전원 투입 시 점등 후 서서히 소등 (동작 확인)
* 2) 밤 동안 대기
* 3) 오전 6시 서서히 점등 → 최대 밝기 유지
* 4) 실내가 밝으면(조도 센서) 점등 안 함
* 사용법: 취침 시 전등 켜두면 아침에 자동 점등, 외출 시 스위치로 끄기
* DS3231으로 시간 보존
* @author Jiri Praus
* AC 디밍 참고: 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 기준 밝기 단계당 지연(µs), 60Hz면 65로 변경
#define CHANGE_DIM_LEVEL_EVERY 1 // 디밍 단계 변경 주기(초)
#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));
}
제조공정
전기적 절연의 SPICE 분석 트랜스포머는 AC 및 DC 회로에서 전압과 전류 변환을 가능하게 할 뿐만 아니라, 전기적 절연이라는 중요한 기능도 제공합니다. 이 기능을 통해 두 회로가 직접적인 전선 연결 없이 자성적으로 결합될 수 있어, 민감한 부품을 보호하고 안전성을 높입니다. 이 효과를 설명하기 위해, 2차 측에 높은 DC 전압을 가하면서 두 회로를 접지시키는 SPICE 시뮬레이션을 실행합니다: 트랜스포머가 V1의 10 Vac을 V2의 250 VDC로부터 절연 v1 1 0 ac 10 sin rbogu
이전 SPICE 시뮬레이션에서 트랜스포머의 출력 전압이 입력 전압 일정에도 불구하고 부하 저항 변화에 따라 변하는 것을 관찰했습니다. 이 변동에 영향을 주는 요인으로는 1차/2차 권선 인덕턴스, 권선 저항, 권선 간 자기 결합 정도 등이 있습니다. 전력 트랜스포머의 목표는 부하에 거의 일정한 전압을 제공하는 것입니다. 따라서 2차 전압은 넓은 부하 전류 범위에서 최소한으로 변동해야 합니다. 전압 조정률 공식 전압 조정률은 트랜스포머가 다양한 부하 전류에서 안정된 2차 전압을 유지하는 능력을 정량화합니다. 다음 공식으로 계산됩니다: