Cara Mengatur Resolusi dan Kualitas Gambar ESP32-CAM OV3660

ESP32-CAM merupakan salah satu board mikrokontroler yang sangat populer untuk proyek Internet of Things (IoT) dan Computer Vision karena sudah dilengkapi dengan modul kamera bawaan. Salah satu versi yang banyak beredar di pasaran adalah ESP32-CAM-MB dengan kamera OV3660. Secara bawaan, kualitas gambar yang dihasilkan ESP32-CAM sudah cukup baik. Namun, pada beberapa kondisi, Anda mungkin ingin menghasilkan gambar dengan resolusi lebih tinggi, memperkecil ukuran file gambar agar lebih cepat dikirim melalui WiFi, mengurangi penggunaan memori, dan menyesuaikan kualitas gambar sesuai kebutuhan proyek. Semua pengaturan tersebut dapat dilakukan hanya melalui program pada Arduino IDE, tanpa perlu memodifikasi perangkat keras. Pada tutorial ini Anda akan mempelajari cara mengatur resolusi, kualitas JPEG, brightness, contrast, saturation, hingga sharpness pada kamera OV3660 secara lengkap.

Apa Itu Resolusi dan Kualitas Gambar?

Sebelum mulai melakukan pengaturan, pahami terlebih dahulu dua istilah berikut:

1. Resolusi Gambar

Resolusi menentukan jumlah piksel pada gambar. Semakin besar resolusi, detail gambar semakin tinggi, ukuran file semakin besar, waktu pengambilan gambar menjadi lebih lama, dan penggunaan RAM bertambah. Sebaliknya, resolusi yang lebih kecil menghasilkan proses yang lebih cepat.

Contohnya:

Kamera OV3660 pada ESP32-CAM mendukung berbagai pilihan resolusi gambar yang dapat disesuaikan dengan kebutuhan proyek. Resolusi paling rendah adalah QQVGA dengan ukuran 160 × 120 piksel, kemudian HQVGA berukuran 240 × 176 piksel, QVGA sebesar 320 × 240 piksel, dan CIF dengan resolusi 400 × 296 piksel. Untuk kualitas yang lebih baik tersedia VGA berukuran 640 × 480 piksel, SVGA sebesar 800 × 600 piksel, XGA dengan resolusi 1024 × 768 piksel, SXGA sebesar 1280 × 1024 piksel, hingga resolusi tertinggi yaitu UXGA dengan ukuran 1600 × 1200 piksel. Semakin tinggi resolusi yang dipilih, semakin detail gambar yang dihasilkan, tetapi waktu pemrosesan dan penggunaan memori juga akan semakin besar.

2. Kualitas JPEG

Berbeda dengan resolusi. Kualitas JPEG menentukan tingkat kompresi gambar. Nilainya berkisar antara:

- 10 → kualitas sangat tinggi

63 → kualitas sangat rendah

Artinya:

- Nilai kecil = gambar lebih bagus tetapi ukuran file besar.

- Nilai besar = gambar lebih kecil tetapi kualitas menurun.  

Contoh:

10  = Sangat tajam

15  = Sangat baik

20  = Baik

30  = Sedang

40  = Cukup

50  = Rendah

63  = Sangat rendah

Persiapan Hardware

- ESP32-CAM-MB

- Kamera OV3660

- Kabel USB Type-C atau Micro USB (sesuai board)

- Komputer/Laptop

- Arduino IDE

Instalasi Board ESP32 pada Arduino IDE

Apabila belum pernah menggunakan ESP32, lakukan instalasi board terlebih dahulu.

1. Masukkan URL berikut pada Additional Boards Manager URLs.

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

2. Kemudian Tools → Board → Boards Manager

3. Cari esp32

4. Install board ESP32 by Espressif Systems.

Menghubungkan ESP32-CAM ke Komputer

1. Hubungkan board menggunakan kabel USB.

2. Kemudian pilih Tools → Board AI Thinker ESP32-CAM

3. Lalu pilih Port yang sesuai.

Mengenal Pengaturan Kamera pada ESP32

Semua pengaturan kamera berada pada struktur berikut:

 

sensor_t * s = esp_camera_sensor_get();


Variabel s digunakan untuk mengakses seluruh fitur kamera.

Contohnya:

 

s->set_framesize();

s->set_quality();

s->set_brightness();

 

Project: Mengatur Resolusi dan Kualitas Kamera

Pada contoh berikut, ESP32-CAM akan:

- Menghubungkan ke WiFi.

- Mengaktifkan kamera OV3660.

- Mengatur resolusi.

- Mengatur kualitas JPEG.

- Mengatur brightness.

- Mengatur contrast.

- Mengatur saturation.

- Mengatur sharpness.

- Mengambil foto.

Langkah-langkah Mengatur Resolusi dan Kualitas Kamera 

1. Membuat Project Baru

- Buka Arduino IDE.

- Kemudian buat sketch baru.

2. Menambahkan Library

Tambahkan library berikut.

 

#include "esp_camera.h"

#include <WiFi.h>


3. Mengisi Informasi WiFi

Ubah sesuai jaringan Anda.

 

const char* ssid = "Nama_WiFi";

const char* password = "Password_WiFi";


4. Menentukan Konfigurasi Pin Kamera

Karena menggunakan ESP32-CAM AI Thinker dengan kamera OV3660, gunakan konfigurasi berikut.

 

#define PWDN_GPIO_NUM     32

#define RESET_GPIO_NUM    -1

#define XCLK_GPIO_NUM      0


#define SIOD_GPIO_NUM     26

#define SIOC_GPIO_NUM     27


#define Y9_GPIO_NUM       35

#define Y8_GPIO_NUM       34

#define Y7_GPIO_NUM       39

#define Y6_GPIO_NUM       36

#define Y5_GPIO_NUM       21

#define Y4_GPIO_NUM       19

#define Y3_GPIO_NUM       18

#define Y2_GPIO_NUM        5


#define VSYNC_GPIO_NUM    25

#define HREF_GPIO_NUM     23

#define PCLK_GPIO_NUM     22

 

5. Program Lengkap

 

#include "esp_camera.h"

#include <WiFi.h>


const char* ssid = "Nama_WiFi";

const char* password = "Password_WiFi";


#define PWDN_GPIO_NUM     32

#define RESET_GPIO_NUM    -1

#define XCLK_GPIO_NUM      0


#define SIOD_GPIO_NUM     26

#define SIOC_GPIO_NUM     27


#define Y9_GPIO_NUM       35

#define Y8_GPIO_NUM       34

#define Y7_GPIO_NUM       39

#define Y6_GPIO_NUM       36

#define Y5_GPIO_NUM       21

#define Y4_GPIO_NUM       19

#define Y3_GPIO_NUM       18

#define Y2_GPIO_NUM        5


#define VSYNC_GPIO_NUM    25

#define HREF_GPIO_NUM     23

#define PCLK_GPIO_NUM     22


camera_config_t config;


void setup() {


  Serial.begin(115200);


  WiFi.begin(ssid, password);


  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }


  config.ledc_channel = LEDC_CHANNEL_0;

  config.ledc_timer = LEDC_TIMER_0;


  config.pin_d0 = Y2_GPIO_NUM;

  config.pin_d1 = Y3_GPIO_NUM;

  config.pin_d2 = Y4_GPIO_NUM;

  config.pin_d3 = Y5_GPIO_NUM;

  config.pin_d4 = Y6_GPIO_NUM;

  config.pin_d5 = Y7_GPIO_NUM;

  config.pin_d6 = Y8_GPIO_NUM;

  config.pin_d7 = Y9_GPIO_NUM;


  config.pin_xclk = XCLK_GPIO_NUM;

  config.pin_pclk = PCLK_GPIO_NUM;

  config.pin_vsync = VSYNC_GPIO_NUM;

  config.pin_href = HREF_GPIO_NUM;


  config.pin_sscb_sda = SIOD_GPIO_NUM;

  config.pin_sscb_scl = SIOC_GPIO_NUM;


  config.pin_pwdn = PWDN_GPIO_NUM;

  config.pin_reset = RESET_GPIO_NUM;


  config.xclk_freq_hz = 20000000;


  config.pixel_format = PIXFORMAT_JPEG;


  config.frame_size = FRAMESIZE_VGA;


  config.jpeg_quality = 12;


  config.fb_count = 2;


  if (esp_camera_init(&config) != ESP_OK) {

    Serial.println("Camera Init Failed");

    return;

  }


  sensor_t * s = esp_camera_sensor_get();


  s->set_brightness(s, 1);

  s->set_contrast(s, 1);

  s->set_saturation(s, 0);

  s->set_sharpness(s, 2);


  Serial.println("Camera Ready");

}


void loop() {


}


Penjelasan Program

1. Mengatur Resolusi

 

config.frame_size = FRAMESIZE_VGA;

Artinya kamera menggunakan resolusi 640 x 480. Jika ingin mengganti resolusi, cukup ubah menjadi: FRAMESIZE_QQVGA atau FRAMESIZE_QVGA atau FRAMESIZE_SVGA atau FRAMESIZE_UXGA.

2. Mengatur Kualitas JPEG

 

config.jpeg_quality = 12;


Semakin kecil nilainya, gambar semakin tajam dan ukuran file semakin besar.

Contoh:

 

config.jpeg_quality = 10;


Kualitas sangat tinggi.

Sedangkan:

 

config.jpeg_quality = 35;


Ukuran file menjadi jauh lebih kecil.

3. Mengatur Brightness

 

s->set_brightness(s, 1);


Nilai yang tersedia:

-2

-1

0

1

2

Semakin besar nilainya, gambar semakin terang.

4. Mengatur Contrast

 

s->set_contrast(s, 1);


Nilai -2 sampai 2. Contrast tinggi membuat objek lebih tegas.

5. Mengatur Saturation

 

s->set_saturation(s, 0);


Nilai -2 sampai 2. 

- Nilai negatif membuat warna lebih pudar.

- Nilai positif membuat warna lebih hidup.

6. Mengatur Sharpness

 

s->set_sharpness(s, 2);


Semakin tinggi nilainya, detail gambar menjadi lebih tajam. Namun, pengaturan yang terlalu tinggi dapat menimbulkan noise pada beberapa kondisi pencahayaan.

Mengambil Foto Setelah Pengaturan

Setelah semua parameter diatur, Anda dapat mengambil gambar menggunakan:

 

camera_fb_t * fb = esp_camera_fb_get();


if (!fb) {

  Serial.println("Gagal mengambil gambar");

  return;

}


Serial.print("Ukuran Foto: ");

Serial.print(fb->len);

Serial.println(" byte");


esp_camera_fb_return(fb);


Penjelasan:

- esp_camera_fb_get() digunakan untuk mengambil satu frame dari kamera.

- fb->len menampilkan ukuran file gambar dalam satuan byte.

- esp_camera_fb_return(fb) mengembalikan buffer ke sistem agar memori dapat digunakan kembali.

Tips Agar Hasil Kamera Lebih Baik

Agar gambar yang dihasilkan lebih maksimal, perhatikan beberapa hal berikut:

- Gunakan pencahayaan yang cukup agar kamera dapat menangkap detail dengan jelas.

- Hindari resolusi terlalu tinggi jika proyek hanya membutuhkan streaming atau monitoring sederhana.

- Sesuaikan nilai JPEG Quality dengan kebutuhan agar ukuran file tidak terlalu besar.

- Jangan mengatur brightness dan sharpness terlalu tinggi karena dapat meningkatkan noise pada gambar.

- Gunakan catu daya yang stabil agar kamera bekerja dengan optimal dan tidak mudah mengalami restart.

Troubleshooting

1. Gambar Buram

Penyebab:

- Lensa belum fokus.

- Pencahayaan kurang.

Solusi:

- Putar lensa kamera secara perlahan hingga fokus. 

- Tambahkan pencahayaan.

2. ESP32 Restart Saat Menggunakan Resolusi Tinggi

Penyebab:

- Kekurangan memori.

- Catu daya tidak stabil.  

Solusi:

- Turunkan resolusi menjadi VGA atau QVGA.

- Gunakan adaptor USB dengan arus yang mencukupi.

3. Ukuran File Terlalu Besar

Penyebab:

- Resolusi tinggi.

Nilai jpeg_quality terlalu kecil.

Solusi:

- Gunakan resolusi yang lebih rendah.

- Naikkan nilai jpeg_quality, misalnya menjadi 20 atau 25. 

Posting Komentar

0 Komentar