- 필요한 구성 요소
- 카메라 모듈 OV7670에 대해 기억해야 할 사항
- 회로도
- Arduino UNO 프로그래밍
- 직렬 포트 리더를 사용하여 이미지를 읽는 방법
- 다음은 OV7670에서 가져온 샘플 이미지입니다.
- OV7670 사용시주의 사항
카메라는 방문자 모니터링 시스템, 감시 시스템, 출석 시스템 등과 같은 응용 프로그램이 많기 때문에 항상 전자 산업을 지배 해 왔습니다. 오늘날 우리가 사용하는 카메라는 스마트하고 이전 카메라에는 없었던 많은 기능을 가지고 있습니다. 오늘날의 디지털 카메라는 이미지를 캡처 할뿐만 아니라 장면에 대한 높은 수준의 설명을 캡처하고 보는 것을 분석합니다. 로봇 공학, 인공 지능, 기계 학습 등에서 광범위하게 사용됩니다. 캡처 된 프레임은 인공 지능 및 기계 학습을 사용하여 처리 된 다음 번호판 감지, 물체 감지, 동작 감지, 얼굴 인식 등과 같은 많은 응용 프로그램에서 사용됩니다.
이 튜토리얼에서는 가장 널리 사용되는 카메라 모듈 OV7670을 Arduino UNO와 인터페이스 합니다. 카메라 모듈 OV7670은 동일한 핀 구성, 코드 및 단계 로 Arduino Mega 와 인터페이스 할 수 있습니다. 카메라 모듈은 수행해야 할 핀 수가 많고 배선이 뒤죽박죽이기 때문에 인터페이스가 어렵습니다. 또한 와이어의 선택과 와이어의 길이는 화질에 큰 영향을 미치고 노이즈를 유발할 수 있으므로 카메라 모듈을 사용할 때 와이어가 매우 중요합니다.
우리는 이미 다음과 같은 다양한 종류의 마이크로 컨트롤러 및 IoT 장치로 카메라에 대한 충분한 프로젝트를 수행했습니다.
- Raspberry Pi 및 Pi 카메라가있는 방문자 모니터링 시스템
- 이메일 경고 기능이있는 IOT 기반 Raspberry Pi 홈 보안 시스템
- 모션 캡처 기능이있는 Raspberry Pi 감시 카메라
카메라 OV7670 3.3V에서 작동, 그것은 그들의 출력 GPIO 핀에서 5V 출력을 제공 아두 이노을 피하기 위해 매우 중요하므로. OV7670은 FIFO 카메라입니다. 그러나이 튜토리얼에서는 FIFO없이 그림이나 프레임을 잡습니다. 이 튜토리얼은 Arduino UNO와 OV7670을 인터페이스하기위한 간단한 단계와 간단한 프로그래밍 을 포함합니다.
필요한 구성 요소
- Arduino UNO
- OV7670 카메라 모듈
- 저항기 (10k, 4.7k)
- 점퍼
필요한 소프트웨어:
- Arduino IDE
- 직렬 포트 리더 (출력 이미지 분석)
카메라 모듈 OV7670에 대해 기억해야 할 사항
OV7670 카메라 모듈은 핀 구성이 다른 여러 제조업체에서 제공하는 FIFO 카메라 모듈입니다. OV7670은 다양한 형식으로 전체 프레임, 윈도우 8 비트 이미지를 제공합니다. 이미지 어레이는 VGA에서 최대 30fps (초당 프레임)로 작동 할 수 있습니다. OV7670에는 다음이 포함됩니다.
- 이미지 센서 어레이 (약 656 x 488 픽셀)
- 타이밍 생성기
- 아날로그 신호 프로세서
- A / D 컨버터
- 테스트 패턴 생성기
- 디지털 신호 프로세서 (DSP)
- 이미지 스케일러
- 디지털 비디오 포트
- LED 및 스트로브 플래시 제어 출력
OV7670 이미지 센서는 최대 클록 주파수가 400KHz 인 I2C 인터페이스 (SIOC, SIOD) 인 SCCB (Serial Camera Control Bus)를 사용하여 제어됩니다.
카메라에는 다음과 같은 핸드 셰이 킹 신호가 함께 제공됩니다.
- VSYNC: 수직 동기화 출력 – 프레임 중 낮음
- HREF: 수평 기준 – 행의 활성 픽셀 동안 높음
- PCLK: 픽셀 클록 출력 – 자유 실행 클록. 데이터는 상승 에지에서 유효합니다.
이 외에도 다음과 같은 여러 신호가 있습니다.
- D0-D7: 8 비트 YUV / RGB 비디오 컴포넌트 디지털 출력
- PWDN: 전원 차단 모드 선택 – 일반 모드 및 전원 차단 모드
- XCLK: 시스템 클록 입력
- 재설정: 신호 재설정
OV7670은 24MHz 발진기에서 클럭됩니다. 이것은 24MHz의 픽셀 클럭 (PCLK) 출력을 제공합니다. FIFO는 3Mbps의 비디오 프레임 버퍼 메모리를 제공합니다. 테스트 패턴 생성기는 8 바 컬러 바 패턴, 페이드-투-그레이 컬러 바 패턴을 특징으로합니다. 이제 카메라 OV7670을 테스트하고 직렬 포트 리더를 사용하여 프레임을 잡기 위해 Arduino UNO 프로그래밍을 시작하겠습니다.
회로도
Arduino UNO 프로그래밍
프로그래밍은 OV7670에 필요한 필수 라이브러리 를 포함하는 것으로 시작됩니다 . OV7670은 I2C 인터페이스에서 실행되므로 다음을 포함합니다.그런 다음 OV7670에 대한 레지스터를 수정해야합니다. 프로그램은 더 나은 이해를 위해 작은 기능으로 나뉩니다.
설치 () 만 촬상에 필요한 모든 초기 설정을 포함한다. 첫 번째 함수는 arduino uno를 초기화하는 데 사용되는 arduinoUnoInut () 입니다. 처음에는 모든 글로벌 인터럽트를 비활성화하고 PWM 클록, 인터럽트 핀 선택, presclaer 선택, 패리티 및 정지 비트 추가와 같은 통신 인터페이스 구성을 설정합니다.
arduinoUnoInut ();
Arduino를 구성한 후 카메라를 구성해야합니다. 카메라를 초기화하려면 레지스터 값을 변경하는 옵션 만 있습니다. 레지스터 값은 기본값에서 사용자 정의로 변경해야합니다. 또한 우리가 사용하는 마이크로 컨트롤러 주파수에 따라 필요한 지연을 추가하십시오. 속도가 느린 마이크로 컨트롤러는 처리 시간이 적어 프레임 캡처 사이에 더 많은 지연이 추가됩니다.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK는 HBLANK를 토글하지 않습니다. }
카메라가 QVGA 이미지를 촬영하도록 설정되어 있으므로 해상도를 선택해야합니다. 이 기능은 QVGA 이미지를 찍도록 레지스터를 구성합니다.
setResolution ();
이 튜토리얼에서는 이미지를 단색으로 촬영하므로 레지스터 값이 단색 이미지를 출력하도록 설정됩니다. 이 기능은 프로그램에 미리 정의 된 레지스터 목록에서 레지스터 값을 설정합니다.
setColor ();
아래 함수는 등록 할 16 진수 값을 쓰는 레지스터 함수 에 쓰기입니다. 스크램블 된 이미지를 얻으면 두 번째 용어 즉 10을 9/11/12로 변경하십시오. 그러나 대부분의 경우이 값은 제대로 작동하므로 변경할 필요가 없습니다.
writeReg (0x11, 10);
이 함수는 이미지 해상도 크기를 가져 오는 데 사용됩니다. 이 프로젝트에서는 320 x 240 픽셀의 크기로 사진을 찍습니다.
captureImg (320, 240);
이 외에도 코드에는 I2C 구성이 여러 부분으로 나뉩니다. 카메라에서 데이터를 얻기 위해 I2C 구성에는 I2C 프로토콜을 사용할 때 중요한 시작, 읽기, 쓰기, 주소 설정 기능이 있습니다.
이 튜토리얼의 끝에서 데모 비디오와 함께 전체 코드를 찾을 수 있습니다. 코드를 업로드하고 직렬 포트 리더를 열고 프레임을 잡으십시오.
직렬 포트 리더를 사용하여 이미지를 읽는 방법
직렬 포트 리더는 간단한 GUI입니다. 여기에서 다운로드하십시오. 이것은 base64 인코딩을 캡처하고 디코딩하여 이미지를 형성합니다. 직렬 포트 리더를 사용하려면 다음 간단한 단계를 따르십시오.1 단계: Arduino를 PC의 USB 포트에 연결
2 단계: "확인"을 클릭하여 Arduino COM 포트를 찾습니다.
3 단계: 마지막으로 "시작"버튼을 클릭하여 연속 읽기를 시작합니다.
4 단계: "사진 저장"을 클릭하여이 사진을 저장할 수도 있습니다.
다음은 OV7670에서 가져온 샘플 이미지입니다.
OV7670 사용시주의 사항
- 가능한 한 짧은 전선이나 점퍼를 사용하십시오.
- Arduino 또는 OV7670의 핀에 느슨한 접촉을 피하십시오
- 배선이 많으면 단락이 발생할 수 있으므로 연결에주의하십시오.
- UNO가 GPIO에 5V 출력을 제공하면 레벨 시프터를 사용하십시오.
- 이보다 높은 전압은 OV7670 모듈을 손상시킬 수 있으므로 OV7670에 3.3V 입력을 사용하십시오.
이 프로젝트는 Arduino에서 카메라 모듈 사용에 대한 개요를 제공하기 위해 작성되었습니다. Arduino는 메모리가 적기 때문에 처리가 예상대로되지 않을 수 있습니다. 처리를 위해 더 많은 메모리가있는 다른 컨트롤러를 사용할 수 있습니다.