April 29, 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

[38호]스마트 욕조

2016 ictmain

 2016 ICT 융합 프로젝트 공모전 참가상

스마트 욕조

글 | 부산대학교 김유림, 윤영길

심사평

JK전자 수위, 온도센서와 서보 모터만으로 생각을 잘 실제화시켰다. 간단하지만 실용화 된다면 굉장히 일상 생활에서 편리하게 이용할 수 있을것 같다. 조만간 가정의 모든 밸브와 기기들이 자동화되고 원격으로 제어하는 환경이 된다면 많은 응용 제품들이 등장할 것 같다.

뉴티씨 아이디어는 매우 좋았는데, 실제 욕조에서도 사용할 수 있도록 설계되었으면 더욱 좋았을 것이다. 블루투스 등을 통하여 무선으로 욕조에 물빼는 밸브 등을 제어하는 등으로 제작하였다면 실제로 사용이 가능했을 수도 있을 것 같다. 앞으로 좀 더 다듬어서 좋은 결과가 있기를 바란다. 좋은 아이디어를 구현하고자 하였으며, 보고서에 좀 더 구체적으로 생각한 아이디어를 담아서 좋은 점수를 받았다.

칩센 일본 등 여러 국가에서 이미 판매되고 있는 완성도 높은 제품들이 있어서 좀 아쉽다, 실제 구현한 내용과 문서의 경우도 급하게 진행한 것으로 보인다

위드로봇 IoT 관점에서 보면 주변에 볼 수 있는 욕조에 자동화된 기능을 넣는 부분이 재미있다. 물의 온도를 조절하는 부분은 밸브의 on/off 만으로 구현하고 있는데, 히터가 있다는 가정하에 온도 제어하는 부분을 구현해 봤더라면 제어 이론도 같이 공부되고, 전체적인 제품의 완성도도 올라갔을 것 같다.

작품 개요
주제 선정 이유
한국은 옛날부터 목욕탕을 즐겨왔다. 하지만 시대가 변하면서 사람들은 바쁜 일상생활 속에서 목욕탕을 가기 보다는 집에서 간단하게 피로와 스트레스를 풀어주는 반신욕을 즐기는 시간이 많아졌다. 하지만 반신욕을 할 때 몇 가지 불편한 점이 있다. 물의 양과 온도를 맞추기 위해서 계속해서 신경을 쓰고 있어야 하고, 반신욕을 하는 동안 물이 식을 수도 있다. 또한 반신욕을 오래할 경우 오히려 몸에 좋지 않을 수도 있다. 따라서 우리는 위에서 언급한 불편한 점들을 개선하기 위해 ‘스마트 욕조’라는 주제를 선정하게 되었다.

작품에 대한 간단한 설명
‘스마트 욕조’란 개인 집의 화장실 욕조에 스마트한 기능을 추가한 욕조로, 이 기능들은 앞에서 말한 불편한 점들을 개선하는 방향으로 만들어 보았다. 첫 번째 기능은 물의 양을 조절해주는 것이고, 두 번째는 물의 온도를 설정해 놓으면 반신욕이 끝날 때까지 물의 온도를 유지시켜주는 것이다. 마지막으로 목욕이 끝난 후 자동으로 물을 빼주는 기능이 있다. 버튼 한번만 누름으로써 순차적으로 이 기능들이 동작하게 된다.

작품에 사용한 부품
주요 부품

38 ict 스마트욕조 (1)

38 ict 스마트욕조 (2)

센서

38 ict 스마트욕조 (3)

38 ict 스마트욕조 (4)

모터

38 ict 스마트욕조 (5)

기타

38 ict 스마트욕조 (6)

작품 설명
주요 동작 및 특징
① 적정 온도와 높이 맞추기(반신욕 전)

38 ict 스마트욕조 (7)38 ict 스마트욕조 (8)

반신욕 전 욕조의 스위치를 on 하면 욕조 바닥의 배출구가 닫히고 물이 나오기 시작한다.
여기서 스위치의 on/off를 눈으로 알아보기 쉽게 하기 위해서 빨간 led를 설치했고 욕조 바닥의 배출구에는 모터2를 연결시켜서 개폐가 가능하게 했다. 그리고 우리가 실제로 수도꼭지를 연결시킬 수 없었기 때문에 수도꼭지에 물이 나오는 것을 녹색 led의 on/off로 표현하였다.(물 나옴 ▶ on / 물 멈춤 ▶ off)

수도꼭지를 on하고 지속적으로 온도센서로 온도를 측정하면서 시스템에 설정되어 있는 38~40도에 맞춰 물의 온도를 조절한다. 여기서는 모터1의 움직임을 실제 수도꼭지의 움직임처럼 나타냈다.

일정량의 물과 온도에 다다르면 설치된 수위센서1이 감지해서 물을 멈출 수 있도록 구성했다. 수위센서1에 물이 닿으면 Level1이 Low(0)로 출력된다. 반대의 경우, High(1)으로 출력된다.

38 ict 스마트욕조 (10) 38 ict 스마트욕조 (11) 38 ict 스마트욕조 (12) 38 ict 스마트욕조 (13) 38 ict 스마트욕조 (14) 38 ict 스마트욕조 (15) 38 ict 스마트욕조 (16)

② 적정 온도 유지 및 적정 시간 알림(반신욕 중)

38 ict 스마트욕조 (17) 38 ict 스마트욕조 (18)

욕조에 물이 다 받아진 후 사람이 들어오면 사람 몸의 부피만큼 수위가 올라가서 욕조 윗부분에 설치된 수위센서2가 물의 높이를 측정한다. 여기서 물의 높이(Level2)를 측정하는 이유는 뒷부분에서 설명하겠다.

38 ict 스마트욕조 (19) 38 ict 스마트욕조 (20)

그 후 사람이 반신욕을 하는 동안 물의 온도가 낮아지게 될 것이고, 그 온도가 35도 이하가 되면 욕조 바닥의 배출구가 열리고 물을 일정량 빼게 된다. 이때 물은 Level1센서가 High될 때까지(사람 몸의 부피만큼) 빠지게 된다. 물이 빠지고 나면 욕조 바닥의 배출구가 닫힌다.

38 ict 스마트욕조 (21)

다시 적정온도로 맞추기 위해 수도꼭지에서 물이 나오게 된다.(녹색 led가 on) 여기서도 앞부분과 마찬가지로 온도조절을 한다.(모터1의 움직임으로 표현)

38 ict 스마트욕조 (22)

물은 처음 사람이 들어갔을 때의 상태만큼 채워지게 된다. 앞에서 수위센서2의 높이가 대략 300이기 때문에 300까지 물이 찬다.(수위센서2의 높이를 측정한 이유) 이때 수도꼭지가 닫히므로 녹색 led가 off 된다.

③ 자동 물 빼기(반신욕 후)
반신욕이 다 끝난 후 욕조에 설치된 스위치를 off하면 욕조 바닥의 배출구가 자동으로 열리고 물이 빠지게 된다.

전체 시스템 구성

38 ict 스마트욕조 (24)

개발 환경(개발 언어, Tool, 사용 시스템 등)
개발 언어 : C language
사용 프로그램 : Arduino
사용 기판 : Arduino Mega ADK, Bread Board

단계별 제작 과정

팀원들과 아이디어 선정 ▶ 선정된 아이디어를 토대로 알고리즘 제작 ▶ 아두이노에 대한 사전 학습 ▶ 필요한 부품 구매 ▶ 센서들의 동작 확인 ▶ 아두이노 소스코드 제작 ▶ 아두이노에 소스코드 업로드 ▶ 욕조와 사람 등 필요한 모형 제작 후 동작 확인 ▶ 성공!

기타(회로도, 소스코드, 참고문헌 등)

#include<Servo.h>

Servo myservo1; //모터1(수도꼭지)
Servo myservo2; //모터2(배출구)
unsigned char Re_buf[11], counter=0;
unsigned char sign = 0;
float T0=0, TA=0,

int switch1Pin = 2; //로커스위치에 대한 변수(ON)
int switch2Pin = 4; //로커스위치에 대한 변수(OFF)
int ledPin = 13; //적색 LED(스위치 ON/OFF 표시)
int ledOn = 12; //녹색 LED(수도꼭지 ON/OFF 표시)
int ledVel = 0;

void setup(){
Serial.begin(115200);
delay(1);
Serial.write(0xA5);
Serial.write(0×45);
Serial.write(0xEA);
myservo1.attach(8);
myservo2.attach(7);

pinMode(AO, INPUT); //수위센서2
pinMode(48, INPUT); //수위센서1
pinMode(switch1Pin, INPUT);
pinMode(switch2Pin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledOn, OUTPUT);

}

void loop() {
unsigned char i=0, sum = 0;
int level2 = analogRead(A0);
int level1 = digitalRead(48);

if(sign) {
sign = 0;
for(i=0; i < 8; 1++)
sum += Re_buf[i];

if(sum == Re_buf[i]) {
TO = (float)(Re_buf[4]<< 8 | Re_buf[5] / 100;

Serial.print(“temp:”);//시리얼 모니터에 온도값 출력
Serial.println(TO);
Serial.print(“level1:”)//시리얼 모니터에 수위센서1값 출력
Serial.println(leven1);
Serial.print(“level2:”);//시리얼 모니터에 수위센서2값 출력
Serial.println(leven2);
delay(1000);
}

if(degitalRead(switch2Pin) == HIGH) {//스위치를 켰을때)
digitalWrite(ledPin, High);//적색 LED켜짐
myservo2.write(0); 배출구 닫힘
if(level1 == HIGH) {//물이 차지 않았을때
digitalWrite(ledOn, HIGH); //물 받기 시작
ledVel = 1;
myservo2.write(0);
if (T0 >= 50) {
myservo1/ write(120); // 온도가 50도 이상일때 가장 차가운 물이 나옴
}
else if (TO < 50 & TO > 40) {
myservo1.write(75);//온도가 40~50도 일때 차가운 물이 나옴
}
else if (TO <= 40& TO > 38){
myservo1.write(45);// 온도가 38~40도 일때 적당한 온도의 물이 나옴
}
else if (TO <= 38 & TO > 25) {
myservo1.write(15);//온도가 25~38도 일때 따뜻한 물이 나옴
}
else {
myservo1.write(0);//온도가 25도 이하일때 가장 따뜻한 물이 나옴
}
}
//1
if((level1 == LOW)&TO < 40 & TO > 38 & level2==0) {//적정한 온도로 물이 다 찼을때
digitalWrite(ledOn, LOW);// 수도꼭지가 꺼짐
myservo2/write(0);
ledVel = 0;
}//2
if(level2 > 0) {//사람이 들어왔을때
if((TO < 35) & ledVel == 0) {//물의 온도가 35도 이하가 되면
myservo2.write(90);//배출구 열리고 물이 빠짐
}
if(level1 == HIGH{//일정량의 물이 빠졌을때
myservo2.write(0);//배출구 닫힘
digitalWrite(ledOn, HIGH); 수도꼭지가 켜짐
ledVEL = 1;
}
if ((level1==LOW) & ledVel ==1) {//물을 다시 받을때
myservo2.write(0);
digitalWrite(ledOn, HIGH);
ledVel = 1;
if (TO >= 50) {
myservo1.write(120);
}
else if (TO < 50 & TO > 40) {
myservo1.write(75);
}
else if(TO <= 40 & TO >38) {
myservo1/write(45)
}
else if (TO <= & TO > 25) {
myservo1.write(15);
}
else{
myservo1.write(0);
}
}
if(level2>300) {//적정 온도로 물이 다시 받아지면
digitalWrite(ledOn, LOW);//수도꼭지가 꺼짐
ledVel = 0;
myservo2.write(0);
}
}//3
}
else{//스위치가 꺼지면
digitalWrite(ledOn,LOW);
ledVel = 0;
digitalWrite(ledPin,LOW)://적색LED OFF
myservo2.write(90;//배출구가 열려 물이 빠짐
}//4
}
}

void serialEvent(){
while (Serial.available()){
Re_buf[counter]=(unsigned char)Serial.read();
if(counter == 0 && Re_buf[0] ! = 0X5A_ return;
counter++;
if(counter++;
if(counter == 9) {
counter = 0;
sign = 1;
}
}
}

 

 

 

Leave A Comment

*