20 Nisan 2018 Cuma

P10 Led Panel ile Real Time Clock Olmadan Gerçek Saat Uygulaması

P10 Led Panel ile Real Time Clock olmadan gerçek saat uygulaması ve bunun yanı sıra ek bazı uygulamalar:

Ofisten bir arkadaşımızın 15 yaşındaki yeğeni haylaz Efe için ufak bir eğlencelik uygulama yapmak istedim.
Efe'nin yaşı küçük ve bu tür işlere de çok meraklı olmadığını düşünerek Visual Studio 2015 Community Edition ile ufak bir C# uygulaması yapmanın daha uygun olacağını düşündüm.

EfeLedPanel isimli bu ufak uygulamanın arayüzü aşağıdaki şekilde. Bu mini uygulama ile arayüzden yapılan seçimlere göre otomatik olarak arka tarafta arduino'nun anlayacağı Ansi C kodlarını oluışturup efeledpanel.ino adında bir arduino proje dosyası oluşturuyoruz. Standart arduino ide kurulumunun komut satırı özelliklerini kullarak ta oluşturduğumuz bu arduino projesini derliyor ve ardından da arduino içine gönderiyoruz.



Aslında konumuz bu proje değil. Bu ufak C# projesi içindeki seçeneklerin en altındaki RTC olmadan saat uygulaması adıyla belirttiğimiz seçeneğin yaptığı işlem. (RTC'nin açılımı bildiğiniz gibi Real Time Clock. Yani Gerçek Zaman Saati. sanırım bunun meali her şartta zaman şaşmadan devam eder anlamında olmalı)

Normal şartlar altında bütün elektronik saatlerde bir pil bağlantısı bulunur:

  • Evinizde kullandığınız desktop bilgisayarınızın içinde bilgisayarınız kapalıyken veya enerji fişi takılı değilken zaman kavramını unutmaması için içindeki RTC devresini besleyen ufak bir pil vardır.
  • Aynı şekilde kullandığınız notebook, laptop, tablet, cep telefonu gibi cihazlarda da kendi ana bataryasının haricinde içinde ilaveten ufacık bir pil (PC, Laptop gibi bilgisayarlarda CR2032 gibi bir pil bağlantısı bulunur. Diğer cihazlarda ise cihazın boyutuna göre bu veya daha küçük bir "düğme pil" denilen ufak pillerden) bulunur.
  • Haricen gördüğünüz duvara asılan, devasa reklam tabelalarında vb. yerlerde kullanılan saat uygulamalarında da aynı şekilde enerji kesilmesi durumunda içindeki ufak RTC devresini besleyerek içindeki saatin ilerlemesini sağlayan bir düğme pil vardır.
Bu bahsettiğimiz pil bulunmazsa ne olur? ilk elektrik kesintisinde saati olan o cihazın saati sıfırlanır. Doğru, güncel saati göstermez hale gelir. Örneğin evde kullandığımız fırının bir saati var. Her elektrik kesintisinde 00:00 şeklinde yanıp sönmeye başlar. Sebebi fırının içindeki saat devresinde muhtemelen maliyeti ucuzlatmak için bir RTC devresi olmaması. (aslında çok ta meşhur bir marka ama sanırım hepsi aynı şeyi yapıyor) :)

Biz de Arduino ile RTC devresi olmadan ve ilave bir pil, batarya desteği olmadan saat nasıl yapabiliriz dersek, onun cevabı da aslında verdiğim son fırın örneğindeki gibi olur. Enerji varken çalışır, enerji kesildiğinde sıfırlanır. Bunun zaten teknik olarak başka bir işleyişi yok. :)

Bizim uygulamamızda arduino PC'ye takılı iken RTC olmadan saat uygulaması seçeneği seçiliyken Metni Panele Gönder butonuna basarak (bu butonun ismi Arduino'ya Gönder olsa daha uygun olacakmış aslında) bilgisayarımızda o andaki aktif saat dakika ve saniye bilgisini alıp o anda otomatik olarak oluşturduğumuz arduino kodunun içine başlangıç saati olarak yazıyoruz.

Oluşturduğumuz bu arduino kodunu Arduino IDE'nin commandline kullanımı ile derleyip arduino içine gönderiyoruz. o andan itibaren arduino cihazımızı çalışmasını istediğimiz yere götürüp enerji verdiğimiz anda set ettiğimiz güncel saatten başlayarak çalışacaktır. Eğer enerjisini hiç kesmezsek yıllarca bu şekilde çalışmaya devam edebilir. Ancak bir şekilde enerjisini kesip tekrar verirsek ilk set ettiğimiz saate geri döner. Enerjisini kesip yeniden vermemiz gereken durumlarda arduino cihazımızı bilgisayarımıza bağlayıp C# programımız ile arduino içindeki başlangıç saatini güncellememiz gerekecektir.

İşleyişimiz nasıl? Tahmin ettiğiniz gibi: arduino'nun loop döngüsü içinde saniye bazlı tuttuğumuz bir zaman sayacını sürekli olarak arttırıp P10 Led panellere basacağımız noktada yeniden saat dakika saniye cinsine cevirip 0 ile padding yaptıktan sonra panele gönderiyoruz. Her loop sonunda da 1000 milisaniyelik bir bekleme ile işleyişin saat kavramına uygun şekilde ilerlemesini sağlamış oluyoruz.

Tam bu noktada ufak bir kalibrasyon ayarı yapmak gerekebilir diye bir not düşmemde fayda olacaktır. Zira loop döngüsünün içindeki kodun işlediği süreyi en sona koyduğumuz 1000 milisaniyelik beklemeden çıkarmak saatimizin geri kalmasını önleyecektir.

Bu yazıda bahsettiğimiz şeylerin hepsini şu linkteki C# kodumuzda bulabilirsiniz:
EfeLedPanel_Arduino_Kodunu_Hazirlayan_C#_Uygulamasi.rar

18 Nisan 2018 Çarşamba

Microsoft SQL Server'da 3417 Hatasını Düzeltmek

Elektrik kesintisi, database migration, fiziksel sunucu taşınması vs. gibi bir çok sebepten kaynaklı olarak sorunsuz çalışan Microsoft SQL Server servisiniz 3417 hatası vererek artık çalışmaz duruma geldiyse bu kısa yazıya bir göz atmanızda fayda var.

Hizmetler'den SQL SERVER hizmetini başlatmak istediğinizde 3417 hatasını alıyorsanız sorunu giderip hizmeti başlatmak için birkaç farklı yöntem var. Tabi bunlar biraz da hatanın sebebiyle ilişkili sayılır:


  1. DATA klasorünüz veya *.mdf dosyanızın işletim sistemi özelliklerini kontrol edin. Eğer işletim sistemi tarafından sıkıştırılmış olarak çalışıyor ise bu özelliği işaretleyen çeki kaldırdıktan sonra Sql Server hizmetini başlatmayı tekrar deneyin.
  2. DATA klasörünüz ve/veya altındaki *.mdf uzantılı fiziksel veritabanı dosyalarınızın yetkileri bozulmuş olabilir. Klasör ve/veya dosyaların özelliklerinden Güvenlik sekmesine gelerek NETWORK SERVICE kullanıcısına tam erişim yetkisi verin. Gerekiyorsa bu klasör üzerindeki, farklı kullanıcı hesaplarının erişim kısıtlarını da kaldırın ve Sql Server hizmetini başlatmayı tekrar deneyin.
  3. En nadir görünen bu üçüncü ihtimal master.mdf dosyanızın bozulmuş olma ihtimali. Bunun da çözümü var. Klasör yapısı kullanılan veritabanı versiyonuna göre farklılık gösterse de çözüm yöntemi aynı şekilde olacaktır. Örneğimizdeki veritabanında şu klasörü buluyoruz: C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Template Data bu klasör içindeki master.mdf ve mastlog.ldf dosyalarını alıp kendi DATA klasörümüze (ki o da örneğimize göre şurada olur: C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA ) kopyalıyoruz. (servisin çalışmadığını varsayarak, bu işlemden önce servisi kapatın demiyorum) Daha sonra Sql Server hizmetimizi başlatıyoruz. Sistemin çalışmaya başladığını göreceksiniz fakat içinde eski veritabanlarınızı göremeyeceksiniz. Onları da fiziksel *.mdf dosyalarını tek tek attach ederek çalışır hale getirebilirsiniz.
  4. DATA klasörünüzdeki fiziksel *.mdf dosyalarınızı yedekleyip Sql Server'ı uninstall edip akabinde tekrar kurduktan sonra yedeklediğiniz *.mdf dosyalarınızı yeni DATA klasörüne servisi durdurduktan sonra atıyoruz, servisi başlatıp hepsini tek tek attach ediyoruz.

SqlCmd -E -S SERVER -Q "BACKUP DATABASE [DbAdi] TO DISK='DbAdi.bak'"


Üstteki komut ile Windows'un komut satırından yedeklemenizi yapabilirsiniz.

Bunu Windows'un Zamanlanmış Görevleri'ne yeni bir görev olarak atayacak olursanız yedekleriniz otomatik olarak alınmış olur.

Ufak bir *.BAT dosya içine bu satırı yazarak elinizin altında her an tek tıklama ile yedek alabileceğiniz mini bir yedekleme yapısı da oluşturmanız mümkün.

Ancak 3417 hatasına karşın yeni bir DB eklediğinizde hizmeti kısa süreliğine (tabiki hastane vb. 24 saat çalışan bir ortamda değilse veritabanınız) durdurup master.mdf dosyanızı da fiziksel olarak yedekledikten sonra SqlServer hizmetini tekrar başlatmanız da ek bir önlem olacaktır.

Hatasız günler dilerim...

17 Nisan 2018 Salı

Bilişim Sektörünün Meslek Hastalıkları

Bilişim sektörü çalışanlarının korkulu rüyası, Meslek Hastalıkları.

Her mesleğin kendine has bazı sıkıntıları, zorlukları ve kendine özgü meslek hastalıkları vardır.
Bilişim sektörü çalışanları olan bizlerin de bu tür sıkıntılardan ve bilişimcilere özgü meslek hastalıklarından nasibini almaması düşünülemez elbette.

1. Sektörde en sık rastlanan rahatsızlıklar aşırı klavye ve fare kullanımına bağlı olarak:

2. Monitöre fazla bakma, yeteri kadar göz açıp kapamamak vb. sebeplere bağlı olarak:

3. Aşırı bilgisayar kullanımına, fazla oturma, hatalı duruş pozisyonu vb. sebeplere bağlı olarak:

İLK bölümdeki (ilk etapta "en çok rastlanılan" -kendim de dahilim bu gruba- bu 3 rahatsızlığı ele almakla yetineceğim) rahatsızlıklar her şeyi doğru yapsanız bile yeteri kadar mola vermeden, mütemadiyen her gün uzun sürelerle bilgisayar başında mesai harcıyorsanız neredeyse kaçınılmaz olan bir son diyebiliriz.


Higroma (Ganglion Kisti): (belirtiler: görsel olarak bilek çevresinde görülebilen kist çıkıntısı)
Eklem veya tendon kılıfı üzerinde bunların üzerinden çıkan içi jel kıvamında bir sıvı ile dolu kistik yapıdaki iyi huylu tümörlerdir. Elin en sık görülen iyi huylu tümörüdür. En sık 20-40 yaş arası kadınlarda görülür.


El bileğinin hemen her tarafında görülebilmekle beraber en sık el bileğinin üst kısmında görülür ve bu daha çok skafolunat eklem adı verilen el bileğinde yeralan küçük kemiklerin ikisinin arasından çıkar. Daha sonra sıklık sırasıyla el bileğinin iç tarafında, avuç içinde parmaklara yakın bölgede ve parmak uç eklemleri seviyesinde görülmektedir. (kaynak)

Bu şikayetle hekime gittiğimde, hekim higroma teşhisi koymuştu. Geçmiş zamanda 50bin Lira'lık büyük çaplı bozuk paralar vardı. O bozuk paralardan bir tane bileğimin üstündeki bu higroma çıkıntısına koyup bastırarak üstünü elastik bandaj ile sarmamı ve bileğimi fazla yormadan çalışmamı söylemişti. Garip gelse de hekimin dediği şekilde yapınca geçmişti. Artık bileğimde hörgücün başını gördüğüm anda kendimi relaks moda alıyorum zorunlu olarak. Devamının daha kötü olacağını biliyorum çünkü.


Karpal Tünel Sendromu: (belirtiler: baş parmak, işaret ve orta parmakta ağrı ve uyuşmalar)
Bilgisayar ve klavye kullanırken bileğin uzun süre bükülü kalmaması gerekiyor. Bilekler 20 derecenin üzerinde aşağı veya yukarı doğru kalkarsa, bilekte parmakları hareket ettiren sinirlerdeki dolaşım bozuluyor. Mouseların yanlış tutulması, laptopun kucakta veya yatar pozisyonda kullanımı, ergonomik olmayan klavyede uzun süre çalışma, cep telefonlarında bileğin uzun süre aynı pozisyonda tutulması, bilekte karpal tünel denen dar bir alan içinden geçen sinirleri sıkıştırıyor.



Dizüstü bilgisayarınız, karpal tünel bölgesini gerçekten ciddi anlamda rahatsız edebilir. Bilgisayarda uzun saatler boyunca yazı yazmaktan veya uzun süreler telefonla konuşmaktan kaçının ve eğer mutlaka bilgisayar kullanmanız gerekiyorsa, yazarken bileklerinizi eğip bükmeyecek veya germeyecek cinste, ergonomik bir klavye tercih etmeyi unutmayın.

Ayrıca, karpal tünel sendromu semptomlarını azaltacak bazı hafif egzersiz hareketleri de var. Bir dakika boyunca, bileklerinizle yavaşça daireler çizin veya sol başparmağınızı, sağ başparmağınızla yakalayın ve esnetin. Bu egzersizler sayesinde tendonlarınızdaki esnekliği kaybetmemiş olursunuz ki bu da sinirlere daha az yük binmesine yardımcı olur. Her zaman nazik ve düşük yoğunluklu el egzersizleri yapın. Karpal tünel sendromu iyileştirilebilen bir rahatsızlık değildir ve genellikle belirli bir noktaya ulaştığında ameliyat gerektirir. Ancak bu zamana ulaşıncaya dek, yukarıda bahsettiğimiz tavsiyeleri uygulayarak biraz rahatlama sağlayabilirsiniz. (kaynak1, kaynak2)


Ulnar Sinir Sıkışması: (belirtileri: serçe ve yüzük parmaklarda ağrı ve uyuşmalar)
Kübital tünel sendromu, ulnar sinirin dirseği geçtiği yerde sıkışmaya uğraması ile ortaya çıkan bir rahatsızlıktır. Ulnar sinir, omurganızdan elinizdeki bazı kasları çalıştırmakta, küçük ve yüzük parmağınızda his duyusunun olmasını sağlamaktadır. Sinir kola inerken, dirsekte medial epikondil adı verilen kemik çıkıntılı bir bölgede öne geçer. Bu noktada yüzeye oldukça yakınlaşır. Bu alana ani bir dokunuşla, elde son iki parmakta elektriklenme şeklinde sıklıkla ulnar sinirin geçici iritasyonunu yaşayabilirsiniz.


Bu rahatsızlık bilgisayar kullanırken dirseklerimizi sürekli katlanmış olarak tutmamızdan, fazla cep telefonu kullanmamızdan, ergonomik olmayan klavye ve fareden ve bunlar gibi bir çok sebepten kaynaklanmaktadır. Bazen kazara dirseğimizi bir yere vururuz ve sanki elektrik çarpmış gibi bir hisse kapılırız hani, işte dirseğinizi vurduğunuz noktadaki ulnar oluğunda ulnar sinirini o anda aşırı sıkıştırmış/ezmiş oluyorsunuz.

Şahsen benim en çok muzdarip oldıuğum rahatsızlıktır. Daha öncesinde bu konuda çok doktor gezdim. Elektromyografi (EMG) çekiminde çok ileri düzey bir rahatsızlık görmezse ameliyat kararı vermiyor doktorlar. Hoş, ameliyat olsanız bir dert, olmasanız başka bir dert. Olsanız ulnar sinirlerini ulnar oluğundan alıp açığa, kas üzerine çıkartıyorlar. Bu da ilk başta rahatlatır gibi görünse de uzun vadede daha büyük sıkıntılara gebe gibi görünüyor maalesef. Zaten sizi iş yapamaz hale getirecek derecede ağrı ve el-kol uyuşmaları olsa bile bu ameliyat için yeterli olmuyor. Bu durumda kendi kendinizin doktoru olmanız gerekiyor.

Durum bu seviyeye gelince öncelikle doktorun önerdiği ERGOTERAPİ uygulamasına başlıyorum kendi kendime. Bunlar şuradaki LİNKte orjinalini bulabileceğiniz basit egzersizler:




Bu egzersizlere ilaveten her bulduğunuz fırsatta dirseklerinizi düz konuma alarak dinlendirmenizi önerebilirim. Gece uyurken ise sırtüstü yatar konumda her iki kolonuzu da sağ ve solunuza dümdüz olarak konumlandırarak uyumanız hiç yoktan 5-10 saatlik (artık kaç saat uyuyorsanız) uykunuz boyunca ulnar sinirleriniz üzerindeki gergiyi azaltarak kendini onarım imkanı sağlamış olacaktır.

Bunlara ilave olarak uygun bir klavye padi ve mouses pad kullanarak ta en azından el ve bilek rahatsızlıklarının oluşumunu minimize etmeye yardımcı olabilirsiniz:


Unutmayın, her şeyin başı sağlık! Kalın sağlıcakla. :)

14 Nisan 2018 Cumartesi

Itead Sonoff Basic ile IOT ve Akıllı Ev Sistemleri Hakkında

Sonoff Basic ile IOT (Internet Of Things - Nesnelerin Interneti) ve akıllı ev sistemleri. 

IOT, bu epey zamandır uğraştığım bir konu. Espressif firmasının üretimi olan ESP8266 MCU ürününü kullanarak daha önce oldukça zahmetli bir çalışma ile (o çalışmayı da farklı bir blog konusu olarak hazırlamaya çalışacağım) herhangi bir elektrikli cihazı akıllı hale getirebilmiştim. Akabinde internet üzerinden o cihazları rahatça yönetebiliyordum.

İşte benim binbir türlü zahmet ve emek harcayarak yaptığım akıllı ev sisteminin en önemli parçalarından birini ITEAD firması SONOFF markalı akıllı ev ürünleri olarak üretmeye başladı. Biz de bu yazımızda markanın ürün gamındaki en alt seviye ürünü olan SONOFF BASIC modelini detaylı olarak inceleyeceğiz.

Cihazımız Bulut (internet üzerinde çalışan sunucu bilgisayarları) destekli çalışan bir cihazdır. Amazon Alexa, Google AssistantGoogle Nest, Google Home, IFTTT ve eWeLink uygulamalarıyla uyumlu çalışabilmektedir. Biz yazımızda eWeLink uygulamasını baz alacağız. Sonoff Amazon AWS sunucularını kullanmaktadır. Cep telefonlarımızda kullanacağımız eWeLink uygulaması da aynı sunucular üzerinden komut ve güncel durum bilgilerini işlemektedir:



Sonoff'un Türkiye distribütürünün cihazla ilgili tanımı da şu şekilde:
        Sonoff, kullanıcılara akıllı ev kontrolü sağlayan uygun fiyatlı bir cihazdır. Geniş bir ürün yelpazesine bağlanabilen WiFi tabanlı bir kablosuz anahtar-röle kartıdır.
        Sonoff, veriyi bir WiFi Router aracılığıyla bir bulut platformuna iletir ve mobil uygulamayla eWeLink aracılığıyla tüm bağlı cihazları uzaktan kumanda etmenizi sağlar. Sonoff sunucusu Amazon AWS global sunucusudur.
        Sonoff tüm ev aletlerini akıllı hale getirir. Mobil cihaz ağı olduğu sürece, kullanıcılar cihazları her zaman herhangi bir yerden açıp-kapatarak uzaktan kumanda edebilir. Kullanılabilecek diğer bir özellik ise evdeki cihazlar için zamanlamalar ayarlamaktır; geri sayım, planlanmış açma veya kapama ile kullanıcıların kolay bir yaşam sürmesi hedeflenmiştir.
        Mobil uygulama eWeLink, kullanıcıların cihazları kolayca kontrol etmesini sağlar. Uygulamanın iOS ve Android versiyonlarını AppStore ve Google Play'de bulabilirsiniz.


Örnek bir çalışma için gerekli temel malzemeler:
  • bir adet itead sonoff basic wifi röle (en uygun fiyatlısıdır) [9.20$]
  • bir adet 220v teyp fişi elektrik kablosu [1.53$]
  • bir adet E27 lamba duyu [0.34$]
  • bir adet E27 ampul [0.86$]
14.04.2018 tarihli ilgili testimize ait ürünlerin TL ve USD bazlı piyasadaki perakende fiyatları üstteki gibidir.
reklam olmaması için herhangi bir firma adı belirtmiyorum (blog'umda google reklamları bile olmaz) :)

itead sonoff basic kutusu

itead sonoff basic kutu içeriği

itead sonoff basic kasa içi


sonoff cihazının orjinal sunumundaki pcb fotoğrafları. serial-ttl yazan bölümden cihazdaki esp8266 çipi
hacklenebiliyor. buradan yeniden programlamak mümkün. (ilerleyen zamanda bir blog konusu da bu olsun)


sonoff cihazının orjinal sunumundaki açıklamalı 3d parça fotoğrafları


SONOFF BASIC kasa içinde, pcb ve elektronik komponentler. Üstte trafo ile 220 volt AC'den 5 volta ve AMS1117 regülatör entegresi ile de 3.3 volt DC'ye olan dönüşümü yapan güç devresini; altta ise Espressif firmasının ESP8266 MCU'sunu görebilirsiniz. Flash çipi üst katmanda. Kullanılan 5 volt röle 10 amper akıma dayanacak şekilde. Isınma ihtimaline karşı pcb'de faz ve nötr hatlarının etrafı kesilerek ısı köprüsü kırılmış. Güzel ve kompakt bir tasarım olmuş. Fiyat olarak Aliexpress'te Türkiye fiyatının yarısına bulunabiliyor.


KONUYLA İLGİLİ WEB SİTELERİNİN LİNKLERİ:

Sonoff Basic ve üreticisi Itead firması ile ilgili linkler:
https://www.itead.cc/
https://www.itead.cc/smart-home.html
http://sonoff.itead.cc/en/

Sonoff devre şeması:
https://www.itead.cc/wiki/images/6/6b/Sonoff_schmatic.pdf

Sonoff kullanım klavuzu:
https://www.itead.cc/blog/user-guide-for-sonoff-slampher

Sonoff Basic'in beyni diyebileceğimiz Esp8266 mikro işlemcisi ile ilgili linkler:
https://www.espressif.com/
https://www.espressif.com/en/products/hardware/socs

Esp8266 datasheet:
http://espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf

Esp8266 teknik özellikleri:
http://dl.itead.cc/IM151116002/0A-ESP8266_Specifications_v4.1.pdf


Testte kullanılan malzemeler ve sırayla montaj ve testteki çalışma aşamaları:


Yukardakı fotoğrafları üzerine yazdığım numara sırasıyla açıklayalım:
  1. 220v teyp fişi elektrik kablosu (KABLO)
  2. E27 lamba duyu (DUY) ve E27 ampul (AMPUL)
  3. sonoff basic wifi röle (SONOFF)'nin input kısmına KABLO bağlanmış durumda.
  4. SONOFF'un input kısmının bağlantısı tamamlanıp kapağı kapatılmış durumda.
  5. DUY ve AMPUL SONOFF'un output kısmına bağlanmış durumda (1).
  6. DUY ve AMPUL SONOFF'un output kısmına bağlanmış durumda (2).
  7. DUY ve AMPUL SONOFF'un output kısmına bağlanmış ve output kapağı kapatılmış durumda.
  8. SONOFF'a ilk enerji verilmiş durumda (henüz ayarları yapılmamış.
  9. SONOFF'un Wifi SSID ve Password bilgileri eWeLink uygulamasindan set edilmiş durumda.
  10. eWeLink uygulamasından PowerON testi başarılı, lambamız yanmaya başladı.
  11. eWeLink uygulamasından PowerOFF testi başarılı, lambamız söndü.
Detaylı izahata gelecek olursak; şu şekide yapalım: elimizdeki fiş, ampul ve duyu sonoff'un input ve output portlarına bir saatçi düz tornavida ile bağlıyoruz. Bağlantı esnasında dikkat etmek gereken ufak bir nokta var: faz hattını input bölümündeki line yazan porta monte etmek gerekiyor. Böyle yapmazsak ne olur? Yine çalışır. Fakat bu bir güvenlik açığı oluşturur (yazılımsal olarak değil, fiziksel bir güvenlik açığından, yani can güvenliğinden bahsediyorum) sebebine gelince röle nötr hattını değil sadece line yazan hattı açıp kapatmaktadır. nötr hattı içerdeki baskı devre üzerinden girişten alınp dokunulmadan direkt çıkışa verilmiştir. Bu şu anlama gelir, eğer line yazan porta fazı değil de nötr hattını bağlarsanız akıllandırmak istediğiniz cihaz kapalıyken bile cihazın üzerinde her zaman 220v AC elektrik hazırda bekliyor olacaktır. Ancak cihazın nötr hattı sonoff tarafından kesilmiş olacağı için cihaz çalışmayacaktır. Cihaz çalışmıyor olunca çoğu insan üzerinde enerji yok kabul edip 220v AC elektrik ile çarpılma riskine maruz kalacaktır. Bu yüzden faz hattını line portuna, nötr hattını da N yazan input portuna bağlamalısınız. Output portunu istediğiniz gibi cihaza takabilirsiniz o taraf önemli değil.

Fiziksel montaj ve kablo bağlantılarımızı doğru şekilde yaptıktan sonra Android kullanıcıları Google Play üzerinden, IPhone kullanıcıları da IOS App Store üzerinden eWeLink uygulamasını indirip kurarak son safhaya ulaşmış olacaklardır. :)

eWeLink uygulamasını kurduktan sonra uygulamayı kullanabilmek için uygulama sisteme kayıt olmanızı isteyecektir. Aynı facebook, twitter, instagram gibi sitelere kaydolurken yaptığınız gibi bir cep telefon numaranızı (kullanıcı adı yerine geçiyor) ve yeni bir parola girerek kaydınızı yapacaksınız, akabinde uygulama cep telefon numaranızı doğrulamak için size doğrulama kodu içeren bir SMS gönderecek. SMS'teki doğrulama kodunu da kayıt ekranına girdiğinizde artık güvenilir ve gerçek bir kullanıcı olarak sisteme kaydınızı tamamlamış olacaksınız.

1:uygulamayı indirip kurun. 2:uygulamayı açın. 3:telefon numaranız ile kayıt olun. 4:yeni bir cihaz eklemeye bailayın...

4.safhada Quick Pairing seçeneği ile 5.aşamaya geçince buraya Wifi SSID ve Wifi Parola bilgilerimizi gireceğiz.
6.aşamaya gelince sonoff cihazı üzerindeki düğmeye 5 saniye boyunca basılı tutuyoruz. Eşleşme tamamlanacak
ve artık cihazımıza (bu sonoff'un bağlı olduğu cihaza) bir isim vermemizi isteyecek. Biz "Test Lambası" dedik. :)
7.safhada artık menümüzde test cihazımızı verdiğimiz isimle görebiliyoruz. 8.safhadaki ekran görüntüsü lambanın
yanarkenki haline ait. lambayı yakıp söndürmek için ekrandaki POWER butonu üzerine tıklamamız yeterli. :)

7-8-9.resimlerde power buton yerine "Test Lambası" yazısının üzerine tıklayacak olursak 10.resimdeki ekran gelir.
10.resimde ortadaki büyük power butona tıklayarak lambamızı yakabilir, 11.resimdeki yanar vaziyete getirebiliriz.
Aynı şekilde 11.resimdeki power butonuna tıklayarak ta lambamızı 10.resimdeki sönük duruma getirebiliriz.

10-11.resimlerde altta gördüğünüz Schedule, Timer ve Döngü isimli menülere ait ekranlar da burada göreceğiniz
12-13 ve 14 nolu ekran görüntüleri şeklindedir. Uygulamada eksik çevirilerden dolayı Schedule (Zamanlayıcı),
Timer (Geri sayım) kelimeleri ingilizce olarak kalmış. En sonda da 14.ekranda Döngü'lü zamanlama modu mevcut.

12: Schedule (Zamanlayıcı): Bu ekrana 10.-11. ekrandaki Schedule butonu ile açılan Schedule menüsündeki ARTI butonuna basıp yeni bir zamanlayıcı eklemek istediğinizi belirterek geliyorsunuz. Hangi tarih ve saatte cihazı açmak veya kapatmak istediğinizi belirterek dilerseniz bunu haftalık tekrara da bağlayabiliyorsunuz. Örneğin kombinizi pzt-sal-çar-per-cum günlerinde 08:00-18:00 saatleri arasında KAPALI tutmak 18:00-08:00 arasında açık tutmak isterseniz 2 program oluşturmalısınız: ilk program bu hafta içi günlerde 08:00 da bağlı olan cihazı KAPALI konuma getirmeli (demekki işe gidiyoruz bu saatlerde :)) ) ikinci program ise bu hafta içi günlerde saat 18:00 da bağlı olduğu cihazı AÇIK konuma getirmeli. Örneğimizde kombi demiştik, bu durumda biz 18:00 da iş yerimizden ayrılırken kombimiz de aynı saatte çalışmaya başlayacak, biz eve gelene kadar geçen 30-40 dakikalik sürede de evimizi ısıtmış olacak. Gün içinde çalışmadığı içinde tasarruf sağlamış olacağız. Bu işlemi her gün biz sonoff menüsünden elle AÇ-KAPAT yaparak ta yapabiliriz ama her gün yapacaksak elimizi yormaya bile gerek yok. :)  bu Schedule menüsünü kullanarak bu işi tam otomatiğe bağlamış oluruz. (bundan daha fazla ve daha akıllı şekilde otomatiğe bağlamak ta mümkün. ortam sıcaklığını ölçerek kombiyi aç-kapat gibi. bunu da ilerleyen zamanda başka bir blog konusu olarak yayınlayacağım)

13: Timer (Geri sayım): Bu ekrana 10.-11. ekrandaki Timer butonu ile açılan Timer menüsündeki ARTI butonuna basıp yeni bir geri sayım eklemek istediğinizi belirterek geliyorsunuz. Kaç gün, kaç saat, kaç dakika sonra cihazımızı AÇIK veya KAPALI konuma almak istiyorsak buradan o değerleri set edip geri sayımı başlatıyoruz. Geri sayan sayaç SIFIR olduğunda cihazımız sonoff tarafından ayarladığımız şekilde AÇIK veya KAPALI konuma alınacaktır.

14: Döngü Zamanlayıcı: Bu ekrana 10.-11. ekrandaki Döngü butonu ile açılan Döngü Zamanlayıcı menüsündeki ARTI butonuna basıp yeni bir döngü zamanlayıcı eklemek istediğinizi belirterek geliyorsunuz. Ekranın alt yarısındaki bölümden yaptığımız ayarlamanın ilk olarak aktif olmasını istediğimiz tarihi set ediyoruz. En üstteki bölümden HER X saat ve dakikada bir defa cihazımızın AÇIK-KAPALI olmasını istediğimiz durumu set ediyoruz. Ortadaki bölümde ise cihazımız bu en üstteki ayarla açıldıktan veya kapandıktan sonra bu şekilde kaç saat ve kaç dakika kalsın ve ondan sonra hangi (AÇIK-KAPALI) konuma geçsin istiyorsak onu set ediyoruz. Örneğin Sonoff'umuzu bir vantilatör cihazına bağladık diyelim, ekran görüntülerimize de uygun olacak şekilde örneklemek gerekirse: "her 10 dakikada bir AÇIK konuma geçsin. bu şekilde devam ettikten 5 dakika sonra KAPALI konuma geçsin" anlamına gelir şu anda 14.ekran görüntüsündeki ayarlar. Bu ayarlara göre örneğimizdeki vantilatör biz durdurana kadar 5 dakika çalışır durumda, 5 dakika boyunca da kapalı durumda olacaktır. (böylece vantilatör çarpması durumu yaşamamış olursunuz. :)) )


Wifi'dan ve 3G'den internete bağlı olan 2 farklı cep telefonu ile test lambamızın kontrolü:

8 Nisan 2018 Pazar

P10 LED Panelleri Arduino ile Kullanmak

Bismillahirrahmanirrahim.

Her hayırlı işe Besmele ile başlamak gerek malum. Biz de hayr murad ederek geç te olsa başladık bu blog işine. Ne diyelim; bana da, takip edenlere de hayırlı olsun o halde. Yıllardır aklımın bir köşesinde sürekli uğraştığım konularla ilgili böyle bir çalışma yapmak vardı. Artık üşengeçlik mi, tembellik mi dersiniz adına bilmem, fakat baktım da bu blogu bile 9 sene önce, 2009 da register etmişim. Yani niyetim halis, tembelliğim gerçek. :)

8 Nisan 2018 (ürün fiyatları, güncel kalması için bu tarihteki TL fiyatlarından USD'ye çevrilerek yazılmıştır)
Sözü fazla uzatmadan ilk yazımız olan, bugünlerde ilgilendiğim LED tabelalara getireyim konuyu. Son yıllarda oldukça yaygınlaşan led tabelaların yaygınlaşmasında ilerleyen teknoloji, gömülü yazılımlardaki gelişmeler epey etkili olmuş durumda. LEGO tarzı yapılan, istenildiği şekilde genişletilebilen blok panel tabela sistemi ile de sanırım zirveye ulaşmış oldu.

Nedir bu LEGO tarzı blok panel led tabelalar? 16x32, 32x32, 64x64 vb. gibi farklı matris boyutlarında üretilen hazır led panellerdir. En çok kullanılan 16x32 lik paneli örnek olarak ele alacak olursak; bu sayılar şunu ifade etmektedir: 16cm yüksekliğinde, 32cm genişliğinde fiziksel ölçülere sahip bir led paneldir. Led panellerin isimlendirmeleri ise her 1 santimetrekare içine düşen led sayısına orantılanarak verilmiştir. Örneğimizdeki 16x32 led panelin tip ismi P10 olarak geçiyorsa her 10mm de 1 adet led gelecek şekilde yerleşimi olan bir led matris paneldir. Yani 16x32x(10/10)=512 adet led vardır örneğimizdeki P10 panelde. Eğer aynı panelin tip ismi P5 olursa bu da her 5mm de 1 adet led gelecek şekilde yerleşimi olan bir led matris paneldir. Yani 16x32x(10/5)=1024 adet led vardır örneğimizdeki P5 panelde. LED panellerin kırmızı, yeşil, mavi, beyaz, sarı gibi tek renkli modelleri olduğu gibi, RGB led paneller de mevcuttur. Bu tip rgb panelleri şehir meydanlarındaki dev ekranlarda görebilirsiniz. Her bir led bir piksele karşılık gelmektedir. Bu mantıkla oluşturulan görüntü bu panellerin yönetimi için oluşturulmuş özel kontrol kartları veya kendi yapacağımız bir ARM, PIC, Arduino veya benzer bir mikroişlemci devresi ve yazılımı ile de mümkündür.

Pratiğe gelecek olursak... :)
Ankara Konya sokaktan 30 TL'ye, internetten 20-30 TL (4.94$) arasına bulabileceğiniz bir P10 LED Panel başlangıç için doğru bir tercih olacaktır.

Örnek bir çalışma için gerekli temel malzemeler:
  • bir adet P10 kırmızı renk led panel (kırmızı en uygun fiyatlısıdır) [4.94$]
  • bir adet Arduino UNO + USB Kablosu [4.45$]
  • bir adet 5 volt, 5 amper (veya üzeri) DC güç kaynağı [5v 10a için 5.44$]

Practical Arduino kitabının yazarı Jonathan Oxer ve Marc Alexander tarafından oluşturulan ve açık kaynak kod ilkesiyle yayın yapan Freetronics sitesinde bulunan Arduino DMD kütüphanesini kullanacağız:

http://www.freetronics.com/dmd-library
https://github.com/freetronics/dmd
linklerindeki "Clone or download zip" adlı yeşil renkli buton ile DMD-master.zip dosyasi indirilir.
Aynı kütüphanenin 3.parti ek geliştirmeler görmüş hali: https://github.com/cjd/DMD

Arduino IDE'deki Taslak > library ekle > .ZIP Kitaplığı Ekle
menülerinden indirilen zip dosya arduino ide'ye eklenir.

Freetronics'in DMD kütüphanesi içinde kullanılan TimerOne kütüphanesini de indirmek gerekiyor:
https://code.google.com/archive/p/arduino-timerone/downloads
linklerinden TimerOne-r11.zip kutuphanesi indirilir.

Eklediğiniz library dosyalarını Arduino IDE'deki Taslak > library ekle
menusunden kontrol edin. DMD-master ve TimerOne-r11 i görmelisiniz.

https://www.freetronics.com.au/products/dot-matrix-display-32x16-red
https://www.freetronics.com.au/pages/using-your-freetronics-dmd
Linklerinde de ufak örnek uygulamalar mevcut.

P10 panel ile Arduino UNO arasında pratik bağlantı için Freetronics'in geliştirdiği ufak bir PCB var:
https://github.com/freetronics/DMDCon

Aşağıda Freetronics tarafından verilen bağlantı şemasını görebilirsiniz:


Bu şemayı PCB'siz olarak jumper kablolar ile aşağıdaki gibi bağlayarak gerçekleştirebiliriz:




Flat kablolarda pin numaraları 1 ile kırmızı çizgili tel (ve bir ok işareti ile de) gösterilir. 1 numaralı pin ile aynı hizada flat kablonun diğer kenarına doğrıı giden sütun tek sayılı (1-3-5-7-...) pinlerdir. 1 numaralı pine komşu olan diğer pin de 2 numaralı pindir. Çift pinler de aynı şekilde flat kablonun diğer kenarına kadar çift sayılı (2-4-6-...) olarak gider:



Uygulanmış hali aşağıdaki fotoğraflarda görüntüğü gibi olmalıdır:
flat kabloya bağlanan jumper kabloları
arduino pin bağlantıları-1
arduino pin bağlantıları-2
demo uygulaması çalışırken panel arkası, bağlantılar vs.
demo uygulaması çalışırken panel önü-arkası, bağlantılar vs.
demo uygulaması çalışırken panel arkası, bağlantılar vs.




Arduino Nano kullanarak (aynı bacak bağlantılarıyla) yapılmış hali:






Freetronics DMD kütüphanesinden örnek DMD_Demo kodu:

#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
#include "Arial_black_16.h"

#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}

void setup(void)
{
   Timer1.initialize( 5000 );
   Timer1.attachInterrupt( ScanDMD );
   dmd.clearScreen( true );
}

void loop(void)
{
   byte b;
   
   // yanıp sönen pixel kolonlarının yerleştirilebilmesi için OR ve NOR modlarının demolarını içeren 10 x 14 yazı tipli saat
   dmd.clearScreen( true );
   dmd.selectFont(Arial_Black_16);
   dmd.drawChar(  0,  3, '2', GRAPHICS_NORMAL );
   dmd.drawChar(  7,  3, '3', GRAPHICS_NORMAL );
   dmd.drawChar( 17,  3, '4', GRAPHICS_NORMAL );
   dmd.drawChar( 25,  3, '5', GRAPHICS_NORMAL );
   dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );
   delay( 1000 );
   dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );
   delay( 1000 );
   dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );
   delay( 1000 );
   dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );
   delay( 1000 );
   dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );
   delay( 1000 );

   dmd.drawMarquee("   https://ersinkecis.blogspot.com.tr   ",39,(32*DISPLAYS_ACROSS)-1,0);
   long start=millis();
   long timer=start;
   boolean ret=false;
   while(!ret){
     if ((timer+30) < millis()) {
       ret=dmd.stepMarquee(-1,0);
       timer=millis();
     }
   }
   // piksellerin yarısı
   dmd.drawTestPattern( PATTERN_ALT_0 );
   delay( 1000 );

   // diğer yarısı
   dmd.drawTestPattern( PATTERN_ALT_1 );
   delay( 1000 );
   
   // bir yazıyı tek ekranda 2 satır olarak görüntüle
   dmd.clearScreen( true );
   dmd.selectFont(System5x7);
   for (byte x=0;x<DISPLAYS_ACROSS;x++) {
     for (byte y=0;y<DISPLAYS_DOWN;y++) {
       dmd.drawString(  2+(32*x),  1+(16*y), "ERSiN", 5, GRAPHICS_NORMAL );
       dmd.drawString(  2+(32*x),  9+(16*y), "KECiS", 5, GRAPHICS_NORMAL );
     }
   }
   delay( 2000 );
   
   // ekranın dışına bir çerçeve çiz
   dmd.clearScreen( true );
   dmd.drawBox(  0,  0, (32*DISPLAYS_ACROSS)-1, (16*DISPLAYS_DOWN)-1, GRAPHICS_NORMAL );
   delay( 1000 );
   
   for (byte y=0;y<DISPLAYS_DOWN;y++) {
     for (byte x=0;x<DISPLAYS_ACROSS;x++) {
       // bir X çiz
       int ix=32*x;
       int iy=16*y;
       dmd.drawLine(  0+ix,  0+iy, 11+ix, 15+iy, GRAPHICS_NORMAL );
       dmd.drawLine(  0+ix, 15+iy, 11+ix,  0+iy, GRAPHICS_NORMAL );
       delay( 1000 );
   
       // bir daire çiz
       dmd.drawCircle( 16+ix,  8+iy,  5, GRAPHICS_NORMAL );
       delay( 1000 );
   
       // içi dolu bir kutu çiz
       dmd.drawFilledBox( 24+ix, 3+iy, 29+ix, 13+iy, GRAPHICS_NORMAL );
       delay( 1000 );
     }
   }

   // şerit kovalayan testi
   for( b = 0 ; b < 20 ; b++ )
   {
      dmd.drawTestPattern( (b&1)+PATTERN_STRIPE_0 );
      delay( 200 );      
   }
   delay( 200 );      
}