April 28, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[31호]Safe 다리미

31ict 최우수상

2014 ICT 융합 프로젝트 공모전 최우수상

Safe 다리미

글 | 한국외국어대학교 전자공학과 한재준, 이홍준

심 사 평

싱크웍스 재미있는 아이디어인 것 같다. 작은 기능이지만 실생활에 도움이 될 것 같다.
jk전자 간단한 부품과 회로를 이용하였지만 실제 다리미에 적용을 하면 사용하는 사람의 편의성이 많이 좋아질것 같다. 기울기 센서를 이용하여 전원을 자동 차단하는 안전 장치와 특히 다림질을 하려는 직물에 따라서 LED로 쉽게 알려주는 기능은 아주 편리하게 사용할 수 있을것 같다.
뉴티씨 매우 참신한 아이디어로 판단되며 실질적으로 사용될 수 있을 것으로 생각된다. 다리미 회사에서 이를 채용하여 사용한다면, 보다 안전한 다리미가 될 수 있지 않을까 생각된다. 작품의 구현도 어렵지 않지만, 잘 구현하였고, 보고서 작성도 잘 된 것으로 생각된다.

작품 개요

다리미 사용 직후 뜨거움의 정도를 LED Bar의 밝기를 통해 시각화 하였다. 이에 따라 다리미의 온도를 간단하게 인지하여 화상 사고를 예방한다. 그리고 다리미가 넘어진 경우 자동으로 전원을 차단하여 안전한 다리미의 작동을 보장한다. 또한 면, 실크, 아크릴 등 각각의 옷감을 다림질하기에 적절한 온도가 되었는지를 알려주어 사용 편의성을 높였다.

작품 설명

■ 온도 시각화

그림 1. 온도에 따른 LED Bar의 밝기

그림 1. 온도에 따른 LED Bar의 밝기

다리미를 사용한 직후 열을 식히기 위하여 다리미를 세워둔 경험이 있을 것이다. 다림질을 직접 한 사람은 다리미의 온도를 가늠할 수 있지만, 다림질을 하지 않은 사람은 무심코 뜨거운 다리미를 건드리게 되어 화상을 입을 수 있다. 이러한 사고를 방지하기 위하여 다리미 온도를 LED Bar의 밝기를 통해 시각화 했다. 방금 다림질이 끝난 매우 뜨거운 온도에서는 LED Bar를 밝게 켜서 위험하다는 것을 알리고, 시간이 흘러 서서히 식어 감에 따라 LED Bar의 밝기는 점차 줄어든다. 다리미가 완전히 식을 경우 LED Bar를 꺼서 안전하다는 것을 알린다.

■ 자동 전원 차단
다리미의 전원이 켜진 상태에서 실수로 다리미가 넘어진다면 옷감이 타거나, 심할 경우 화재가 일어날 수 있다. 이러한 경우를 예방하기 위해 기울기 스위치와 푸쉬 스위치를 사용하여 위험 상황 여부를 판단하고, 만약 위험 상황이 발생할 경우 릴레이 스위치를 OFF 시켜 전원을 자동으로 차단한다.

■ 적정 옷감 표시
대부분의 다리미는 온도조절 다이얼을 돌려 적절한 옷감을 다릴 수 있게 한다.

그림 2. 온도 조절 다이얼의 모습

그림 2. 온도 조절 다이얼의 모습

Safe 다리미는 온도조절 다이얼을 돌려 선택한 온도가 실제로 각각의 옷감에 알맞은 온도로 예열이 되었는지를 알려주는 기능을 수행 한다. 다리미의 온도가 100 ~ 120도일 때 초록 LED(면), 121 ~ 140도일 때 노랑 LED(실크), 141도 이상일 때 빨강 LED(아크릴)가 점등 된다.

주요 동작 및 특징
■ 온도 시각화
온도를 시각화하기 위해 온도계(LM35), LED Bar, MCU(MSP430G 2452), 트랜지스터(TIP122), 승압IC(MC34063) 등이 사용되었다. LED Bar는 12V 전압을 사용하기 때문에 승압회로를 이용하여 3V -> 12V로 승압하였다. 또한 다리미의 AC 전원이 차단된 이후에도 온도 시각화가 이루어져야 하므로 AAA 배터리를 전원으로 사용하였다.

그림 3. 온도 시각화 블록 다이어그램

그림 3. 온도 시각화 블록 다이어그램

① 다리미 히팅 판넬의 온도를 측정하기 위해 아날로그 온도계를 사용하였다. 아날로그로 출력된 온도 값은 MCU(Micro Controller Unit)의 ADC(Analog to Digital Converter)를 통하여 디지털 값으로 변환된다.

그림 4. 다리미 히팅 판넬에 온도계를 부착한 모습

그림 4. 다리미 히팅 판넬에 온도계를 부착한 모습

// 온도를 100번 측정하여 평균값을 구함
void readTemp() {
adcSum = 0;
//adcDiv = 100;
for (i = 0; i < adcDiv; i++) {
ADC10CTL0 |= ENC + ADC10SC; // Sampling and
conversion start
adcSum += ADC10MEM;
__delay_cycles(100);
}
adcAve = adcSum / adcDiv;
temp = (adcAve * 2.5 / 1023.0) * 100;
}

코드 1. 온도 값 측정

신뢰성 있는 온도 값을 확보하기 위해 온도를 100번 측정 한 후 평균을 낸 값을 사용한다.

② MCU가 온도 값을 읽은 후 그에 비례하여 3V 전압의 PWM(Pulse Width Modulation) 신호를 출력한다.

//PWM 출력을 위한 타이머 설정
void timerAInit() {
P1DIR |= BIT2 + BIT3; // P1.2 and P1.3 output
P1SEL |= BIT2 + BIT3; // P1.2 and P1.3 TA1/2 options
CCR0 = 2000; // PWM Period
CCTL1 = OUTMOD_7; // CCR1 reset/set
TACTL = TASSEL_2 + MC_1; // SMCLK, up mode
}

//온도에 따른 PWM 듀티비 조절(LED Bar 밝기 조절)
//LED Bar의 밝기를 효과적으로 나타내기 위해 두개의 방정식 사용
void tempWarningLed() {
if (cTemp < 80) {
CCR1 = cTemp * 3 – 120;
} else {
CCR1 = cTemp * 25 – 1880;
}
}

코드 2. 온도 값에 따른 PWM 출력 설정

③ ②에서 출력된 3V PWM 신호는 트랜지스터(TIP122)와 승압 회로(MC34063)를 만나 12V 전압의 PWM 신호로 변환 된다. 출력되는 신호의 듀티비는 온도에 따라 0% ~ 100% 까지 조절되며, 아래와 같이 LED Bar의 밝기를 조절할 수 있다.

그림 5. 듀티비에 따른 LED Bar의 밝기 변화

그림 5. 듀티비에 따른 LED Bar의 밝기 변화

■ 자동 전원 차단

다리미의 전원이 연결된 상태에서 다리미가 넘어지는 상황이 발생할 경우 다리미의 전원을 자동 차단한다. 이를 위해 릴레이 스위치(JS1-3V), 푸쉬 스위치(BL150-L-M), 기울기 스위치(SW-200) 등이 사용되었다.

그림 6. 자동 전원차단 회로의 블록 다이어그램

그림 6. 자동 전원차단 회로의 블록 다이어그램

①. 기울어짐에 따라 접점이 ON/OFF가 되는 스위치로서, 다리미가 서 있을 경우 접점이 OFF 되고, 다리미가 누워 있을 경우 접점이 ON 된다.

②. 다리미를 사용 할 때 자연스럽게 검지 손가락으로 푸쉬 스위치가 눌릴 수 있도록 다리미 손잡이 안쪽에 위치한다. ①번과 ②의 데이터를 종합하여 위험상황이 발생했는지 감지한다. 만약 다리미가 기울어진 상태에서 푸쉬 스위치가 눌리지 않았다면 위험 상황으로 간주되고, 다리미가 기울어졌으나 푸쉬 스위치가 눌린 상황이라면 다리미를 정상적으로 사용하는 상황으로 간주된다. 또한 다리미가 서있는 상황은 안전한 상황으로 간주된다.

//푸쉬 스위치, 기울기 스위치 설정 및 인터럽트 설정
void swInit() {
P2OUT |= BIT4 + BIT5; //P2.4 = 푸쉬 스위치, P2.5 = 기울기 스위치
P2REN |= BIT4 + BIT5;

P2IE |= BIT4 + BIT5;
P2IES |= BIT4 + BIT5;
P2IFG &= ~(BIT4 + BIT5);
_BIS_SR(GIE);
}

//릴레이 스위치 설정
void relayInit() {
P1DIR |= BIT5;
relayOn
;
}

//기울기 스위치 인터럽트 서비스 루틴
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void) {
//기울어졌을 때
if (!(P2IN & BIT5)) {
ledSwOn
;
//스위치가 눌리지 않았을 때
if (!(P2IN & BIT4)) {

//위험한 온도일 때
if (cTemp > 40) {
relayOff //위험상황 감지 시 릴레이 OFF
;
}
//위험 상황이 아닐 때
} else {
relayOn
;
}
//위험 상황이 아닐 때
} else {
ledSwOff
;
relayOn
;
}
P2IFG &= ~(BIT4 + BIT5);
}

코드 3. 위험 상황 감지를 위한 인터럽트 설정과 위험 상황 발생 시 릴레이 OFF

③ 릴레이 스위치로써 위험 상황 감지 시 접점을 OFF 시킨다. 아래 그림은 위험 상황이 발생한 경우와 안전한 상황의 모습을 나타낸다.

그림 7. 위험 상황이 발생한 경우의 모습 (220V OFF, 다리미가 누워있고 푸쉬 스위치가 눌리지 않음)

그림 7. 위험 상황이 발생한 경우의 모습 (220V OFF, 다리미가 누워있고 푸쉬 스위치가 눌리지 않음)

그림 8. 정상적으로 다리미를 사용할 때의 모습 (220V ON, 다리미가 누워있지만 푸쉬 스위치가 눌려 있음)

그림 8. 정상적으로 다리미를 사용할 때의 모습 (220V ON, 다리미가 누워있지만 푸쉬 스위치가 눌려 있음)

■ 적정 옷감 표시

온도 조절 다이얼을 조작함에 따라 다리미의 실제 온도 값이 어떠한 옷감에 적절한지를 알려주기 위해 초록, 노랑, 빨강 LED를 통해 알려 준다.

그림 9. 각각의 옷감에 맞는 적절한 온도를 알려주기 위한 표시기의 블록다이어그램

그림 9. 각각의 옷감에 맞는 적절한 온도를 알려주기 위한 표시기의 블록다이어그램

온도계로 다리미의 온도를 측정하여 온도조절 다이얼로 선택한 온도가 실제로 옷감에 적절한지를 알려준다.

//적정 옷감 표시
void tempLevelLed() {
//다림질 하기에 온도가 낮을경우
if (cTemp < 100) {
ledGreenOff
;
ledYellowOff
;
ledRedOff
;
}

//온도가 면 재질에 적합할 경우
if (cTemp > 100 && cTemp <= 120) {
ledGreenOn
ledYellowOff
;
ledRedOff
;
}
//온도가 실크 재질에 적합할 경우
if (cTemp > 120 && cTemp <= 140) {
ledYellowOn
ledGreenOff
;
ledRedOff
;
}
//온도가 아크릴 재질에 적합할 경우
if (cTemp > 150) {
ledRedOn
ledGreenOff
;
ledYellowOff
;
}

}

코드 4. 온도에 따른 LED ON/OFF

전체 시스템 구성

그림 10. Safe 다리미의 전체 시스템 구성

그림 10. Safe 다리미의 전체 시스템 구성

개발 환경(개발 언어, Tool, 사용시스템 등)
MCU : TI MSP430(MSP430G2542)
소프트웨어 통합 개발 환경 : Code Composer Studio v5.5(TI MCU 통합 개발 환경)
개발 언어 : C
사용 시스템 : 64비트 Windows 7 기반 PC
사용 장비 : PC, JTAG Debugger, 파워 서플라이, 멀티미터, 인두 등

단계별 제작 과정

부품 소개

31 safe 다리미 (10)

그림 11. Safe 다리미 제작에 필요한 부품의 모습

31 safe 다리미 (2)

표 1. Safe 다리미 제작에 필요한 부품 목록

 

기울기 스위치 부착
다리미의 기울여짐을 알기 위하여 글루건을 이용하여 기울기 스위치를 부착한다.

그림 12. 다리미 밑판에 기울기 센서를 부착한 모습

그림 12. 다리미 밑판에 기울기 센서를 부착한 모습

온도 센서 부착
다리미의 온도를 측정하기 위하여 히팅 판넬 뒷부분에 온도계를 부착한다.

그림 13. 다리미 히팅 판넬에 온도센서를 부착한 모습

그림 13. 다리미 히팅 판넬에 온도센서를 부착한 모습

LED Bar 부착
다리미의 뜨거움 정도를 표시하기 위한 LED Bar를 다리미 내부에 부착한다.

그림 14. 다리미 내부에 LED Bar를 부착한 모습

그림 14. 다리미 내부에 LED Bar를 부착한 모습

적정 옷감 표시용 LED 부착
드릴을 이용하여 구멍을 뚫어 초록, 노랑, 빨강 LED를 부착한다.

그림 15. 다리미 손잡이에 적정 옷감 표시용 LED를 부착한 모습

그림 15. 다리미 손잡이에 적정 옷감 표시용 LED를 부착한 모습

푸쉬 스위치 부착
푸쉬 스위치를 부착하기 위해 드릴로 적절한 구멍을 뚫어 부착한다.

그림 16. 다리미 손잡이 밑 부분에 푸시 스위치를 부착한 모습

그림 16. 다리미 손잡이 밑 부분에 푸시 스위치를 부착한 모습

만능 PCB 절단
만능 PCB를 다리미 내부에 장착 시킬 수 있도록 적절하게 자른다.

그림 17. 만능 PCB에 절단할 부분을 그린 모습

그림 17. 만능 PCB에 절단할 부분을 그린 모습

그림 18. 절단한 PCB를 다리미 밑판에 넣은 모습

그림 18. 절단한 PCB를 다리미 밑판에 넣은 모습

 

부품 납땜
MCU, 승압회로, 트랜지스터 등의 부품을 납땜한다. Safe 다리미의 회로도는 5장을 통해 확인할 수 있다.

그림 19. 각종 부품을 납땜한 모습 (전면)

그림 19. 각종 부품을 납땜한 모습 (전면)

그림 20. 각종 부품을 납땜한 모습 (후면)

그림 20. 각종 부품을 납땜한 모습 (후면)

그림 21. 릴레이와 배터리 홀더의 모습

그림 21. 릴레이와 배터리 홀더의 모습

그림 22. 모든 부품의 납땜을 완료한 후 밑판을 닫기 전의 모습

그림 22. 모든 부품의 납땜을 완료한 후 밑판을 닫기 전의 모습

완성 모습

Safe 다리미의 완성 모습이다. 손잡이 아래쪽에 푸쉬 스위치가 위치해 있고, 손잡이 위쪽에 적정 옷감 표시용 LED가 위치해 있다. 또한 다리미 내부에 기울기 스위치, 릴레이 스위치, 온도 센서, LED Bar, MCU 등의 각종 부품이 위치해 있다.

그림 23. Safe 다리미의 완성 모습

그림 23. Safe 다리미의 완성 모습

작동 확인

31 safe 다리미 (23) 31 safe 다리미 (24)

그림 24. Safe 다리미의 작동 모습

■ 50도 ~ 90도 : 온도에 따라 LED Bar의 밝기가 조절된다.

■ 110도 ~ 150도 : 다리미의 온도가 충분히 뜨거우므로 LED Bar의 밝기는 100%를 유지하고 면, 실크, 아크릴 옷감에 적절한 온도를 알려준다.

소스코드

#include <msp430.h>

#define ledGreenOn P2OUT |= BIT0;
#define ledYellowOn P2OUT |= BIT1;
#define ledRedOn P2OUT |= BIT2;
#define ledGreenOff P2OUT &= ~BIT0;
#define ledYellowOff P2OUT &= ~BIT1;
#define ledRedOff P2OUT &= ~BIT2;
#define ledSwOn P2OUT |= BIT3;
#define ledSwOff P2OUT &= ~BIT3;
#define relayOn P1OUT &= ~BIT5;
#define relayOff P1OUT |= BIT5;

float adcSum, adcAve;
int i, cTemp, temp, adcDiv = 100;

//릴레이 스위치 설정
void relayInit() {
P1DIR |= BIT5;
relayOn
;
}

//푸쉬 스위치, 기울기 스위치 설정 및 인터럽트 설정
void swInit() {
P2OUT |= BIT4 + BIT5; //P2.4 = 푸쉬 스위치, P2.5 = 기울기 스위치
P2REN |= BIT4 + BIT5;

P2IE |= BIT4 + BIT5;
P2IES |= BIT4 + BIT5;
P2IFG &= ~(BIT4 + BIT5);

_BIS_SR(GIE);
}

//온도값 측정을 위한 ADC 설정
void adcInit() {
ADC10CTL0 = SREF_1 + REFON + REF2_5V + ADC10SHT_2 + ADC10ON;
ADC10CTL1 = INCH_0;
ADC10AE0 |= BIT0;

}

//PWM 출력을 위한 타이머 설정
void timerAInit() {
P1DIR |= BIT2 + BIT3; // P1.2 and P1.3 output
P1SEL |= BIT2 + BIT3; // P1.2 and P1.3 TA1/2 options
CCR0 = 2000; // PWM Period
CCTL1 = OUTMOD_7; // CCR1 reset/set
TACTL = TASSEL_2 + MC_1; // SMCLK, up mode
}

void ledInit() {
P2DIR |= BIT0 + BIT1 + BIT2 + BIT3;
}

// 온도를 100번 측정하여 평균값을 구함
void readTemp() {
adcSum = 0;
//adcDiv = 100;
for (i = 0; i < adcDiv; i++) {
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
adcSum += ADC10MEM;
__delay_cycles(100);
}
adcAve = adcSum / adcDiv;
temp = (adcAve * 2.5 / 1023.0) * 100;
}

//온도가 너무 낮거나 너무 높을 경우에 최소, 최대 값을 설정
void calTemp() {
if (temp < 40) {
cTemp = 40;
}

if (temp > 150) {
cTemp = 150;
}

if (temp >= 40 && temp <= 150)
cTemp = temp;
}

//온도에 따른 PWM 듀티비 조절(LED Bar 밝기 조절)
//LED Bar의 밝기를 효과적으로 나타내기 위해 두개의 방정식 사용
void tempWarningLed() {

if (cTemp < 80) {
CCR1 = cTemp * 3 – 120;
} else {
CCR1 = cTemp * 25 – 1880;
}

}

void tempLevelLed() {
//다림질 하기에 온도가 낮을경우
if (cTemp < 100) {
ledGreenOff
;
ledYellowOff
;
ledRedOff
;
}

//온도가 면 재질에 적합할 경우
if (cTemp > 100 && cTemp <= 120) {
ledGreenOn
ledYellowOff
;
ledRedOff
;
}
//온도가 실크 재질에 적합할 경우
if (cTemp > 120 && cTemp <= 140) {
ledYellowOn
ledGreenOff
;
ledRedOff
;
}
//온도가 아크릴 재질에 적합할 경우
if (cTemp > 150) {
ledRedOn
ledGreenOff
;
ledYellowOff
;
}

}

int main(void) {
WDTCTL = WDTPW + WDTHOLD; //워치독 타이머 종료

ledInit();
relayInit();
swInit();
adcInit();
timerAInit();

while (1) {
P2OUT |= BIT5;
readTemp();
calTemp();
tempWarningLed();
tempLevelLed();
}
}

#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void) {

//기울어졌을 때
if (!(P2IN & BIT5)) {
ledSwOn
;
//스위치가 눌리지 않았을 때
if (!(P2IN & BIT4)) {

//위험한 온도일 때
if (cTemp > 40) {
relayOff //위험상황 감지시 릴레이 OFF
;
}
//위험 상황이 아닐 때
} else {
relayOn
;
}
//위험 상황이 아닐 때
} else {
ledSwOff
;
relayOn
;
}

P2IFG &= ~(BIT4 + BIT5);
}

회로도

 

 

Leave A Comment

*