완벽한 외출

스토리보드

라이브러리_변경_사항

완벽한외출_HW개발부분

※ VS1003/WizFi310 Library를 수정하였기 때문에 소스코드에서 수정된 라이브러리로 교체 후 컴파일해야합니다.

(동영상은 추가버튼이 동작하지 않아서 소스코드에 나머지 영상을 첨부합니다)

  • 초기 컨셉
  • 제품 시연 동영상

  • 실제 제작 제품
  • 안드로이드 어플리케이션
      
  • 시스템 구조도
  • HW 개발 내용

   

 

 

  1. 프로젝트 명 
    1. 완벽한 외출
  1. 프로젝트 소개

누구나 한번쯤 일기예보를 확인하지 않고 외출을 하여 우산이 없어서 비를 맞아본 경험이 있을 것이다. 지하철이나 버스 시간을 불과 몇 분 차이로 놓쳐 지각을 한 경험도 있을 것이다. 그리고 중요한 소지품 또는 준비물을 깜빡 잊고 나와 곤란한 상황도 겪어 봤을 것이다. 만약 외출하는 순간에 오늘 비가 오는지, 버스가 도착하려면 몇 분 남았는지 한번만이라도 주의시켜주는 무엇인가가 있었다면 어땠을까? 그랬다면 아마 이러한 곤란한 상황들을 겪지 않아도 됐을 것이다. 이 프로젝트는 외출하는 순간에 나에게 필요한 정보들을 주의시켜주는 솔루션을 제공하여 사용자로 하여금 곤란한 상황을 겪지 않도록 하는 것이다.

  1. 프로젝트 목표
    1. 외출할 때 필요한 정보들을 신뢰할 수 있는 방법으로 획득하여 제공한다.
    2. 사용자가 필요한 정보들만 선택할 수 있도록 한다.
    3. 사용자를 방해하지 않는 방법(음성, LED표시, 스마트폰 애플리케이션 팝업)으로 정보를 전달한다.
    4. 사용법(설치, 이용)이 단순해야 한다.
  1. 프로젝트 사용 시나리오
    1. 디바이스를 설치한다.
    2. 디바이스 환경설정(WIFI 연결)을 한다.
    3. 스마트폰 애플리케이션을 이용하여 전달받고자 하는 정보를 선택한다.
    4. 외출할 때 별도의 행위 없이 내가 선택한 정보들을 획득한다.
    5. 만약 바빠서 디바이스를 무시했다면 스마트폰에 발생한 팝업 메시지로 대체 확인한다.
  1. 프로젝트 개발
    1. 프로젝트 구성
      1. 장치
      2. 서버
      3. 애플리케이션
  2. 시스템 구조
  3. 구성 별 기능 요구사항
    1. 장치
      1. WIFI 상태 표시(WIFI TCP 서버 모드, 연결 끊김 상태, 연결 상태)
      2. WIFI 연결 방법 제공
      3. 전원 상태 표시(전원 켜짐+배터리 완충, 충전 중, 배터리 부족)
      4. 선택한 정보 상태 표시
      5. 선택한 정보 음성 전달
      6. 외출 감지
    2. 서버
      1. 정보 수집
      2. 장치, 애플리케이션에 정보 전달
      3. 애플리케이션으로 팝업 발생
    3. 애플리케이션
      1. 장치 설정 인터페이스
      2. 장치 와이파이 Configuration 방법 제공
      3. 정보 선택 인터페이스 및 장치와 동기화
      4. 선택한 정보 표시
      5. 외출 감지 시 정보 Pop-up
  4. 구성 별 개발
    1. 장치 
      1. WIFI 상태 표시 개발
        1. LED 1개를 사용해서 WIFI의 상태를 표시.
      2. 전원 상태 표시
        1. LED 1개를 사용해서 전원의 상태를 표시.전원 상태 표시 개
        2. LED 1개를 사용해서 전원 상태를 표시한다.
      3. 선택한 정보 상태 표시
        1. 앱에서 LED에 표시할 정보를 선택
        2. 장치에서 LED On/Off 정보를 서버에 요청
        3. LED On/Off
      4. 선택한 정보 음성 전달
      5. 앱에서 음성 전달받을 정보를 선택
        1. 장치에서 텍스트 정보를 서버에서 가져옴(날씨 맑음, 미세먼지 나쁨 …)
        2. 서버에서 받은 텍스트 정보로 TTS(Text To Speech) Server에 음성 데이터를 요청하고, 데이터를 받아서 실시간 스트리밍으로 출력
      6. 외출 감지
    2. 서버
      1. 날씨 정보 API 개발
      2. 교통(버스, 지하철) 정보 API 개발
      3. 애플리케이션과 디바이스간의 데이터 통신 API 개발
    3. 애플리케이션
      1. 스토리보드.pptx 참조
  1. 구성 별 어려움
    1. WiFi 연결 및 해제
      1. A서버에 연결 한 후 WiFi310Client::stop() 함수를 통해 연결 해제 후 B서버 연결하는 경우 Request에 대한 Response가 아예 수신되지 않거나, 앞부분이 짤려서 수신됨 (connected()를 통해 Response 수신이 완료되었는지 status()를 통해 확인하지만, status()의 마지막부분에서 _sock = 255(사용안함)로 변경하지만 변경전에 기존 소켓에 대한 disconnection 함수인 stopClient(_sock)을 호출 안함)
  1. TTS 음성 재생
    1. Arduino의 작은 8kb SRam으로는 TTS 음성 데이터(6~10kb)를 저장하지 못함 (메모리 최적화를 수행하여 RingBuffer의 크기를 1kb > 4kb로 확장)
    2. WizFiRingBuffer/WizFi310Drv가 오동작하는 상황이 많아서 오류 부분을 대폭 수정
    3. 기존의 VS1003(mp3 코덱) 라이브러리(SD 파일 재생 라이브러리)를 TTS서버의 response(mp3 데이터)를 스트리밍으로 재생할 수 있도록 대폭 수정 (4kb의 RingBuffer로 10kb의 데이터까지 재생 가능)
    4. Response Data의 전송속도가 mp3 코덱의 재생 속도보다 더 빠르기 때문에 병목현상이 발생하여 TTS 서버에서 연결이 해제됨(10kb 이상의 Response는 끝까지 재생이 안됨)