라니의 일상
라니의 일상(박세영)
반갑습니다~ 맡은 분야에서 전문가가 되고자 하는 박세영입니다! * 현재 취득한 IT 관련 자격증 목록 - 정보처리기사 - 컴퓨터활용능력 2급 - TOPCIT - 마케팅 빅데이터 관리사 1급 - SQLD (진행중, 4월에 시험예정)

API란 어떤 사이트가 가지고 있는 기능을 외부에서도 쉽게 사용할 수 있게 공개한 것이다.

일반적으로 특징은 다음과 같다.

  • HTTP 통신 사용
  • 클라이언트 프로그램 -----> API 서버 : HTTP 요청
  • API 서버 -----> 클라이언트 프로그램 : XML, JSON 형식 등으로 응답 ex) 날씨 정보, 상품 데이터, 주가, 환율 등등...

이제, 본격적으로 API 사용을 해보도록 하겠다. 우선 API를 제공하는 사이트를 선택한다. 필자는 경기도데이터드림 이라는 곳을 선택했다.

image.png

여기서 원하는 데이터를 골라보도록 하자. 참고로, 미리 인증키를 발급받는 것을 추천한다. 인증키는 회원가입해서 요청하면 받을 수 있다.

image.png

실습해 볼 데이터는 아래의 '경기도 코로나19 신천지 방역현황'이라는 데이터로 해보겠다.

image.png

API를 사용하기 위해서는 설명서를 잘 읽어봐야 하는데 아래의 그림에서 요청주소와 변수명, 설명을 잘 봐두도록 하자.

image.png

image.png

파이썬으로 돌아가서, 아래와 같이 requests와 json을 import한다.

apikey는 본인이 발급받은 key를 사용하면 되며, request.get 으로 해당 url을 인자로 주면 응답을 받을 것이다.

그것을 json의 loads 메소드를 통해서 확인할 수 있다. 그렇게되면 결과에서 본 것 같이 원하는 데이터를 얻을 수 있게 된다.

image.png

위의 경우에서 url을 살펴보면 앞부분은 요청주소, ?로 연결되는 뒷부분은 기본인자 변수명과 그에 따른 값임을 확인할 수 있다.

여러 개의 기본 인자를 사용하고 싶으면 & 로 연결하면 된다.

이 기본인자를 한번 활용해서 결과를 다르게 출력할 수 있는데, 몇 개의 예시를 들어보도록 하자.

예시1] 위의 설명서를 보면 Type라는 변수명은 '호출 문서'로 기본값이 xml 이고 json도 사용가능하다고 했다.

그러면 xml로도 출력할 수 있을테니 한번 출력해보도록 하자.

url 형식은 '요청 주소 ? KEY = (자신의 key) & Type = xml' 이다.

image.png

예시2] json 타입으로 출력하되 1페이지의 첫번째 데이터만 확인하고자 한다.

요청주소 ? KEY = (자신의 key ) & Type = json & pIndex = 1 & pSize = 1

image.png

이제, 감이 잡혔을 것이다. 그렇다면 출력된 결과값을 이용해보도록 하자. 겉부분은 { } 로 싸여있는데 데이터타입을 확인해보니까 dict 즉, 딕셔너리다. 딕셔너리에서 value 부분만 꺼내본다.

image.png

꺼내봤더니 겉부분이 [ ] 즉, 리스트로 감싸고 있다. 여기서 row라고 적혀있는 index = 1이 필요한 데이터가 있는 부분이므로 이것을 가져온다.

image.png

결과를 살펴봤더니 또 딕셔너리다.. 딕셔너리의 value만 가져오자.

image.png

이제 진짜 마지막이다. 겉부분이 리스트이므로 0번째 인덱스 데이터를 추출해보자. 그렇게 되면 온전한 하나의 딕셔너리가 최종적으로 남게 된다.

이를 이용해서 원하는 데이터에 접근할 수 있을 것이다. column 개수를 확인해보니 18개다.

image.png

하지만, 매번 이렇게 하기에는 힘들 수 밖에 없다.... 따라서 API로부터 가져온 json타입의 데이터를 기반으로 한 데이터프레임을 만들어보자.

앞에서 가져온 한 줄로 데이터프레임을 만들어 넣었다.

image.png

그리고 앞에서 순차적으로 진행한 방법을 응용하여 다음과 같은 코드로 모든 데이터를 하나의 데이터프레임에 모두 넣었다.

캡처사진 크기상 아래까진 안보이지만 100행 18열의 데이터 프레임이 완성되었다.

image.png

여기서 이제 원하는 작업을 편하게 진행할 수 있을 것이다.

혹시, 여기말고도 다른 사이트에도 똑같이 적용하면 된다!

하나만 예를 들자면, 서울시열린데이터광장 이라는 사이트도 동일기능을 제공하는데 여기서도 원하는 데이터를 고르고 그곳에 적힌 설명 읽고 하면 된다.

image.png

파이썬으로 다음과 같이 작성하면 똑같이 나온다.

image.png

그런데, 앞에서와 같이 KEY나 다른 변수를 직접 지정해주지 않았다. 그 이유는 아래와 같다.

image.png

사이트마다 다른 것 같아서 되는 쪽으로 하면 될 것이다.

좋아요 0
    댓글 0
    • 본 프로젝트는 2인 1조로 진행한 프로젝트입니다 *

    사용한 데이터는 국민 가계 동향 데이터로, 아래와 같이 데이터를 읽어오면 가구원수 및 가구성별, 연령, 지출항목들(식료품, 주류, 교육 등..)에 대한 정보를 확인할 수 있다.

    image.png

    전처리가 필요하므로, 우선 가구주-연령 column은 레이블 인코딩을 통해서 명목형 변수로 변환해주고, 결측치가 많은 음식-숙박 column은 결측치인 0을 제외한 나머지 값들의 중위수를 결측치 대신에 넣었다.

    마지막으로 결측치가 없는지에 대해 확인해보았다.

    image.png

    이제, 각 요소들 간 상관관계를 파악해보도록 하자. 결과를 확인해보니 '식료품및주류음료' column이 상관관계가 높게 나온 것을 확인할 수 있다. 따라서, 이 column의 이상치를 제거하도록 하겠다.

    ** 많은 feature가 존재할 때, 결정값과 가장 상관성이 높은 feature들을 위주로 이상치를 검출하는 것이 좋은데, 모든 feature들의 이상치를 검출하는 것 자체는 시간이 많이 소모되는 일이며 상관성이 낮은 feature들을 제거한다 하더라도 성능 향상에 크게 기여하지 않기 때문이다. **

    image.png

    우선, 해당 column의 데이터 분포가 어떻게 되어있는지 알아보기 위해 산점도(scatter)로 그려본다. 아래 그림과 같이 꽤 많은 점들이 흩어져 있는 것을 확인할 수 있었다.

    image.png

    이 점들을 제거하는 즉, 극단치를 제거하는 method를 구현해보았다.

    image.png

    해당 method를 호출하고 다시 산점도를 그려보면 앞의 산점도와는 달리 많이 개선됨을 확인할 수 있다.

    그래프가 달라보일 수 있는데, X축과 Y축이 달라서 그렇게 보이는 것이다. 이 부분에 대해서는 xlim과 ylim을 동일하게 준다면 해결할 수 있는 부분이다.

    image.png

    이렇게 IQR를 이용한 이상치를 제거할 수도 있겠지만, 다른 방법으로 이상치를 어떻게 하면 제거할 수 있을지에 대해서 고민을 해보았다.

    그 방법으로 선형회귀 직선이 포함된 산점도를 그려서, 해당 선형회귀 직선의 기울기와 y절편을 구한다. 이를 이용하여 점과 직선 사이의 거리 즉, ax + by + c = 0 과 어떤 점 (x_n, y_n) 에 대한 거리가 가장 먼 것들부터 가장 가까운 것까지 나열하여

    사용자가 원하는 점의 개수를 지정하면 거리가 가장 먼 것부터 제거되는 그런 method를 구현하면 어떨까라는 생각을 했다.

    우선, 선형회귀가 포함된 산점도를 그려보는데 이번에는 다른 column을 대상으로 진행하였다.

    아래는 주거 및 수도 광열 column을 대상으로 선형회귀 직선이 포함된 산점도를 그려본 것이다. (기존에 어떻게 데이터 분포가 이루어져 있는지 확인)

    image.png

    아래의 method는 선형회귀의 기울기와 y절편을 이용하여 점과 그 직선 사이의 거리를 구하는 method다.

    image.png

    앞의 method를 이용하여 사용자가 원하는 가장 먼 거리의 점들을 가지고 있는 dataframe의 index를 구하는 method를 구현해서 최종적으로 제거될 점들의 index가 반환된다.

    parameter로 앞에서 사용했던 기울기, 절편, 계수가 들어가고 몇 개의 점을 반환받을 것인지를 정해줄 수 있다. (default 개수는 10개로 지정)

    image.png

    출력해보면 아래 리스트에 나온 값들이 제거될 인덱스가 된다. 제거된 상태를 확실하게 파악하기 위해서 마지막 parameter로 30을 주었다.

    image.png

    이제, 산점도를 다시 그려보니 바깥으로 편향된 점들이 많이 제거되었음을 확인할 수 있다.

    image.png

    이제, 시각적인 그래프가 아닌 앞에서 나온 이런 결과들의 성능이 개선되었음을 RMSE값을 통해서 확인해보도록 하자.

    들어가기에 앞서 이를 위하여 구현한 메소드 두 개를 살펴보자.

    다음 구현한 메소드는 feature와 target을 넣고 로그변환유뮤(default : 로그변환을 하지 않음), test 데이터의 비율, 시드값, 알파값까지 파라미터로 들어가는 메소드인데

    로그변환유뮤와 test 데이터의 비율, 시드값, 알파값은 default로 이미 지정이 되어 있는 상태이므로 사용할 때 필요 시에만 값을 바꿔주면 되도록 만들었다.

    이 메소드를 호출하면 LinearRegression, Ridge, Lasso, ElasticNet의 RMSLE, RMSE, MSE값이 출력된다.

    image.png

    앞의 값을 test 데이터의 비율별로 RMSE값을 보여주는 메소드가 아래의 메소드다. 추가로 이 메소드는 RMSE의 최소값과 그 때의 test 데이터의 비율은 어떤지에 대한 정보도 제공해준다.

    image.png

    위에서 산점도를 그렸던 데이터를 기준으로 방금 살펴본 메소드를 호출해보면 다음과 같은 결과가 나오는 것을 확인할 수 있다.

    < 이상치 제거 전 >

    image.png

    <이상치 제거 후 >

    image.png

    확실히 RMSE값이 줄어든 것을 확인할 수 있다.

    이제, 분류를 진행해보도록 하자. 분류로는 각 모델별로 어떤 모델이 가장 성능이 좋은지에 대해서 살펴보게 될 것이다.

    똑같이, 다시 데이터를 불러와서 전처리 작업을 진행한다. 이번에는 target을 성별로 하여 로지스틱, KNN, Decision Tree 등 다양한 모델의 개별성능을 테스트해보았다.

    아래의 결과는 지표 중 가장 우선시 되는 AUC값을 기준으로 오름차순 정렬이 되어 있는 상태인데, GBM이 가장 높은 것을 확인할 수 있었다.

    image.png

    하지만, 성별의 비율이 다르기 때문에 SMOTE를 이용한 오버샘플링을 진행하여 비율을 50:50으로 맞춰서 진행하도록 하겠다.

    image.png

    image.png

    추가로, 모델의 성능을 향상시키는 방법으로 GridSearchCV를 통한 하이퍼 파라미터 튜닝으로 성능이 향상되는지 확인해보았다. (파라미터의 개수가 많아지면 수행시간이 오래 걸리므로 몇 개만 진행하였음)

    아래의 결과와 같이 최적의 하이퍼 파라미터가 출력된다.

    image.png

    이 파라미터로 튜닝을 진행했을 때 전과 후 차이를 확인해봤더니 F1 Score가 0.8599 -> 0.8762로 성능이 향상되었음을 확인할 수 있다.

    image.png

    이번에는 앙상블을 해보도록 하자. 앞에서 개별 학습기들 중에서 하위 약한 학습기 몇 개를 선택하여 앙상블을 돌렸을 때 어떤 결과가 나오는지 아래의 결과를 보면서 확인해보자.

    결과를 확인해보면 알 수 있듯이 AUC의 값이 개별 AdaBoost 급으로 성능이 향상되었음을 알 수 있다. 또한, Voting 방법에 있어서는 Soft Voting보다는 Hard Voting이 성능이 더 높게 나왔다.

    image.png

    스태킹 기반의 앙상블에서 최종 모델을 바꾸어가면서도 돌려보았다. 아래의 결과에서는 최종모델을 DecisionTree로 했을 때가 가장 높게 나왔다.

    image.png

    정리] AUC 값 기준 가장 낮은 것부터 높은 것까지....... 상위 8개를 오름차순으로 나타내보니 부스트계열이 성능 면에서 있어 좋은 성능을 발휘함을 확인할 수 있었다.

    스태킹 앙상블 : 0.6721(final = LogisticRegression, KNN일 때)

    랜덤포레스트 : 0.6766

    AdaBoost : 0.6860

    앙상블 : 0.6870 (Hard Voting)

    CV 기반의 스태킹 : 0.6969 (cv = 4)

    XGBoost : 0.7227

    LightGBM : 0.7426

    GBM : 0.7654

    좋아요 0
      댓글 0
      • 본 프로젝트는 3인 1조로 진행되었습니다.

      사용한 데이터는 서울시 열린 데이터 광장에서 가져온 데이터다. 우선, 2019년 서울시 미세먼지 데이터를 가져온다. csv파일이기 때문에 read_csv로 읽어올 수 있다.

      불러오면 아래 그림과 같이 측정소에 따른 측정일시와 미세먼지, 초미세먼지 등의 column을 확인할 수 있다.

      image.png

      서울시 미세먼지 데이터는 2019년 말고도 2017년, 2018년도 존재한다. 2017년부터 시작하여 2019년의 데이터를 하나로 보고 싶어서 아래와 같이 합쳐보았다.

      image.png

      행의 개수가 27902개로 기존의 행에 비해 3배 이상 많아진 것을 확인할 수 있다.

      이 중에서 나는 강남구의 데이터를 확인해보고 싶어서 강남구의 데이터만 따로 불러서 확인해보았다.

      image.png

      또한, 강남구, 중구, 종로구를 대상으로 측정소별로 미세먼지의 평균을 알고 싶어서 함수를 따로 정의하여 값을 확인해보니 강남구가 39.82로 제일 높은 것을 확인할 수 있었다.

      image.png

      위의 결과를 세로 막대 그래프로 시각화해 보았다 해당 그래프의 y축 간격을 조절하면 측정소별 차이를 좀 더 명확하게 확인할 수 있을 것이다.

      image.png

      위에서 지역별로 확인해보았다면 이번에는 연도별로 미세먼지와 초미세먼지의 최대값이 어떻게 변화하는지 꺾은선그래프로 확인해보았다. 그래프에서 위쪽에 있는 파란색 꺾은선 그래프가 미세먼지이고 아래쪽의 주황색 꺾은선 그래프가 초미세먼지다. 미세먼지는 2017 ~ 2019년 3년동안 큰 변화가 없었으나, 초미세먼지는 점점 증가하는 것을 확인할 수 있다.

      image.png

      또한, 세로 막대 그래프와 가로 막대 그래프로도 표현했다. 그러나 이번에 다른 점은 범례표시가 추가되었고 데이터 레이블이 추가되어 구체적으로 얼마나 값이 되는지 확인할 수 있다.

      처음에 나오는 그래프가 세로 막대 그래프, 두 번째로 나오는 그래프가 가로 막대 그래프가 되겠다.

      image.png

      image.png

      지금까지의 내용은 조건이 한 가지에만 머물러 있었다. 그렇다면 조건이 두 개면 표현할 수 있을까? 정답은 그렇다. 아래와 같이 조건을 두 가지 조건으로 일산화탄소 농도와 초미세먼지에 조건을 주었다. 정상적으로 결과가 출력되는 것을 확인할 수 있다.

      image.png

      마지막으로 해볼 것은 2017 ~ 2019 년도 중에 미세먼지 수치의 상위 N개 수치를 보는 것이다. 필자는 예시로 상위 100개의 수치와 상위 30개의 수치를 살펴보았다. 아래 그래프를 확인해보자.

      image.png

      image.png

      좋아요 0
        댓글 0
        2020년 3월 4일 04시35분 ·  카페 관리 DB 구축
        • 본 프로젝트는 3인 1조로 진행했습니다 *
        1. 개요
        • 에이콘 카페는 매장이 증가함에 따라 매장 관리 시스템의 필요성을 느낌
        • 매장별 제품 재고 관리가 가능하고 직원 관리를 위한 데이터 베이스를 구현 하고자 함
        • 매장별 재고에 따른 재고량 및 소비량 측정이 가능하고 이에 따른 주문 및 공급업체  정보를 제공
        • 직원의기본정보 (이름, 직책, 담당업무, 근무시간 등)를 관리 할 수 있으며 나아가 매장별직원에 대한 데이터 제공. 
        1. ERD 다이어그램

        image.png

        • 제품(제품코드(PK), 제품분류, 제품단가, 제품명, 제품재고량, 공급업체코드(FK))

        • 주문(주문코드(PK), 주문일자, 도착일자, 제품가격, 주문수량, 제품코드(FK), 매장코드(FK) )

        • 매장(매장코드(PK),  매장이름, 지역명, 지역번호(FK))

        • 직원(직원코드(PK), 직원명, 연락처, 급여, 직책, 근무시간, 매장번호(FK))

        • 공급업체(공급업체코드(PK), 제품코드, 공급업체명, 담당자, 연락처)

        1. 예상되는 시나리오

        (1) 제품

        • 해당 제품의 재고량 및 소비량 확인을 위해서 원하는 제품을 입력 받을 수 있도록 한다.

        • 재고가 없는 제품의 담당자를 확인할 수 있도록 한다.

        • 재고가 소진되는 양을 측정하여 주문할 수 있는 타이밍을 시스템을 통해 알려준다.

        (2) 직원

        • 원하는 매장의 직원을 조회할 수 있도록 한다.   ex) 근무시간, 직책, 담당업무 등

        • 직원 관리를 위한 매장별 인원수 및 총 임금, 근무 시간 및  인원을 파악할 수 있도록 한다.

        • 재고가 소진됨에 따라 해당 담당자가 알맞은 수량을 필요시점에 주문을 할 수   있도록 한다. 

        (3) 주문

        • 날짜별 주문조회로 어떤 일자에 입고 또는 주문이 일어났는지 확인할 수 있도록 한다.

        • 주문을 담당한 담당자가 누구인지를 알 수 있다.

        • 주문한 제품과 수량을 통하여 제품의 주문총액을 확인할 수 있도록 한다.

        • 어떤 제품을 얼마만큼 주문했는지 수량을 확인할 수 있도록 한다.

        • 단위시간별 (ex 계절, 사회적 이슈에 따른 시기)에 따른 주문량을 확인 할 수 있다.

        (4) 공급업체

        • 제품을 관리하는 공급업체 측 정보(관리자, 연락처 등)을 확인할 수 있도록 한다
        1. 쿼리 결과

        (1)

        image.png

        image.png

        (2)

        image.png

        image.png

        (3)

        image.png

        image.png

        (4)

        image.png

        image.png

        (5)

        image.png

        image.png

        좋아요 0
          댓글 0
          2020년 3월 4일 03시43분 ·  경품 추첨 이벤트
          • 본 프로젝트는 3인 1조로 진행한 프로젝트입니다 *

          이번에 살펴볼 프로젝트는 미니 프로젝트로 HTML, JAVASCRIPT, CSS를 이용하여 6일간 진행한 단기간 프로젝트다. 주제명은 경품추천 이벤트로 사용자가 뽑기 버튼을 눌렀을 때 일정 확률로 경품을 확인할 수 있다.

          각 진열 경품들의 확률은 차등 적용되어 있으며 모두 소진 시 더 이상 해당 상품을 뽑을 수 없게 된다. (1등 상품인 기프트카드의 확률은 0.4%로 조정되어 있음)

          이제 본격적으로 경품추천 시스템을 작동시켜보도록 하자.

          아래의 그림은 메인화면이다. 하단의 [뽑기] 버튼을 누르면 결과를 알 수 있다. 오른쪽의 스크롤바가 있는 흰 화면은 경품 이벤트 시스템을 이용하는 사람이 무언가를 뽑았을 때의 로그를 기록하는 역할을 한다.

          image.png

          뽑기 버튼을 눌렀더니 필자는 꽝이 나와서 다음 기회에... 라는 메시지가 아래와 같이 나왔다. 로그에도 다음과 같이 기록된다.(참고로 꽝은 70%..)

          다시뽑기를 누르게 되면 앞의 처음화면으로 돌아온다. 물론 초기화된다는 말은 아니다.

          image.png

          경품이 나올 때까지 돌려봤는데, 7번째에 텀블러가 뽑혔다! 이 떄, 경품의 남은 횟수는 차감이 되는 것을 확인할 수 있다.

          image.png

          계속해서 뽑아보자. 그렇게 많이 하다보면 어느 새 경품이 소진되게 될 것이다. 그러면 다음과 같은 메시지가 뜨면서 해당 상품이 소진되었다는 메시지가 뜨게 된다.

          image.png

          좋아요 0
            댓글 0
            2020년 3월 4일 11시31분 ·  E - 편한 꿀잠
            • 본 프로젝트는 3인 1조로 진행한 졸업작품 프로젝트입니다 *
            1. 개요

            일상생활 속에서 온도나 습도가 적당하지 않아 불쾌지수가 높거나 빛이 너무 밝아서 잠을 자기 불편한 경우가 있다.

            e-편한 꿀잠은 스마트폰을 이용하여 실내 환경의 온도, 습도, 조도를 센서를 통해 측정하여 무드등, 블라인드, 멀티탭을 수동 또는 자동으로 제어함으로써 불편한 요소들을 제거하는 것을 목적으로 하고 있다. 000.PNG

            1. 선행 연구 및 작품관련 자료조사

            1 ) 아크릴 무드등 : 스마트폰 애플리케이션(Color wheel)에서 색상을 선택하고 스마트폰으로부터 전송 받 은 RGB 값으로 LED를 점등하는 아크릴 무드등이다.

            • 같은점 : 아크릴판으로 조명을 비춤, 조명의 색을 애플리케이션을 통해 변경
            • 다른점 : 날씨 정보를 알려줌, 취침시간 시 조명이 자동으로 꺼짐

            2 ) 휴 HUE 3.0 스마트조명 스타터킷 램프 스트립 : 개인 장치에서 손쉽게 조명을 제어하고 언제나 적절한 분위기를 조성할 수 있는 개인용 무선 조명인 HUE 스마트 전구다.

            • 같은점 : 조명의 색을 스마트폰으로 제어, neopixel LED를 사용
            • 다른점 : 날씨 정보를 알려줌, 취침시간 시 조명이 자동으로 꺼짐

            3 ) 아두이노 자동 블라인드 : 실내의 밝기에 따라서 자동으로 정회전 및 역회전 하는 블라인드다.

            • 같은점 : 주변의 밝기에 따라서 블라인드가 반응하여 정회전 및 역회전을 함
            • 다른점 : 애플리케이션을 통해서 받은 정보를 통해서 블라인드를 제어

            4 ) 아두이노 스마트 멀티탭 애플리케이션을 이용하여 플러그의 전원을 제어하는 멀티탭이다.

            • 같은점 : 블루투스 모듈과 릴레이 모듈을 이용하여 멀티탭을 제어
            • 다른점 : 사용자가 애플리케이션에서 설정한 온습도를 바탕으로 개별 전원 제어 가능
            1. 작품의 기능

            다음은 스마트폰 앱과 모듈들의 기능을 표로 정리해 본 것이다.

            001.PNG

            또한, 데이터의 흐름은 다음과 같다.

            ① 사용자 -> Application : 취침 조건 정보(취침 시간, 기상 시간, 온도,습도 등), 모듈의 동작조건 설정

            ② Application -> 무드등 : 아크릴 판 on/off 정보

            ③ Application -> 블라인드 : 블라인드 서보모터 정회전, 역회전 정보

            ④ Application -> Bluetooth 멀티탭 : 해당되는 플러그 정보, on/off 정보

            ⑤ 센서모듈 -> Application : 온도, 습도, 조도 값

            • ①을 제외한 나머지 경우는 Bluetooth로 동작

            ** 자동으로 모듈 제어 시, Application 현재 시간과 취침시간을 비교하여 자동제어 유무 판단

            1. 사용자 메뉴얼(앱)

            ① 우선, 앱을 실행시키면 아래와 같이 splash 액티비티가 몇 초간 보여진 후에, 메인 화면으로 이동하게 된다. 메인화면에 모듈을 포함시킬 수 있는 Group이 최초로 2개 있다.

            초기 상태에는 Group에 어떤 모듈도 들어있지 않다. 따라서, 해당 그룹을 눌러도 [모듈을 추가해주세요] 라는 메시지와 함께 모듈을 제어하는 화면으로 넘어갈 수 없다. 따라서 Group에 모듈을 포함시켜야 한다.

            image.pngimage.pngimage.png

            ② 우측 상단에 ‘:’ 버튼을 누르면 그룹을 생성하거나 편집 혹은 삭제를 할 수 있는데 아래의 그림은 [그룹 생성] 버튼을 눌러서 Group 3이 추가된 상태를 보여주고 있다.

            참고로, 그룹을 생성하거나 삭제하면 DB에 따로 저장이 되어 나중에 앱을 종료하고 다시 실행하더라도 그 기록이 남게 된다.

            image.png

            ③ [그룹 편집] 버튼을 누르면 어느 그룹에 모듈을 포함시킬지에 대한 창이 나온다. 그 중에서 Group 1을 눌렀을 때 나오는 화면이 아래의 화면인데, 현재 스마트 폰에 연결된 블루투스 Device 중에서 취침과 관련된 IOT 기기들을 따로 선별해서 보여준다.

            예시로, 무드등 하나를 스마트 폰과 블루투스 연결을 하여 그룹에 포함시키도록 하겠다. 만약, 멀티탭 및 블라인드까지 스마트 폰에 연결이 되어 있다면 아래의 연결된 모듈 목록에 해당 모듈이 리스트로 나타날 것이다.

            완료가 되면 [SUBMIT] 버튼을 누르자. 그러면 메인 화면으로 돌아올 것이다.

            image.png

            cf) 다음은 모든 모듈이 다 블루투스 연결되었을 때 앱 화면을 보여주고 있다.

            image.png

            ⑤ 이제 모듈이 group안에 포함되었을 것이다. 방금 전에 모듈을 넣은 group 1을 누르게 되면 아래와 같이 포함된 모듈을 제어할 수 있는 화면이 나온다. 이때, 사용자가 넣은 각 모듈에 포함된 블루투스 모듈인 HC-05가 스마트 폰과 페어링되면서 본격적으로 제어를 할 수 있게 된다.

            또한, 날씨정보를 불러올 수 있는데, 사용자가 현재 위치한 날씨가 표시된다.(맨 우측 그림) 센서모듈을 포함시키면 센서모듈에서 측정한 온도, 습도, 조도 값을 블루투스로 수신받아서 표시하게 된다. 이 값은 자동제어 할 때 이용된다.(실시간, Thread를 이용)

            현재 그림은 온도, 습도, 조도를 읽어오는 때 캡쳐했기 떄문에 default로 0의 값을 가지고 있다.

            사용자가 원하는 대로 수동 또는 자동으로 변경할 수 있는데, 그렇게 하기 위해선 먼저 자동제어조건을 설정해야 한다. 먼저 자동제어조건을 눌러보도록 하자.

            image.pngimage.pngimage.png

            ⑥ [자동 제어 조건] 에서는 자동 모드 때 필요한 제원값을 받는 부분이다. 취침시간, 기상시간이 나와있고 온도, 습도, 조도도 입력받을 수 있다.

            이 때, 습도 같은 경우 사람마다 느끼는 차이가 있기 때문에 따로 부연설명이 적혀있다.

            image.png

            ⑦ 다음은 각 모듈을 수동제어 할 수 있는 화면으로 ⑤에서 COLOR 버튼을 누르거나 ‘>’ 버튼을 눌러서 확인할 수 있다.

            각 모듈은 어떤 수동 제어를 할 수 있을지 정리해보았다.

            • 무드등 : 색 변경(COLOR 버튼), ON/OFF (> 버튼)
            • 멀티탭 : 각 플러그의 ON/OFF 제어
            • 블라인드 : 블라인드에 달린 모터 정회전/역회전

            image.pngimage.pngimage.pngimage.png

            마지막으로 다음 사진은, 실제 제작된 무드등, 멀티탭, 블라인드를 보여주고 있다.

            004.PNG

            1. 기대 효과 및 활용 방안

            1 ) 기대 효과

            • 실용성 : 사용자가 자신에게 맞는 취침환경을 설정할 수 있다.
            • 시장성 : 기존 시장에는 모듈을 개별적으로 제어할 수 있지만 e-편한꿀잠은 쾌적 한 취침환경을 위해 필요한 여러 모듈들을 제어함으로써 경쟁력을 향상 시킬 수 있다.
            • 경제성 : 무분별한 냉난방기의 사용을 방지할 수 있어 경제적이다.

            2 ) 활용 방안

            • 스마트폰 앱에 블루투스를 통해 실내 조명을 연결하여 제어 가능 (실내 조명의 스위치를 누르지 않고 스마트폰 앱을 통하여 전원 제어 가능)
              • 블루투스를 Thing+로 확장하여 실외에서도 사용 가능 (실내의 전자제품들을 스마트폰 앱에 연결하여 실외에서 제어 가능)
              • 미세먼지 측정 센서를 창문의 양쪽에 부착하고 스마트폰 앱에 연결하여 측정한 값을 토대로 제어 가능 (바깥의 미세먼지 수치가 높으면 창문을 닫고 낮으면 환기를 위해 창문을 열 수 있 음)
            좋아요 0
              댓글 0