Raspberry Pi – Röle Kontrolu

   Raspberry Pi makale serisinin son bölümünde hatırlarsanız size C# ile nasıl GPIO işlemleri yapabileceğinizi anlatmış ve Enterprisecoding RPI.GPIO kütüphanesini tanıtmıştım. İlk “Merhaba Dünya” uygulamamız led yakıp söndürmek oldu. Tabi ilk uygulama böyle olunca “Hocam, bu kadar basitten gitmesek?!” kıvamında tepkiler almadım değil. Anlaşılan o ki gerçek hayatta kullanabileceğiniz örnekler istiyorsunuz 😉 Bu makalemde size gerçek hayattan bir örnek vermeyi planlıyorum; ampul yakıp söndürmek 🙂

  Öncelikle, uyarımı yapayım;

UyariBu makalede paylaşılan örnekler 220 volt şehir şebekesi üzerinde yapılan işlemleri anlatmaktadır. Örnekler konu hakkında fikir vermek adına sunulmuş olup gerçek hayatta kullanılmadan önce elektrik, elektronik konularında uzman kişilere danışılarak kullanılmalıdırlar. 220 volt insan üzerinde yaralanmalar, kalıcı hasarlar ve ölümlere yol açabilmektedir.

 

   Ampul yakıp söndürmek temelde basit bir iştir. Akımın bir anahtar üzerinden geçip geçmemesi durumuna göre ampul yanmakta ya da sönmektedir. Bu basitlik manuel işlemlerde olabildiğine kolaydır. Öte yandan, iş bunu otomasyona çevirmek olunca işler biraz karışacaktır. Bu karışıklığın temel nedeni ampul için  şehir şebekesinde işlem yapıyor iken bizlerin kullandığı sistemlerin 5 volt, 3.3. volt v.b. üzerinde çalışmasıdır. Tölere edilen bu sınırlar dışına çıktığımızda elimizdeki devreler yanacaktır. Üzerinde işlem yapacağımız Raspberry Pi’de bu sınırlarda işlem yapması nedeniyle işimiz kolay olmayacaktır.

   Bu problemin çözümü iki  sistemi birbirinden izole etmekte yatar. Yüksek voltaj ile işlem yapan ampul ile Raspberry Pi birbirinden izole çalışmalıdır. Raspberry Pi basit bir şekilde bir anahtarı kontrol etmeli. Bu anahtar da Ampul’ü açıp kapatmalıdır. Şanslıyız ki teknoloji bu konuda oldukça ileride 🙂 Söz konusu anahtar ise akla ilk önce transistörler gelecektir. Transistörlerle ilgili problem yüksek voltajlarda çalışamamasıdır. Dolayısıyla bizim bir başka çözüme ihtiyacımız olacaktır. Bu noktada sahneye çıkan Röle devre eiemanı, ihtiyacımız olan bu izolasyonu ve anahtarlamayı bize sunmakta. Elektromanyetik bir devre elemanı olması nedeniyle tüm isterlerimizi karşılamaktadır.

   Röle olarak seçimim Türkiye’de de kolaylıkla bulabileceğiniz Sainsmart firmasının 4-Channel 5V Relay ürünü oldu;Sainsmart 4-Channel 5V Relay

   Böylelikle ilk problemimizi aşmış olduk. Sıradaki problemimiz rölemimizin 5 volt ile tetikleme yapması. 0 volt ile kapalı olan rölemiz 5 volt ile açık duruma gelmekte. Arduino v.b. 5 volt ile işlem yapan sistemler ile bu durum bir problem olmamakla birlikte Raspberry Pi 3.3 volt ile işlem yapmakta ve GPIO’lar 5 volt çıkış vermemekte.

   Durum böyle olunca yine başa dönmüş oluyoruz. Yine 5 voltu anahtarlama yaparak akım geçirip geçirmeyerek rölemize iletebilir, dolayısıyla da rölemizin açılıp kapanmasını sağlayabiliriz. Bu durumda işlemi düşük volt yapmamız nedeniyle artık başta kullanamadığımız transistörlerimizi kullanabiliriz.

   Kafanızın karışmadığını umarım. Sonuçta anahtarlama yapan devre elemanımızı kullanmak için anahtarlama yapıyoruz 🙂

   Ok, sonuçta elektronik konusunda bir uzman değilim. Bu noktada biraz kopya çekerek ihtiyacımız olan devre tasarımını internetten bularak kendimiz yapabiliriz ;)  Öte yandan dedikleri gibi; “derken burda yapılmışı var” : ULN2003 IC

ULN2003

   ULN2003 içerisinde bir dizi darlington bağlantısı (darlington çifti) olan ve geri akım korumalı bir entegre devredir;

ULN2003 pinout

   ULN2003 1,2,3,4,5,6,7 nolu bacaklardan gelen akıma göre sırasıyla 16,15,14,13,12,11,10 nolu bacaklarda 9. bacaktan verilen akımı geçirmektedir. Buna göre Raspberry Pi GPIO çıkışlarını ULN2003 IC’nin 1,2,3,4,5,6,7 girişlerine başlayarak 9. bacaktan da 5 volt geçirmemiz ve 16,15,14,13,12,11,10 çıkışlarını Röleye bağlamamız yeterli olacaktır.

   Bu bilgiler ışığında 220 volt anahtarlamamız için ihtiyacımız olan devre aşağıdaki şekilde olacaktır;

RaspberryPiRelay

 

   Devremizi bağladıktan sonra sıra geldi kodlama safhasına. Kodlamada daha önceden tanıttığım wiringPi kütüphanesi üzerinden gideceğim. Öncelikle, hazırlayacağımız bir shell script’i ile GPIO çıkışalarını bir döngü ile açıp kapatalım.

nano roleTest.sh

roleTest.sh

   nano editörü ile oluşturduğumuz roleTest.sh dosyasının içeriğine aşağıdaki şekilde hazırlayalım;

#!/bin/bash
source gpio

gpio mode 15 out
gpio mode 16 out
gpio mode 1 out
gpio mode 4 out

while true; do
    gpio write 15 1
    sleep 0.5

    gpio write 16 1
    sleep 0.5

    gpio write 1 1
    sleep 0.5

    gpio write 4 1
    sleep 0.5

    gpio write 4 0
    sleep 0.5

    gpio write 1 0
    sleep 0.5

    gpio write 16 0
    sleep 0.5

    gpio write 15 0
    sleep 0.5
done

   Bu shell script’i ile 14, 15, 18, 23 nolu GPIO’ları çıkış için hazırladıktan sonra sonsuz bir döngü içerisinde önce high, sonra da low değer yazmakta. 14,15,18,23 nolu GPIO’lar wiringPi içerisinde 15,16,1,4 ile temsil edildiğini hatırlatayım.

chmod +x roleTest.sh
./roleTest.sh

AmpulKapali

   Shell script’imizi çalıştırdığımızda döngü içerisinde ışığımız yanıp sönecektir. Tasarruflu ampul’lerde ampulün açılması zaman almakta. Bu sebeple tam olarak yandığını görmek için anahtarın daha uzun süre high konumunda kalması gerekecektir. Bunun için sleep komutunda daha yüksek değerler kullanmamız yeterli olacaktır.

AmpulAcik

   Yukarıda paylaştığım shell script’i ile aynı işlemi yapan C# kodunu aşağıda bulabilirsiniz;

int result = WiringPi.Core.Setup();

if (result == -1) {
    Console.WriteLine("WiringPi init failed!");
    return;
}

var pinler = new []{ 15,16,1,4};


//Pin'leri çıktı olarak yapılandır
foreach (var pin in pinler) {
    WiringPi.Core.PinMode(pin, PinMode.Output);
}


for (; ; ) {
    //Pin'leri high konumuna çek
    foreach (var pin in pinler) {
        WiringPi.Core.DigitalWrite(pin, DigitalValue.High);
        System.Threading.Thread.Sleep(1000);
    }
    
    System.Threading.Thread.Sleep(1000);

    //Pin'leri low konumuna çek
    foreach (var pin in pinler) {
        WiringPi.Core.DigitalWrite(pin, DigitalValue.Low);
        System.Threading.Thread.Sleep(1000);
    }

    System.Threading.Thread.Sleep(1000);
}

   Paylaştığım bu C# kodunu kullanabilmeniz için Enterprisecoding RPI.GPIO kütüphanesine referans vermeniz gereklidir.

  Önceki makalemdekine göre gerçek hayatta daha kullanışlı bir örnek olduğunu umarım. Örnek için kulandığım Röle’ler ihtiyacım olan akımı geçirebilecek kapasitedeler. Öte yandan ampul yerine daha fazla akım çeken sistemler kullanmanız durumunda farklı Röle’ler kullanmanız gerekecektir.

   Bu projeyi bir adım daha ileri taşıyarak ev içerisindeki tüm elektirik sistemlerinin çıkışlarında kullanabilmeniz mümkün. Tabi bunun için elektirik konusunda uzman bir destek alarak daha yüksek yükleri kaldırabilen roleler kullanmakta fayda var. Hatta Lighttpd kurup üzerinde host edeceğiniz web uygulamaları ile bu anahtarları kotrol edebilir, örneğin mobil sistemler üzerinden salonun ışığını açıp kapatabilirsiniz. Bir başka örnekte, evinizin girişine konumlandıracağınız bir dokunmatik ekran üzerinden hangi prizlerden akım geçeceğine, hangi lambaların yanacağına karar verebilirsiniz. Dokunmatik ekranınızdaki uyku modu butonu ile belirli lamba ve prizler dışındaki akımı kesebilirsiniz… Bu örnekler hayal gücünüze bağlı olarak çoğaltılabilir… Hep birlikte Akıllı ev sistemlerine merhaba diyelim 🙂

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

7 yorum

  1. Ömür Erdem   •  

    Hocam, anlatımınız ve bilgi paylaşımlarınız için teşekkür ederim. İşe yeni başlayacak/başlayan kişilerin korkularını yenmesi için güzel bir yazı olmuş. Emeğinize sağlık…

    • Fatih Boy   •     Yazar

      Teşekkürler Ömür. Umarım faydalı olabilmiştir.

  2. Tunahan Dursun   •  

    Öncelikle anlatımınız için teşekkürler.Öte yandan; 4’lü role kullanmamız şart mı?

    • Fatih Boy   •     Yazar

      Merhaba Tunahan, 4’lü role kullanmak zorunda değilsin. Doğrusunu söylemek gerekirse, benim elimde 4’lü olduğu için yazıda kullandım.

  3. Hayri   •  

    Uğraşmaya Değmez Bence Hazırı Varken 4 Lü Röleyi Aldım Pahalı Birşey’de Değil Verdiğiniz Kodlarla Çalıştırdım Sağolun. Windows’un MiniPC’si ile ilgilide makaleler Yazarsanız Sevinirim İyi Çalışmalar.

  4. alican   •  

    açıklayıcı anlatımınızdan ötürü teşekkür ederim. role beş volt ile çalışıyor fakat siz 9v pil bağlamısınız gpio üzerindeki 5v pine bağlarsak daha iyi olmaz mı

    • fatih   •     Yazar

      Merhaba Ali Can,
      5v konusunda haklısın. Harici 9v’luk bir güç kaynağı kullanmak yerine Raspberry Pi üzerinden 5v çıkışı almak daha doğru ve pratik olacaktır. Katkın için teşekkür ederim.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir