November 14, 2018

디바이스마트 미디어:

[48호]Life Confidence

Cap 2017-10-18 13-15-49-260

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

Life Confidence

글 | 전남대학교 채행아

1. 심사평
칩센 작품의 아이디어와 같이 기존 제품의 전원 컨트롤을 접촉식으로 하게 하는 다양한 아이디어 제품이 존재한다는 것을 먼저 알아주기 바랍니다. 다만, 기존 제품들의 경우 제품 자체의 컨트롤이 IoT와 융합되어 있고, 컨트롤을 할지에 대한 컨디션을 제품이 스스로 판단하도록 하지 않습니다. 그 이유는 “Simple is the best”라 불리는 관점에서 일반 대중의 경험을 감동적으로 만들기 위해 반드시 필요한 요소가 바로 단순함이기 때문입니다. 온/습도의 능동적 판단보다는 사무실에 사람이 없다고 판단되는 조건을 명확히 하고 이때 모든 전원을 Off 하는 기능으로 구현하였다면 더 좋은 작품으로 와닿았을듯 합니다. 그러한 아쉬움이 남는 작품입니다.

뉴티씨 IoT의 실제 많이 사용될 수 있는 예를 구현한 점에 많은 점수를 주고 싶다. 한 가지만 구현해도 다른 구현을 쉽게할 수 있다는 점은 누구나 쉽게 알 수 있다. 상호 연계 동작이 일어날 수 있는 것으로 구현되어 실제에서의 적용 가능성이 높지만, 실제 시연 영상이 있었으면 전체적인 완성도가 올라갈 것 같다. 다만, 당장 이것으로 바로 실용화하기에는 어려운 점이 있으며, 보안, 오류 처리, 섬세한 제어 등이 추가되었다면 더 좋은 작품이 되었을 것 같다.

위드로봇 IoT 장비에 관한 아이디어가 좋습니다. 단, 보고서의 내용 만으론 제시한 아이디어가 잘 구현되었는지, 구현한 방식에서 개선해야 할 점은 무엇인지 파악하기가 어려웠습니다. 내용이 보강되면 좋을 것 같습니다.

2. 작품 개요
사물인터넷은 사물에 센서를 부착해 실시간으로 데이터를 인터넷으로 주고받는 기술이나 환경을 일컫는다. 최근, 사물인터넷을 기반으로 하는 제품이 다양하게 출시·연구되고 있다. 이와 관련된 아이디어 상품 및 프로젝트 주제로 원거리 전원제어 부분을 다루는 제품들이 주로 출시되고 있는데 이러한 아이템들의 한계점은 기존의 제품까지 제어할 수 없다는 점이라고 생각한다. 그런 한계점을 보완할 수 있는 Life confidence 제품은 기존 제품들의 전원 제어가 가능한 제품이다.

2.1. 아이디어 필요성
인턴을 했던 회사의 입구에 큰 글씨로 ‘에어컨, 난방기 및 전등 확인했나요? 라는 문구가 붙어있었다. 회사에서 사용하던 난방기는 최근 제품들과 같이 핸드폰이나 다른 제품으로 제어가 되지 않고 난방기 전용 리모컨이나 직접 본체의 전원버튼을 눌러줘야 키고, 끌 수 있는 제품이었다. 이런 제품들을 스마트폰이나 서버를 통해서 제어할 수 있는 방법이 있지 않을까 싶어서 찾아보았는데 현재 나오는 제품들로는 기존의 제품들까지 커버할 수는 없다는 한계점이 있었다.
ICT, IoT가 시작되었다고 하지만 모든 가전을 바꾸기에는 비용적인 측면에서 굉장히 비효율적이었다. 이런 호환성 부분을 해결하기 위하여 전원을 키고 끌 때 어떻게 적용되는지 알아본 결과 전원 제어는 접촉식, 비접촉식 이렇게 두 가지 방법으로 나누어졌다.
전원 제어를 적용하기 위해서는 첫 번째, 제품 자체적으로 온오프를 제어할 수 있도록 설계 단계부터 적용시켜 제작한다. 두 번째, 외부에서 직접 전원 버튼에 힘을 가하여 전원을 제어하면 된다는 점에서 착안하여, 기존의 제품에 부착하여 전원을 제어하는 Life confidence 아이디어를 제시하게 되었다. 파이 카메라를 통한 영상과 온습도를 통하여 난방기가 작동하는지 파악하고 서보모터의 각도제어를 통하여 전원 버튼 부근에 부착하여 전원을 제어하는 방식으로 접촉식 방법을 제안하였다. 이 아이디어를 통하여 기존의 제품들과의 호환성에서 장점을 얻고자 하였다.

2.2. 아이디어 목표
· 제어 기능 : 연결된 가전제품의 전원 제어
· 모니터링 기능 : DHT22센서를 통하여 온도, 습도 값을 서버를 통해 확인
· 라즈베리파이를 통하여 아두이노 제어

3. 작품 설명
3.1. 시스템 구성

48 ict Life Confidence (1)

구성품
라즈베리파이, 아두이노, 서보 모터, 파이 카메라v2, 리튬폴리머 배터리, 모터 드라이브, 온습도 센서, 통신 모듈

구성요소
· 모터 : 전기에너지로부터 회전력을 얻는 기계
· 온습도센서 : DHT22를 이용하여 외부의 온도와 습도를 측정하기 위한 부품
· L298N : 컨트롤 하고자 하는 전자기기의 수에 맞춰서 외부의 전원컨트롤을 위해 모터 또한 증가하여 사용해야하므로 모터드라이브를 추가함

48 ict Life Confidence (1)

3.2. 작품제작 핵심기술
아두이노 라즈베리파이 연결
· 소형개발회로 : 예를 들어 라즈베리파이(싱글 보드 컴퓨터), 아두이노(물리적인세계를 감지하고 제어할 수 있는 객체들과 디지털 장치를 만들기 위한 도구, 마이크로컨트롤러 보드를 기반으로 한 오픈 소스 컴퓨팅 플랫폼과 소프트웨어 개발 환경을 의미)
라즈베리파이와 아두이노를 함께 사용하여 라즈베리파이의 한계점을 극복하고 보다 간편하게 컨트롤이 가능하도록 구성하였다. 라즈베리파이와 아두이노는 이더넷을 통하여 연결하였다.
라즈베리파이의 장점인 파이카메라를 통하여 영상스트리밍을 구현하였다. 아두이노와 모터드라이브를 연결하여 서보모터와 전원버튼을 연결하여 사람의 손가락 대신 모터의 혼을 이용하여 전원버튼을 눌러주는 과정을 통하여 접촉식 온오프 버튼을 구현하였다.

3.3 시스템 기능

48 ict Life Confidence (2)

라즈베리파이 DHT22연결
sudo apt-get update
sudo apt-get install -y python3 python3-pip python-dev
sudo pip3 install rpi.gpio
sudo apt-get update
sudo apt-get install build-essential python-dev
$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT
$ sudo python setup.py install

48 ict Life Confidence (2)

라즈베리파이의 기본 웹서버 세트 APM(Apache PHP MySQL)을 설치
Apache 설치 (웹 서버 어플리케이션, 리눅스 기반)
$ sudo apt-get update
$ sudo apt-get install apache2
$ sudo chown pi -R /var/www
$ sudo chmod 0777 /var/www
$ sudo update-rc.d apache2 defaults

MySQL 설치 (DB를 쉽게 저장하고 검색할 수 있는 시스템)
$ sudo apt-get install mysql-server mysql-client libmysqlclient-dev
$ sudo nano /etc/mysql/my.cnf
PHP 설치 (웹피이지에 동적 기능 추가, 서버단에서 동작하는 프로그래밍 언어)
$ sudo apt-get install php5
$ sudo apt-get install phpmyadmin

48 ict Life Confidence (3)

php
ini_set(‘display_errors’, ‘On’);
error_reporting(E_ALL|E_STRICT);
$mysql_host = ‘localhost’;
$mysql_user = ‘User_name’;
$mysql_password = ‘User_password’;
$mysql_db = ‘testdb’;
$conn = @mysql_connect($mysql_host, $mysql_user, $mysql_password);
$dbconn = mysql_select_db($mysql_db, $conn);
$sql=”
select * from (
SELECT DATE_FORMAT( ddate, ‘%m-%d %HH’ ) mdh , COUNT( * ) cnt, SUM( temp ) ,
round(SUM( temp ) / COUNT( * ),1) atemper, round(SUM( humi ) / COUNT( * ),1) ahumier
FROM `tempdata`
GROUP BY DATE_FORMAT( ddate, ‘%Y%m%d%H’ )
order by ddate desc
limit 12
) t_a
order by t_a.mdh
“;
$result = mysql_query($sql) ;
$str_mdh=”";
$str_atemper=”";
$str_ahumier=”";
xAxis: {
categories: [<?php echo $str_mdh?>] },
yAxis: {
title: {
text: ‘Temperature (°C)’
}
},
plotOptions: {
line: {
dataLabels: {
enabled: true
},
enableMouseTracking: false
}
},
series: [{
name: 'HOUSE',
data: [<?php echo $str_atemper?>] }] });
$(‘#humi’).highcharts({
chart: {
type: ‘line’
},
title: {
text: ‘Humidity’
},
xAxis: {
categories: [<?php echo $str_mdh?>] },
yAxis: {
title: {
text: ‘humidity (%)’
}
},
plotOptions: {
line: {
dataLabels: {
enabled: true
},
enableMouseTracking: false
}
},
series: [{
name: 'HOUSE',
data: [<?php echo $str_ahumier?>] }] });
});
</script>
</head>
<body>
<script src=”https://code.highcharts.com/highcharts.js”></script>
<script src=”https://code.highcharts.com/modules/exporting.js”></script>
<div id=”temp” style=”width: 900px; height: 440px; margin: 30px auto”></div>
<div id=”humi” style=”width: 900px; height: 440px; margin: 30px auto”></div>
</body>
</html>

라즈베리파이 Gstreamer를 이용하여 동영상 스트리밍
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install gstreamer1.0
raspivid -t 0 -h 720 -w 1280 -fps 25 -hf -vf -b 2000000 -o – | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.0.***** port=5000
RaspberryPi Camera Viewer를 받아서 설정된 주소 값을 입력해주면 휴대폰으로 간편하게 라즈베리파이와 파이캠을 이용하여 스트리밍이 가능하게 된다.

* 참고로 라즈베리파이가 코드입력을 한다고 설치가 한번에 완벽하게 되는 것이 아니므로 설치를 하는 과정에 이상이 없는지 계속 확인을 해줘야한다.

아두이노와 ESP8266을 이용하여 nodeMCU ESP8266초기설정이후
#include <ESP8266WiFi.h>
const char* ssid = “imsunshine”;
const char* password = “00000000″;
int pin = D1;
int ledPin = 2; //
int Angle = 0; //
WiFiServer server(80);
void setup() {
Serial.begin(9600);
delay(10);
pinMode(Servo, OUTPUT);
digitalWrite(Servo, HIGH);
pinMode(pin, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println(“Setup done”);
Serial.println();
Serial.println();
Serial.print(“Connecting to “);
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi connected”);
server.begin();
Serial.println(“Server started”);
Serial.print(“Use this URL to connect: “);
Serial.print(“http://”);
Serial.print(WiFi.localIP());
Serial.println(“/”);
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return; }
Serial.println(“new client”);
while(!client.available()){
delay(1); }
String request = client.readStringUntil(‘\r’);
Serial.println(request);
if (request.indexOf(“/SERVO=ON”) != -1) {
digitalWrite(Servo, LOW);
angle = 0;
delay(30);
}
}
if (request.indexOf(“/Servo=OFF”) != -1) {
digitalWrite(Servo, HIGH);
Angle = 90;
delay(30);
} }

client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println(“”); // do not forget this on e
client.println(“<!DOCTYPE HTML>”);
client.println(“<html>”);
client.println(“<head>”);
client.println(“.button {“);
client.println(“background-color: green;”);
client.println(“border: none;”);
client.println(“color: white;”);
client.println(“padding: 15px 32px;”);
client.println(“text-align: center;”);
client.println(“text-decoration: none;”);
client.println(“display: inline-block;”);
client.println(“font-size: 20px;”);
client.println(“margin: 14px 20px;”);
client.println(“cursor: pointer;”);
client.println(“}”);

client.println(“</style>”);
client.println(“</head>”);
client.println(“<body>”);
client.println(“<p>”);
client.print(“Servo FADING TEST “);
client.println(“<br><br>”);
client.println(“<a href=\”/servo=ON\”\” class=’button’>Turn on </button></a>”);//Built-in Servo on
client.println(“<a href=\”/servo=OFF\”\” class=’button’>Turn Off </button></a>”);//Built-in Servo OFF
client.println(“</p>”);
client.println(“</body>”);
client.println(“</html>”);
delay(1);
Serial.println(“Client disonnected”);
Serial.println(“”);
}
}

 

 

 

 

 

 

Leave A Comment

*