Haber

3D Yazıcı Elektroniği

Bu yazıda, teknik ve detay 3D yazıcı elektroniğine değinmek istiyorum. 3D yazıcıların beyni olarak adlandırabileceğimiz elektronik bileşenler ile ilgili mümkün olduğunca detay bilgiler vermeye çalışacağım. Burada atladığım ya da daha detaylandırmamı istediğiniz konuları comment olarak yazının altından sorabilirsiniz. 3D yazıcıların kalbi olarak da extruder’ı nitelendirirsek yanlış yapmamış oluruz. Onu da bir sonraki yazıda ele alırız.

3D yazıcı elektroniğini oluşturan temel bileşenleri;

  • Arduino temelli kontrol kartı
  • Arabirim kartı (Shield)
  • Motorlar
  • Motor Sürücüleri
  • Sıcaklık Sensörleri
  • Isıtıcılar
  • Güçkaynağı
  • End Switchler
  • Firmware

olarak başlıklandırabiliriz. Bütünleşik sistemler de mevcut olmasına rağmen ben biraz sistem işleyişini de anlatabilmek ve önemli noktalara ışık tutabilmek için mümkün olduğunca dağıtık bir yapı üzerinden anlatmayı tercih ettim. Bugüne kadar bir çok kontrol kartı elektroniğini deneme fırsatım ve hatta bazılarının tasarım çalışmalarına katılma şansım oldu. Ana çalışma prensipleri ve kullanılan ekipmanlar bilinirse doğru seçim yapmak daha kolay olacaktır diye düşünerek bildiklerimi sizlerle paylaşmak istedim.

 

Arduino Temelli Kontrol Kartı

Sistemin gömülü yazılımının koştuğu kısım olarak nitelendirebiliriz. Aslında tüm kesaplamalar ve PC üzerinde koşan yazılımla haberleşmeler, Motorların sürümü için gerekli puls sinyallerinin üretimi, ısı okuma ve ısıtıcıyı PID algoritmaları ile açıp kapama, endswitchlerden gelen sinyalleri dinleme gibi tüm 3D yazıcı temel fonksiyonları bu birimde gerçekleştirilir. Temel olarak ben Arduino Mega mimarisi üzerinde durmak istiyorum. Birini seçmek zorundayım zira hepsini tek tek anlatmam mümkün olmayacak. Seçim kriterlerimi popülerlik ve benim kullanıp memnun kaldığım şeklinde iki kritere indirdim ve bu yazıda tanıttığım konfigurasyonu oluşturdum. Arduino Mega2560 zaten kendisini kanıtlamış ve bir çok başka işte de mikro işlemci kartı olarak kullanılmakta.

 

ArduinoMega2560_R3_Front

 

Dikkat etmemiz gereken burada çipin Atmel Atmega2560 olması. Firmware dediğimiz gömülü yazılımların en çok desteklediği platform da bu. Bir çok bütünleşik kartın temelinde de bu çip bulunmakta. Arduino Mega kullanmanın bir önemli artısı da bir çok EMI/EMC testlerine uygun olarak kartların dizayn edilmesi. Çinden aldığım bazı bütünleşik kartların çevresel elektro magnetik etkilerden etkilenerek USB bağlantısında kopmalar yaşadığımı tecrübe ettim. Arduino meganın birde ATmega1280 çipi üzerine bir tasarımı var onu kullanmamanızı öneririm çünkü bazı firmwareler ona kurulamıyor. Bu kart üzerine firmware kurulması ile ilgili daha detay konulara Firmware bölümünde değineceğim.

Arabirim kartı (Shield)

Arduinolar, Shield denilen ilave özellikler içeren tak çıkar kartlar ile ek özellikler kazanabiliyorlar. Arduino üzerinde I/O işlemleri için hazır bulunan soketlere takılan Shield lerin yüzlerce çeşitleri var. 3D yazıcılar için en popüler olanı Ramps 1.4 Ramps kartı 3D printer çevre birimleri ile Arduino meganın fiziksel bağlantısını yapmakta. Tam bir ara birim kartı Bu kart üzerine Pololu motor sürücüleri takılmakta. Ayrıca Ramps üzerinde power transistörler var. Bu güç transistörleri de extruder ısıtıcısının ve ısıtılmış tablanın ihtiyaç duyduğu yüksek akımları sağlamaktadırlar. Bir diğer bağlantı arayüzüde Thermistör bağlantılarıdır. Thermistörler Extruder ve ısıtılmış tablanın ısı değerlerini okumak için kullanılırlar. Bu bilgiler Arduino Mega’nın analog girişlerine aktarılır. Arduino mega da set edilmiş ısı dğerlerinde bu bileşenleri tutmak için güç transistörlerini açıp kapatarak gerekli akımları sağlarlar. Isının set edilen değerlerde kalması için yapılan hesaplamaların genel algoritması PID olarak adlandırılmaktadır. Çok teknik detay olacağından bu kısma girmiyorum.

46895

 

 

 

 

 

 

 

 

 

 

 

 

 

Motorlar

Genel olarak 3D yazıcılarda NEMA 17 büyüklüğünde step motorlar kullanılmaktadır. Step motorlar, mikro işlemci yada bilgisayar ile pozisyonları ve hızları kontrol edilebilen motorlardır. Bazı özel modeller olsada bir step motor bir turunu 200 stepde tamamlamaktadır. Yani en küçük kontorl açısı 1.8 derecedir. Bu mekanik anlamda doğru bir ifadedir. Step Motorlar mikrostep denilen sürüş teknikleri ile çok daha küçük açılarda kontrol edilebilirler. Mesela 1/16 mikrostep ile sürülen bir step motoru bir turunu 16*200 = 3200 stepte tamamlar. Yani bu şekilde sürülen motora 1 tur attırabilmek için 3200 adet puls sinyali gönderilmelidir. İşin içine hız girdiğinde birim zamanda kat edilmesi gereken mesafeler için mikro işlemcinin çok yüksek hızlarda pulslar gönderebiliyor olması gerekir. Bu hesplamaları mekanik sistemlerden bahsederken detaylandırmak istiyorum. Bir 3D yazıcının doğru çalışması ve güzel çıktı üretmesi için bu hesaplamaların doğru yapılması gerekli.

Step motorlarda dikkat edilmesi gereken bir başka husus da bipolar yada unipolar olmalarıdır. Bu motorun iç bobin yapısı ile ilgli bir konudur. Genelde motordan çıkan tel sayısı ile bu anlaşılabilir. 4 kablolu motorlar bipolar motorlardır. 5 yada 6 kablolular unipolardır. 8 kablolular ise hem bipolar hemde unipolar olarak bağlanabilirler. Motorların sürücülerinin seçilmesi sırasında motora uygun yani unipolarmı yoksa bipolarmı olduklarına dikkat etmek gerekir. Artık genelde piyasada 4 kablolu bipolar motorlar yaygındır.

 

stepper_motor

 

 

 

 

 

 

 

 

 

 

 

 

 

Motor Sürücüleri

Step motor Sürücüleri motorların ihtiyaç duyduğu yüksek akımları üreterek arduinodan gelen sinyallerle motorları sürmektedirler. Motor sürücülerin akım kontrollü ve mikrostep sürücüler olmasına dikkat edilmelidir. Sürücü üzerinde bulunan bir pot ile motora gönderilen akım ayarlanmaktadır. 3D printerlar için maksimum 2-2.5 amperlik sürücüler yeterli olmaktadır. Nema 17 motorları 1 amper civarında bir akımla sürdüğümüzde yeterli gücü alıyoruz. Motorlara gereğinden fazla akım basmak hem sürücünün hemde motorun ısınmasına neden olmaktadır. Yeni teknoloji sürücülerde ısınma durumunda kendini kapama özelliği bulunmaktadır. Yanlış akım ayarlı bir motor uzun print sürelerinde sürcünün ısınmasına ve anlık sürücünün kapanıp açılmasına neden olabilir. Böyle bir durumun çıktı kalitesine olumsuz etkide bulunacağı aşıkardır. Böylebir durumu farketmekte sonderece zor olduğundan akım yarlarının çok dikkatli yapılması önemlidir. Akım ayarının sürücü üzerindeki test noktasından motor bağlı iken multimetre ile voltajı ölçerek yapıyoruz. Akım ayarının nasıl yapıldığı ile ilgili bir video koymanın yararlı olacağını kendime not olarak alıyorum.

Motor sürücüleri konusunda Pololu gerçekten iyi bir firma tasarımları çinliler tarafından sürekli taklit edilmekte. En son çıkarılan drv8825 modelini deneme şansım oldu. 3DMetri yazıcılarında da kullandık. Gerçekten güzel bir sürücü.

0J5806.1200

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sıcaklık Sensörleri

3D yazıcı dünyasında genel olarak Thermistörler ve Thermocoupllar ısı sensörleri olarak kullanılmaktadır. İkisininde üstün ve zayıf noktaları var. Birini diğerine tercih etmek mümkün. İki sensörüde bir çok uygulamada kullanmış ve bu sensörler üzerine bazı kartlar tasarlamış biri olarak söyliyim ikisinide kullanabilirsiniz. Thermistörler daha ucuz ve kontrol elektroniğinin basit olması nedeni ile biraz daha çok tercih edilmekteler. Epcos marka 100K thermistörler size önerebileceğim ısı sensörleridir. Bu sensörler genelde extruder içinde gömülü olarak da gelmektedir. Ne tür bir sensör kullandığınızı bilmeniz gerekiyor. Çünkü bunu firmware ayarlarında konfigurasyon dosyasında belirtiyorsunuz. Yanlış bir sensör seçerseniz sıcaklığı yanlış okuyabilir ve extrudrın doğru çalışmamasına neden olabilirsiniz. Thermistörler temel olarak ısı ile direnci değişen elemenlardır. Yanlız dirençleri ısı ile lineer değişiklik göstermez bu nedenle ısı ve karşılığında elemanın direnç değeri bir tabloda tutulur. Mikro işlemci elemanın direncini ölçer ve bu tablo ile karşılaştırarak sıcaklığı bulur. Bu çalışma prensibi de bize doğru sensör ve firmware içinde doğru tanımlanmış ısı tablosunun önemini göstermektedir. Bu kaynak size çeşitli thermistörler ve ısı tabloları ile ilgili bilgileri sunmaktadır.

 

Cache-R4840127-01

 

 

 

 

 

 

 

 Isıtıcılar

3D yazıcılarda genel olarak iki yerde ısıtıcı kullanılmaktadır. Birincisi extruderın ısıtılmasında bir diğeri de ısıtılmış tablada. Her ısıtıcıya yakın birde ısı sensörü olmalıdır ki ısı ölçülüp set edilmiş değerde tutulabilsin. 3D yazıcıların gelişmesi sürecinde bir çok ıstıcı denenmiştir. Dirençler bile ısıtıcı olarak kullanılmış ve hatta halen bazı extruderlarda kullanılmaktadır. Son zamanlarda mini fişek ısıtıcılar extruderları hızla ısıttıkları için tercih edilmektedir. Eskiden 3D yazıcı malzemeleri bukadar yaygın değildi. Ben bir rezistanscıya özel olarak yaptırdığımı hatırlıyorum.

Isıtıcılarda dikkat edilmesi gereken değer omajlarıdır. Buradan ne kadar amper çekecekleri ve kaç watlık bir güç üreteceklerini bulabiliriz. Bu neden önemli söyliyim heycanla yeni bir parça basmak için yazıcının başına geçtiğinizde extruderın belirlenen sıcaklığa ulaşması için sabırsızca bekleriz. Bu sürenin kısa olması kullanıcı açısından önemli oluyor. Buda elektronik anlamda limitlerimizi bilip onları zorlamak ile mümkün olmakta. Ohm yasası bize burada yardımcı olacaktır. Voltaj = Amper x Direnç Voltajımız genel olarak 12V dur. akım olarakda 2-3 amper çekmek karta zarar vermeden basabileceğimiz akımlardır. buradan direnç değerinin 4-6 ohm arasında olması uygun olacaktır. Watt = Amper X Voltaj dersek buradan ısıtıcımızın 3×12 = 36 watt civarında olması gerekir. (Hadi 40 watt olsun) Bunun altında olması daha yavaş ısınmasına sebep olur. Bu değerin üstünde olmamasını öneririm.

 

Cartridge_Heater_A

 

 

 

 

 

 

 

 

 

 

Güçkaynağı

Genel olarak 12V switch mode güç kaynakları kullanılmaktadır. Eski bilgisayar güç kaynaklarının wattı yüksek olanlar kullanılabilir. İhtiyacımız olan akım değerini hesaplayacak olursak. 4 motorlu bir sistemde motor başına 2 amperden 8 amper motorlara 3 amper extruder ısıtıcısı için elektroniklerin beslenmesi için 2 amper desek. Toplamda tek extruder ve ısıtablası olmayan bir yazıcıda enaz 15 amperlik bir güç kaynağı kullanılmalıdır. Isı tablasını hesaba katmadım çünkü çok fazla akım çeken modelleri olabiliyor. Böyle bir durumda ısıtablasına yarı bir güç kaynağı kullanılmalıdır. Extruderında tek olduğunu varsaydım çift extruder kullanılacaksa 3 amper daha eklenmesi yerinde olur. Güzenli tarafta olmak lazım bence bulduğunuz değere en son 5 amper daha ilave edin. Çünkü sistemler ilk çalışmaya başladığında kısa bir süre hesaplanandan çok daha fazla amper çekebilirler.

 

F05950-3D-Printer-Universal-110V-220V-350W-12V-29A-AC-DC-Power-Adapter-Switch-Power-Supply

 

 

 

 

 

 

 

 

 

 

 

End Switchler

3D yazıcının ilk çalışmada kendi pozisyonunu sıfırlaması yada mekanik olarak sona geldiğinde daha fazla gitmemesi için Sonlandırma switchleri kullanılmaktadır. Aslında ilk sıfırlama switchlerine Home Switch denilmekte ve bu sıfırlama fonksiyonuna da Homing denilmektedir. G28 Gkodu ile makinanızın bu sıfrlama işlemini yapmasını sağlayabilirsiniz. Bu durumda makina firmware de belirtilen yönde switchi görene kadar ilerler. Switche bir kaç kez dakunarak 0 pozisyonunu her eksende bulur. Yazmaya başlamadan önce ilk işlem budur. End Switchler mekanik optik yada hall denen magnetik özellikte olabilir.

Getech-Mechanical-Endstop-End-stopV1-2-switch-for-3D-Printer-Reprap-Prusa-Mendel-CNC

 

 

 

 

 

 

 

 

 

 

Genel Bağlantı Şeması

750px-Rampswire14.svg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Firmware

İşte bu konu 3D yazıcıların en kapsamlı ve zor konusu. Bunun ayrı bir yazı olarak ele alınması lazım. Giriş niteliğinde olması açısından temel firmwarelara değinerek yetineceğim şimdilik. Daha öncede dediğim gibi firmware 3D yazıcının tüm foksiyonlarını kontrol eden ve kontrol kartı (Arduino Mega) çipi üzerinde koşan yazılımdır. Açık kaynak olanları ve firmaların kendilerine özgü geliştirdikleri modeller mevcuttur. Açık kaynak olan en önemli iki firmware Marlin ve Repetier dir. Bu yazılımlar zaman içerisinde baya yol katettiler. Bu yazılımların en son sürümünü indirip Arduino IDE geliştirme programı ile karta aktarabilirsiniz. Arduino kartlar ile çalışmadan önce yapılması gereken ilk işlem usb driverının kurulmasıdır. Bundan sonra işletim sistemi arduinonun bağlı olduğu Com portunu tanıyacaktır. Hem firmwareı yüklerken hem de 3D yazıcınızı kullanırken makinaya bu seri iletişim portundan bağlanmak gerekmekte. İletişim kurarken dikkatedilmesi gerek bir diğer değer de Baud Rate denilen iletişim hızıdır. Genellikle 115200 kullanılmaktadır. eski sürümlerde 9600 kullanılıyordu.

Firmware içerisinde Configuration.h denilen bir dosyada 3D yazıcı ile ilgili neredeyse bütün ayarlar yapılmaktadır. Başlangıç için bu yarların kullandığınız model için internetten hazır bulmaya çalışın. Ayarların saklandığı bir diğer yer ise çip üzerindeki EEPROM dur. Burada yapacağınız değişikliklerle 3D yazıcınızın kalibrasyonunu ve istediğiniz çalışma özelliklerini değiştirebilirsiniz. EEPROM üzerinde çalışmanın faydası firmwareı tekrar yüklemeye gerek kalmadan eprom değerini değiştirerek istediğiniz ayarı yapabilirsiniz.

firmwareı 3D yazıcıyı kontrol ettiğimiz PC üzerinde çalışan Host yazılımı ile karıştırmamamız gerekmekte. Biri kontrol kartının üzerinde diğeri bilgisayarımızda çalışıyor ve bir birleri ile haberleşiyorlar.

Umarım faydalı bir yazı olmuştur. Aklınıza takılanları bu yazının altından bana sorarsanız ilgilenen diğer insanlarında yararlanabileceği bir doküman haline gelir. Özel mesaj ve mail yerine ilgili konu altından hepbirlikte tartışabiliriz.

Bu arada sizlerden gelen güzel geri bildirimler nedeni ile hazırlıklarını sürdürdüğüm 3dprinter yapım derslerinin de müjdesini vermek isterim. Atölye ortamında birlikte bir araya gelerek bazı etkinlikler yapmayı planlıyoruz. Yakında sizleri bilgilendireceğim.

 

 

Haber

ESP8266 Geliştirme Ortamı Kurulumu 1 (Windows)

Merhaba Gnexlab okuyucuları. Bu yazıda ESP8266 için Windows üzerinde kendi yazılımlarınızı hazırlayabileceğiniz geliştirme ortamı kurulumunu anlatmaya çalışacağım. Öncelikle nereden çıktı bu ESP8266 sorusuna kısaca cevap vererek başlayalım ki neden bu kadar zahmete katlanacağımızı öğrenmiş olalım. Arduino’yu enc20j60 ile internete çıkarıp sensör verilerini göndermede yetersiz ram, yüksek maliyet, yada ufacık bir sensör bilgisi için bile en az 2 mcu ve sensörden oluşan pekte ufak olmayan sensör vericileri hazırlarken sıkıntı yaşayanlar olmuşsa (benim gibi), herşeyi tek mcu da hazırlayıp ufak boyutlarda ve uygun maliyette yapabilecekleri bir mcu üreten Espressif’e teşekkür ederek yazının devamına geçebilir 🙂

Sözü uzatmadan hemen başlayalım. Öncelikle şunu belirtmek istiyorum.ESP8266 üzerinde yazılım geliştirip kullanabilmeniz için birkaç yöntem bulunuyor.Ben birçoğunu denedikten sonra Windows ortamı için en hızlı ve işlevselliği ve birçok özelliği ile aşina olduğumuz Eclipse Ide barındıran bir geliştirme ortamından bahsedeceğim.Yazıda geçen yöntem  Mikhail Grigorev’e  ait ve isterseniz kaynakça da belirteceğim adresten orijinal sitesine de gözatabilir, ayrıca isterseniz bağışta bulunabilirsiniz.

İhtiyaçlarımız şöyle;

  1. Eclipse Ide for C/C++ , ben Windows (64 bit) sürümü kullanıyorum.32 bit te de sıkıntısız çalışıyor.Buradaki linkten indirebilirsiniz.
  2. Tabi ki Eclipse Ide için Java 8 runtime a ihtiyacımız var.Buradaki linkten indirebilirsiniz.
  3. Mingw. Buradaki linkten indirebilirsiniz.
  4. Unofficial Development Kit for Espressif ESP8266.Buradaki linkten indirebilirsiniz.
  5. Mingw için windows path ve Eclipse ilişkilendirmelerini içeren script.Buradaki linkten indirebilirsiniz.

Herşey hazırsa gelelim kuruluma. Öncelikle Java runtime kurulumunu tamamlıyoruz. (ayrıca anlatmaya gerek yok diye düşünüyorum). Sonrasında indirdiğimiz Eclipse Ide yi c: dizinimize çıkartıyoruz. Dizin şu şekilde görünmeli (“C:\eclipse”) . Daha sonra Mingw kurulumunu gerçekleştiriyoruz. Kurulumu çalıştırdığımızda karşımıza şöyle bir ekran çıkıyor.

mingw1

-Install butonuna tıklayarak devam ediyoruz.

mingw2

-Burada grafik arayüz ile kurulum isteyip istemediğimizi soruyor. Ben bu seçeneğe ihtiyaç duymadım sadece devam diyorum.

mingw3

-Bu ekran ile devam eden kurulumun bitmesini bekliyoruz. Kurulum tamamlandıktan sonra sıra “Unofficial Development Kit for Espressif ESP8266.” kurulumuna geldi. Şimdilik İngilizce olarak kurulumu gerçekleştiriyoruz.( Çevirisini yapıyorum yakında Türkçe desteği ile de kurulum yapılabilecek.) İndirdiğimiz Espressif-ESP8266-DevKit-v1.0.9-x86.exe dosyasını çalıştırıyoruz. Sadece ileri ileri diyerek kurulumu yapıyoruz zaten değiştirmemiz gereken bir seçenek ile gelmiyor kit oldukça basit. Sırada Mingw ayarları var. İndirdiğimiz “Espressif-ESP8266-DevKit-Addon.rar” dosyasını bir klasöre çıkardıktan sonra “install-mingw-package.bat” isimli dosyayı çalıştırıyoruz.(Neler dönüyor burada diye merak edenler notepad ile dosyayı açıp kontrol edebilir ). “Installing modules for MinGW completed.” uyarısını gördüğümüzde işlem tamamdır. Buradan sonra tek yapmamız gereken Eclipse Ide ye örnek projeleri import etmek. Bunun için Eclipse i açtıktan sonra soldaki Project Exlorer da sağ tıklayıp import dedikten sonra

Eclipse1

General sekmesi altındaki “existing project into workspace” seçeneğini seçip devam ediyoruz.

Eclipse2

directory bölümüne resimdeki gibi “c:\Espressif\examples” klasörünü gösterdiğimizde aşağıdaki menüye örnek projeler geliyor. Hepsini işaretleyip finish butonuna tıklayıp bitiriyoruz. Karşımıza Eclipse Ide ile birlikte hazır geliştirme ortamı geliyor.

Eclipse3

Resimde Gördüğümüz gibi Make Target sekmesi altında projemizdeki  “all” butonuna tıkladığımızda proje derlenmeye balayacak ve consolde resimdeki gibi bir çıktı oluşacak.

Eclipse4

 

Bu firmware dosyamızın hazır ve modüle yüklenebilir olduğu anlamına geliyor.Eğer Makefile içerisinde resimdeki gibi doğru usb-ttl adaptör portu seçildiyse bootloader modundaki esp8266 ımıza flash butonuna tıklayarak yükleyebiliriz. Veya önceki yazıda Nuri Bey’in de bahsettiği şekilde nodemcu Flasher ile de bu iki firmware dosyamızı yükleyebiliriz.)

Eclipse5

Bu yazımızın sonuna geldik. Umarım yararlı olur. Sonraki yazılarımda sıfırdan yeni proje oluşturma, farklı açık kaynak projeleri ekleyip derleme ve kendi çalıştığım örnek projeler ile devam etmeyi düşünüyorum. İstek olursa linux üzerinde geliştirme ortamı kurulumu ile ilgili de bir makale de hazırlayabilirim. Ayrıca şunu da belirtmek istiyorum, Nuri Bey’in bu yazıda bahsettiği Nodemcu açık kaynak geliştirilen bir proje.İlgili olanlar kodlara gözatıp geliştirmeye yardımcı olabilirler. esp8266 ile standalone çalıştırdığım birkaç örnek ile sonlanrıdayım yazıyı. Ayrıca soru yada öneride bulunmak isteyenler için iletişim bilgilerimi de paylaşıyorum. Ayrıca youtube üzerinde paylaştığım birkaç video da var.

 

Mehmet Bozkurt

bilgi@mbozkurt.com

Esp8266+hc-sr04+nokia5110 lcd(pcd8544)

IMG_6659

ESP8266 standalone web server ve tcp-to uart bridge (tamamen web tarayıcı üzerinden modülde çeşitli ayarlar yapılabiliyor.) (Sunucu kısmı açık kaynak gelişen bir proje ve html kısımda tasarımı bootstrap,css,javascript kullanarak hazırladım).

espBootstrap

Kaynakça:

1- www.http://programs74.ru/udkew-en.html

2- http://www.esp8266.com/viewtopic.php?f=9&t=820

3- https://github.com/nodemcu/nodemcu-firmware

 

Haber

ESP8266, Lua ve Cep Telefonu

Ve evet beklenen gerçekleşti ve ESP8266 çipi için herkesin kullanabileceği bir yazılım arayüzü ve programlama dili kullanıcılara sunuldu. SDK gerçi daha önce çipin üreticisi olan Espressif Systems tarafından yayımlanmıştı ama çok da kullanılabilir değildi. Peter Jennings Lua script dilini kullanabilen bir firmware geliştirerek ESP8266 çipini bir kaç basamak yukarıya taşımayı başardı. İlk denemelerimde gayet kararlı ve güzel bir ortamın geliştiricilere sunulduğunu söylemek isterim. Bu IoT çalışmalarında oldukça kullanılacak bir çözüm olacağa benziyor. Daha önce Arduino kullanarak yaptığım örneği bu sefer başka hiç bir işlemci kullanmadan Lua ile ESP8266 üzerinde geliştireceğim. Sadece 5 dolarlık bir çip ile güzel bir IoT örneği yapmış olacağız. Çep telefonuna bir buttona basıldığında uyarı göndereceğiz.

Öneclikle Lua script dilini kullanabilmeniz için ESP8266 çipinin firmware’ini değiştirmemiz gerekiyor. Muhtemelen aldığınızda ESP8266 At komutlarını işleyen bir firmware ile gelecektir. ESP8266 firmware’ini yeniden yüklemek için nodemcu-flasher programına ihtiyacınız olacak. Bu programı işletim sisteminize göre aşağıdaki linklerden indirebilirsiniz.

ESP8266Flasher.exe for Win32

ESP8266Flasher.exe for Win64

ESP8266 çipine yeni Firmware yüklemek için dikkate edilmesi gereken bir husus daha var. Çipin GPIO0 bacağını GND ye çekmeniz gerekmekte. Çipile seri iletişim kurmak için daha önceki yazılarımda da belirttiğim 3.3v USB UART çeviriciyi kullanıyoruz. işte bağlantı resmi;

 

esp8266-reflash-firmware

 

Sarı yazı ilede belirtildiği gibi çipin GPIO0 pacağını GND ye sadece firmware atarken bağlıyoruz. Normal kullanımda GND ye çekmiyoruz.

Ortam ve devre bağlantısı hazır olduğuna göre ESP8266 Lua anlar hale getirebiliriz. USB UART çeviricinizi bilgisayara tanıtmışsanız bağladığınızda bir Com port oluştuğunu göreceksiniz. modencu-flasher programını açıp bu komportu seçin ve Flash(F) düğmesine basın

687474703a2f2f693635392e70686f746f6275636b65742e636f6d2f616c62756d732f75753331362f766f77737461722f4e6f64654d43552d466c61736865722d426567696e2e706e67

 

 

 

 

 

 

 

 

 

 

 

Flash yüklemesi tamamlandığında ESP8266 ile bağlantı kurmak için LuaLoader.zip programını yükleyin. Artık GPIO0 GND ye bağlı olmayacak.

LuaLoader programının görüntüsü aşağıdaki gibi

 

LuaLoader

 

 

Bu program çipile oynamanız için çok güzel bir araç. Tüm detaylarını anlatmıyorum. Vakit ayırıp kurcalayın derim.

Çok kabaca çipin GPIO2 bacağını input yapmak ve oradaki akımı okumak için aşağıdaki komutları kullanıyoruz.

gpio.mode(4,gpio.INPUT,gpio.FLOAT)

gpio.read(4)

(GPIO2 için 4 kullanıyoruz. Pinlerin isimleri ve Lua da kullanılan rakamlar tutmuyor. Maping çizelgesi burada var)

Yada aynı pini Output olarak kullanmak istersek

gpio.mode(4,gpio.OUTPUT) 

gpio.write(4,gpio.HIGH)  -- GPIO2 3.3v oldu
gpio.write(4,gpio.LOW)  -- GPIO2 0v oldu

 

 

Şimdi daha önceki yazımızda yaptığımız Cep telefonuna Push Notification yollama örneğini yapalım;

http://www.prowlapp.com/ sitesine uye olup bir API Key olusturuyorsunuz. IOS uygulamasını cep telefonunuza kuruyorsunuz.

Daha sonra aşağıdaki iki dosyayı bilgisayarınıza lua uzantısı ile kopyalayın. init.lua ESP8266 ilk olarak enerjilendirildiğinde otomatik olarak çalışır. Daha sonra init.lua dosyasındaki kod bir timer’ı her 4sn de bir ateşliyor. Bu ateşleme diğer dosyanın (interupt.lua) çalıştırılmasını sağlıyor.

init.lua

wifi.sta.autoconnect(1)
print("gnexlab")
gpio.mode(4,gpio.INPUT,gpio.FLOAT)
tmr.alarm(0,6000,1,function() dofile("interupt.lua") end)

 

interupt.lua 

function push(level)
conn = nil
conn = net.createConnection(net.TCP, 0)

conn:on("receive", function(conn, payload)
success = true
print(payload)
end)
conn:on("connection", function(conn, payload)
print('\nConnected')
conn:send("GET /publicapi/add?apikey=7b0fcbc142b12c30f474c4a5c8258b6e3d9f51ad&application=ESP8266&event=Button+pressed&priority=0 HTTP/1.1\r\n"
.."Host: prowl.weks.net\r\n"
.."Accept: */*\r\n"
.."User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
.."\r\n")
end)

-- when disconnected, let it be known
conn:on("disconnection", function(conn, payload) print('\nDisconnected') end)

conn:connect(80,'209.20.89.148')

tmr.delay(500000)

end

if gpio.read(4) == 0 then push(0) end

Bu iki dosyayı lua uzantılı olarak text dosyası formatında bilgisayarınıza yazdıktan sonra LuaLoader programındaki UploadFile buttonuna basarak bu iki dosayayı ESP8266 ya yükleyin.

Gelelim doanıma

esp8266_lua1_bb

 

 

Devreyi bu şekilde yapın ve çalıstırın Butona bastığınızda Cep telefonuna mesaj geldıgını göreceksiniz.

Uygulama alanları ile ilgili fikirlerinizi bekliyorum. En basitinden kapıya bağlayıp bir readröle kullanıp açıldığında cep telefonuna mesaj gelmesini sağlayabilirsiniz.

Bir çok sensör bağlamak mümkün. Iot Serüvenlerimiz Gnexlab da devam edecek.

 

 

Kaynaklar

Haber

Wifi CNC

3D yazıcıların yaygınlaşması ve ihtiyaç duyduğumuz parçaları evimizde üretip projemizde kullanmamız bize inovasyon anlamında çok büyük bir ivme kazandırıyor. Benim dikkat çekmek istediğim konu aslında 10 senedir kullandığım masa üstü CNC makinamın da yıllardır bana bu kapsamda hizmet ettiği. Aklıma gelen projelerde ihtiyaç duyguğum parçaları pleksi, ahşap, aluminyumdan üretip bir çok yerde kullandım. PCB kazıdım. Ama şimdi düşünüyorumda bu makinaya gerektiği saygıyı göstermemişim. 3D yazıcı atölyeme gelip bütün ilgiyi üzerine toplayınca yan tarafta boynu bükük duran masa üstü emektar CNC’me yeni bir boyut kazandırmak istedim. Bunu bence çoktan hak etti. İhtiyacım olan bir parçayı bilgisayarda tasarlayıp saatler içinde elime almamın rahatlığını ve güzelliğini bana 3D yazıcım tattırmış olabilir ama aslında masaüstü CNC’im de bana ostim esnafını tek bir parça üretmeye ikna etmek için döktüğüm alın teri ve paraları yıllardır tasarruf ettiriyor.

Hepimizin ortak sıkıntısı az adetli üretim yaptırmak değil mi? Aklımıza gelen bir fikri olup olmayacağından emin değilken para harcayamadığımız için gerçekleştirememenin acısı tüm tasarımcıların içini acıtıyor.

Artık yeni bir çağda yeni olanaklarla donatılıyoruz. Eski emektar makinalarımızın çağı yakalamasına yardım etmeliyiz. Bir fikri, bir prototipi evimizde üretebileceğimiz tüm makinalara odaklanıyor ve gnexlab olarak çalışmalarımızı bu yöne çeviriyoruz. Daha bir çok makina ortaya çıkacak ve tasarımlar insan aklından hayata artık çok daha kolay geçiş yapacak.

Neyse bu konuda çok heyecanlı olduğumdan asıl bu yazının konusu olan masa üstü Wifi CNC konusuna geri dönmekte zorlanıyorum.

Kendi ihtiyacımdan yola çıkarak gerçekleştirdiğim bu proje hepinizin işine yarayacaktır diye düşünüyorum. Yıllardır bir çok projede gnexlab tasarımı PanterA ve Jaguar step motor sürücü kartları ülkemizde ve yurtdışında kullanılıyor. Bu kartlar üzerindeki paralel port girişi ile PC bağlantısı sağlanıyor ve en popüler CNC kontrol yazılımı olan Mach3 ile kolaylıkla kullanılabiliyorlar. Bu çözüm daha yıllarca kullanılacaktır ama yeni PC ve diz üstü bilgisayarlarda artık paralel port çıkışı yok. (Ek PCI kartlarla bunu sağlamak mümkün) Bu nedenle CNC kontrol kartları genelde artık USB portunu kullanıyorlar. Ben olayı bir kaç adım daha ileriye götürmek ve USB yerine Wifi kullanmak hatta bununla da yetinmeyip herhangi bir CNC yazılımını bilgisayarınıza kurmaya gerek kalmadan bir web sitesine bağlanarak CNC mi kontrol etmek istiyorum. Not olarak belirteyim; Bu yazıda tanıtacağım teknolojiler yeni gnexlab ürünlerinin de habercisi aslında.

Sistem birkaç bileşenden oluşuyor.

gnexlab_wifi_cnc

 

Burada üzerinde Linux işletim sistemi olan bir Raspberry Pi bilgisayarı wifi arabirimi olarak kullanıyoruz. Bu donanım üzerinde birde Web sitesinden çalışan CNC programı ile iletişim kuran bir Json usb server yazılımı var. Web sitesindeki CNC yazılımı komutları Json formatlı olarak ev networkü üzerinden bu servera gönderiyor. Bu serverda Json formatlı komutları USB üzerinden Arduino Due ye aktarıyor. Arduino Due üzerinde TinyG denen 6 eksen harket kontrol firmware’ı var gelen usb komutlarını ve gcodeları iliyor ve motor sürücüsü için gerekli olan interpolasyonlu Step ve Dir sinyallerine çeviriyor. Motor Sürücümüz Pantera. Bu sinyalleri güçlendirerek motorlara gereken akımı basıyor. Karışık bir sistem olsada gerçekten harika işliyor. Değişik teknolojileri birer tuğla olarak düşünüp bu şekilde birleştirmemiz de bizim katma değerimiz.

Tinyg firmare’i nin özel bir sürmünü Mac bilgisayrımızda xcode bullanarak derledik ve daha sonra Arduino due üzerindeki çipe yazdık. Bu noktada wifi kullanmak istemez seniz aslında elinizde bir USB CNC hareket kontrol kartı var. Binlerce liraya satılan çin malı ürünlerden çok daha performanslı olduğunu düşünüyoruz.

Tüm bunları ortalama bir kullanıcının yapması çok zor görünüyor. Bu nedenle Bu tuğla bileşenlerini bir birine kolay bağlanıp çıkarılacak ve ihtiyacınıza göre ekleyip çıkarabileceğiniz bir ürün yelpazesine dönüştürmek istiyoruz. Harket kontrol neredeyse ilgilendiğimiz tüm makinalarda var. Bu sistemi yüksek kalitede çözmemiz birinci hedefimiz.

Bu donanım yukarıdaki gibi birleştirilip gerekli yazılımlar yüklendikten sonra wifi ev networküne bağlanacak şekilde ayarlanıyor. Bundan sonrası en zevkli olanı. Chilipaper adında web sayfasından çalışan bir CNC kontrol yazılımı var. Nedenini bir türlü bulamadığımız bir sebebpten bu siteye Türkiye’den ulaşılamıyor. Geliştiricisi ile iletişime girdim ve Sadece ABD ye mi açık diye sordum. Hiç bir kısıtlama yok tüm dünyaya açık dedi. Bizim Ülkeden neden se bağlanılamıyor. Bunu da kendi serverlarımız üzerine kuracağımız bir proxy ile yönlendirip Türkiyeden ulaşılabilir hale getireceğiz.

Chilipaper; Web browser üzerinden çalışıyor ve aslında kendi istekleriniz için özelleştirilebiliyor. Javascript uzmanı bazı arkadaşlarla çalışmaktan memnun oluruz. Belki farklı amaçlarla kullanılacak şekle çevirerek bir uzaktan kontrol ve otomasyon sayfası yapabiliriz.

Beni heycanlandıran hiç bir yazılımı bilgisayarınıza kurmuyorsunuz. İnternete bağlanıp bir sayfaya giriyorsunuz ve evinizdeki masaüstü CNC ninizi kontrol ediyorsunuz. Adam yeni bir özellik eklediğinde program hep en güncel hali ile karşınıza çıkıyor. Yeni versişyonu bilgisayarınıza install etmek gibi bir derdiniz olmuyor. Bu hizmetin yakında paralı olabileceğini düşünüyorum. Sağlam bir yazılım ekibi ile bizde kendi serverlarımızda buna benzer hizmetler vermeliyiz.

chilipaper

 

 

Gördünüz gibi CNC’niz başka bir lokasyonda da olabilir bir Web kamerası ile görüntülüyebiliyorsunuz.

Bir çok teknoloji hakkında bilgi sahibi olmak ve bu teknolojileri bir probleminizi çözmek için kullanmak. Yapmamız gereken işte bu.

Haber

ESP8266 ile Cep Telefonuna Uyari Göndermek

Gnexlab’da ilk IoT uygulamalrımızı SparkCore ile yapmıştık. Geçekten başarılı bir modül. Photon kod ismi ile bir de 19 Dolarlık bir ürün tanıttılar. Eminim çok kişi tarafından bir çok IoT projesinde kullanılacaktır. Ama sizlerin bu modülü halen pahalı bulacağınızı düşünüyorum. Çinli üreticilerin çıkardığı ESP8266 giderek ünleniyor. Bizde bir kaç tanıtıcı yazı yazmıştık. Bu yazılardan sonra modül üzerinde bir çok denemeler ve hazır kütüphaneler kullandık. Bu yazıda da sizlerle SparkCore ile daha önce burada paylaştığımız örneği bir de ESP8266 ile tekrarlayalım istedik.

Yapmak istediğimiz bir anahtar tetiklendiğinde Cep telefonumuza bir uyarı gelmesi. SMS yada başka yollarda olabilir ama biz Push Notification denilen bir uyarı sistemini kullanacağız. Bu uyarıyı cep telefonumuza alabilmek için yüklememiz gereken uygulama Prowl. Prowl’u iphone app store dan satın alıyoruz fiyatı 2.99 Dolar :( Çok büyük ihtimalle Android olanıda vardır. Bilenler varsa bu yazıya yorumda bulunarak diğer kullanıcıları bilgilendirebilir. Push Notification’ı IoT cihazları ile gönderebilmek için birde aracı bir hizmet kullanmamız gerekli. Bu hizmeti PushingBox veriyor. Üye olup My Services den bir prowl servisi yaratıyoruz. Prowl api anahtarımızı bu servise tanıtıyoruz. Bundan sonra yine Pushingbox da bir senaryo yaratıyoruz. Gerekli bilgileri girip bu senaryo ya action olarak tanımladığımız Prowl servisini ekliyoruz. Dilerseniz başka servislerde ekleyebilirsiniz. Olay olduğunda hem eposta alabilir hem de bir tween yayımlayabilirsiniz. Birden fazla servis aktive edilebilir.

Bu yazıda ınput sinyali için basit bir switch kullandık. Aslında ucuz PIR sensörleri ile bu çalışmayı yapmak daha anlamlı olurdu. Elimde olmadığı için bu PIR sensörünü kullanamıyorum. Çok uygun fiyatlı bu sensörlerden edinmek istiyorum.

ESP8266’nın bu denli ucuz fiyata piyasaya çıkması sensörleri yakındaki belirli bir merkezle (Network HUB) haberleşirmek yerine doğrudan Clould ile haberleştirmeyi sağlamaya yöneliyor beni. Buda Cloudun önemini artırıyor. Gnexlab üyelerinin IoT çalışmalarını deneyip test etmeleri ve daha sonrada ürün olarak bir çalışma yapılırsa bu ürünün yönetimi için çalışabilecek bir IoT cloud çalışmasına başladık. Henüz duyurmak için erken ama size şimdiden müjdesini vermiş olayım. Node Js temelli çok sağlam bir Cloud server Amsterdam serverlarında test faaliyetlerine başladı. Belli olmaz ilk IoT ürünü ile yakında açıklarız.

Bu çalışmaya geri dönecek olursak. ESP8266 yı AT komutları ile herhangi bir kütüphane kullanmadan PushigBox apilerini HTTP 1.1 protokolü üzerinden dürtüklüyoruz.

Hardaware’den bahsetmek gerekirse;

Mikro işlemci kartı olarak Arduino Mega kullandım. Hem Seri Mönütöre Debug mesajları göndermek hemde ESP8266’ya AT komutlarını göndermek için iki seri iletişim elimizin altında diye. Bu donanım aslında Reha Beyin söylemi ile overkill. Hep elimdekileri hazırdakileri kullanmak yönünde bir çabam olduğundan test amaçlı bence uygun bir setup oldu. Bildiğiniz gibi ESP8266 3volt. Arduino ise 5v. Bu yüzden arada bir voltaj converter kullandım. Internette ESP8266 ya direkt 5v arduinoyu bağlayan arkadaşlar var biliyorum ama bir elektronikçi bu yazıyı okuyup da bizi ayıplamasın diye ben devreyi olması gerektiği gibi kurdum. Sparkfun üretimi Logic Level Converter ile ilgili bilgiyi buradan bulabilirsiniz.

Devrenin Fritzing çizimi aşağıdaki gibi.

 

esp8266_bb

photo (16)

 

Breadboardun aşağıdaki voltaj hattı 3.3v. Yukarıdaki voltaj hattıda 5v. Logic Level Converterın yüksek voltaj kısmını 5volt ile düşük voltaj kısmını da 3.3volt ile besliyoruz. İnternet üzerinde direnç ve diyotlarla yapılmış basit voltaj düzenleyiciler de mevcut.

 

 

 

 

Devremizin gerçek görünümü bu kadar anlaşılır olmuyor tabi biraz daha karmaşık görünsede fritzing ile bağlantılar bire bir aynı.

 

 

 

 

 

 

 

 

 

 

Gelelim Yazılıma;

Yazılım bir kere switch’e basıldığında tek bir push notification yollayacak şekilde ayarlanmış durumda. Bunu koddan basitce değiştirebileceğinizi düşünüyorum. Aşağıda Arduino kodunu görebilirsiniz.

 

 

#define SSID "Sizin wifi acess point isminiz" //name of wireless access point to connect to
#define PASS "Sizin wifi şifreniz" //wifi password
#define DST_IP "213.186.33.19" // IP of api.pushingbox.com maybe it changes, so take DST_HOST
#define DST_HOST "api.pushingbox.com"

#define LED 13
#define buttonPin 2

int buttonState = 0;

String sMessage_1 = "v47699E76AEDB1CE";
//String sMessage_2 = "vsfdkjfkjsdhfkdsjfh";
//String sMessage_3 = "sdkfhshfkdshfksdas";

void setup() //initialise device & connect to access point in setup
{
pinMode(LED,OUTPUT);
pinMode(buttonPin, INPUT);
//softwarereset();
reset();

Serial1.begin(115200); // hardware serial connects to esp8266 module
Serial.begin(115200); // usb serial connects to to pc
delay(4000); //wait for usb serial enumeration on 'Serial' & device startup

boolean wifi_connected=false; //not connected yet...
for(int i=0;i<5;i++) //attempt 5 times to connect to wifi - this is a good idea
{
if(connectWiFi()) //are we connected?
{
wifi_connected = true; //yes
break; //get outta here!
}
}
if (!wifi_connected) hang("wifi not connected"); //these seem ok - never had a problem
delay(250);
if(!cipmux0()) hang("cipmux0 failed");
delay(250);
if(!cipmode0()) hang("cipmode0 failed");
delay(250);
}

void loop()
{
buttonState = digitalRead(buttonPin);

// !!!! ONLY TESTING OF METHOD TO PUSH THE MESSAGES TO MY PHONE :-)
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(LED, HIGH);
sendToPushingBox(sMessage_1);
delay(1000);
// while(1);
}
else {
// turn LED off:
digitalWrite(LED, LOW);
}

//delay(1000);
//sendToPushingBox(sMessage_2);
//delay(1000);
//sendToPushingBox(sMessage_3);

}
//------------------------------------------------------------------------------------
void sendToPushingBox(String devid)
{
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_HOST;
cmd += "\",80";

Serial1.println(cmd); //send command to device

delay(2000); //wait a little while for 'Linked' response - this makes a difference

cmd = "GET /pushingbox?devid=";
cmd += devid;
cmd += " HTTP/1.1\r\n"; //construct http GET request
cmd += "Host: api.pushingbox.com\r\n\r\n";
Serial1.print("AT+CIPSEND=");
Serial1.println(cmd.length()); //esp8266 needs to know message length of incoming message - .length provides this

if(Serial1.find(">")) //prompt offered by esp8266
{
Serial1.println(cmd); //this is our http GET request
}
else
{
Serial1.println("AT+CIPCLOSE"); //doesn't seem to work here?
Serial.println("No '>' prompt received after AT+CPISEND");
}

Serial1.println("AT+CIPCLOSE");
}

boolean connectWiFi()
{
String cmd="AT+CWJAP=\""; //form eg: AT+CWJAP="dynamode","55555555555555555555555555"
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
Serial1.println(cmd);
delay(5000); //give it time - my access point can be very slow sometimes
if(Serial1.find("OK")) //healthy response
{
Serial.println("Connected to WiFi...");
return true;
}
else
{
Serial.println("Not connected to WiFi.");
return false;
}
}
//--------------------------------------------------------------------------------
//ditch this in favour of hardware reset. Done
boolean softwarereset()
{
Serial1.println("AT+RST");
if (Serial1.find("ready"))
{
return true;
}
else
{
return false;
}
}
//--------------------------------------------------------------------------------
void reset()
{
Serial1.println("AT+RST");
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
}
//------------------------------------------------------------------------------
boolean cwmode3()
// Odd one. CWMODE=3 means configure the device as access point & station. This function can't fail?

{
Serial1.println("AT+CWMODE=3");
if (Serial1.find("no change")) //only works if CWMODE was 3 previously
{
return true;
}
else
{
return false;
}
}
//----------------------------------------------------------------------------------
boolean cipmux0()
{
Serial1.println("AT+CIPMUX=0");
if (Serial1.find("OK"))
{
return true;
}
else
{
return false;
}
}
//-----------------------------------------------------------------------
boolean cipmode0()
{
Serial1.println("AT+CIPMODE=0");
if (Serial1.find("OK"))
{
return true;
}
else
{
return false;
}
}
//------------------------------------------------------------------------
void hang(String error_String) //for debugging
{
Serial.print("Halted... ");
Serial.println(error_String);
while(1)
{
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
delay(100);
}
}
//----------------------------------------------------------------------------
void hangreset (String error_String) //for debugging
{
Serial.print(error_String);
Serial.println(" - resetting");
reset();
}

 

Umarım bu projeyi kolayca uygulayabileceğiniz kadar besit anlatabilmişimdir. Sorularınızı yorum olarak bu sayfaya gönderebilirsiniz. Mümkün olduğunca hepsini yanıtlamaya çalışacağım.

Bitirş video ile olsunda çalıştığına inanın 🙂

 

 
 
Teknoloji dolu günler