ماژول دوربین OV7670 Camera بدون FiFo
ماژول دوربین OV7670
ماژول دوربین OV7670 Camera یک ماژول دوربین کوچک است که شامل یک حسگر تصویر CMOS با وضوح VGA و یک مدار کنترل دیجیتال است. این ماژول دوربین از طریق اتصال به میکروکنترلرها و سایر مدارات الکترونیکی، قابل استفاده برای پروژههایی مانند رباتیک، دیدبانی و امنیتی، سیستم های کنترلی صنعتی و دیگر کاربردهایی است که نیاز به ضبط و پردازش تصاویر دارند.
دوربین OV7670 میتواند تصاویری با وضوح 640x480 پیکسل با سرعت تا 30 فریم در ثانیه ضبط کند. همچنین دارای قابلیتهایی مانند تعیین تنظیمات نورپردازی، کنترل کیفیت تصویر، تنظیم رنگ و سایر ویژگیهای تصویر است.ماژول OV7670 Camera برای توسعه کاربردهایی که نیاز به تصویربرداری دارند، بسیار مفید است و به دلیل کوچک و قابل حمل بودن، به راحتی قابلیت استفاده در پروژههای خانگی و آموزشی را داراست.
ویژگی های دوربین OV7670
مشخصات فنی ماژول دوربین OV7670 Camera به صورت زیر است.
- حسگر تصویر CMOS با وضوح VGA (640x480 پیکسل)
- قابلیت ضبط تصاویر با سرعت تا 30 فریم در ثانیه
- دارای یک لنز فیکس با فاصله کانونی 3.6 میلیمتر
- دارای 8 بیت رنگی (256 رنگ)
- ابعاد فیزیکی: 24x24 میلیمتر
- ولتاژ کاری: 2.5 تا 3.0 ولت
- پروتکل ارتباطی: SCCB (Serial Camera Control Bus)
- پروتکل خروجی تصویر: YUV/YCbCr 4:2:2، RGB565/555، 8-bit compressed data
- دمای کاری: -30℃ تا +70℃
این ماژول دوربین همچنین دارای ویژگیهایی مانند تنظیم کنتراست و سطوح رنگی، حالت تصویربرداری خودکار و دستی، تنظیم روشنایی و تنظیم حساسیت ISO است.
بررسی پایه های دوربین OV7670
پایههای دوربین OV7670 برای اتصال به برد یا مدار الکترونیکی به شرح زیر است:
- VDD: ولتاژ تغذیه دوربین (2.5 تا 3.0 ولت)
- GND: زمین دوربین
- SIOC: سیگنال کلاک خروجی I2C
- SIOD: سیگنال دادهی خروجی I2C
- XCLK: سیگنال کلاک خروجی دوربین
- PWDN: کنترل تغذیه دوربین (اگر با وضوح کمتر از 640x480 کار کند، این پایه باید به GND وصل شود)
- RESET: کنترل بازنشانی دوربین
- HREF: خط همگامسازی افقی
- VSYNC: خط همگامسازی عمودی
- D[9:0]: دادههای تصویر (8 بیت داده در مدل RGB و 16 بیت در حالت YUV)
- PCLK: سیگنال کلاک خروجی پیکسل
در این پایهها، VDD و GND برای تغذیه دوربین است، پایههای SIOC و SIOD برای کنترل دیجیتال دوربین با استفاده از پروتکل I2C، پایه XCLK برای ارسال کلاک سیستمی به دوربین، PWDN و RESET برای کنترل تغذیه و بازنشانی دوربین به ترتیب، و پایههای HREF، VSYNC، D و PCLK برای انتقال دادههای تصویر.
همراه با دوربین OV7670 چه اقلامی باید خریداری شود؟
برای استفاده از دوربین OV7670، علاوه بر انتخاب میکروکنترلر مناسب مانند آردوینو و یا بردهای ESP به کابل و تغذیه نیاز دارید.
- برد توسعه: برای تست و برنامهریزی ماژول دوربین، بهتر است از یک برد توسعه استفاده کنید که برای کار با ماژول دوربین OV7670 طراحی شده باشد.
- میکروکنترلر: برای برنامهریزی دوربین و کنترل آن از طریق میکروکنترلر، به یک میکروکنترلر سازگار با برد توسعه خود نیاز دارید.
- کابلهای اتصال: برای اتصال دوربین OV7670 به برد توسعه و میکروکنترلر، باید از کابلهای اتصالی مناسب استفاده کنید. برخی از این کابلها شامل کابلهای FFC (Flexible Flat Cable) و کابلهای جک سمتی ۲.۵ میلیمتری هستند.
- منبع تغذیه: برای تغذیه برد توسعه و دوربین OV7670، باید از یک منبع تغذیه مناسب استفاده کنید که ولتاژ و جریان مورد نیاز را برای این دو دستگاه فراهم کند.
- نرمافزار برنامهریزی: برای برنامهریزی میکروکنترلر و کنترل دوربین OV7670، باید از یک نرمافزار برنامهریزی مناسب استفاده کنید. مثلاً برای میکروکنترلرهای سری AVR، میتوان از برنامهریزی به کمک نرمافزار Atmel Studio استفاده کرد.
راه اندازی دوربین OV7670 با آردوینو
برنامه نویسی ماژول دوربین OV7670 با استفاده از Arduino چند مرحله نیاز دارد، از جمله راه اندازی کتابخانه های مورد نیاز، ابتدایی کردن دوربین و پیکربندی پارامترهای آن. در اینجا، یک نمونه کد Arduino نمونه ای ارائه شده است که یک تصویر ثابت را ثبت می کند و آن را در Serial Monitor نمایش می دهد.کتابخانه Adafruit_VC0706 به دو دلیل اصلی در نمونه کد استفاده می شود. ارتباط با ماژول دوربین OV7670: ماژول دوربین OV7670 از طریق رابط UART با برد Arduino ارتباط برقرار می کند و از پروتکل VC0706 استفاده می کند. کتابخانه Adafruit_VC0706 روشی مناسب برای ارتباط با دوربین و ارسال دستورات به آن، مانند ثبت یک تصویر ثابت یا تغییر تنظیمات دوربین را فراهم می کند. پردازش داده های تصویر: ماژول دوربین OV7670 تصاویر را در قالب فشرده ذخیره می کند که باید قبل از نمایش یا پردازش آنها، فشرده سازی آنها را بازگشایی کند. کتابخانه Adafruit_VC0706 یک تابع برای خواندن داده های تصویر فشرده شده از دوربین فراهم می کند و آنها را به یک بافر تصویر خام که می تواند برای پردازش باشد.
#include <Wire.h>
#include <Adafruit_VC0706.h>
// Initialize the camera object
Adafruit_VC0706 cam = Adafruit_VC0706(&Serial);
void setup() {
Serial.begin(115200);
Serial.println("Initializing camera...");
// Initialize camera communication
if (cam.begin()) {
Serial.println("Camera initialized successfully!");
} else {
Serial.println("Failed to initialize camera!");
while (1);
}
// Set the camera image size and compression level
cam.setImageSize(VC0706_640x480); // 640x480 image resolution
cam.setCompression(0); // lowest compression
// Set the camera baud rate to match the serial monitor baud rate
cam.setBaudRate(115200);
}
void loop() {
uint8_t imgSize = cam.getImageSize(); // Get the size of the image
Serial.print("Image size: ");
Serial.print(imgSize);
Serial.println(" bytes");
// Capture a still image
if (cam.takePicture()) {
Serial.println("Image captured!");
// Get the image data and send it to the Serial Monitor
uint8_t *imgBuf = cam.readPicture(imgSize);
for (int i = 0; i < imgSize; i++) {
Serial.write(imgBuf[i]);
}
} else {
Serial.println("Failed to capture image!");
}
delay(1000); // Wait for 1 second before capturing the next image
}
راه اندازی دوربین OV7670 با میکروپایتون و ESP32
یک کد Micropython برای گرفتن تصویر با استفاده از ماژول دوربین OV7670 و نمایش آن روی نمایشگر TFT در ادامه نوشته شده است که باید توجه داشته باشید که این کد فرض میکند ماژول دوربین OV7670 از طریق رابط UART به برد ESP32 وصل شده است و نمایشگر TFT از طریق رابط SPI به آن متصل شده است. شما ممکن است بر اساس نیاز و تنظیمات خاص خود کد را تغییر دهید.
import time
import machine
import ili9341
import uos
import gc
from machine import UART
# Define UART pins
uart = UART(2, baudrate=115200, tx=17, rx=16, timeout=10)
# Define TFT display pins
tft = ili9341.ILI9341(machine.SPI(1, baudrate=20000000, sck=machine.Pin(18), mosi=machine.Pin(23)), cs=machine.Pin(5), dc=machine.Pin(4), rst=machine.Pin(2))
# Initialize OV7670 camera
def init_camera():
# Reset camera
uart.write(b'\x56\x00\x26\x00')
time.sleep_ms(100)
uart.read()
# Set image resolution to 320x240
uart.write(b'\x56\x00\x54\x01\x00')
time.sleep_ms(100)
uart.read()
# Set image format to JPEG
uart.write(b'\x56\x00\x36\x01\x00')
time.sleep_ms(100)
uart.read()
# Set quality to 50%
uart.write(b'\x56\x00\x31\x05\x32\x35\x30\x30\x30')
time.sleep_ms(100)
uart.read()
# Capture image from OV7670 camera
def capture_image():
# Start capture
uart.write(b'\x56\x00\x36\x01\x01')
time.sleep_ms(100)
uart.read()
# Get image size
uart.write(b'\x56\x00\x34\x01\x00')
time.sleep_ms(100)
size = uart.read(9)
width = (size[7] << 8) + size[8]
height = (size[5] << 8) + size[6]
img_size = (size[1] << 16) + (size[2] << 8) + size[3]
# Read image data
uart.write(b'\x56\x00\x32\x0C\x00\x0A\x00\x00\x01\x00\x00\x00' + bytes([img_size >> 16, img_size >> 8, img_size]))
time.sleep_ms(1000)
img = uart.read(img_size)
return img, width, height
# Main loop
while True:
# Initialize camera
init_camera()
# Capture image
img, width, height = capture_image()
# Display image on TFT display
if img:
tft.clear()
tft.draw_jpg(img, 0, 0, width, height)
time.sleep(1)
# Free up memory
img = None
gc.collect()
راه اندازی دوربین OV7670 با میکروپایتون و RP2040
جهت راه اندازی دوربین OV670 از برد رزبری پای پیکو با تراشه RP2040 هم میتوان استفاده کرد. برای اجرای کد Micropython بر روی پلتفرم RP2040، باید پیش از اجرای کد مرحلهای را برای فلش کردن میکروکنترلر RP2040 انجام داد. برای این منظور، میتوانید از ابزارهایی مانند Raspberry Pi Pico Python SDK یا thonny IDE استفاده کنید.بعد از فلش کردن، میتوانید کد زیر را برای استفاده از دوربین OV7670 و نمایش تصویر بر روی یک نمایشگر TFT در RP2040 استفاده کنید.در این کد، ابتدا UART برای ارتباط با دوربین و TFT display تنظیم شده است. سپس پایههای مورد نیاز برای اتصال دوربین OV7670 و نمایشگر TFT تعریف شده و در نهایت دوربین مقداردهی اولیه شده و تصویر آن گرفته شده و بر روی نمایشگر نمایش داده میشود.لازم به ذکر است که این کد تست نشده است و ممکن است نیاز به تعدیل داشته باشد. همچنین، پیش از اجرای کد باید مطمئن شوید که تمامی پایهها و کتابخانههای مورد نیاز برای اجرای کد نصب شده باشند.
import time
import uos
from machine import Pin, UART, SPI
import ili9341
import ustruct
import uarray
# Define pins
OV7670_RST_PIN = 17
OV7670_PWDN_PIN = 16
OV7670_XCLK_PIN = 6
OV7670_PCLK_PIN = 8
OV7670_VSYNC_PIN = 7
OV7670_DATA_PIN = 0
TFT_CS_PIN = 9
TFT_DC_PIN = 10
TFT_RST_PIN = 11
# Define camera parameters
OV7670_IMG_WIDTH = 160
OV7670_IMG_HEIGHT = 120
# Initialize camera
uart = UART(0, baudrate=1000000, tx=Pin(OV7670_XCLK_PIN, Pin.OUT))
spi = SPI(1, baudrate=32000000, polarity=1, phase=1, sck=Pin(14), mosi=Pin(15), miso=Pin(12))
tft = ili9341.ILI9341(spi, cs=Pin(TFT_CS_PIN), dc=Pin(TFT_DC_PIN), rst=Pin(TFT_RST_PIN))
# Reset camera
Pin(OV7670_RST_PIN, Pin.OUT).value(0)
Pin(OV7670_PWDN_PIN, Pin.OUT).value(1)
time.sleep_ms(10)
Pin(OV7670_RST_PIN, Pin.OUT).value(1)
time.sleep_ms(10)
# Wait for camera to initialize
while not uos.stat('/dev/uart/0'):
time.sleep_ms(10)
# Configure camera
uart.write(b'\x56\x00\x26\x00')
uart.write(b'\x56\x00\x36\x1')
uart.write(b'\x56\x00\x3a\x01\x0a')
uart.write(b'\x56\x00\x11\x01')
uart.write(b'\x56\x00\x3c\x10')
# Capture image
tft.fill(ili9341.BLACK)
uart.write(b'\x56\x00\x36\x1')
img_data = b''
while len(img_data) != OV7670_IMG_WIDTH * OV7670_IMG_HEIGHT * 2:
while Pin(OV7670_VSYNC_PIN, Pin.IN).value() == 1:
pass
while Pin(OV7670_VSYNC_PIN, Pin.IN).value() == 0:
pass
for i in range(OV7670_IMG_WIDTH * 2):
img_data += bytes([uart.read(1)[0]])
# Display image
img_data = uarray.array('H', img_data)
for y in range(OV7670_IMG_HEIGHT):
for x in range(OV7670_IMG_WIDTH):
tft.pixel(x, y, img_data[x + y * OV7670_IMG_WIDTH])
# Clean up
uart.write(b'\x56\x00\x11\x00')
spi.deinit()
مشخصات
- کاربری
- مناسب برای استفاده صنعتی
- نوع ماژول
- دوربین - Camera
- ابعاد فیبر
- 26*34 mm
- سطح تجربه مورد نیاز
- نیمه حرفه ای
- ابعاد
- 35x34mm
- ولتاژ مورد نياز
- 3 ولت DC
- ولتاژ ورودی
- 2.45 تا 3 ولت DC
- توان
- 60mw
- دمای نگهداری
- -40 تا +95 درجه سانتی گراد
- دمای کاری
- -30 تا+70 درجه سانتی گراد
- جریان
- 10 تا 20 میکرو آمپر
- سایر قابلیت های دوربین
- 30 فریم قابلیت تصویر برداری
- لنز
- 1.6 اینچ سایز لنز
- پروتکل ارتباطی
- SCCB سازگار با I2C
- کیفیت LCD
- 640×480
- حساسیت
- 1.1 v
این دوربین دارای تراشه IMX219 است و بایستی پورت برد مورد نظر شما با این تراشه سازگاری داشته باشد.
اتصالات باتریها را بررسی کنید. همگی از یک نمونه باشند و اتصالات کامل و استاندارد باشند.
توسط همین ماژول هم میتوانید اقدام به اجرای درخواستتان کنید. البته اگر فقط بخواهید یک سلول باتری لیتیومی را مدیریت شارژ کنید، همان گزینه ماژول TP4056 مناسب خواهد بود.
امکان راه اندازی چند سنسور DHT با ESP8266 با استفاده از MicroPython وجود دارد. سنسورهای DHT با پروتکل دیجیتال و از طریق پایههای GPIO قابل اتصال به میکروکنترلرها هستند.
برای ساخت یک سیستم کنترل دما با برد میکروکنترلر ESP32، به موارد زیر نیاز دارید:
یک برد میکروکنترلر ESP32
یک سنسور دما مثل DHT DS18B20
یک المان سرد کننده
با استفاده از کتابخانه DHT.h، میتوانید از سنسور دما برای خواندن دمای محیط استفاده کنید. سپس، میتوانید از این دما برای کنترل المان گرمایشی یا سرمایشی استفاده کنید.
در خصوص برنامه نویسی از کتابخانه DHT و در صورت نیاز کتابخانه وای فای برای ارسال دادهها به پلتفرم IoT باید استفاده کنید.
دوربین IMX219 یک دوربین با رابط MIPI CSI-2 است که اکثرا با بردهای توسعهی مبتنی بر پردازندههای ARM که دارای رابط CSI-2 هستند، سازگاری دارد. برخی از این بردها شامل Raspberry Pi، Jetson Nano، Odroid و Orange Pi is هستند. با این حال، برای استفاده از دوربین IMX219 با هر برد دیگری، باید بررسی کنید که آیا برد شما دارای رابط MIPI CSI-2 است یا خیر. CSI2 یک رابط سریال پایدار برای انتقال داده های تصویری از سنسورهای تصویری به پردازنده ها است. برخی از بردهایی که دارای CSI2 هستند عبارتند از:
1- Raspberry Pi CM4
2- Nvidia Jetson Nano
3- Orange Pi
4- BeagleBone Black
5- Coral Dev Board
6- Qualcomm DragonBoard
7- HiKey 960
و بسیاری بردهای دیگر با پردازنده های مختلف از جمله ARM و x86.
لازم به ذکر است که برخی از این بردها ممکن است نیاز به ماژول تبدیل CSI2 به HDMI یا USB داشته باشند تا بتوانند با دوربین های دیگری که از رابط های HDMI یا USB استفاده می کنند سازگاری پیدا کنند.