IoT & Endüstri 4.0
Raspberry PI ile Akıllı Garaj Kapısı (IoT)
Hayri KILIÇEylül 202110 dk okuma
GİRİŞ
Akıllı garaj kapısı projesi garaj kapısına sahip olan bireylerin önceden manuel olarak el ile açmaları daha sonrasında uzaktan kumanda ile bu kapıları açmasının ardından anahtarın sık sık unutulması/kaybolması amacıyla yapılmıştır. Akıllı telefonlarımızı ya da bilgisayarlarımızı kullanarak her şeyin uzaktan kontrol edilebildiği bu IoT (Nesnelerin İnterneti) çağında, anahtarları neden yanınızda taşımalayız? RFID, Bluetooth, Wi-Fi, LoRa gibi cihazların kablosuz kontrolünü destekleyen birçok teknoloji vardır. Bu projede Wi-Fi tabanlı bir kontrol gerçekleştirdim. Bu çalışmada akıllı telefonumuzu ya da bilgisayarımızı kullanarak garaj kapısını açıp kapatmak için bir Raspberry Pi web sunucusu oluşturulacaktır. Bu sunucudan garaj kapısının kontrolü sağlanacaktır.
1. IOT (Nesnelerin İnterneti) Nedir?
Bugünlerde sıklıkla duyduğumuz ve ileride daha da fazla duyacağımız bir kavram Internet of Things… İlk kez 1999 yılında Kevin Ashton tarafından bir şirket için hazırladığı sunumda kullanılan bu kavram gelişen teknoloji ile birlikte, ortaya çıktığı günkü halinden daha geniş bir vizyona erişti.
IOT konseptli ürünler, Türkiye’de de gelişir duruma geldi. Öyle ki, yapılan bir araştırma, 2020 yılında yaklaşık 26 milyar nesnenin internete ve böylece birbirlerine bağlanacağını ön görüyor. Sporda harcadığımız kaloriyi gösteren akıllı saatler, eve gitmeden önce evimizi istediğimiz sıcaklık derecesine getiren akıllı klimalar, kendi kendine park edebilen akıllı arabalar hep bu konseptin içerisine dahil. Yapılan yatırımlar ve gelişen teknoloji, yakın gelecekte tüm cihazların WiFi ve Bluetooth ile birbirlerine bağlanacağını gösteriyor [1].

Şekil 1: Nesnelerin İnterneti Temsili Gösterim [1].
Nesnelerin İnterneti Nedir? Nesnelerin İnterneti “benzersiz bir şekilde adreslenebilir nesnelerin kendi aralarında oluşturduğu, dünya çapında yaygın bir ağ ve bu ağdaki nesnelerin belirli bir protokol ile birbirleriyle iletişim içinde olmaları” olarak tanımlanır. Ayrıca bu kavramı kabaca; çeşitli haberleşme protokolleri sayesinde birbirleri ile haberleşen ve birbirine bağlanarak, bilgi paylaşarak akıllı bir ağ oluşturmuş cihazlar sistemi olarak da tanımlamak mümkündür. 1991 yılında Cambridge Üniversitesi’ndeki yaklaşık 15 akademisyenin kahve makinesini görebilmek için kurduğu kameralı sistem o günün koşullarında değerlendirildiğinde ufuk açıcı bir uygulamaydı. 2001 yılına kadar kullanılan sistem, kahve makinesinin görüntüsünü dakikada üç kez bilgisayar ekranlarına gönderiyordu. Çevrimiçi ve gerçek zamanlı olması sebebiyle “nesnelerin interneti” kavramının ilk örneği olarak tarihte yerini aldı. 1999 yılında Kevin Ashton, P&G için RFID teknolojisi uygulamasının firmaya faydalarını sıraladı ve kullanılmasını önerdi. Önerdiği sistem; “internet of things” kavramını ortaya çıkaran radyo dalgaları ve sensörlere dayalı bir küresel sistem standardı idi [2].
2. Raspberryi PI ile Nesnelerin İnterneti
Raspberry PI kendinden yıllardır söz ettiren ve gittikçe ünlülüğü artan bir geliştirme kartıdır. Her ne kadar Arduino da bir geliştirme kartı olsa da aslında birbirlerinden oldukça farklıdırlar. Arduino’nun donanım bakımından bir mikrodenetleyiciyi çalıştırmak için gerekli güç ve programlama ünitesi bulunduran ve mikrodenetleyicinin giriş çıkış ayaklarına rahat erişimimizi sağlayan bir kart olduğundan bahsetmiştik. Arduino’da bir mikrodenetleyiciden pek de fazlası yoktu. Bu kart ise bir bilgisayar gibi çalışmaktadır ve mevcut işletim sistemlerinin birini de üzerine yükleyebiliriz. Üzerinde işletim sistemi olması, çeşitli uygulamaları çalıştırma imkânı ve tam bir program yazmak yerine bir uygulama yazma imkânı ile bu kartı bir bilgisayar olarak kullanabiliriz. Aynı zamanda bizim kullandığımız kişisel bilgisayarlar basit giriş ve çıkış ünitelerinden yoksundur. Bildiğiniz gibi bir bağlantı sağlamak için USB’den başka alternatif son zamanlarda iyice tükenmiştir fakat Raspberry PI üzerinde Arduino’da görmeye alışık olduğumuz basit giriş ve çıkış üniteleriyle alt seviye iletişim üniteleri de yer almaktadır. Bu yanıyla Raspberry PI hem bir bilgisayar olarak hem de bir elektronik kart olarak kullanılabilir [3].
2.1. Raspberry Pi Nedir?
Raspberry PI’yi anlamak için öncelikle kartı inceleyelim ve donanım yapısına bakalım. Arduino’yu anlamak için kartın üzerinde ne var ne yok öncelikle ona bakmıştık. Biz birer kullanıcı değil geliştirici olduğumuz için donanıma asla yabancı olmamamız gerekir. Raspberry PI’nin birçok modeli olsa da bu çalışmamızda günümüzde en yaygın olan model Raspberry PI 3 B+ kartını kullanacağız.

Şekil 2: Raspberry 3B+ üstten görünümü [4].
Raspberry PI’nin birçok modeli vardır. Uzun yıllardır piyasada olduğu için çok eski modellerden günümüzde Raspberry PI 4’e kadar en yeni modelleri bulabilirsiniz. Günümüzde satılan Pi 2, Pi 3 veya Pi 1 Model B gibi modellerde çok ciddi bir farklılık yoktur. Ama en hızlı kartı kullanmak isterseniz en yeni modeli tercih etmeniz gerekir. Resimdeki Pi 3 B+ modeli yaklaşık üç yıl önce çıkmış eski sayılmayan kullanışlı bir modeldir. Ayrıca bu model için diğer modellere kıyasla daha çok uygulama ve örnek bulma imkanımız vardır. Gördüğünüz gibi kartın yapısı aslında bir tablet bilgisayarın kartına benzemektedir. Üzerinde Broadcom BCM2837 işlemci bulunmaktadır. ARM tabanlı olan bu işlemci 900 MHz dört çekirdekli Cortex-A7 işlemcisidir. Genellikle tablet ve telefonlarda kullanılan işlemcilere yakın bir işlemci kullanılmaktadır.
NOT: Buradan belki de Raspberry PI’de Android işletim sistemi çalıştırılabileceğini düşünebilirsiniz. Bu mümkündür fakat yeterli performans alınamadığı için tercih edilmemektedir.
Kartın üzerinde bir adet de grafik işlemcisi (GPU) bulunmaktadır. Grafik işlemcisi Broadcom VideoCore IV modelidir. Raspberry PI HDMI çıkıştan 1080p uyumlu görüntü verebilmektedir. O yüzden büyük monitörlerle veya yüksek çözünürlüklü televizyonlarla rahatça kullanabiliriz. Ayrıca kompozit video çıkışı verdiğinden tüplü televizyonlara da bağlanabilir. Kompozit video çıkışı 3.5 mm jack yardımıyla olmaktadır. Bunun için uygun bir dönüştürücü kablo kullanmanız gereklidir. Böylelikle kartın görüntü çıkışını tüplü bir televizyona bağlayabilir ve kartı Retro oyun konsolu veya medya oynatıcısı haline getirilebilir [3].
3. Raspberry Pi üzerinde Localhost Kurulumu
Projemizde bir objeyi kontrol edebilmek için uzaktan bağlantı sağlamamız gerekmektedir. Bu bağlantıyı Raspberry Pi üzerinden kuracağımız localhost sayfası ile sağlayacağız. Aynı ağdan bağlanarak bu localhostu kontrol etme imkanımız olacak. Bu localhost içerisinde kontrolü sağlayacak python kodlarını döndüreceğiz. Bu işlemler için Python dilinin flask kütüphanesini kullanacağız.
3.1. Flask Kütüphanesi Nedir? Nasıl Kurulur?
Flask tamamıyla Python programlama dilinde yazılmış bir web geliştirme çatısı, framework’üdür. Öğrenmesi ve kullanması oldukça kolaydır. Basite indirgenmiş yapısıyla yeni başlayanlar için doğru bir tercihtir.
Flask’in 1 Nisan şakası olarak çıkması ve ardından çok sevilen bir framework olmasının hikayesini birkaç kelimeyle aktaralım sizler için. Armin Ronacher python kütüphaneleri yazmayı fazlasıyla seven bir geliştirici olarak bir durumu fark ediyor. Yeni güncellenen veya yeni ortaya çıkmış herhangi bir framework’ün dokümantasyonunu kimse okumuyor ya da test etmiyor. Sadece, “Reklamınızı iyi yapmanız yeterli” eleştirisini de dile getiriyor. Bu nedenle içinde ekstra bir kod bulunmadan, yalın bir şekilde Flask’i yayınlıyor ve de ekliyor; “Sadece kod için gönderdiğim python uzantılı dosyayı çalıştırmanız yeterli.“ 1 Nisan şakası olarak eleştirisel bir şekilde Flask’i yayınlamış olsa da, görenler “fena bir fikir değilmiş aslında” düşüncesiyle kullanmaya başlıyorlar. Zaman içinde Flask gelişiyor, popülerliği artıyor fakat o yalın halini asla bırakmıyor [5].
3.1.1. Raspberry Pi için Flask Kurulumu
Öncelikle mevcut işletim sistemimizin (Raspbian) güncellemelerini kontrol ediyoruz. Bunun için terminale aşağıdaki komutları satır satır giriyoruz. Terminal sistem açık iken CTRL+T tuşlaması ile açılabilir.
sudo apt-get update
sudo apt-get upgrade
Sistem güncellemelerini kontrol ettikten sonra pip kurulumu gerekmektedir. Pip nedir dersek; Pip python ile hazır gelen bir paket yöneticisidir. Peki ne işe yarar pip Python ile birlikte hazır gelmeyen kütüphanelerin, framework vb. bağımlılıkları kurmanızı yönetmenizi sağlayan bir paket yöneticisi aracıdır. O zaman ilk önce sistemimizde pip ‘in kurulu olup olmadığını ve kullanılabilir olduğunu kontrol edelim. Bunun için terminale aşağıdaki komut girilir.
pip –version
Bu komut sonrasında bir version numarası alınması durumunda bir işlem yapmamıza gerek kalmaz eğer bir version almaz ve sistem tanımaz ise terminale aşağıdaki komut yazılırak pip kurulumu gerçekleştirilir.
_sudo apt install python-pip
_
Aşağıdaki komut ile de pip güncellemesi yapılır.
python -m pip install —upgrade pip
Bu aşamadan sonra Flask’in kurulumunu terminal üzerinden pip aracılığıyla yapılır.
pip install Flask
Böylece raspbiana flask kurulumu tamamlamış olur.
3.2. Flask ile Localhost Kurulumu
Raspbian sistemine flask kurulumu tamamlandıktan sonra py uzantılı bir dosya açıp bu dosyayı bir editör tarafından düzenleyerek -Bu çalışmada Thonny kullanılmış olup- localhost kurulumu gerçekleştirilir.
Bunun için öncelikle kütüphane eklenir.
from flask import Flask
Daha sonrasında bir app oluşturulur.
app = Flask(__name__)
http://localhost:5000/ ana dizin altında işlemlerimizin çalıştığını kontrol ediyoruz.
[email protected](”/”)_
def project():
return “islem”
Daha sonrasında localhostu görüntüleyelim
if __name__ == “__main__”:
app.run(debug =True, host= ‘192.168.1.117’)
Üst kısımda yer alan 192.168.1.117 görüntülemek istediğim host adresi için verildi. Bu server’a ağda bulunan başka bir cihazdan açmak için tarayıcıdan sekmeye aşağıdaki adres girilir;
192.168.1.117:5000
3.3. Garaj Kapısı için Gerekli Donanım ile Raspberry Pi Bağlantısı
Normalde bir gerçek bir garaj kapısı ile bu bağlantıda bir röle kullanılır ve röle çıkışı garaj kapısındaki sisteme bağlanır. Ancak bu çalışmada maket bir garaj kapısı kullanılmış olup garaj kapısını açacak sistem olarak servo motor kullanılmıştır. Bu gösterim fritzing ile aşağıdaki şekilde gösterilmiştir.

Şekil 3: Servo motor ile Raspberry 3B+ bağlantısı Fritzing
3.3.1. Flask Üzerinde Servo Motor Kodları
Bu çalışmada servo bağlantısı 17. pine bağlanmıştır. Frekans 50 seçilmiş olup bu ayarlara göre kodlar aşağıda verilmiştir. Ekstradan buton ile garaj kapısının açılması yerine garaj kapısını az orta çok açabilme durumları için slider tasarlanmıştır. Yani servo motor açılımı bu slider range’ine göre belirlenecektir. Range’den alınacak değer ile servo açısı belirlenmektedir.
servo_pin = 17 # Servonun bağlı olduğu pin
GPIO.setmode(GPIO.BCM) # Pin Tanımlanması ve Set işlemi
GPIO.setup(servo_pin, GPIO.OUT)
p = GPIO.PWM(servo_pin, 50) # PWM kanalından verilen frekans ==50
p.start(0) # Başlangıç dutyCycle değeri ==0
3.4. Flask Tasarımının İndex Kodları
Flask içerisinde HTML,, php, CSS kodları yazılabilmektedir. Bu aşamada sayfa için belirlenen slider tam ortada olacak şekilde ayarlanmıştır. Ayrıca Slider üstünde açıklama yer alacak ve açıklama üzerinde üniversite logosu yerleştirilecektir. Sayfanın alt kısmında ise kişisel bilgiler yer almaktadır. Bu kodlar “app = Flask(__name__) girişi ile @app.route (“/”) sekmeleri arasında olacaktır.
--------------------------- ------------------------------
#HTML Code
TPL = '''
Web Sayfası Üzerinden Garaj Kapısı Kontrolü
3.5. Tüm Kodların Birleştirilmesi
Oluşturulan Flask ve donanım kodlar bir py uzantılı dosya içerisinde birleştirildi. Çalıştırılması ise derleyici üzerinden ya da terminal üzerinden sağlanmaktadır. Derleyici üzerinden RUN denilerek çalıştırılır ve server bilgisi derleyicinin altındaki output kısmında verilir. Terminalden çalıştırılması istenilirse de bulunduğu konuma “cd Konum” komutu ile gidilerek “python proje.py” komutu ile açılır. Tüm kodların birleştirilmiş hali aşağıdaki gibidir:
--------------------------- ------------------------------
from flask import Flask, render_template_string, request # [7].
import RPi.GPIO as GPIO
from time import sleep
servo_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(servo_pin, GPIO.OUT)
p = GPIO.PWM(servo_pin, 50)
p.start(0) # Zero duty cycle initially
app = Flask(__name__)
#HTML Code
TPL = '''
Web Sayfası Üzerinden Garaj Kapısı Kontrolü
'''
[email protected](”/”)_
def home():
return render_template_string(TPL)
[email protected](“/test”, methods=[“POST”])_
def test():
slider = request.form[“slider”] # Oluşturulan slider formu
p.ChangeDutyCycle(float(slider))
sleep(1)
p.ChangeDutyCycle(0)
return render_template_string(TPL)
if __name__ == “__main__”:
app.run(debug =True, host= ‘192.168.1.117’)
# Debug durumuHata alınması durumunda False olarak
#değiştirilebilir.
4. Sonuç ve Projenin Son Hali
Projenin çalıştığını göstermek için pandemi şartları sebebiyle yalnızca mukavvadan bir garaj yaparak sağladım. Bu maket hali aşağıdaki şekilde mevcuttur.
GÖRSEL KALDIRILMIŞTIR.
Projenin bir bilgisayar tarafından ve web üzerinden kontrolü aşağıdaki resimde gösterilmiştir.

Şekil 5: Proje Çalışmasının Bilgisayar tarayıcısı ile Kontrolü

Şekil 6: Proje Çalışmasının Mobil tarayıcısı ile Kontrolü
Kaynakça
-
İsim Tescil, 2016, https://blog.isimtescil.net/nedir-bu-nesnelerin-interneti/ , [Ziyaret Tarihi: 13.05.2021].
-
Yetimler E, 2012, https://www.karel.com.tr/blog/internet-things-nesnelerin-interneti-nedir-cihazlarin-etkilesim-trendleri, [Ziyaret Tarihi: 13.05.2021] .
-
Dökmetaş G, 2016, Arduino Ve Raspberry Pı İle Nesnelerin İnterneti, Syf 1-256.
-
Nasir SZ, Temmuz 2017, https://www.theengineeringprojects.com/2018/07/introduction-to-raspberry-pi-3-b-plus.html, [Ziyaret Tarihi: 14.05.2021].
-
Sparkfun Virual Company, https://learn.sparkfun.com/tutorials/analog-to-digital-conversion/all, Dry Creek Parkway, Niwot, Colorado, 2009
-
Cayiroglu,Goruntu_Isleme_Ders_Notları,http://www.ibrahimcayiroglu.com/Dokumanlar/GoruntuIsleme/Goruntu\_Isleme\_Ders\_Notlari-5.Hafta.pdf, Karabük, 2018
-
Jain R, Mart 2019, https://circuitdigest.com/microcontroller-projects/iot-smart-garage-door-opener-using-raspberry-pi [Ziyaret Tarihi: 05.05.2021].