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

3 yorum:

  1. slm ersin hocam zip dosyasının içinden klasör var ama efeledpanel.ino dosyasını ben bulamadım. siteye ekleyebilirimisiniz

    YanıtlaSil
  2. sana ulasabilecegimiz mail veya whatsapp numarası var mı hocam

    YanıtlaSil
  3. visual studio yazılımı açtığımda ve kayan yazı kısmında istediğim yazıyı girdikten sonra da oluşturulan ide dosyasını açıp arduinoya yollamam gerekiyor. C# üzerinden direk yollamak gibi bir şansımız var mıdır acaba biraz bakındım ama çok yetkin değilim yazılım konusunda.

    Kodu daha da sonra incelediğimde arayüzde metni panele gönder butonunu gördüm ve kodlarına göz atmaya karar verdim ancak kodda hata olduğunu gördüm ve çözmeye uğraştım buraya yazdığıma göre de çözemedim :/.
    Yardımcı olabilirseniz sevinirim

    YanıtlaSil