Close Menu

    Yeni yazılardan haberdar olun!

    3D yazıcı, elektronik, Arduino ve daha onlarca konuda en yeni blog yazılarını ve haberleri kaçırmayın.

    Trendler

    🧑‍💻 ESP32 Kullanımı – Esp32’ye Nasıl Kod Atılır?

    CH340 Driver Kurulumu? Nasıl İndirilir?

    Arduino ile A4988 ve Nema-17 (Step Motor) Kullanımı

    Instagram YouTube X (Twitter) Facebook LinkedIn Reddit Discord WhatsApp
    Popüler
    • 14 Şubat İçin 14 Hediye – 3D Baskılı Sevgililer Günü Hediyeleri
    • CH340 Driver Kurulumu? Nasıl İndirilir?
    • Arduino ile FM Radyo Uygulaması
    • STM32 ile I2C Oled Ekran Kullanımı
    YouTube Instagram X (Twitter) Reddit LinkedIn Discord WhatsApp
    Robo90 – BlogRobo90 – Blog
    • Anasayfa
    • 3D Baskı
    • Eğitim Serileri
      1. Arduino Eğitim Serisi
      2. IoT Eğitim Serisi
      3. Fusion 360 Eğitim Serisi
      4. Raspberry Pi Eğitim Serisi
      5. STM Eğitim Serisi
      6. View All

      CH340 Driver Kurulumu? Nasıl İndirilir?

      22 Temmuz 2024

      HC-06 ve HC-05 Aralarında Nasıl Haberleşir?

      8 Ağustos 2023

      Arduino ile A4988 ve Nema-17 (Step Motor) Kullanımı

      26 Temmuz 2023

      ESP32CAM ve OV2640 Nasıl Kullanılır?

      5 Ağustos 2023

      🧑‍💻 ESP32 Kullanımı – Esp32’ye Nasıl Kod Atılır?

      26 Temmuz 2023

      🌐 ESP32 ve Arduino IOT ile LED Nasıl Kontrol Edilir?

      26 Temmuz 2023

      Fusion 360’ta Dikdörtgen Komutları – Fusion 360 Eğitim Serisi – Bölüm 3

      21 Eylül 2023

      Fusion 360 Nasıl Kullanılır? – Fusion 360 Eğitim Serisi – Bölüm 2

      24 Ağustos 2023

      Autodesk Fusion 360 Nedir?

      8 Ağustos 2023

      Fusion 360 Öğrenci Lisansı Nedir? Nasıl Alınır?

      5 Ağustos 2023

      Raspberry Pi Pico ile Potansiyometre Kullanarak Buzzer Kullanımı – Bölüm 4

      22 Eylül 2023

      Raspberry Pi Pico ile Potansiyometre Okuma – Bölüm 3

      22 Eylül 2023

      Raspberry Pi Pico ile LED Yakma – Bölüm 2

      17 Ağustos 2023

      Raspberry Pi Pico Nedir? Nasıl Kullanılır? – Bölüm 1

      9 Ağustos 2023

      STM32 ile I2C Oled Ekran Kullanımı

      14 Kasım 2023

      CH340 Driver Kurulumu? Nasıl İndirilir?

      22 Temmuz 2024

      STM32 ile I2C Oled Ekran Kullanımı

      14 Kasım 2023

      Raspberry Pi Pico ile Potansiyometre Kullanarak Buzzer Kullanımı – Bölüm 4

      22 Eylül 2023

      Raspberry Pi Pico ile Potansiyometre Okuma – Bölüm 3

      22 Eylül 2023
    • Projeler
      1. 3D Yazıcı Projeleri
      2. Arduino Projeleri
      3. IoT Projeleri
      4. Raspberry Pi Projeleri
      5. View All

      🐉 Creality Ender 3 Neo İnceleme Yazısı

      26 Temmuz 2023

      Ultimaker Cura’da Filament Değiştirme Özelliği Nedir? Tüm Detaylarıyla Nasıl Kullanılır?

      24 Temmuz 2023

      Arduino ile FM Radyo Uygulaması

      19 Nisan 2024

      Arduino ile EGGBOT Yapımı

      22 Ağustos 2023

      Servo Motor ve LDR ile Güneş Takip Sistemi

      17 Ağustos 2023

      HC-06 ve HC-05 Aralarında Nasıl Haberleşir?

      8 Ağustos 2023

      ESP32CAM ve OV2640 Nasıl Kullanılır?

      5 Ağustos 2023

      ESP-NOW ile RGB LED Kontrolü 🎛️

      4 Ağustos 2023

      📡 Yeni Başlayanlar için ESP-NOW

      3 Ağustos 2023

      ESP32-CAM ile Baskılarınız Yanmasın 📛

      29 Temmuz 2023

      Raspberry Pi Pico ile LED Yakma – Bölüm 2

      17 Ağustos 2023

      Arduino ile FM Radyo Uygulaması

      19 Nisan 2024

      STM32 ile I2C Oled Ekran Kullanımı

      14 Kasım 2023

      Arduino ile EGGBOT Yapımı

      22 Ağustos 2023

      Raspberry Pi Pico ile LED Yakma – Bölüm 2

      17 Ağustos 2023
    • İncelemeler
      1. 🐉 Creality Ender 3 Neo İnceleme Yazısı
      2. 🧑‍💻 ESP32 ‘ye Program Nasıl Yazılır ?
      3. 🌐 ESP32 ve Arduino IOT ile LED Nasıl Kontrol Edilir?
      4. View All

      14 Şubat İçin 14 Hediye – 3D Baskılı Sevgililer Günü Hediyeleri

      10 Şubat 2025

      CH340 Driver Kurulumu? Nasıl İndirilir?

      22 Temmuz 2024

      Arduino ile FM Radyo Uygulaması

      19 Nisan 2024

      STM32 ile I2C Oled Ekran Kullanımı

      14 Kasım 2023

      14 Şubat İçin 14 Hediye – 3D Baskılı Sevgililer Günü Hediyeleri

      10 Şubat 2025

      CH340 Driver Kurulumu? Nasıl İndirilir?

      22 Temmuz 2024

      Arduino ile FM Radyo Uygulaması

      19 Nisan 2024

      STM32 ile I2C Oled Ekran Kullanımı

      14 Kasım 2023

      14 Şubat İçin 14 Hediye – 3D Baskılı Sevgililer Günü Hediyeleri

      10 Şubat 2025

      CH340 Driver Kurulumu? Nasıl İndirilir?

      22 Temmuz 2024

      Arduino ile FM Radyo Uygulaması

      19 Nisan 2024

      STM32 ile I2C Oled Ekran Kullanımı

      14 Kasım 2023

      14 Şubat İçin 14 Hediye – 3D Baskılı Sevgililer Günü Hediyeleri

      10 Şubat 2025

      Creality K1 ve K1 Max 3D Yazıcı Karşılaştırması – İncelemesi

      27 Eylül 2023

      Priz Tipi Wattmetre Hakkında Merak Edilen Her Şey

      7 Ağustos 2023

      BL-Touch Nedir? Nasıl Çalışır? (3D Yazıcı Otomatik Seviyeleme)

      5 Ağustos 2023
    • Mağaza
    Robo90 – BlogRobo90 – Blog
    Home»Genel

    ESP32-CAM ile Baskılarınız Yanmasın 📛

    Mustafa TopalMustafa Topal054914 Mins Read
    Paylaş
    Twitter LinkedIn Facebook Reddit Email Telegram WhatsApp
    ESP32-CAM Modülü

    Günümüzde 3D yazıcılar artık neredeyse herkesin erişebileceği bir seviyeye geldi . Evimizden ofisimize, mesleki hayatımızdan hobilerimize, gerek yedek parçası zor bulunan bir ürünün yedek parçasını tasarlayıp basmaya kadar artık hayatımızın her yerindeler ve hayatımızı kolaylaştırıyorlar. Biz de ofisimizde bir çok 3D printer markasıyla baskılar alıyor ve kendi işlerimiz için kullanıyoruz. Ancak yaşadığımız sorunlardan bir tanesi uzun süreli baskılarda bazen baskılar bozuk çıkabiliyor ve bu durum bazen yetiştirmemiz gereken uzun süreli baskılarda can sıkıcı durumlara yol açabiliyor. Bunun yanında harcadığımız filament ve elektrik de zaman ve para kaybı. Bugün bütün bu sorunların önüne geçebilecek bir projeyi inceleyeceğiz.

    İçindekiler gizle
    1. Ne Kullanmam Gerekiyor ki ?
    1.1. Not
    2. Yazılım Kısmı
    2.1. İhtiyacımız olan Kütüphaneler
    2.2. Bilmeyenler için alt yazı;
    3. Kodun Açıklamaları
    3.1. Not
    3.2. Not
    4. Donanım Kısmı
    4.1. Bağlantı Şemaları
    5. Alt yazı ( Not Gate )
    6. BreadBoard Kurulumu
    7. Pertinaks
    8. Test Edelim
    🧑‍💻 ESP32 ‘ye Program Nasıl Yazılır?
    Pertinaks üzerine kurulu ESP32-CAM, röle, röle kontrol devresi, DC jack.

    Daha önceki ESP32 ile Yerel Ağdan Genel Ağa ( LAN to WAN ) adlı yazımızda ESP32 CAM modülünü ve Ngrok’u kullanarak nasıl LAN’daki ( yerel ağ ) verimizi nasıl WAN’a ( Genel ağ ) taşıyabileceğimizden bahsetmiştik ve ESP32-CAM modülünden gelen kamera görüntülerini canlı yayın gibi telefonumuzdan veya bilgisayarımızdan izlemiştik. Bu yazımızda ise tekrar ESP32-CAM modülü, Ngrok ve bir 5V röle modülü kullanarak istediğimiz zaman 3D yazıcımızın çıktı alırken fotoğrafını çekebilen ve röle modülü sayesinde yazıcının gücünü kesip baskıyı durdurabilen bir proje yapacağız. Bu proje sayesinde filamentleriniz, elektriğiniz ve en önemlisi de zamanınız boşa gitmeyecek.

    Ne Kullanmam Gerekiyor ki ?

    ESP32-CAM Wifi Bluetooth Geliştirme Kartı ve OV2640 Kamera Modülü: https://www.robo90.com/esp32-cam-wifi-bluetooth-gelistirme-karti-ve-ov2640-kamera-modulu

    5V Röle Kartı – 1 Kanal: https://www.robo90.com/5v-role-karti-1-kanal

    6×12.5 cm Delikli Pertinaks – Prototip PCB: https://www.robo90.com/6×125-cm-delikli-pertinaks-prototip-pcb

    BC337 NPN Transistör – BJT – TO-92: https://www.robo90.com/bc337-npn-transistor-bjt-to-92

    4.7kOhm ve 220Ohm direnç: https://www.robo90.com/4-7k-direnc-paketi-1-4-w-10-adet

    https://www.robo90.com/220r-direnc-paketi-1-4-w-10-adet

    İnce bakır kablo ve jumper: https://www.robo90.com/40li-ayrilabilen-disi-erkek-jumper-kablo-20cm-arduino-uyumlu

    DC Jack-Jak Modülü 5.5mm: https://www.robo90.com/dc-jack-jak-modulu-5

    5V 2A Adaptör: https://www.robo90.com/5v-2a-adaptor

    Elektronik Breadboard – Orta Boy – 400 Pin: https://www.robo90.com/elektronik-breadboard-orta-boy-400-pin


    Not

    Ürün listesi biraz uzun görünebilir. Ancak projeyi sıfırdan son haline getirene kadar kullandığım bütün malzemeler listede yer almakta.


    Yazılım Kısmı

    İhtiyacımız olan Kütüphaneler

    ESP32 Kütüphanesi: ESP32’ye program nasıl yazılır adlı blog yazımda ESP32’nin kütüphanesinin nasıl kurulacağından bahsetmiştim. Aşağıdaki linkten ulaşabilirsiniz.

    ESP32 ‘ye Program Nasıl Yazılır?

    ESPAsyncWebServer Kütüphanesi: ESP32 kütüphanesi dışında ESPAsyncWebServer kütüphanesini de Arduino IDE’mize kurmamız gerekir. Aşağıdaki GitHub linkinden Kütüphaneye ulaşabilirsiniz.

    https://github.com/me-no-dev/ESPAsyncWebServer


    Bilmeyenler için alt yazı;

    Linkteki GitHub sayfasından kütüphaneyi nasıl indireceğinizi bilmiyorsanız sadece karşınıza çıkan ekrandan <> Code butonuna tıkladıktan sonra Download ZIP butonuna tıklamamız gerekir. Sonrasında kütüphanemiz ZIP dosyası şeklinde inecektir. ( Fotoğraf 1.0 )

    GitHub sayfası ve yeşil butona basınca "Dowload ZIP" dosyası
    Fotoğraf 1.0

    Daha sonra Arduino IDE programının arayüzünden Sketch> Include Library > Add.ZIP Libraries kısmından indirdiğiniz ZIP kütüphanenizi dahil edebilirsiniz. ( Fotoğraf 1.1 )

    ZIP kütüphanesi Arduino IDE platformuna kurmak için sketch>ınclude library>Add .ZIP Library yolu.
    Fotoğraf 1.1

    Kodun Açıklamaları

    Kodumuzun başlangıç kısmında ihtiyacımız olan kütüphaneler bulunmakta. Daha sonrasında ise ESP32-CAM modülünü bağlayacağımız internet ismimizi ve şifremizi sırasıyla ssid ve password kısmına yazmamız gerek.

    ESP32-CAM sadece 2.4GHz internete bağlanabilir. 5GHz internetinize bağlanamaz. 5Ghz internetinize bağlamayı denerseniz ESP32-CAM modülü internete bağlanamayacaktır. Telefonunuzun mobil erişim noktasını paylaşıp ESP32-CAM modülünü bağlamayı deneyebilirsiniz ancak telefonunuzun da 2.4GHz internet Wi-Fi paylaşımı yaptığından emin olmanız gerek.

    Daha sonra AsyncWebServer server(80); kodu ile 80. portta LAN’da bir Webserver kurmamızı sağlar. Bu sayıyı değiştirip istediğiniz portta Webserver açabilirsiniz.

    Sonrasında ise ESP32-CAM modülümüzün kamerasının bağlanacağı pinler tanımlanmıştır.

    #include "WiFi.h"
    #include "esp_camera.h"
    #include "esp_timer.h"
    #include "img_converters.h"
    #include "Arduino.h"
    #include "soc/soc.h"           
    #include "soc/rtc_cntl_reg.h"  
    #include "driver/rtc_io.h"
    #include <ESPAsyncWebServer.h>
    #include <StringArray.h>
    #include <SPIFFS.h>
    #include <FS.h>
    
    
    const char* ssid = "****************";       //İnternet İsminiz (Örnek Mahmut_2.4GHz)
    const char* password = "****************";   //İnternet Şifreniz 
    int relay = 2;
    int flash = 4;
    
    AsyncWebServer server(80);
    
    boolean takeNewPhoto = false;
    
    
    #define FILE_PHOTO "/photo.jpg"
    
    
    #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

    Not

    Bu projede tanımlanan kamera pinleri CAMERA_MODEL_WROVER_KIT için tanımlanmıştır.

    Kodumuzun bu kısmında ise Webserver’e tanımlayacağımız HTML kodlarımız bulunmakta. Bu kodun içerisinde ESP32-CAM modülüne çeşitli işler yaptırmamızı sağlayan butonlar ve modülümüze çektirdiğimiz fotoğraf bulunmakta.

    const char index_html[] PROGMEM = R"rawliteral(
    <!DOCTYPE HTML><html>
    <head>
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <style>
        body { text-align:center; }
        .vert { margin-bottom: 10%; }
        .hori{ margin-bottom: 0%; }
      </style>
    </head>
    <body>
      <div id="container">
        <h2>ESP32-CAM Last Photo</h2>
        <p>It might take more than 5 seconds to capture a photo.</p>
        <p>
          <button onclick="rotatePhoto();">ROTATE</button>
          <button onclick="capturePhoto()">CAPTURE PHOTO</button>
          <button onclick="location.reload();">REFRESH PAGE</button>
          <button onclick="RELAYON();">RELAYON</button>
          <button onclick="RELAYOFF();">RELAYOFF</button>
          <button onclick="FLASHON();">FLASHON</button>
          <button onclick="FLASHOFF();">FLASHOFF</button>
        </p>
      </div>
      <div><img src="saved-photo" id="photo" width="70%"></div>
    </body>
    <script>
      var deg = 0;
      function capturePhoto() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/capture", true);
        xhr.send();
      }
    
      function RELAYON() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/RelayOn", true);
        xhr.send();
      }
      function RELAYOFF() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/RelayOff", true);
        xhr.send();
      }
      function FLASHON () {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/FlashOn", true);
        xhr.send();
      }
      function FLASHOFF() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/FlashOff", true);
        xhr.send();
      }
    
      function rotatePhoto() {
        var img = document.getElementById("photo");
        deg += 90;
        if(isOdd(deg/90)){ document.getElementById("container").className = "vert"; }
        else{ document.getElementById("container").className = "hori"; }
        img.style.transform = "rotate(" + deg + "deg)";
      }
      function isOdd(n) { return Math.abs(n % 2) == 1; }
    </script>
    </html>)rawliteral";

    Kodumuzun setup kısmında ise Webserveri, kamera modülü ve HTML kodumuzda tanımladığımız butonlardan bildirim geldiği zaman ne yapacağını tanımlayan çeşitli komutlar bulunmakta.

    Loop kısmında ise yeni bir fotoğraf çekildiği zaman capturePhotoSaveSpiffs(); fonksiyonunu çağıran bir komut bulunmakta. Bunların harici çekilen fotoğrafı modülün çalışmasını ve çekilen fotoğrafları hafızasına kaydetmesini sağlayan çeşitli fonksiyonlar mevcut.

    //İhtiyacımız olan kütüphaneler 
    #include "WiFi.h"
    #include "esp_camera.h"
    #include "esp_timer.h"
    #include "img_converters.h"
    #include "Arduino.h"
    #include "soc/soc.h"           
    #include "soc/rtc_cntl_reg.h"  
    #include "driver/rtc_io.h"
    #include <ESPAsyncWebServer.h>
    #include <StringArray.h>
    #include <SPIFFS.h>
    #include <FS.h>
    //İnternet ismimiz,şifremiz ve röle modülünü bağlayacağımız pin tanımlaması bulunmakta. Modülün üzerindeki flash ise 4. pine bağlı. 
    const char* ssid = "****************";       //İnternet İsminiz (Örnek Mahmut_2.4GHz)
    const char* password = "****************";   //İnternet Şifreniz 
    int relay = 2;
    int flash = 4;
    //Webserver'imizin hangi portta başlatacağımızı tanımlıyoruz.
    AsyncWebServer server(80);
    boolean takeNewPhoto = false;
    //Modüle bağlayacağımız pin'lerin tanımlaması 
    #define FILE_PHOTO "/photo.jpg"
    #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
    //Webserver'imize tanımlayacağımız çeşitli butonların ve çektiğimiz fotoğrafın ekrana gelmesini sağlayan HTML kodları 
    const char index_html[] PROGMEM = R"rawliteral(
    <!DOCTYPE HTML><html>
    <head>
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <style>
        body { text-align:center; }
        .vert { margin-bottom: 10%; }
        .hori{ margin-bottom: 0%; }
      </style>
    </head>
    <body>
      <div id="container">
        <h2>ESP32-CAM Baskılarımız Yanmasın</h2>
        <p>Fotoğrafı çekmesi 5 saniyeden fazla sürebilir</p>
        <p>
          <button onclick="rotatePhoto();">ROTATE</button>
          <button onclick="capturePhoto()">CAPTURE PHOTO</button>
          <button onclick="location.reload();">REFRESH PAGE</button>
          <button onclick="RELAYON();">RELAYON</button>
          <button onclick="RELAYOFF();">RELAYOFF</button>
          <button onclick="FLASHON();">FLASHON</button>
          <button onclick="FLASHOFF();">FLASHOFF</button>
        </p>
      </div>
      <div><img src="saved-photo" id="photo" width="70%"></div>
    </body>
    <script>
      var deg = 0;
      function capturePhoto() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/capture", true);
        xhr.send();
      }
      
      function RELAYON() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/RelayOn", true);
        xhr.send();
      }
      function RELAYOFF() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/RelayOff", true);
        xhr.send();
      }
      function FLASHON () {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/FlashOn", true);
        xhr.send();
      }
      function FLASHOFF() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', "/FlashOff", true);
        xhr.send();
      }
      function rotatePhoto() {
        var img = document.getElementById("photo");
        deg += 90;
        if(isOdd(deg/90)){ document.getElementById("container").className = "vert"; }
        else{ document.getElementById("container").className = "hori"; }
        img.style.transform = "rotate(" + deg + "deg)";
      }
      function isOdd(n) { return Math.abs(n % 2) == 1; }
    </script>
    </html>)rawliteral";
    //Bu kısımda kameramızı, Webserver'ımızı ve Webserverden gelen verilerin programımızda ne yapması gerektiği mevcut.
    void setup() {
      Serial.begin(115200);
      //
      pinMode(relay, OUTPUT);
      pinMode(flash, OUTPUT);
      digitalWrite(relay,LOW);
      digitalWrite(flash,LOW);
      //
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Connecting to WiFi...");
      }
      if (!SPIFFS.begin(true)) {
        Serial.println("An Error has occurred while mounting SPIFFS");
        ESP.restart();
      }
      else {
        delay(500);
        Serial.println("SPIFFS mounted successfully");
      }
      
      Serial.print("IP Address: http://");
      Serial.println(WiFi.localIP());
      
      WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
     
      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;
        config.jpeg_quality = 10;
        config.fb_count = 2;
      } else {
        config.frame_size = FRAMESIZE_SVGA;
        config.jpeg_quality = 12;
        config.fb_count = 1;
      }
      
      esp_err_t err = esp_camera_init(&config);
      if (err != ESP_OK) {
        Serial.printf("Camera init failed with error 0x%x", err);
        ESP.restart();
      }
      
      server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
        request->send_P(200, "text/html", index_html);
      });
      server.on("/capture", HTTP_GET, [](AsyncWebServerRequest * request) {
        takeNewPhoto = true;
        request->send_P(200, "text/plain", "Taking Photo");
      });
      server.on("/saved-photo", HTTP_GET, [](AsyncWebServerRequest * request) {
        request->send(SPIFFS, FILE_PHOTO, "image/jpg", false);
      });
      
      server.on("/FlashOn", HTTP_GET, [](AsyncWebServerRequest * request) {
      digitalWrite(flash, HIGH);
      Serial.print("flash on ");
      
      request->send(200, "text/plain", "Flash açıldı");
      });
      server.on("/FlashOff", HTTP_GET, [](AsyncWebServerRequest * request) {
      digitalWrite(flash, LOW);
      Serial.print("flash OFF ");
      request->send(200, "text/plain", "Flash kapatıldı");
      });
      server.on("/RelayOn", HTTP_GET, [](AsyncWebServerRequest * request) {
      digitalWrite(relay, HIGH);
      request->send(200, "text/plain", "Röle Açıldı");
      });
      server.on("/RelayOff", HTTP_GET, [](AsyncWebServerRequest * request) {
      digitalWrite(relay, LOW);
      request->send(200, "text/plain", "Röle Kapatıldı");
      });
      
      server.begin();
      
      
    }
    //Yeni bir fotoğraf çekildiğinde fotoğrafı kaydetmesini sağlayan kod
    void loop() {
      if (takeNewPhoto) {
        capturePhotoSaveSpiffs();
        takeNewPhoto = false;
      }
      delay(1);
    }
    bool checkPhoto(fs::FS &fs) {
      File f_pic = fs.open(FILE_PHOTO);
      unsigned int pic_sz = f_pic.size();
      return (pic_sz > 100);
    }
    //fotoğrafı modülümüze kaydetmemizi sağalyan fonksiyon
    void capturePhotoSaveSpiffs(void) {
      
      
      camera_fb_t * fb = NULL; 
      bool ok = 0; 
      do {
        
        Serial.println("Taking a photo...");
        fb = esp_camera_fb_get();
        if (!fb) {
          Serial.println("Camera capture failed");
          return;
        }
        
        Serial.printf("Picture file name: %s\n", FILE_PHOTO);
        File file = SPIFFS.open(FILE_PHOTO, FILE_WRITE);
        
        if (!file) {
          Serial.println("Failed to open file in writing mode");
        } else {
          file.write(fb->buf, fb->len); 
          Serial.print("The picture has been saved in ");
          Serial.print(FILE_PHOTO);
          Serial.print(" - Size: ");
          Serial.print(file.size());
          Serial.println(" bytes");
        }
        
        file.close();
        esp_camera_fb_return(fb);
        
        ok = checkPhoto(SPIFFS);
      } while (!ok);
    }

    Not

    ESP32-CAM modülüne yazılım atarken IO0 pini GND’ye bağlanmalıdır. Bu sayede modül nasıl ESP32’ye yazılım yüklerken butona basıyorsak bu modülde de IO0 pini grounda bağlanmalıdır. ( Fotoğraf 1.2 )

    ESP32-CAM modülüne nasıl yazılım yükleyebileceğimizi merak ediyorsanız ESP32-CAM ile Yemekleriniz Yanmasın yazımızı inceleyebilirsiniz. Bu blog yazısında nasıl yazılım yükleneceğine, ESP32 kütüphanesinin nasıl kurulabileceğine değinilmemiştir.

    IO0 ve GND bacakları kısa devre edilmiş ESP32-CAM modülü.
    Fotoğraf 1.2

    Sonrasında kodumuzu yüklemeye başlayabiliriz. Kodun nasıl yükleneceğine ve yüklenirken nelere dikkat edileceğine ESP32-CAM ile Yemekleriniz Yanmasın adlı blog yazımda bahsetmiştim. Kodu derleyip ESP32-CAM modülümüzün içerisine başarıyla yükleyebilirseniz Serial Monitor’de karşınıza LAN’daki IP adresi gelecektir. ( Fotoğraf 1.3 )

    Arduino IDE seri monitör ekranında yüklediğimiz kodun çıktısı
    Fotoğraf 1.3

    Ve evet. Projemizin yerel ağdaki hali hazır. Buraya kadar geldiyseniz test etmek için çıkan http linkini tarayıcına kopyalayıp WebServer üzerinden ESP32-CAM modülünün üzerindeki Flash LED’ini kontrol edebilirsiniz. ( Fotoğraf 1.4 )

    ESP32-CAM modülünün Webserver'ında oluşturduğu ve çeşitli kontrol tuşlarının olduğu site.
    Fotoğraf 1.4

    Daha sonra ESP32 ile Yerel Ağdan Genel Ağa ( LAN to WAN ) blog yazısında bahsettiğimiz gibi çıkan IP adresi Ngrok’a girip yerel ağdaki projemizi genel ağa taşıyoruz. Bu sayede gerek ofisimizde gerek evimizde 3D printerin yanında olmamıza gerek olmadan istediğimiz yerden 3D printerin fotoğrafını çekebilir, ışık olmasa bile ESP32-CAM modülü üzerindeki flash’ı yakabilir. Çektiğimiz fotoğrafları kaydedebilir, röle modülü sayesinde 3D printermizi kapatabileceğiz.

    ESP32-CAM ile Yerel Ağdan Genel Ağa ( LAN to WAN ) 📶

    Donanım Kısmı

    Bağlantı Şemaları

    Bu kısma kadar gelebilmeyi başardıysanız işin %80’ini halletmişsiniz demektir. Çünkü önemli olan ESP32-CAM modülünün pin bacaklarını kontrol edebilmemizdir. Sonrasında tek yapmamız gereken röle sürmek ve sistemi toplamaktır. Röle sürme konusunda şöyle bir problemimiz var. ESP32-CAM modülümüz pinlerinden 3.3V çıkış verebiliyor ancak süreceğimiz röle 5V olduğundan aradaki 2.7V’luk voltaj farkından dolayı röleyi açıp kapatamıyoruz. Bunun önüne geçmek için transistörlü bir sürme devresi kullanıyoruz. Transistörlü sürme devresinin ne olduğunu anlamadıysanız endişelenmenize gerek yok. Çok basit. Aşağıda tüm sistemin açıklamasında bahsedeceğiz.


    Alt yazı ( Not Gate )

    Transistörlü NOT kapısı, bir elektronik devredir. Bu devre, giriş sinyalini tersine çevirir. Örneğin, devreye “0” verirseniz, devreden “1” çıkar. Devreye “1” verirseniz, devreden “0” çıkar.

    Bu devrede, bir transistör kullanılır. Transistör, bir anahtar görevi görür. Anahtarın bir tarafına enerji verirseniz, diğer tarafından enerji akışı sağlanır. Devrenin girişindeki enerjiyi bu anahtar sayesinde tersine çeviriyoruz.

    Bu şekilde, transistörlü NOT kapısı, giriş sinyalini tersine çevirir ve bize yeni bir sinyal verir. Bu sinyali kullanarak başka cihazları kontrol edebiliriz.

    Fotoğraftan da anlaşılabileceği üzere girişten ( Input ) kısmından 5V verirsek transistör iletime geçeceği için çıkış ( Output ) transistör üstünden toprağa gider. Eğer giriş 0V olursa transistör iletime geçemeyeceği için çıkışta direk Vcc voltajı yani 5V görünür. ( Fotoğraf 1.5 )

    Transistör ve dirençlerle kurulmuş not gate ( Değil kapısı ) devresi
    Fotoğraf 1.5

    Projenin diyagramı
    Proje Şeması

    Peki neden Değil kapısı ( NOT gate ) kullandık ? Donanım kısmı başlığının ilk yazısında bahsettiğimiz gibi 5V’luk bir röleyi 3.3V ile süremiyoruz ama transistörün base kısmı 0.7V ile tetikleyerek rölenin IN pinine giren voltajı 5V ile kontrol edebiliriz. Ayrıca Röle IN pinine 0V verdiğimiz zaman anahtar kapanır iletken olur, 5V verdiğimiz zaman anahtar açılır yani yalıtkan olur. Yani ters bir anahtarmış gibi çalışır. Biz de tekrar bir değil kapısı kurarak röleyi normal bir anahtara çevirdik. Ne kadar mantıklı değil mi. Değilin değilini aldık yani. Artık IO2 pinini etkinleştirdiğimizde Röle kapanır yani iletken olur. IO2 pinini kapattığımızda da röle açılır yani yalıtkan olur. Bu sayede internet arayüzü üzerinden 3D printerlarımızı kontrol edebiliriz. Şimdi önce devreyi Breadboard’da kuralım. Daha sonrasında Pertinaks’a devreyi nasıl daha kompak kurabileceğimizi inceleyelim.

    Peki neden 5V 1-2A’lik bir adaptör kullanıyoruz ? Bilgisayarımızın USB portu projeyi çalıştıramaz mı ? Tasarladığımız sistem Güç kaynağından da anlaşılabileceği gibi tüm sistemleri devredeyken ( Flash, röle, fotoğraf çekme ) 0.4-0.5A çekiyor. Eğer kartı yeterli bir güç ile besleyemezseniz sistemin flashı titremeye başlar ve kart otomatik olara kapanır, kendisine reset atar ve sisteme yeniden bağlanır. Eğer yeterli bir kaynak ile beslemezseniz 3D printerinizi gece yarısı kontrol ederken flashı açıp fotoğraf çekerken kart bir anda kendisine reset atabilir ve eğer 3D printerinizin güç gidip geldiğinde çıktı almaya devam etmesi gibi bir özelliği yoksa çıktınız yarım kalacaktır. Ancak yeterli bir kaynak ile beslerseniz bu sorun ortadan kalkacaktır. ( Fotoğraf 1.6 )

    ESP32-CAM modülümüzün flashı, fotoğraf çekerken ve röle modülü aktifken çektiği fotoğraf.
    Fotoğraf 1.6

    BreadBoard Kurulumu

    Önce DC-DC Jack modülümüze kullanacağımız kaynaktan gücümüzü veriyoruz. Ben laboratuvar tipi bir güç kaynağı kullandım. Yukarıda da uyardığım gibi tasarımımızın voltajı 5V ve çekeceği akım maksimum 0.5A oluyor. Bu durumda harici bir adaptörle besleyecekseniz dikkat etmeniz gerekir. ( Fotoğraf 1.7 )

    DC jack modüşüne bağlı 5V'a ayarlı güç kaynağı.
    Fotoğraf 1.7

    Sonrasında DC jack’ımızı BreadBoard’ımızın artı ve eksi hattına takıyoruz. ( Fotoğraf 1.8 )

    DC jack breadboard bağlantısı ve şemadaki fotoğrafı.
    Fotoğraf 1.8

    Sonrasında Değil kapımızın bağlantılarını yapabiliriz. ( 4.7kOhm’luk direnç 5V’a bağlı ) ( Fotoğraf 1.9 )

    Not Gate ( Değil kapısı ) breadboard bağlantısı ve şemadaki fotoğrafı.
    Fotoğraf 1.9

    Daha sonra ESP32-CAM modülümüzün 5V pinini BreadBoard’ın artı hattına, GND pinini ise BreadBoard’ın eksi hattına takıyoruz. Burada dikkat etmemiz gereken en önemli şey ESP32-CAM modülünün 5V ve GND bacaklarını karıştırıp ters bağlamaktır. Bunu yaparsanız ESP32-CAM modülünüzü bozabilirsiniz. Birkaç defa kontrol ederek gerekli önleminizi alabilirsiniz. ( Fotoğraf 2.0 )

    ESP32-CAM breadboard bağlantısı ve bağlantı şeması.
    Fotoğraf 2.0

    Sonrasında 5V’luk röle modülümüzün güç bağlantılarını yapıyoruz. ( 5V→Vcc, GND→GND ) ( Fotoğraf 2.1 )

    Röle breadboard bağlantısı ve bağlantı şeması
    Fotoğraf 2.1

    Sonrasında Rölenin IN bacağını Transistörün Collectör bacağına bağlıyoruz. 1. Yeşil yol ( IN→Transistörün Collectörü ) ( Fotoğraf 2.2 )

    Not gate ( değil kapısı ) transistörünün collectör bacağının rölenin IN bacağına bağlandığı fotoğraf ve Not Gate ( değil kapısı )
    Fotoğraf 2.2

    Sonrasında ESP32-CAM modülünün IO2 numaralı pinini Transistörün base kısmına bağlı olan 220 ohm’luk dirence bağlıyoruz. ( 2.Yeşil yol ) ( Fotoğraf 2.3 )

    Not Gate ( Değil Kapısı  ) Base bacağının ESP32-CAM modüülünün IO2 pinine bağlandığını gösteren breadboard fotoğrafı ve devre şeması.
    Fotoğraf 2.3

    Son olarak transistörün Emitter bacağını BreadBoard’ımızın GND ( Toprak ) hattına bağlıyoruz. ( Siyah olan kablo ) ( Fotoğraf 2.4 )

    Not gate ( Değil kapısı ) emitter bacağının tüm sistemin GND'sine bağlı olduğunu gösteren şema.
    Fotoğraf 2.4

    Ve evet! Sistemimiz hazır. Şimdi test zamanı. Gördüğünüz gibi CAPTURE PHOTO butonuna basarsam kamera nereye bakıyorsa oranın fotoğrafını çeker. Birkaç saniye sonra REFLESH PAGE butonuna basarsam sayfa yenilenir ve çektiğimiz fotoğraf karşımıza çıkar. Fotoğraftan da anlaşılabileceği üzere röle modülü kapalı. LED’i yanmıyor. Şimdi RELAYON butonuna basıp rölemizi aktifleştirelim. Sonrasında ise tekrar rölemizin bir fotoğrafını çekelim. Sonra sayfayı yenileyip rölenin ışığının yanıp yanmadığına bakalım. ( Fotoğraf 2.5 )

    ESP32-CAM modüllünün oluşturduğu Webserver üzerinden röleyi kontrol etmek için oluşturduğumuz butonlar ile röleyi kapattığımız fotoğraf.
    Fotoğraf 2.5

    Gördüğünüz gibi rölemizi aktifleştirmeyi başardık. ( Fotoğraf 2.6 )

    ESP32-CAM modüllünün oluşturduğu Webserver üzerinden röleyi kontrol etmek için oluşturduğumuz butonlar ile röleyi açtığımız fotoğraf.
    Fotoğraf 2.6

    Şimdi sistemimizi yazının başındaki gibi Pertinaks’a nasıl aktarabiliriz onu inceleyelim.


    Pertinaks

    Tüm projenin pertinaksa önlü arkalı kurulduğunu gösteren fotoğraf.
    Fotoğraf 2.7

    Fotoğraflardan da anlaşılabileceği gibi aslında yaptığımız tek şey Breadboard üzerindeki kabloları pertinaks ile birleştirmek oldu. Ancak röle ve DC Jack modüllerinin pinlerini söküp aşağıya doğru kaydıramayabilirsiniz. Bunun yerine bu iki modülü pertinaksa yapıştırıp bir kablo yardımıyla iki modülün pinlerini de pertinaksın deliklerinden geçirebilirsiniz. ( Fotoğraf 2.7 )


    Test Edelim

    3D yazıcının test için çıktı alırken yaptığımız ESP32-CAM modülünün test için çıktıyı izlediğini gösteren fotoğraf.

    Fotoğraftan da anlaşılabileceği gibi test düzeneğimizi kurduk. Ben Pertinaksa kurduğum devremi bir Üçüncü El Mercekli Elektronik PCB-Kart Tutucuya sabitledim. Daha sonra ofiste bir mini bilgisayarda Ngrok açarak projenin LAN adresini oraya girdim. Bu sayede evimden de ofisteki kamera modülüne erişebilirdim. İlk fotoğrafımı çekerek teste başladım. ( Fotoğraf 2.8 )

    Çıktının başladığı zaman kameranın çalışıp çalışmadığını test etmek için çektiğimiz fotoğraf.
    Fotoğraf 2.8

    Sonrasında eve gittim ve biraz zaman geçmesini bekledim. Bir süre sonra röle modülü testi için röleyi kapatarak 3D printeri kapatıp evden işlemi durdurdum ve tekrar fotoğraf çektim. ( Fotoğraf 2.9 )

    Uzaktan bağlanıp 3D yazıcıyı kapattığımız ve çıktının durumunu görebildiğimiz fotoğraf.
    Fotoğraf 2.9

    Göründüğü üzere modül kapanmış, baskı durmuştu. Ertesi gün ofise geldiğimde şöyle bir görüntüyle karşılaştım. ( Fotoğraf 3.0 )

    Sabah ofise geldiğimizde 3D yazıcının fotoğrafları.
    Fotoğraf 3.0

    Testlerim sonucunda sabah sadece ESP32-CAM modülünün biraz fazla ısındığını gördüm. Bunun önüne biraz olsun geçebilmek için Rasberry Pi modüllerinin soğutucu bloklarından kullanmaya karar verdim. Bu bloğu kamera modülün altındaki ESP32 işlemcisinin metal yüzeyine yapıştırdım. Bu sayede biraz olsun koruma sağlayabilecektim. ( Fotoğraf 3.1 )

    ESP32-CAM modülünün ısınma sorununun önüne geçebilmek için Rasberry Pi soğutucusu kullandık.
    Fotoğraf 3.1

    Alüminyum Soğutucu Blok Seti – Rasberry Pi 4B Uyumlu: https://www.robo90.com/aluminyum-sogutucu-blok-seti-rasberry-pi-4b-uyumlu

    Görüldüğü üzere test başarıyla tamamlanmış. Projenin çalıştığını ispatlamıştım. Bu sayede artık aklım baskılarımda kalmayacak, elektriğim ve filamentlerim boşa gitmeyecekti.

    Bu yazımızda ESP32-CAM modülü, nesnelerin interneti, Webserver, pertinaks ile prototip tasarımı, yazılım, donanım alanları gibi bir sürü konu öğrendik. Tüm bu öğrendiğiniz bilgilerle neler yapabileceğinizi ekrandan biraz uzaklaşıp hayal edin. Geliştirebileceğiniz projeleri, CV’nize katabilecekleri artıları. Bu projeyi yaparak çevrenizdeki insanlara araştırarak, uğraşarak bir şeyleri başarabileceğinizi de ispatlayabilir, saygınlık toplayabilirsiniz. Bir sonraki yazımızda görüşmek üzere. 👋

    Share. Twitter Facebook LinkedIn Reddit Email Telegram WhatsApp
    Previous ArticleESP32-CAM ile Yerel Ağdan Genel Ağa ( LAN to WAN ) 📶
    Next Article Nokia 5110 LCD – HC-SR04 ve Arduino Radar Yapımı
    Mustafa Topal

      Benzer Yazılar

      14 Şubat İçin 14 Hediye – 3D Baskılı Sevgililer Günü Hediyeleri

      5 Mins Read0235 ViewsBy Ali Berk Ercan

      Arduino ile FM Radyo Uygulaması

      4 Mins Read0986 ViewsBy Şirzat Açıkgöz

      Transistör Nedir? Ne İşe Yarar? Nasıl Çalışır?

      4 Mins Read0800 ViewsBy Ali Berk Ercan

      Peltier İle Evinizi Kışın Isıtabilir/Yazın Serinletebilirsiniz!

      4 Mins Read0907 ViewsBy Eray Yılmaz

      Arduino ile EGGBOT Yapımı

      4 Mins Read0332 ViewsBy Baki Ateş

      Raspberry Pi Pico ile LED Yakma – Bölüm 2

      2 Mins Read0497 ViewsBy Ahmet Miraç Çıtak
      Add A Comment
      Leave A Reply Cancel Reply

      Popüler Yazılar
      Featured

      🧑‍💻 ESP32 Kullanımı – Esp32’ye Nasıl Kod Atılır?

      3 Mins Read1By Mustafa Topal
      Arduino Eğitim Serisi

      CH340 Driver Kurulumu? Nasıl İndirilir?

      4 Mins Read0By Ali Berk Ercan
      Arduino Eğitim Serisi

      Arduino ile A4988 ve Nema-17 (Step Motor) Kullanımı

      5 Mins Read1By Eray Yılmaz
      Gündem

      14 Şubat İçin 14 Hediye – 3D Baskılı Sevgililer Günü Hediyeleri

      10 Şubat 2025

      CH340 Driver Kurulumu? Nasıl İndirilir?

      22 Temmuz 2024

      Arduino ile FM Radyo Uygulaması

      19 Nisan 2024

      STM32 ile I2C Oled Ekran Kullanımı

      14 Kasım 2023
      • Facebook381
      • Twitter165
      • Instagram3.8K
      • YouTube19.2K
      İçindekiler gizle
      1. Ne Kullanmam Gerekiyor ki ?
      1.1. Not
      2. Yazılım Kısmı
      2.1. İhtiyacımız olan Kütüphaneler
      2.2. Bilmeyenler için alt yazı;
      3. Kodun Açıklamaları
      3.1. Not
      3.2. Not
      4. Donanım Kısmı
      4.1. Bağlantı Şemaları
      5. Alt yazı ( Not Gate )
      6. BreadBoard Kurulumu
      7. Pertinaks
      8. Test Edelim
      Hakkımızda
      Hakkımızda

      Robo90, 2021 yılında Ankara'da kurulmuş bir firmadır. Makerlara, mühendislere, elektronik ve teknoloji tutkunlarına kaliteli bir alışveriş deneyimi sunmayı amaçlamaktadır. Arduino, 3D yazıcı modelleri, 3D yazıcı parçaları, Raspberry Pi, sensörler, devre elemanları, elektronik kartlar, komponentler ve robotik kodlama eğitim ürünleri gibi geniş bir yelpazede kaliteli binlerce çeşit ürünü uygun fiyatlarla bulabileceğiniz güvenilir bir platform oluşturmayı ve bunu korumayı hedeflemektedir.

      E-posta: info@robo90.com
      WhatsApp: 0312 429 01 90

      Yeni Yazılar

      14 Şubat İçin 14 Hediye – 3D Baskılı Sevgililer Günü Hediyeleri

      10 Şubat 2025

      CH340 Driver Kurulumu? Nasıl İndirilir?

      22 Temmuz 2024

      Arduino ile FM Radyo Uygulaması

      19 Nisan 2024

      STM32 ile I2C Oled Ekran Kullanımı

      14 Kasım 2023
      Çok Okunanlar

      🧑‍💻 ESP32 Kullanımı – Esp32’ye Nasıl Kod Atılır?

      26 Temmuz 2023

      CH340 Driver Kurulumu? Nasıl İndirilir?

      22 Temmuz 2024

      Arduino ile A4988 ve Nema-17 (Step Motor) Kullanımı

      26 Temmuz 2023

      Creality K1 ve K1 Max 3D Yazıcı Karşılaştırması – İncelemesi

      27 Eylül 2023
      YouTube Instagram LinkedIn Discord Facebook X (Twitter) WhatsApp
      • Anasayfa
      • 3D Baskı Teklifi Alın
      • Yazılar
      • Mağaza
      • Yazar Ekibimiz
      • İletişim
      © 2025 Robo90. Tüm hakları saklıdır. Robo90 Blog.

      Type above and press Enter to search. Press Esc to cancel.