EasyMorning

EasyMorning 는 웹서버를 이용한 스마트 알람시계이다. 웹서버를 통하여 알람, 설정등을 제어하고 정보들을 DB에 저장하여 하나의 설정으로 여러 알람 시계가 공유할 수 도, 여러 설정을 하나의 알람에서 사용할 수 도 있도록 만들었다.

 

주요 기능

  1. 알람
    • 사람들은 REM 수면과 NON-REM 수면을 오가며 잠을 잔다. 일반적으로 잠을 자면 NON-REM 수면으로 시작해 일정 간격으로 REM 수면상태 된다. REM 수면은 NON-REM 수면과 다르게 뇌가 깨어 있는 상태로 이 상태에서 사람들은 꿈을 꾸고, 몸을 뒤척인다. 이때 깨어나게 되면 가장 기분 좋은 느낌을 받을 수 있다고 알려져 있다.
    • 알람시계는 이런 움직임을 모션센서를 이용하여 REM수면상태를 감지하고 이를 웹서버에 보낸다. ( true, false 로 구분된다. )
    • 알람이 울리면 소리에 크기에 맞춰 빛이 발생한다. 이를 통해 사용자가 일어날 수 있도록 돕는다.
  2. 웹서버 
    • 유저정보에 저장된 IP를 이용하여 IPinfoDB API를 이용하여 위도 경도를 구하고 기상청 API를 거쳐 날씨 정보를 받아온다. 이를 이용하여 비나 눈 등의 상황을 알아내고 사용자가 조금 더 빨리 일어나 준비 할 수 있도록 도와준다.
    • 알람이 REM수면 상태라 판단하였다면 알람의 탐색범위를 늘려서 사용자가 REM수면 상태에서 일어나 기분 좋은 아침이 되도록 돕는다.

제작

    1. 알람
      • 제작

         

      • 하드웨어 구성
        1. 제어 버튼
        2. 백 라이트 모듈
        3. ESP826

          웹서버와 통신을 위하여 사용한다.

          알람이 처음 작동 할때 웹서버와 통신하여 현재 시간을 새로 설정하고, 현재 접속 된 위치의 IP 주소를 넘겨준다.

          후에 이 IP 주소를 이용하여 기상청에서 날씨정보를 찾는다.

          0, 1번 핀을 이용하여 통신

        4. DS3231

          현재 시간을 측정하기 위한 모듈이지만 내장된 저장공간을 가지고 있기때문에 데이터를 저장할 수 있다.

          이를 이용하여 유저 , 음악 넘버를 저장하는데 사용한다.

          또한 현재 시간을 얻기 위해서도 사용한다.

           

        5. TM1637

          시간을 출력하기 위해 사용한다.

          옵션 선택시에는 시간이 아닌 옵션에 대한 정보를 출력하는데 사용한다.

        6. PIR Motion Sensor
          알람이 사용자의 REM수면 상태를 판단하기 위하여 사용한다.
        7. DFplayer + 스피커

          dfplayer를 이용하여 음악을 컨트롤 한다.

          10, 12 번 핀을 RX, TX 로 사용하여 통신

    2. DB
      • MongoDB를 이용하여 Database 구축
      • 유저 테이블

         

        alarmNum 유저마다 가지는 순차적인 번호값
        name 유저의 이름
        maxVolume 알람 최대 크기
        duration 알람 작동 길이
        volumeDelay 최대 볼륨 까지 걸리는 시간
        isCheckWeather 날씨 정보를 이용한 알람 사용 여부
        isCheckMotion 움직임 감지를 이용한 알람 사용 여부
        weatherState OpenWeatherMap 에서 제공하는 현재 날씨의 ID값
        connectIp 알람이 연결된 ip주소
      • 알람 테이블

        alarmNum 해당 알람을 사용하는 유저의 번호값
        day 요일별로 각각 하나의 비트만을 사용하여 하나의 숫자로 표현한 값
        lastWorkDay 알람이 일찍 울렸을 경우 중복해서 울리는 것을 막기위한 값
        isActivity 알람의 활성화 여부
    3. 서버
      • NodeJs 를 이용하여 웹서버를 구축, mongoose를 이용하여 MongoDB와 연동
      • 기능
      • 1 사용자 추가,  추가시 순차적인 번호가 부여된다.
        2 사용자 삭제, 삭제시 모든 유저의 번호가 순차적으로 업데이트 된다.
        3 사용자를 선택할 수 있다.
        4 알람, 설정을 선택할 수 있는 탭이다.
        5 날짜를 선택한다. 선택하지 않을시 자동적으로 일회성 알람이 된다.
        일회성 알람은 작동 후 바로 OFF 된다. 다시 ON 하여 사용할 수 있다.
        6 시간 선택
        7 알람 목록을 볼 수 있다.
        8 알람 활성화 여부를 표시해준다.
        9 알람 삭제 버튼
      •    
        1 알람에 대한 설정을 할 수 있다.
        볼륨, 알람 길이 , 볼륨 증가 시간 , REM 수면 감지 사용 , 날씨 사용을 설정 할 수 있다.
        2 사용자 삭제, 삭제시 모든 유저의 번호가 순차적으로 업데이트 된다.
           

완성 모양

위의 회로도 이미지에서 크기 때문에 라이트모듈을 하나빼고 박스에 알람처럼 담아보았다…

작동 모습은 영상을 통하여 확인 할 수 있다.

영상에서는 사용자 추가 , 사용자 선택 , 음악 선택 , 모션 센서를 이용한 조기 알람 작동 , 알람 작동시 LED 변화 를 순서로 볼 수 있다.