- Thành phần bắt buộc
- Những điều cần nhớ về Mô-đun máy ảnh OV7670
- Sơ đồ mạch
- Lập trình Arduino UNO
- Cách sử dụng đầu đọc cổng nối tiếp để đọc ảnh
- Dưới đây là những hình ảnh mẫu được chụp từ OV7670
- Những lưu ý khi sử dụng OV7670
Máy ảnh luôn thống trị ngành công nghiệp điện tử vì nó có rất nhiều ứng dụng như hệ thống giám sát khách, hệ thống giám sát, hệ thống chấm công… Máy ảnh mà chúng ta sử dụng ngày nay rất thông minh và có nhiều tính năng mà không có trong các máy ảnh trước đó. Trong khi máy ảnh kỹ thuật số ngày nay không chỉ chụp ảnh mà còn ghi lại các mô tả cấp cao về cảnh và phân tích những gì chúng nhìn thấy. Nó được sử dụng rộng rãi trong Robot, Trí tuệ nhân tạo, Máy học, v.v. Các khung đã chụp được xử lý bằng Trí tuệ nhân tạo và Máy học, sau đó được sử dụng trong nhiều ứng dụng như phát hiện biển số, phát hiện đối tượng, phát hiện chuyển động, nhận dạng khuôn mặt, v.v.
Trong hướng dẫn này, chúng tôi sẽ giao diện mô-đun máy ảnh được sử dụng rộng rãi nhất OV7670 với Arduino UNO. Mô-đun máy ảnh OV7670 có thể được giao tiếp với Arduino Mega với cấu hình, mã và các bước tương tự. Mô-đun máy ảnh khó giao tiếp vì nó có số lượng chân cắm lớn và hệ thống dây điện lộn xộn. Ngoài ra dây cũng trở nên rất quan trọng khi sử dụng mô-đun máy ảnh vì việc lựa chọn dây và chiều dài của dây có thể ảnh hưởng đáng kể đến chất lượng hình ảnh và có thể mang lại tiếng ồn.
Chúng tôi đã thực hiện nhiều dự án về Máy ảnh với các loại Vi điều khiển và Thiết bị IoT khác nhau như:
- Hệ thống giám sát khách truy cập với Raspberry Pi và Pi Camera
- Hệ thống an ninh gia đình Raspberry Pi dựa trên IOT với cảnh báo qua email
- Camera giám sát Raspberry Pi với tính năng Chụp chuyển động
Các máy ảnh OV7670 công trình trên 3.3V, vì vậy nó trở nên rất quan trọng để tránh Arduino mang đến cho đầu ra 5V ở đầu ra GPIO chân của họ. OV7670 là một máy ảnh FIFO. Nhưng trong hướng dẫn này, ảnh hoặc khung sẽ được lấy mà không cần FIFO. Hướng dẫn này sẽ có các bước đơn giản và lập trình đơn giản để giao diện OV7670 với Arduino UNO.
Thành phần bắt buộc
- Arduino UNO
- Mô-đun máy ảnh OV7670
- Điện trở (10k, 4,7k)
- Người nhảy
Yêu cầu phần mềm:
- Arduino IDE
- Đầu đọc cổng nối tiếp (Để phân tích hình ảnh đầu ra)
Những điều cần nhớ về Mô-đun máy ảnh OV7670
Mô-đun máy ảnh OV7670 là một Mô-đun máy ảnh FIFO có sẵn từ các Nhà sản xuất khác nhau với các Cấu hình pin khác nhau. TheOV7670 cung cấp hình ảnh 8-bit đầy đủ khung hình, cửa sổ ở nhiều định dạng. Mảng hình ảnh có khả năng hoạt động với tốc độ lên đến 30 khung hình / giây (fps) trong VGA. OV7670 bao gồm
- Mảng cảm biến hình ảnh (khoảng 656 x 488 pixel)
- Máy tạo thời gian
- Bộ xử lý tín hiệu tương tự
- Bộ chuyển đổi A / D
- Trình tạo mẫu thử nghiệm
- Bộ xử lý tín hiệu kỹ thuật số (DSP)
- Bộ chia tỷ lệ hình ảnh
- Cổng video kỹ thuật số
- Đầu ra điều khiển đèn flash LED và nhấp nháy
Cảm biến hình ảnh OV7670 được điều khiển bằng Bus điều khiển máy ảnh nối tiếp (SCCB) là giao diện I2C (SIOC, SIOD) với tần số xung nhịp tối đa là 400KHz.
Máy ảnh đi kèm với các tín hiệu bắt tay như:
- VSYNC: Ngõ ra đồng bộ dọc - Thấp trong khung hình
- HREF: Tham chiếu ngang - Cao trong các pixel hoạt động của hàng
- PCLK: Đầu ra đồng hồ điểm ảnh - Đồng hồ chạy miễn phí. Dữ liệu hợp lệ trên cạnh tăng
Ngoài điều này, nó có một số tín hiệu khác như
- D0-D7: Đầu ra kỹ thuật số thành phần video 8 bit YUV / RGB
- PWDN: Lựa chọn chế độ tắt nguồn - Chế độ bình thường và Chế độ tắt nguồn
- XCLK: Đầu vào Đồng hồ Hệ thống
- Đặt lại: Đặt lại tín hiệu
OV7670 được tạo xung nhịp từ bộ dao động 24MHz. Điều này mang lại đầu ra Đồng hồ điểm ảnh (PCLK) là 24MHz. FIFO cung cấp bộ nhớ đệm khung hình video 3Mbps. Trình tạo mẫu thử nghiệm có mẫu thanh màu 8 thanh, mẫu thanh màu nhạt dần đến xám. Bây giờ chúng ta hãy bắt đầu lập trình Arduino UNO để thử nghiệm Camera OV7670 và lấy khung bằng đầu đọc cổng nối tiếp.
Sơ đồ mạch
Lập trình Arduino UNO
Chương trình bắt đầu với việc bao gồm thư viện bắt buộc cần thiết cho OV7670. Vì OV7670 chạy trên giao diện I2C, nó bao gồmSau đó, các thanh ghi cần được sửa đổi cho OV7670. Chương trình được chia thành các chức năng nhỏ để bạn hiểu rõ hơn.
Các cài đặt () bao gồm tất cả các thiết lập ban đầu cần thiết cho chỉ chụp ảnh. Hàm đầu tiên là arduinoUnoInut () được sử dụng để khởi tạo arduino una. Ban đầu, nó vô hiệu hóa tất cả các ngắt toàn cục và thiết lập các cấu hình giao diện truyền thông như đồng hồ PWM, lựa chọn các chân ngắt, lựa chọn bộ định hướng, thêm các bit chẵn lẻ và dừng.
ArduinoUnoInut ();
Sau khi cấu hình Arduino, máy ảnh phải được cấu hình. Để khởi động máy ảnh, chúng tôi chỉ có các tùy chọn để thay đổi các giá trị đăng ký. Giá trị thanh ghi cần được thay đổi từ mặc định thành tùy chỉnh. Đồng thời thêm độ trễ cần thiết tùy thuộc vào tần số vi điều khiển mà chúng tôi đang sử dụng. Vì các bộ vi điều khiển chậm có ít thời gian xử lý hơn, tăng thêm độ trễ giữa các khung hình.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK không bật HBLANK. }
Máy ảnh được thiết lập để chụp ảnh QVGA nên cần phải chọn độ phân giải. Chức năng này cấu hình thanh ghi để chụp ảnh QVGA.
setResolution ();
Trong hướng dẫn này, hình ảnh được chụp ở dạng đơn sắc, vì vậy giá trị thanh ghi được đặt để xuất ra hình ảnh đơn sắc. Hàm thiết lập các giá trị thanh ghi từ danh sách thanh ghi được xác định trước trong chương trình.
setColor ();
Hàm dưới đây là viết để đăng ký, hàm ghi giá trị hex để đăng ký. Nếu bạn nhận được các hình ảnh lộn xộn thì hãy cố gắng thay đổi số hạng thứ hai, tức là ngày 10 thành 11/9/12. Nhưng hầu hết thời gian giá trị này hoạt động tốt nên không cần thay đổi nó.
writeReg (0x11, 10);
Chức năng này được sử dụng để lấy kích thước độ phân giải hình ảnh. Trong dự án này, chúng tôi đang chụp ảnh ở kích thước 320 x 240 pixel.
captureImg (320, 240);
Ngoài ra, mã này cũng có các cấu hình I2C được chia thành nhiều phần. Chỉ để lấy dữ liệu từ máy ảnh, các cấu hình I2C có chức năng Start, Read, Write, Set Address rất quan trọng khi sử dụng giao thức I2C.
Bạn có thể tìm thấy mã hoàn chỉnh với video trình diễn ở cuối hướng dẫn này. Chỉ cần Tải lên mã và mở Trình đọc Cổng Nối tiếp và lấy các khung.
Cách sử dụng đầu đọc cổng nối tiếp để đọc ảnh
Serial Port Reader là một GUI đơn giản, tải xuống từ đây. Thao tác này nắm bắt mã hóa base64 và giải mã nó để tạo thành một hình ảnh. Chỉ cần làm theo các bước đơn giản sau để sử dụng Serial Port ReaderBước 1: Kết nối Arduino của bạn với bất kỳ Cổng USB nào trên PC của bạn
Bước 2: Nhấp vào “Kiểm tra” để tìm Cổng COM Arduino của bạn
Bước 3: Cuối cùng nhấp vào nút “Bắt đầu” để bắt đầu đọc nối tiếp.
Bước 4: Người ta cũng có thể lưu hình ảnh này bằng cách chỉ cần nhấp vào "Lưu hình ảnh".
Dưới đây là những hình ảnh mẫu được chụp từ OV7670
Những lưu ý khi sử dụng OV7670
- Cố gắng sử dụng dây hoặc dây nối càng ngắn càng tốt
- Tránh bất kỳ tiếp xúc lỏng lẻo nào với bất kỳ chân nào trên Arduino hoặc OV7670
- Hãy cẩn thận khi kết nối vì số lượng lớn dây có thể dẫn đến đoản mạch
- Nếu UNO cấp đầu ra 5V cho GPIO thì hãy sử dụng Bộ chuyển mức.
- Sử dụng Đầu vào 3.3V cho OV7670 vì điện áp vượt quá mức này có thể làm hỏng mô-đun OV7670.
Dự án này được tạo ra để giới thiệu tổng quan về việc sử dụng mô-đun camera với Arduino. Vì Arduino có ít bộ nhớ hơn, nên quá trình xử lý có thể không được như mong đợi. Bạn có thể sử dụng các bộ điều khiển khác nhau có nhiều bộ nhớ hơn để xử lý.