19 Haziran 2016 Pazar

Raspberry Pi Servo Motor Kontrol






     Bu uygulamada yazılımsal PWM kullandım. Cihazımız sadece yazılımsal PWM desteklemektedir. Motorda oluşan titreşimler yazılımsal PWM kullandığımız için işlemcinin farklı işlemcilerle uğraşmasından dolayı olabilmekle birlikte, yeterince kaliteli olmayan bazı motorlaralındıklarından itibaren titreşim yapmaya meyillidir. Bu sıkıntıların tek çözümü endüstriyel servo motorlardır.
    Bu uygulama sırasında kullandığım motor 180 derecedir. Bazı motorlar %5-%10 arası duty cycle da çalıştığını söylemesine rağmen uygulamada kullandığım motor %3-%12 bir aralıkta çalışmaktadır. 


Kullandığım motor: Tower Pro Micro servo 9g SG90
Uçları: 
Kırmızı +5V 
Kahverengi GND
Sarı Sinyal ucudur.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from tkinter import *
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(19, GPIO.OUT)
pwm = GPIO.PWM(19, 50)
pwm.start(5)
GPIO.setwarnings(False)
 
class App:
 
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()
        scale = Scale(frame, from_=0, to=180,
              orient=HORIZONTAL, command=self.update)
        scale.grid(row=0)
 
 
    def update(self, angle):
        duty = 3+float(angle)/180.0*9
        pwm.ChangeDutyCycle(duty)
 
root = Tk()
root.wm_title('Servo Kontrol')
app = App(root)
root.geometry("200x50+0+0")
root.mainloop()
GPIO.cleanup()




14 Haziran 2016 Salı

Qt Arayüzle Led Kontrol

Merhaba
Bugün sizlere qt arayüzle hazırlanmış led kontrol uygulamasını paylaşacağım.


Uygulama Videosu:




Uygulama devresi:


Uygulama arayüzü:

Kod:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import RPi.GPIO as GPIO

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BCM)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(26,GPIO.OUT)

class ilkProgram(QDialog):
    def __init__(self, ebeveyn=None):
        super(ilkProgram, self).__init__(ebeveyn)
        self.metin='''<font color="blue" size="+3">GPIO 16</font>'''
        self.metin2='''<font color="blue" size="+3">GPIO 26</font>'''
        self.etiket=QLabel(self.metin)
        self.etiket2=QLabel(self.metin2)
        ac=QPushButton('Aç')
        self.connect(ac, SIGNAL('pressed()'), self.ac)

        kapat=QPushButton('Kapat')
        self.connect(kapat, SIGNAL('pressed()'), self.kapat)

        ac_led2=QPushButton('Aç')
        self.connect(ac_led2, SIGNAL('pressed()'), self.ac_led2)

        kapat_led2=QPushButton('Kapat')
        self.connect(kapat_led2, SIGNAL('pressed()'), self.kapat_led2)

        izgara=QGridLayout()
        izgara.addWidget(self.etiket,0,0)
        izgara.addWidget(ac,0,1)
        izgara.addWidget(kapat,1,1)
        izgara.addWidget(self.etiket2,2,0)
        izgara.addWidget(ac_led2,2,1)
        izgara.addWidget(kapat_led2,3,1)

        self.setLayout(izgara)
        self.setWindowTitle('QT Arayüzle Led Kontrol')
        self.resize(300,100)

    def ac(self):
        GPIO.output(16,True)

    def ac_led2(self):
        GPIO.output(26,True)
            
    def kapat(self):
        GPIO.output(16,False)

    def kapat_led2(self):
        GPIO.output(26,False)
    
uyg=QApplication([])
pencere=ilkProgram()
pencere.show()

uyg.exec_()

GPIO.output(16,False)
GPIO.output(26,False)


13 Haziran 2016 Pazartesi

Uzaktan Erişimli Led Kontrol

Web arayüzünden HTML ve PHP ile hazırlanmış bir sayfa ile python kodlarını çalıştırarak ledleri kontrol edebiliriz.

Öncelikle php web server kurulumunu yapalım.
sudo apt-get install apache2
sudo apt-get install php5 libapache2-mod-php5
sudo service apache2 restart

Hedef dizinimiz /var/www/html/  Oluşturduğumuz dosyalar bu  dizinde çalışacak.

Sonra /etc/sudoers.d/README dosyasından yetkilendirme ayarlarını yapıyoruz. 
Bunu için terminale:
sudo nano /etc/dudoers.d/README  yazarak dosyayı açıyor ve şu kodları ekliyoruz:
pi ALL=(ALL) NOPASSWD: ALL
www-data ALL=(ALL) NOPASSWD: ALL


Daha sonra her bir GPIO pini için (12,16,25,26) ayrı ayrı “on.py” ve “off.py” dosyalarını oluşturmalıyız.

on.py
1
2
3
4
5
6
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(12,GPIO.OUT)

GPIO.output(12,1)

off.py
1
2
3
4
5
6
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(12,GPIO.OUT)

GPIO.output(12,0)
index.php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<html>
 <head>
                        <!--index.php--> 
 </head>
 <body>

  <!--GPIO12----> 
  <form action="" method="post">
   GPIO 12&nbsp;<input type="submit" name="on12" value="ON">
   <input type="submit" name="off12" value="OFF">

 <br></br>

  <!--GPIO16--> 
  <form action="" method="post">
   GPIO 16&nbsp;<input type="submit" name="on16" value="ON">
   <input type="submit" name="off16" value="OFF">

 <br></br>

  <!--GPIO25--> 
  <form action="" method="post">
   GPIO 25&nbsp;<input type="submit" name="on25" value="ON">
   <input type="submit" name="off25" value="OFF">

 <br></br>

  <!--GPIO26----> 
  <form action="" method="post">
   GPIO 26&nbsp;<input type="submit" name="on26" value="ON">
   <input type="submit" name="off26" value="OFF">

 </body>
</html>

<?php
  if ($_POST[on12]) { 
   $a- exec("sudo python /var/www/html/leds/gpio/12/on.py");
   echo $a;
  }
  if ($_POST[off12]) { 
   $a- exec("sudo python /var/www/html/leds/gpio/12/off.py");
   echo $a;
  }
  
  if ($_POST[on16]) { 
   $a- exec("sudo python /var/www/html/leds/gpio/16/on.py");
   echo $a;
  }
  if ($_POST[off16]) { 
   $a- exec("sudo python /var/www/html/leds/gpio/16/off.py");
   echo $a;
  }
  
  if ($_POST[on25]) { 
   $a- exec("sudo python /var/www/html/leds/gpio/25/on.py");
   echo $a;
  }
  if ($_POST[off25]) { 
   $a- exec("sudo python /var/www/html/leds/gpio/25/off.py");
   echo $a;
  }
  
  if ($_POST[on26]) { 
   $a- exec("sudo python /var/www/html/leds/gpio/26/on.py");
   echo $a;
  }
  if ($_POST[off26]) { 
   $a- exec("sudo python /var/www/html/leds/gpio/26/off.py");
   echo $a;
  }

?>
Oluşturduğumuz dosyaları şu şeklide oluşturup hedef klasörümüze kopyalayalım.



Raspberry Pi cihazımızın ağdaki adresini öğrenelim:


Benim cihazımın ağdaki adresi resimde görüldüğü gibi 192.168.1.35
Ağımıza bağlı bir bilgisayardan 192.168.1.35 yazıp enter’a basalım. Artık kontrol edebiliriz.







PWM ile Fan Kontrol

Fan Raspberry Pi'nin 5v dc pinine bağlandı. GPIO2 pini çıkış olarak ayarlandı (100 hertz, pwm) ve transistörün beyz kutpuna bağlandı. Bu sayede transistörün beyz kutpuna uygulanan akımın miktarına bağlı olarak, kollektör ve emiter arasından geçen akım miktarının isteğe göre değiştirilebilmesi sağlandı. Yani transistör, fan hızını ayarlamak için kullanıldı.






 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(19,GPIO.OUT)
GPIO.setwarnings(False)

p=GPIO.PWM(19,100)

for i in range(2):
    p.start(25)
    print("%25")
    time.sleep(5)
    p.start(50)
    print("%50")
    time.sleep(5)
    p.start(65)
    print("%65")
    time.sleep(5)
    p.start(80)
    print("%80")
    time.sleep(5)
    p.start(100)
    print("%100")
    time.sleep(10)
 
GPIO.cleanup()

12 Haziran 2016 Pazar

PIR ve Buzzer ile Güvenlik

Passive Infrared Sensor (PIR) Pasif kızılötesi sensör, görüş alanına giren nesnelerden yayılan kızılötesi ışık miktarını ölçen elektronik sensördür. 










 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(20,GPIO.OUT)
GPIO.setup(22,GPIO.IN)
print("PIR ile Hareket Algılama Güvenlik Uygulaması")

simdi=0
sonraki=0
try:
    while GPIO.input(22)==1:
        simdi=0
    print("Hazır")
    while True:
        simdi=GPIO.input(22)
        if simdi==1 and sonraki==0:
            print("Hareket Algılandı")
            GPIO.output(20,1)
            time.sleep(3)
            GPIO.output(20,0)
            sonraki=1
        elif simdi==0 and sonraki==1:
            print("Hazır")
            sonraki=0
        time.sleep(0.01)
except KeyboardInterrupt:
    print("Çıkış Yapıldı")
    
GPIO.cleanup()


Terminal Kullanımı



Terminal üzerinden görsel olarak yönetemediğimiz bazı ayarları yapabilir, programları çalıştırabilir veya davranışlarını değiştirebiliriz. Başlangıçta grafiksel arayüze alışkanlıklarımızdan dolayı biraz zor gelebilse de alıştıkça aslında işlerin çok daha hızlı ve rahat şekilde yapılabildiği görülmektedir.

Terminal masaüstünde kullandığımız birçok Linux dağıtımında da sıkça işimize yarıyor. Ancak Raspberry Pi ile uğraşıyorsak görsel olarak birçok aracın bize sağladığı detaylı ayarları yapma şansı sunuyor. Aşağıdaki tabloda terminal üzerinden sıkça kullanılan bazı komutları görebilirsiniz.

mkdir
Klasör oluşturma
ls
Bulunduğunuz konumda dosya ve klasörleri listeler
cd
Dizin değiştirmeye yarar
pwd
Dizin konum bilgisini verir
whoami
Kullanıcı adı öğrenmek
rmdir
Klasör silmek (içi boş klasör)
touch
Dosya oluşturma
rm
Dosya ve klasörleri siler
nano
Terminaldeki metin editörü
cat
Dosya içeriklerini görüntüler
df
Diskleri ve boş alanları görüntüleme
file
Dosya tür bilgisi verir
history
Önceden yazdığımız komutlara ulaşmamızı sağlar
apropos
Bilmediğimiz komutları hakkında bilgi verir
raspi-config
Cihaz ayarlarını yapmaya yarar
apt-get install
Program kurar
apt-get update
Sistemde güncelleme listesi oluşturur
apt-get upgrade
Sisteme günceller
apt-get remove
Program kaldırır


11 Haziran 2016 Cumartesi

Raspberry Pi Kurulum

Raspberry Pi, arkasındaki topluluğun gücü sayesinde standart ARM dağıtımlarının haricinde kendisine özel hazırlanmış pek çok dağıtıma sahip. 
Bu dağıtımlara çok kısaca değinmek gerekirse;

NOOBS (New Out Of the Box): Raspberry Pi Foundation tarafından kurulumu kolaylaştırılması amacıyla hazırlanmış bir dağıtım çeşididir. Bu dağıtım birden fazla işletim sistemi kurabilme, açılış yöneticisi ayarlayabilme gibi artıları var. Yeni kullanıcılara başlangıç için tüm işletim sistemlerini görmesi açısından güzel bir ortam sağlıyor.
Raspbian: En popüler Raspberry Pi dağıtımıdır. Debian tabanlı bir Linux dağıtımı olan Raspbian resmi olarak destekleniyor. Resmi olduğu ve en popüler olduğu için bu sistem kullanılmıştır.
Pidora: Fedora’nın Raspberry Pi’ye port edilmiş bir sürümüdür. Bu dağıtım oldukça hafif ve hızlıdır.
Raspbmc: Raspberry Pi’yi medya merkezi olarak kullanacak kullanıcılar için özel olarak hazırlanmış içinde XBMC programını ve Raspberry Pi için olan optimizasyonları barındıran bir sistemdir.
OpenELEC: Daha çok gömülü sistemlere odaklanmış bir XBMC medya merkezi dağıtımı. Raspbmc’ye güzel bir alternatiftir.
Risc OS: ARM sistemlere özel olarak hazırlanmış hafif ve de hızlı bir Linux dağıtımı.
Arch Linux: Arch Linux kullanmayı tercih eden kullanıcılar için dağıtımın ARM mimarili türevi.
Windows 10 IOT: Microsoft’un Raspberry Pi 2 için çıkardığı Windows 10 sürümü işlevsiz ve boş bir ekrandan ibaret. Tek yapabildiğimiz şey console komutlarıyla başka bir Windows bilgisayar üzerinden ethernet aracılığıyla Raspberry Pi’a bağlanıp komut vermek ve almak.

Sistem kurulumu iki şekilde gerçekleştirilebiliyor. Birinci yol NOOBS ile kurulumu gerçekleştirmek, ikinci yol ise .img uzantılı Rasbian imajını Windows, Linux ve Mac’de kurmaktır.

NOOBS Kurulumu
Öncelikle www.raspberrypi.org adresinden Downloads kısmından NOOBS imajı indirilir. Standart versiyon tüm dağıtımları içinde barındırır. Daha sonra 8GB ve üzeri mSD kartınızı Fat32 olarak biçimlendirin. SDFormatter yazılımını kullanılmasını tavsiye ederim. https://www.sdcard.org/downloads/formatter_4/eula_windows/ adresinden indirilebilir.

SDFormatter v4.0

Biçimlendirme işlemi tamamlandıktan sonra İndirilen NOOBS paketi içeriğindeki herşeyi mSD Kart içine kopyalayın. Bunun ardından Raspberry Pi ye gerekli donanımları bağlayarak açın. Aşağıdaki şeklide NOOBS kurulum başlatma ekranı karşımıza çıkacak.

Noobs Kurulum Seçenekleri

Kurulumun ardından enter tuşuna basarak cihazı yeniden başlatın. Tercihimize göre işletim sistemi seçici açılacak veya direkt dağıtımınızı açacak. Böylece NOOBS kurulum tamamlanmış olur.

Ham imaj kurulumu
Ham imaj kurulumu ise NOOBS ara aşamasını kullanmadan direkt olarak bir imaj kurmaktır. Bunu işletim sistemlerinde yapmanın farklı yolları vardır.
Windows ta SD karta imaj yazmanın en kolay yolu Win32DiskImager.

Win32 Disk Imager


Açılan programda bardan indirdiğiniz imajı (.iso veya .img formatında) seçip ardından aşağıdaki menüden write’ a basarak mSD kartı yazmayı gerçekleştirebiliriz. Bu işlemlerin ardından kartı söküp cihaza bağladığımızda işlem tamamdır.