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.
- Software Arduino IDE
- ESP32-CAM 1
- FTDI FT232RL 1
- 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!