코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2016-03-17 17:26:45
노랑 병아리입니다.
처음으로 프로젝트를 게시해보네요!
이번에 만들어 본 프로젝트는 따뜻한 봄이 오기 전까지 유용하게 쓸 수 있는 전기 방석으로, 프로젝트 이름은 뜨끈뜨끈입니다.
⓵ 우선 열선패드에 온도 센서(tmp36)을 부착하여 온도를 측정합니다.
⓶ 2개의 버튼을 이용해 저온/고온의 온도를 설정합니다.
저온버튼이 눌릴 경우 55°C로 설정되며, 열선패드의 온도가 55°C를 초과할 경우 2분간 전원 공급을 중단합니다.
열선패드의 전원 공급을 중단한만큼 온도가 내려가겠죠?
이와 같은 방식으로 고온버튼이 눌릴 경우 80°C로 설정됩니다.
⓷ lcd패널에 방석의 실시간 온도와 설정되어진 온도(저온/고온)를 출력합니다.
기능이 간단한 만큼 실제 구현하는 방법도 어렵지 않습니다!
자 그럼! 본격적으로 메이킹 방법을 공유해볼까요?
전기방석 프로젝트에서는 lcd패널, 가변저항, 버튼을 사용합니다.
프로젝트를 진행하면서 코코아팹 학습 튜토리얼에서 많은 도움을 받았는데요~~
여러분들도 학습 튜토리얼을 통해 응용 프로젝트에 도전해보세요 ^^
NO | 부품명 | 수량 | 상세 설명 |
1 | 오렌지보드 | 1 | 아두이노 UNO |
2 | LCD패널 | 1 | |
3 | 가변 저항 | 1 | |
4 | 버튼 | 2 | PUSH 버튼 |
5 | TMP 36 | 1 | 온도센서 |
6 | 4채널 모스펫 | 1 | 릴레이 소음 대용 |
7 | 점퍼케이블 | 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 크기로 잘라 오렌지보드 및 모스펫 모듈을 거치해둘 판을 제작합니다.
체크무늬 시트지를 이용해 꾸며주었답니다.
⓷ 미리 준비해둔 방석에 열선 패드가 겹치지 않도록 고정시킵니다.
⓸ 제작 완료입니다!
이제 적당한 위치에 방석을 놓아두고, 오렌지보드와 모스펫에 전원을 연결하여 사용하시면 됩니다!
전기 방석 메이킹을 시작했던 때는 다소 쌀쌀해서 유용하겠다는 생각이 들었는데요~
아쉽게도 벌써 따뜻한 봄날씨가 되었네요 ^^
그렇지만 전기방석을 스스로 만들어보면서 재미도 느끼고 유익했던 순간들이었습니다~
다음에는 보다 신선한 아이디어로 돌아오겠습니다~ 감사합니다 ^^
노랑병아리