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.
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.
Ü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.
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.
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 )
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 )
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.
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.
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ınyazı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.
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 )
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 )
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.
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 )
Fotoğraf 1.5
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
Fotoğraf 2.5
Gördüğünüz gibi rölemizi aktifleştirmeyi başardık. ( Fotoğraf 2.6 )
Fotoğraf 2.6
Şimdi sistemimizi yazının başındaki gibi Pertinaks’a nasıl aktarabiliriz onu inceleyelim.
Pertinaks
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
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 )
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 )
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 )
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 )
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. 👋