프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

나만의 전기 방석 만들기

2016-03-17 17:26:45

안녕하세요!

 

노랑 병아리입니다.

처음으로 프로젝트를 게시해보네요! 

이번에 만들어 본 프로젝트는 따뜻한 봄이 오기 전까지 유용하게 쓸 수 있는 전기 방석으로, 프로젝트 이름은 뜨끈뜨끈입니다.

 

 

 

 

 

프로젝트 개요

 

⓵ 우선 열선패드에 온도 센서(tmp36)을 부착하여 온도를 측정합니다.

 

 2개의 버튼을 이용해 저온/고온의 온도를 설정합니다.

저온버튼이 눌릴 경우 55°C로 설정되며, 열선패드의 온도가 55°C를 초과할 경우 2분간 전원 공급을 중단합니다.

열선패드의 전원 공급을 중단한만큼 온도가 내려가겠죠?

이와 같은 방식으로 고온버튼이 눌릴 경우 80°C로 설정됩니다.

 

⓷ lcd패널에 방석의 실시간 온도와 설정되어진 온도(저온/고온)를 출력합니다.

 

기능이 간단한 만큼 실제 구현하는 방법도 어렵지 않습니다!

자 그럼! 본격적으로 메이킹 방법을 공유해볼까요?

 

 

 

 

 

관련 튜토리얼

 

전기방석 프로젝트에서는 lcd패널, 가변저항, 버튼을 사용합니다.

프로젝트를 진행하면서 코코아팹 학습 튜토리얼에서 많은 도움을 받았는데요~~

여러분들도 학습 튜토리얼을 통해 응용 프로젝트에 도전해보세요 ^^

 

- LCD에 문자 출력하기

- PUSH 버튼으로 LED 제어하기

- 4채널 모스펫 사용하기

 

 

 

 

부품 목록

 

 

NO 부품명 수량 상세 설명
1 오렌지보드 1 아두이노 UNO
2 LCD패널 1  
3 가변 저항 1  
4 버튼 2 PUSH 버튼
5 TMP 36 온도센서
6 4채널 모스펫 1 릴레이 소음 대용
점퍼케이블  30개 이상  
8 외부 전원 1 9v 1.5A 이상
9 열선패드 3  
10 브레드 보드 2  
11 방석 1 열선 패드를 넣어 둘 방석

 

부품명 오렌지보드 열선패드 4채널 모스펫 PUSH 버튼 TMP36
파트

 

 

 

 

하드웨어 메이킹 

 

<열선패드 : Operating Voltage: 5V DC, Operating Current: ~600mA (~8.3Ω)>

열선패드의 전류는 개당 600mA으로 아두이노 한 핀의 출력 전류인 40mA로 제어하기에는 적합하지 않습니다.

그렇기 때문에 외부 전원을 공급하고, 전자 스위치를 이용하여 그 외부 전원를 on/off시켜줍니다.

전자 스위치는 크게 릴레이와 모스펫이 있습니다.

이 프로젝트에서는 릴레이의 딸깍거리는 소음을 방지하기 위해서 모스펫을 사용했습니다!

4채널 모스펫 모듈의 가격이 부담되시는 분들은 릴레이를 사용하셔도 무방합니다! 단 회로가 달라지겠죠? ^^

 

 

 

 

브레드 보드 레이아웃

 

 

 

 

소스코드

/*
 제목 : 열선 패드를 활용한 전기 방석 만들기.
 내용 : 노랑색 스위치를 누르면 낮은 온도로 설정이 되고,
       빨강색 스위치를 누르면 높은 온도로 설정이 되는 
       따뜻한 전기 방석을 만들어 봅시다. 
*/

// LCD를 쉽게 제어하기 위한 라이브러리를 추가합니다.
#include <LiquidCrystal.h>

// 오렌지보드의 3, 4, 10, 11, 12, 13번핀을 사용하도록 지정된 lcd객체를 생성합니다.
LiquidCrystal lcd(3, 4, 10, 11, 12, 13);

// tmp36온도 센서를 A0핀으로 설정합니다.
int tmpSensor = A0; 
// 열선 패드를 각각 5,6,7번 핀으로 설정합니다.
int heatingPad1 = 5;
int heatingPad2 = 6;
int heatingPad3 = 7;
// 약한 온도 설정을 위한 노랑색 스위치를 3번 핀으로 설정합니다.
int btnLow = 8; 
//  높은 온도 설정을 위한 빨강색 스위치를 4번 핀으로 설정합니다
int btnHigh = 9;

// 저온 설정일 때의 최고 온도 값을 저장합니다.
const int tmpLow = 55;
// 고온 설정일 때의 최고 온도 값을 저장합니다.
const int tmpHigh = 80;
// 현재 설정 온도 값을 나타내는 변수입니다.
int tmpSetting = 0;

// tmp36센서가 측정한 현재 온도를 저장할 변수입니다.
float tmpCurrent;
// tmp36센서값으로 읽어온 수치를 계산하기 위해 임시적으로 필요한 변수입니다.
float tmpTemp;

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {       
    // 열선 패드1을 사용하기로 설정합니다. 
    pinMode(heatingPad1, OUTPUT);
    pinMode(heatingPad2, OUTPUT);
    pinMode(heatingPad3, OUTPUT);
  
    // 스위치가 연결된 핀의 모드를 INPUT_PULLUP 상태(초기 로직레벨을 HIGH로 설정)로 설정합니다.
    // 설정된 디지털 핀은 아래와 같은 값을 반환합니다.
    // 스위치가 열려있다면 (누르지 않은 상태) HIGH
    // 스위치를 닫혀있다면 (누른 상태), LOW
  
    // 저온 설정 스위치입니다.
    pinMode(btnLow, INPUT_PULLUP);  
    // 고온 설정 스위치입니다.
    pinMode(btnHigh,INPUT_PULLUP); 
    // 설정된 온도(저온/고온)을 저장해둘 변수입니다.
    tmpSetting = 0;
  
    // 16개의 셀과 2개의 줄을 사용하도록 설정합니다.
    lcd.begin(16,2);
    // LCD의 모든 텍스트를 제거합니다.
    lcd.clear();
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {   
    // tmp36센서를 이용하여 아래와 같이 온도를 계산합니다.
    tmpTemp = (float)analogRead(tmpSensor)*5/1024;
    tmpCurrent = 100*(tmpTemp-0.5);

    // 저온,고온 버튼이 눌러짐에 따라 설정 온도를 다르게 저장합니다. 
    if (digitalRead(btnLow) == LOW) { 
        tmpSetting = tmpLow;
    }
    if (digitalRead(btnHigh) == LOW) {
        tmpSetting = tmpHigh;
    }

    // 각 버튼이 눌러짐에 따라 lcd패널에 다른 텍스트를 출력합니다.  
    // 설정된 온도가 존재하지 않을 때 lcd패널에 출력되는 메시지입니다.
    if (tmpSetting == 0) {            
        // 0번째 줄 0번째 셀에 입력합니다.
        lcd.setCursor(0,0);       
        // 메시지를 출력합니다.  
        lcd.print(" WELCOME. ");    
        // 1번째 줄 0번째 셀에 입력합니다.
        lcd.setCursor(0,1);         
        lcd.print(" PRESS BUTTON! ");   
    }
    // 설정 온도가 저온일 경우에 lcd패널에 출력되는 메시지입니다.
    else if(tmpSetting == tmpLow) {  
        // 0번째 줄 0번째 셀에 입력합니다. 
        lcd.setCursor(0,0);      
        lcd.print("SETTING : LOW   ");
        // 1번째 줄 0번째 셀에 입력합니다.
        lcd.setCursor(0,1);        
        // 현재 측정되는 온도 수치를 출력합니다.  
        lcd.print("CURRENT : ");   
        lcd.print(tmpCurrent);          
    }
    // 설정 온도가 고온일 경우 lcd패널에 출력되는 메시지입니다.
    else if(tmpSetting == tmpHigh) {        
        // 0번째 줄 0번째 셀에 입력합니다.
        lcd.setCursor(0,0);          
        // 메시지를 출력합니다.
        lcd.print("SETTING : HIGH"); 
        // 1번째 줄 0번째 셀에 입력합니다.
        lcd.setCursor(0,1);          
        // 현재 측정되는 온도 수치를 출력합니다.
        lcd.print("CURRENT : ");     
        lcd.print(tmpCurrent);
    }
    // 방석의 온도를 조절해주는 코드입니다.
    // 현재의 온도 값이 설정 값보다 낮다면 열선 패드에 전원 공급을 지속합니다.
    if (tmpCurrent <= tmpSetting) {
        // 열선패드에 전원을 공급합니다.
        digitalWrite(heatingPad1,HIGH);
        digitalWrite(heatingPad2,HIGH);
        digitalWrite(heatingPad3,HIGH);
    }
    // 현재의 온도 값이 설정 값보다 높다면 열선 패드에 전원 공급을 중단합니다.
    else if ((tmpSetting != 0) && (tmpCurrent > tmpSetting)) {
        // 열선패드에 전원 공급을 중단합니다.
        digitalWrite(heatingPad1,LOW);
        digitalWrite(heatingPad2,LOW);
        digitalWrite(heatingPad3,LOW);

        // lcd의 모든 텍스트를 제거합니다.
        lcd.clear();
        // 0번째 줄 0번째 셀에 입력합니다.
        lcd.setCursor(0,0);    
        // 현재 측정되는 온도 수치를 출력합니다.    
        lcd.print("CURRENT : ");     
        lcd.print(tmpCurrent); 
        // 1번째 줄 0번째 셀에 입력합니다.
        lcd.setCursor(0,1);         
        lcd.print("     OVER ");
        lcd.print(tmpSetting);
        lcd.print("C");    
          
        // 열선패드의 온도를 낮추기 위해 2분간 전원 공급을 중단합니다.
        delay(120000);
    }
    // 2초간 대기합니다. 
    delay(2000); 
    // lcd의 모든 텍스트를 제거합니다.
    lcd.clear();  
}

 

 

 

제작과정

 

오렌지보드, 열선패드, 버튼 등 필요한 회로를 연결하고 열선패드에 tmp36 온도센서를 부착합니다.

(셀로판 테이프를 이용했습니다)

 

         

 

 

 우드락을 20x20 크기로 잘라 오렌지보드 및 모스펫 모듈을 거치해둘 판을 제작합니다.

 체크무늬 시트지를 이용해 꾸며주었답니다.

 

⓷ 미리 준비해둔 방석에 열선 패드가 겹치지 않도록 고정시킵니다. 

 

제작 완료입니다! 

이제 적당한 위치에 방석을 놓아두고, 오렌지보드와 모스펫에 전원을 연결하여 사용하시면 됩니다!

 

 

 

실행 과정

 

 

 

 

동영상

 

 

 

 

마치며...

 

전기 방석 메이킹을 시작했던 때는 다소 쌀쌀해서 유용하겠다는 생각이 들었는데요~

아쉽게도 벌써 따뜻한 봄날씨가 되었네요 ^^

그렇지만 전기방석을 스스로 만들어보면서 재미도 느끼고 유익했던 순간들이었습니다~

다음에는 보다 신선한 아이디어로 돌아오겠습니다~ 감사합니다 ^^

 

노랑병아리