로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2008/10/28
첨부#1 TrevaCap.exe (252KB) (Down:380)
첨부#2 ov6630_cam_v2.pde (6KB) (Down:1128)
Link#1 (Down:359)
ㆍ추천: 0  ㆍ조회: 7101   
  아듀이노 PC 카메라 제작
참조 :  http://www.asahi-net.or.jp/~qx5k-iskw/robot/index.html
제목 : Arduion image capture with Treva camera


아듀이노 기판에 휴대폰 카메라를 연결하여, USB 포트로 PC에 전송하고, 화면을 포착한다.
아듀이노 기판에서 전송한 화면은 PC 소프트웨어에서 BMP 파일로 저장할 수 있다.

 
원래는 로봇에 장착된 Treva 카메라의 감시화면을 , 무선모뎀으로 PC로 전송하는 용도입니다.
무인감시 카메라나, 안전감시, 주변인식 카메라 등으로 용도를 바꾸어 개발 할 수도 있습니다.
Treva + DigiQ = 화상인식 로봇 : http://www.asahi-net.or.jp/~qx5k-iskw/robot/digiq.html

      

휴대폰용 착탈 카메라 MC-100의 120x90 화소의 출력을 PC에서 소프트웨어로 저장할 수 있다.
MC-100의 화면 출력은 120 x 90 이지만, 입수한 PC 소프트웨어가 96 x 72 크기로 저장한다.
물론, PC 소프트웨어 TrevaCap V1.0을 개조한다면, 화면을 120 x 90 으로 저장할 수도 있다.

다음은 아듀이노 기판에 연결된 MC-100 카메라의 화면을 포착하고, PC에서 BMP 파일로 저장한 사진이다.
     
 
아듀이노 PC 카메라에 사용한, PC 소프트웨어 TrevaCap V1.0 (79 K바이트 LZH압축)
내려받기 : http://www.asahi-net.or.jp/~qx5k-iskw/robot/bench/TrevaCap10.lzh

   


Treva는 일본의 Kyocera에서 만든 휴대폰 용도의 10만 화소의 착탈 카메라이다.
또한 국내에서 판매된 SKY폰 IM-5000의 외장 카메라 MC-100도 같은 모델이다.

 
 
MC-100은 영상 화소수가 120 x 90 으로 Hiptop 모델이며, Treva는 96 x 72 이다.
MC-100과 Treva에 사용된 이미지 센서는 OV6630이며, 원래의 화소수는 352 x 288 이다.

현재, 휴대폰의 내장 카메라는 30만 ~100만 화소 이상으로 발전하였다.
따라서 10만 화소급 CIF 카메라는 로봇 시각센서, 소형 감시 카메라, 모션 검출용에 사용한다. 

Treva Camera 규격
크기 : 30 x 32 x 16mm
무게 : 10g
촬상소자 : 1/4형, 10만화소 CMOS 이미지 센서 OV6630
OV6630 규격 : 352 X 288, 100K Pixel 3.3V, 48pin YUV 4:2:2, 1/4"

해상도 : 96 x 72 화소 (MC-100은 120 x 90)
렌즈촛점 : 30 cm ~ 무한대
지향각 ; 수평 46도, 수직 37도
노출 : 자동
백색균형 : 자동
콘넥터 : 2.5 mm 4핀 plug
전원 : 3.3V 15~20 mA
화상포맷 : 16비트 YUV 형식
전송속도 : 3 ~ 7.7 fps, (Treva의 SCLK은 500 KHz이고, MC-100의 SCLK는 1 MHz이다.)

OV6630은 356 x 292 이나, Treava는 이보다 작게 화면을 구성하고 있다.
초기설정은 176 x 144 이며,  매 라인의 출력은 원래크기의 1/2을 출력한다.
 
OV6630의 YUVY 4:2:2 (16비트 60/50 Hz ITU-601 표준)출력은 다음과 같다.
Y = 0.59G + 0.31R + 0.11B
U = R – Y
V = B – Y
 
Treava Camera의 접속
투명창이 있는 48핀 LCC칩이 화상검출소자 OV6630 이다.

  
 

 
SDAT (노랑) : 직렬 데이터가 카메라에서 출력된다
SCLK (분홍) : 클럭 입력을 카메라로 전송한다
GND (검정) : 접지
VCC (빨강) : 전원 3.3V (몸체 끝에 1개의 특별한 전극이 있다)

 
Treva Camera 연결용 이어폰 잭
4핀 접속용 이어폰 잭을 구해야 한다,
 
 
4핀 잭이 없으면, 4핀 플럭 부근의 전선을 자르고, 플럭은 버린다.
여유가 있는 내부 전선을 밖으로 빼서, 아듀이노 기판에 연결해야 한다.

Treva Camera 데이터
MC-100과 Treva 카메라의 출력 데이터는, 프레임과 프레임 사이는 0xFF로 채워진다.
화상 데이터의 직전에는 가변길이의 약 256 바이트의 헤더가 있다.
.
FF FF
FF FF ; 0xFF = 데이터 없음 (대기)
AA 55 ; 전송시작 Flag  (이하 28 바이트의 시작 프레임은 무시해도 된다)
FF D8 ; 프레임 시작  (여기부터 시작 프레임의 길이를 계산)
1C ; 헤더의 길이 = 28 바이트
F0 ; 모델 = 카메라
F1 ; 버전 = 1
00 60 ; 한줄의 화소수 = 96 화소 (수평) (MC-100은 120 화소)
00 48 ; 화면의 줄수 = 78 줄 (수직) (MC-100은 90줄)
81 ; 8 = 8 비트 단조, 1 = YUV
31 ; 3 = UYVY 출력, 1 = MSB 시작  (MC-100은 0x41)
20 ; 2 = "4.2.2"방식, 0 = 비압축
4B 43 23 38 42 50 2E 2E ; 제조사 정보 = KC#8BP.. (Kyocera 8 bit pixel camera)
00 00
00 00
00 00
00 00  (여기까지 시작 프레임의 길이를 계산)
AA 55 ; 화상 데이터의 시작 (확인) (UYVY 16비트 화상의 시작)
데이터 =96 x 72 x16 비트의 데이터 (1화소는 2 바이트)
FF D9 ; 화상 데이터의 종료 (확인) (UYVY 16 비트 화상의 끝)

Treva 카메라를 연결하는 하드웨어의 제작은 M18-USB V2.0을 사용하엿습니다.
M18-USB 기판의 소개 : http://www.avrtools.co.kr/technote7/board.php?board=tnshoppublic&command=body&no=44
 
 

M168-USB 기판용 MC-100 Camera 연결방법
3VO -- MC-100 VCC
A0  --- 1K 저항 --- LED --- GND
A1  --- MC-100 SCLK --- 1K 저항 --- GND
A2  --- MC-100 SDAT --- 10K 저항 --- 3VO
GND -- MC-100 GND
                          
M168 아듀이노 기판용 MC-100 Camera 소스
MC-100과 Treva에 내장된 OV6630의 출력형식을 외부에서 바꾸는 방법은 알려져 잇지 않다.
MC-100 시작 프레임의 검출은 0xFF가 4 바이트 이상 들어오고, 0xAA55 가 들어오는 것을 확인한다.

화면의 검출은 시작프레임 28 바이트를 버리고 다시 0xAA55가 들어오면, 그 다음 데이터 부터 전송한다.
화면의 시작프레임 0xFFD8 과 화상 프레임 종료 0xFFD9는 이 소스에서는 사용하지 않는다.
PC 소프트웨어는 화면이 96 x 72 고정이므로, 아듀이노에서 120 x 90 화면을 96 x 72 로 전송한다.

소스는 첨부파일 #2 : ov6630_cam_v2.pde, ov6630_cam_v2.hex 파일이다.
아래 소스를 복사하여 아듀이노 소프트웨어의 스케치 창에 붙혀넣고, ov6630_cam_v2로 저장한다.

아듀이노 스케치의 컴파일과 업로드를 실행하면, 컴파일된 펌웨어가 M168-USB로 저장(업로드)된다.
펌웨어가 M168-USB 아듀이노 기판으로 올바르게 업로드되면, A0 포트에 연결된 LED가 깜빡인다. 

PC 화면포착 소프트웨어를 작동시키고, 통신포트와 BPS를 115200으로 설정하고. 저장파일은 BMP를 선택한다.
Get Image를 누르면 포착된 화면이 표시되고, File Svae를 누르면 파일이름을 trevaXXX.bmp로  저장된다.

주의
UART 전송속도는 38400 bps이다, 57600 bps 이상으로 사용하면 포착속도가 더 빨라질 수 있지만,
TrevaCap.exe의 UART 수신능력(개선이 필요함)이 매우 낮으므로, 가끔 데이터의 포착에 실패한다.

// M168-USB Arduion image capture with MC-100 camera
// ov6630_cam_v2.pde
// Author : leeky 2008.10.26
// info@avrtools.co.kr
 
#include <avr/io.h>     // SFR declarations
#include <avr/interrupt.h> // Interrupt declarations
#include <inttypes.h>
 
// Macro Definitions
#define LED_INTERVAL 500   // led blink time =500ms
 
// OV6330 : 352 X 288, 100K Pixel 3.3V, 48pin YUV 4:2:2, 1/4"
// MC-100 : 120 x 90, used OV6630 = 100K Pixel 3.3V, 48pin YUV 4:2:2, 1/4"
#define MAX_WIDTH 120  // max Horizontal picell of MC-100
#define MAX_HEIGHT 90  // max Vertical picell of MC-100
#define IMG_WIDTH 96   // capture size of H =96 for Treva
#define IMG_HEIGHT 72  // capture size of V =72 for Treva
 
#define LED 0x01     // PC0 =A0 =led indicator
#define SCLK 0x02    // PC1 =A1 =serial clock to camera
#define SDAT 0x04    // PC2 =A2 =serial data from camera
#define SW   0x08    // PC3 =A3 =switch input (not used)
 
// Global Variables
unsigned int timer_count; // 1ms timer
unsigned int led_count;  // 500ms timer
unsigned char led_out;    // status of led output
unsigned char cmd;    // read command from uart 
unsigned char cell;   // number of horizontal dot of picell
unsigned char line;   // number of vertical line
unsigned int time;    // time of image catpture from cam
 
//-------------------------------------------------------------------------
ISR(TIMER2_OVF_vect)
{
  TCNT2 = 5;        // 4us * (255 -5) =1ms overflow
  timer_count++;    // 1ms software timer
  led_count++;      // 500ms software timer
  if ( led_count > LED_INTERVAL) 
  {
    led_count = 0;
    led_out = ~led_out;
    if (led_out) PORTC |= LED;
    else PORTC &= ~LED; 
  }
}

// timer_clear
void timer_clear(void)
{
  cli();
  timer_count = 0;
  sei();
}

// timer_get
unsigned int timer_get()
{
  unsigned int val;
  cli();
  val = timer_count;
  sei();
  return val;
}
 
// timer2_init
void timer2_init(void)
{
  TCCR2A = 0;             // timer 2 =normal operation
  TCCR2B = (1<<CS21) | (1<<CS20);    // 16 MHz/64 = 250 KHz =4us
  TCNT2 = 5;           // 4us *250 =1000us =1ms overflow
  TIMSK2 = (1 <<TOIE2);   // enable overflow interrupt
   
  timer_count = 0;
  led_count = 0;
  led_out = 0;
}
 
//-------------------------------------------------------------------------
void get_header()    // skip 0xFFFF~0xAA55, 0xFFD8~0x0000, 0xAA55
{
  unsigned char i =0;
  while (i <64)             // skip 0xFF    
  {
    PORTC &= ~SCLK;       // sclk =0
    PORTC |= SCLK;          // sclk =1
    if ((PINC & SDAT) >>2) i++;   // read bit from cam 
    else i =0;              // stay here when sdat is low
  } 
 
  unsigned int head = 0;
  while(head != 0xAA55) // get header of cam
  {
    PORTC &= ~SCLK;       // sclk =0
    PORTC |= SCLK;          // sclk =1
    head <<= 1;
    head |= ((PINC & SDAT) >>2);   // read bit from cam 
  }
 
  for(i =0; i <31 *8; i++)  // skip 29 bytes of header + start flag (0xAA55) 
  {
    PORTC &= ~SCLK;       // sclk =0
    PORTC |= SCLK;          // sclk =1
    head <<= 1;
    head |= ((PINC & SDAT) >>2);   // read bit from cam 
  }
}
 
void get_pixel(unsigned char txe)   // send 2 bytes of UYVY 4:2:2 format
{
  unsigned char txd;
  unsigned char i;

  txd =0; 
  for ( i = 0 ; i < 8 ; i++ ) // read 1 byte of cam 
  {
    PORTC &= ~SCLK;       // sclk =0
    PORTC |= SCLK;          // sclk =1
    txd <<= 1;              // 1 bit shift left   
    txd |= ((PINC & SDAT) >>2);   // read bit from cam 
  }
  if (txe >0) Serial.print(txd);       // Send 1 byte of U/V value

  txd =0; 
  for ( i = 0 ; i < 8 ; i++ ) // read 1 byte of cam 
  {
    PORTC &= ~SCLK;       // sclk =0
    PORTC |= SCLK;          // sclk =1
    txd <<= 1;              // 1 bit shift left   
    txd |= ((PINC & SDAT) >>2);   // read bit from cam 
  }
  if (txe >0) Serial.print(txd);  // Send 1 byte of Y value
}
 
//-------------------------------------------------------------------------
void setup()
{
  PORTC = 0x00;
  DDRC  = 0xF3;   // 11110011 =sw and sdat is input
 
  PORTC &= ~LED;    // LED =0
  PORTC &= ~SCLK; // SCLk =0
  PORTC |= SCLK;    // pullup for SDAT
  PORTC |= SW;       // pullup for switch input (not used)
  
  Serial.begin(38400);  // uart speed (do not use 115200 bps)

  timer2_init();   // 4us *250 =1ms interval timer2
  sei();    // Global Interrupt Enable
}
 
void loop()
{
  cmd =Serial.read();  // read rxd from uart
 
  if (cmd ==0x0F)      // command available from uart
  {
    get_header();        // check header stream of camera
   
    for ( line =0 ; line <IMG_HEIGHT ; line++ ) // get 72 lines @ 240ms
    {
      for (cell =0 ; cell <MAX_WIDTH; cell++ )   // 120 dot/line @ 3.333ms
      {
        if (cell <IMG_WIDTH ) get_pixel(1);  // get 96 dots
        else get_pixel(0);                   // skip 24 dots
      }
    }
  }
 
  else if (cmd ==0xF0) 
  {
    get_header();        // check header stream of camera
    timer_clear();       // start 1ms software timer (used timer2 interrupt) 
    
    for ( line =0 ; line <MAX_HEIGHT ; line++ ) // get 90 lines
    {
      for (cell =0 ; cell <MAX_WIDTH; cell++ )   // 120 dot/line
      {
        if (cell <IMG_WIDTH ) get_pixel(0);  // get 96 dots
        else get_pixel(0);                   // skip 24 dots
      }
    } 
   
    time = timer_get();
    Serial.print((char) (time >>8 & 0xFF));  // send high byte of time
    Serial.print((char) (time & 0xFF));      // send low byte of time
  }
}    // end of arduino MC-100 camera interface
 
관련 자료 
OV6330 제조사 OmniVision : http://www.ovt.com/omnicell.htm
Treva Camera 설명 : http://www.paken.org/aaf/treva/
HipTop Camera 설명 : http://homepage.mac.com/eric3/danger/cwpart3.htm#hiptop
Toshiba DMR-C1 Camera : http://homepage3.nifty.com/mujirushi/ews/dmrc1/index.html
 
이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
AVRTOOLS™
   
윗글 Arduino 소프트웨어 설치방법
아래글 아듀이노 AVR-ISP V2의 제작
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 629 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17688 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2769 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 2878 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 5831 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 4781 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3310 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 2932 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3327 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 2937 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3194 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 7819 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 4077 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3500 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 5190 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 4068 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3595 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3293 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6512 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 3944 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5508 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 7101 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 8148 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4470 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 4800 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5390 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9514 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 16957 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6662 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5469 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4753 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 4071 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 5965 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4577 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4587 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 4806 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5338 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 4043 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13574 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9350 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 5809 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6664 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 4063 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3379 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3189 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 5122 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 5048 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5713 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4130 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3424 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4679 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9712 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3516 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 4955 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6345 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 4826 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 4806 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 5143 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4645 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7412 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6508 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0