May 29, 2009

C# Serial Port 통신 - GPS 수신 완성

이전 포스트에서 다루었던  C# Serial Port 통신 - GPS 수신 을 완성하였습니다.

C# Serial Port 통신 - GPS 수신 (1/2)

C# Serial Port 통신 - GPS 수신 (2/2)

 

지도는 Google Maps Api 을 이용하였습니다.

 

Serial 통신을 이용하여 받은 내용중

$GPGGA,114455.532,3735.0079,N,12701.6446,E,1,03,7.9,48.8,M,19.6,M,0.0,0000*48

이 데이터를 Parsing 하여 "현재시간, 위도, 경도, 사용위성수" 를 표시하였습니다.

이중에서 위도 경도는 Google Maps API 를 이용하여 지도로 뿌려주었습니다.

참고) 위도 경도 값을 바로 넣어주면 안되고 변환 시켜야 합니다.

C# Serial Port 통신 - GPS 수신 (2/2) 에서 마지막 포인트를 읽어보세요^^

 

시스템은 위와 같습니다.

GPS 모듈을 통해 들어온 데이터를 PC로 전송하기 위하여 MAX232 모듈을 사용하였습니다.

GPS의 TX 를 MAX232 모듈의 RX  그리고 모듈의 TX 를 RS232의 RX 로 연결하였습니다.

 

May 24, 2009

[Silverlight] BIT Project - MCOpener

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bit 교육 센터 고급과정의 마지막 프로젝트 시연회 동영상 입니다.

설명자는 본인입니다. (손발이 오글 오글)

 

1. 프로젝트 개요
 특정 영상에 노출된 수많은 컨텐츠(음악, 옷, 지리정보)들의 정보 입력툴과 서비스 해줄 수 있는 플레이어를 제공하는 프로젝트입니다.
 

 

2 프로젝트 개발 목적   

  최근 들어 웹2.0의 부상과 정보 유통 채널의 다양화 등으로 UCC는 큰 관심을 얻기 시작했다. UCC가 이처럼 시장에서 주목 받고 있는 이유는 바로 뉴미디어 시대의 킬러 컨텐츠로 성장할 수 있는 잠재력 때문이다. 우리는 이점에 주목하여 영상에 수많은 컨텐츠들을 노출 시키고 시청자 들에게는 컨텐츠의 정보를 손쉽게 얻을 수 있고 구매까지 이어질 수 있는 환경을 제공하였다. 또한 UCC저작권의 대안으로 떠오른 CCL을 단순희 노출하는데 그치지 않고 Media Data안에 CCL정보를 삽입하므로 써 좀 더 높은 수준의 저작권 보호를 이룰 수 있도록 구현하였다.

 

3. 프로젝트 개발범위
 - 에디터를 통해 영상의 정보를 입력
 - 플레이어를 통해 입력된 정보와 MashUp 된 각종 정보 보여주기
 - 효과적인 게시물을 보기 위한 두가지 게시판기능  
 - 자신이 올린 영상에 대한 편집 및 다운로드 기능
 - Player
     ○ 동영상 재생
     ○ 전체 화면시 사물에 대한 Rect 표시
     ○ 관련 사물 클릭시 각종 정보 제공(웹,쇼핑,이미지)
 - Editor
     ○ 동영상 업로드
     ○ 영상 편집기능
     ○ CCL 데이터 검사 및 입력기능
     ○ 각종 데이터 입력 기능

 

4. 시스템 구성도

4.1 EnCode Service
ㆍ동영상 편집기능(자르기, 이미지삽입)을 한다.
ㆍ미디어 파일을 서버로 업로딩 
ㆍ사용자가 올린 동영상을 WMV로 인코딩한다.

4.2 Info Service
ㆍ미디어 파일 정보 관리
ㆍ썸네일 추출

4.3 XMP Service
ㆍCCL정보 파일에 삽입하기
ㆍ미디어 파일에 CCL정보 읽기

4.4 XML Service
ㆍ에디터를 통해 저장한 모든 메타데이터 정보를 XML파일로 기록
ㆍPlayer에서 요구시 미디어에 맞는 정보를 보여준다.

4.5 Webjet Service
ㆍ OpenAPI를 통해 영상에 노출된 사물에 대한 쇼핑,이미지,웹검색 내용을 보여줌
ㆍ RSS 서비스와 OpenAPI를 통해 관련 동영상 순위 검색어 순위 날씨 NEws정보 제공

4.6 Comment Service
 ㆍ 시간별로 달린 댓글을 영상 재생시 말풍선으로 해당시간에 보여준다.

4.7 Player
ㆍ동영상 미디어 재생 기능 
ㆍXML 파일로부터 영상에 노출된 컨텐츠에 대한 정보 제공 
ㆍ웹 메쉬업을 통한 쇼핑 이미지 사용기 검색 내용 제공

4.8 Authoring Tool
ㆍ업로드시 동영상 편집 기능  
ㆍCCL 정보 입력 기능  
ㆍ메타 데이터 입력 기능

 

5. 계발환경
 (1)서버
ㆍ운영체제 : Microsoft Windows Server 2008 sp1
ㆍ웹서버 : IIS 7.0
ㆍDatabase : Microsoft SQL Server 2005
ㆍ개발 툴 : Microsoft Visual Studio 2008 

(2)클라이언트
ㆍ운영체제 : Microsoft Windows XP SP3
ㆍ개발 툴 : Microsoft Visual Studio 2008 , Blend2.5, Expression Encoder SDK,
   XMP SDK Toolkit, Silverlight 2.0 SDK 

 

 

 

 

May 9, 2009

C# using BackgroundWorker in WinForms

BackgroundWorker 가 무엇이냐? 말그대로 뒤에서 일하시는 분입니다. 언제쓰냐? 보통 복잡한 수식계산이나 이미지 프로세싱, 웹서비스호출, 데이터베이스 트랜젝션 등 작업을 실행하는 동안에는 사용자 인터페이스가 응답하지 않을 수 있습니다. 이러한 작업으로 인한 지연이 길어져 UI가 응답을 하지 않는 경우 BackgroundWorker 구성 요소를 사용하여 이러한 문제를 쉽게 해결할 수 있습니다.

도구상자에서 우선 ProgressBarBackgroundWorker 를 끌어다 놓습니다.

그리고 BackgroundWorker 의 속석중 비동기 부분을 모두 True 로 바꿔 주셔야 합니다.

다음은 코드입니다.

정말 간단하네요^^ㅎ

C# using FileStream (Write,Read)


MSDN 에서 보면 "파일에 대해 Stream을 제공하여 동기 및 비동기 읽기/쓰기 작업을 모두 지원합니다."한다고 나와 있습니다.

 

우선 FileStream을 사용하기 위해서는 아래와 같이 추가해주셔야합니다.

using System.IO;

 

기본적으로 아래와 같이 객체를 하나 만듭니다.

FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew);

FILE_NAME : 파일 이름을 적어줍니다 (읽을땐 읽을파일, 쓸땐 쓰고자하는 파일명)

FileMode : 열거형 운영 체제에서 파일을 여는 방법을 지정합니다

<MSDN 발췌>

 

간단한 예제


 

MFC - Custom Control

MFC - Custom Control 에 대한 발표 자료입니다.^^

C# Serial Port 통신 - GPS 수신 (2/2)

C# Serial Port 통신 - GPS 수신 (1/2) 에 이어 이번에는 NMEA 프로토콜에 대해서 알아보겠습니다.

 

GPS 를 연결하여 시리얼 통신을 하면 아래와 같은 데이터가 나오게 됩니다.

$GPGGA,134807.000,3732.6627,N,12701.3549,E,1,04,2.6,39.7,M,19.7,M,,0000*69
$GPGSA,A,3,20,28,17,11,,,,,,,,,6.5,2.6,6.0*3D
$GPGSV,2,1,08,17,60,325,22,28,57,210,34,20,52,066,19,04,32,260,*76
$GPGSV,2,2,08,11,30,066,19,23,10,120,18,01,08,062,,02,00,252,*7A
$GPRMC,134807.000,A,3732.6627,N,12701.3549,E,1.58,329.68,110808,,,A*63

이중에서 우리가 봐야 할 부분은

$GPGGA,114455.532,3735.0079,N,12701.6446,E,1,03,7.9,48.8,M,19.6,M,0.0,0000*48

입니다. 하나씩 분석해 보겠습니다. 데이터들은  ,  로 구분 되어 있습니다.

 

114455.532 <- 시간으로 그리니치 표준시 입니다. (11시 44분 55.532초) 따라서 한국의 시간을 구하기위해서는 +9 를 해야겠지요

 

3735.0079 , N<- 이것은 위도로서 37도 35.0079분을 뜻하며 , N 은 북위라는 의미입니다.

 

12701.6446 , E<- 경도를 가르키며 127도 1.6446분을 뜻하며, E 는 동격을 말합니다.

 

1 <- fix종류 입니다.

0 이면 invalid한 데이터(못쓰는 데이터) 라는 의미
1 이면 gps 위성신호만으로 계산
2 라면 dgps도 사용하여 계산 등등이다.

 

03 <- 계산에 사용된 위성의 갯수입니다. 최소한 3개 이상이 되어야 합니다.

 

7.9 <- 위성과 노이즈에 관련자료

 

48.8 M <- 해수면 기준 고도 입니다.

 

19.6 M <- ??

 

0.0,0000 <- dgps를 사용했을경우 마지막으로 update한 시간과 dgps 기지국 ID

 

*48 <- check sum 입니다.

 

http://gpsinformation.org/dale/nmea.htm#GGA

여기를 참조하시면 모든 내용을 보실 수 있습니다(영문)

 

여기서 포인트!!

3735.0079 , N

12701.6446 , E

위와 같이 위도와 경도를 뽑아오게 됩니다. Google Maps API 나 다음 Open Api 를 사용하여 실제 지도에 뿌려주기 외해서는 위의 값을 바로 넣어주면 안됩니다.

37도 35.0079분을 뜻하기 때문에 실제로 값을 넣어 줄때는

37 + (35.0079/60) = 37.583465 이렇게 넣어주셔야 합니다. (경도도 마찬가지 입니다.)

[C++] using Vector

요즘 C# 그리고 Silverlight 에 빠지다 보니 예전에 공부했던 내용들이 가물 가물 하더라구요 그리하여 이번에 차근 차근 보기로 했습니다. 초등학교때 썼던 일기장을 보듯?ㅋ

뜬금없이 Vector 가 나왔습니다. 요것은 Standard Library 에 있는 자료 구조중 하나이며 여러 종류들중 제가 가증 좋아하는 것입니다.

 

우선 vector 를 사용하기 위해서는 아래와 같이 해주셔야 합니다.

이제 본격적으로 사용 예를 보겠습니다.

CD 관리 프로그램으로 설명을 드리겠습니다.

우선은 App , CD 두개의 Class 가 존재합니다.

다음은 Class App 내용입니다.

여기서 vector <CD*> *base; 를 선언하였습니다. < > 여기 사이에 자료형을 넣습니다(여기선 클래스) 이네요 . 그리고 포인터 변수를 선언하였습니다.

실행과 동시에 App 생성자로 들어오게 되며, 이곳에서는 vector 를 초기화 합니다. 그리고 Run(); 을 실행하여 매뉴를 선택할 수 있게 하였고 이곳에서는 삽입,삭제,찾기 등을 할 수 있는 기능을 하게 됩니다.

이제 vector의 중요한 기능들을 보겠습니다.

<삽입>

<전체 출력>

for 문을 순회 하게 되는데 maximum 은 base->size() 로 하였습니다. size()는 vector의 총 크기를 int 형으로 반환해줍니다. 그리고 base->begin()은 vector의 처음을 가르키는데 증가하면서 역참조하여 CD 를 반환해줍니다. 이렇게하여 출력이 간으하게 됩니다. 이런 순회구문을 이용하여 찾기도 가능합니다. strcmp 등을 이용하여 문장을 비교하여 출력해주면 됩니다.

<삭제>

 

전체 출력 결과에서 삭제할 번호를 선택하여 index 에 저장하고 삭제를 하는 과정입니다. index-1 해준 이유는 vector의 시작이 0 부터 시작하기 때문입니다. erase() 를통해 단순히 목록에서 삭제해주기전에 선택한 CD 실제로 메모리 해제를 하기위해 delete 를 사용하였습니다.

 

간단하게 vector에 대해서 알아 보았습니다. 옛기억 새록 새록 나네요^^

May 8, 2009

Open Loop & Closed Loop Control

1. Open Loop Control (개루프 제어)

 

non-feedback controller 라고도 불려진다.

제어 대상과 제어기가 직렬의 형태로 배치되는구조

시스템 출력이 외부 외란(disturbance)이 없고, 플랜트의 매개변수가 변하지 않는 한 입력을 충실히 따른다.

 

 

2. Closed Loop Control (폐루프 제어)

 

feedback controller 라고 불리며 대표적인 예로 PID Control 이 있다.

출력이 다시 입력으로 feedback 되는 구조를 갖는 제어를 말한다. 이러한 구조는 인간의 생체시스템에서 쉽게 찾아 볼수 있는 구조로, 체온조절, 혈당조절 과 같은 메커니즘 이 이러한 feedback 제어를 기반으로 하고 있다. 이 제어 시스탬에서는 입력과 출력의 차이 , 즉 편차(error)가 제어기에 입력되고, 제어기는 이편차를 줄이게 된다. 따라서 이 방식의 제어는 시스템의 변수들의 변화나 외부 노이즈가 있음에도 불구하고, 출력이 원하는 입력을 추종(tracking)하도록 한다. 제어기의 출력 신호는 증폭되어, 제어 대상인 플랜트에 다시 입력된다. 그라나 폐루프 제어 시스템은 플랜트의 모델과 제어기의 게인에 따라 시스템을 불안정 하게 만들 수 있으므로 적절한 제어 게인의 선택이 필요하다.

출처 및 학습 자료 : 디지털 제어 시스템(홍릉과학)