Tutorial ESP32-CAM : Kamera Otomatis untuk Mengambil Foto Satwa Liar

Indobot Update

Tutorial ESP32-CAM : Kamera Otomatis
Tutorial ESP32-CAM Kamera Otomatis untuk Mengambil Foto Satwa Liar

Halo Fanbot, kali ini kita akan membuat project dengan ESP32-CAM

Sedang ada project apa hari ini?

Buat kalian yang sangat suka dengan foto satwa  liar. Pengambilan fotonya tidak mudah loh. Satwa liar sangat jarang berinteraksi dengan manusia, sehingga ketika kita mendekat, pasti mereka akan berlari. Berbeda lagi jika satwa liarnya merupakan hewan yang ganas seperti macan, singa, ular atau yang sejenisnya, maka kitalah yang berlari. Nyawa terancam kan? hehe.

Nah pada project kali ini, kita akan membuat sebuah alat yang dapat mengambil gambar satwa liar berupa kamera otomatis. Kamera ini akan secara otomatis mengambil foto ketika ada hewan yang lewat di depannya. Kamera ini menggunakan ESP32-CAM dan Sensor PIR untuk mendeteksinya. Bagaimana cara membuatnya? Yuk kita simak.

Kamera Otomatis untuk Mengambil Foto Satwa Liar

Alat dan Bahan

Alat dan bahan untuk project ini adalah sebagai berikut.

  1. Software Arduino IDE
  2. ESP32-CAM 1
  3. FTDI FT232RL 1
  4. Kabel jumper Secukupnya

baca juga: Project ESP32-CAM IoT : Kamera Keamanan Rumah dengan IoT Telegram

Rangkaian

Susun komponen di atas menjadi rangkaian berikut.

Belajar Elektronika, Arduino, dan IoT step by step dengan bantuan tangga belajar? Daftar sekarang dan dapatkan PROMO

Program

Tahap selanjutnya adalah penulisan program pada Arduino IDE. Buatlah program seperti berikut. Jangan lupa untuk menambahkan board baru untuk ESP32 agar tidak terjadi error. Atur board ke AI Thinker ESP32-CAM.

 
/*********
Project Foto Otomatis untuk Satwa Liar
*********/

#include "esp_camera.h"
#include "Arduino.h"
#include "FS.h"                // SD Card ESP32
#include "SD_MMC.h"            // SD Card ESP32
#include "soc/soc.h"           // Menonaktifkan brownour problems
#include "soc/rtc_cntl_reg.h"  // Menonaktifkan brownour problems
#include "driver/rtc_io.h"
#include <EEPROM.h>            // baca dan dituliskan dalam flash memory

// define untuk jumlah byte yang Anda akses
#define EEPROM_SIZE 1

// Pin definition for CAMERA_MODEL_AI_THINKER
#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

int bot_check_interval = 3000;
long bot_last_check;
int pictureNumber = 0;
int pirSensorPin = 13;
int motionDetected = LOW;

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
 
  Serial.begin(115200);
  //Serial.setDebugOutput(true);
  //Serial.println();
  
  camera_config_t config;
  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; 
  
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  
  // Init Camera
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }
  
  //Serial.println("Starting SD Card");
  if(!SD_MMC.begin()){
    Serial.println("SD Card Mount Failed");
    return;
  }
  
  uint8_t cardType = SD_MMC.cardType();
  if(cardType == CARD_NONE){
    Serial.println("No SD Card attached");
    return;
  }
    

  
  // Mematikan LED on-board ESP32-CAM (blitz) yang terhubung ke GPIO 4
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);
  rtc_gpio_hold_en(GPIO_NUM_4);
  
  
}

void loop() {
motionDetected = digitalRead(pirSensorPin); //pembacaan sensor PIR
  if (motionDetected == HIGH) //ketika terdeteksi gerakan
  {
  if (millis() > bot_last_check + bot_check_interval) {
    kamera();
    bot_last_check = millis();
  }
  }
  else {
  Serial.println("Masuk ke mode Sleep");
  esp_deep_sleep_start();
  Serial.println("Tidak ada pengambilan gambar");
  }
}

void kamera(){
    camera_fb_t * fb = NULL;
  // Pengambilan gambar dengan Camera
  fb = esp_camera_fb_get();  
  if(!fb) {
    Serial.println("Pengambilan gambar Gagal");
    return;
  }
  // inisialisasi EEPROM dengan ukuran yang telah ditentukan
  EEPROM.begin(EEPROM_SIZE);
  pictureNumber = EEPROM.read(0) + 1;

  // Penamaan gambar baru yang pada MicroSD
  String path = "/gambar" + String(pictureNumber) +".jpg";

  fs::FS &fs = SD_MMC; 
  Serial.printf("Picture file name: %s\n", path.c_str());
  
  File file = fs.open(path.c_str(), FILE_WRITE);
  if(!file){
    Serial.println("Gagal untuk membuka file dalam mode writing");
  } 
  else {
    file.write(fb->buf, fb->len); // payload (image), payload length
    Serial.printf("Simpan file dengan judul: %s\n", path.c_str());
    EEPROM.write(0, pictureNumber);
    EEPROM.commit();
  }
  file.close();
  esp_camera_fb_return(fb); 
  
}

Upload program di atas ke ESP32-CAM. Jangan lupa untuk menghubungkan dulu GPIO 0 ke GND agar program dapat ter-upload dengan baik.

Jika sketch sudah terkirim secara keseluruhan, maka cabutlah GPIO 0 dari GND untuk memasukkan pada Running Mode dari ESP32-CAM. Selanjutnya, buka serial monitor untuk melihat hasilnya.

Uji Project di atas dengan menggunakan hewan biasa seperti kucing atau yang lainnya. Jika project sudah benar maka akan ada notifikasi pada serial monitor (jika masih terhubung) atau bisa juga dengan mengambil microSD dan membukanya di komputer.

baca juga: Project ESP32-CAM IoT : Mengkoneksikan ESP32-CAM dengan Aplikasi Telegram

Project ini tidak hanya mendeteksi adanya satwa saja, namun juga mendeteksi manusia. Seperti yang kita tau terkait fungsi dari sensor PIR dapat mendeteksi munculnya hewan atau manusia. Sehingga jika kita tempatkan di hutan untuk menangkap foto dari satwa, kamera akan dapat mengambil fotonya beberapa kali.

Tertarik untuk mencobanya?

Mau belajar elektronika dasar? Arduino? atau Internet of Things? Ikuti kursus online Indobot Academy!

Ingin Tahu Program Kami Lebih Lanjut?

Silahkan isi Formulir Dibawah Ini untuk Diskusi dengan Tim Indobot Academy.

Baca Juga

Bagikan:

Tags

Tinggalkan komentar

whatsapp whatsapp