4 Mayıs 2018 Cuma

Arduino Projeleri Şifreli Kilit

Merhaba arkadaşlar bu yıl okulumuzda ilkini düzenlediğimiz Tubitak Bilim Fuarına yürütücü olarak görev aldım. Aynı zamanda 4 adet projem vardı. Bunlardan biri Şifreli Kilit Projemiz sizler için hem resimleri hem kodları hem de projemizin pano örneğini paylaşacağım.

 


Bu projemizde 4×4 tuş takımı ile arduinomuza servo motor bağlayarak kapının kontrolünü sağlAyacağız. Bu projemizi kapıya monte ettiğimizde artık sizinde bir şifreli kapı kilidiniz olacaktır.Projemizin çalışmasından kısa bahsetmek istiyorum. Projemiz 4×4 tuş takımı ve servo motordan oluşmakta ve program ile belirlediğimiz şifreyi girmemiz halide servo motorun konumunu değiştirerek kapıyı kilitleyip açmaktadır. Projemize ek olarak eklenecek hoparlor yada alarm sistemi ile şifreyi yanlış girmeniz halinde alarmı çalıştırmayı sağlayabilirsiniz.

Şifreli Kilit projemizde amaç hem kodlamayı hem de algoritmayı öğrenerek kendi kilidimizi ve kendi şifremizi oluşturmaktı. Arduino Uno’ya gerekli programı yükleyip(switch case) yapısını kullanarak bileşenler olan buzzer, servo motor, keypad ve ledleri arduino unoya bağlayarak sistemimizi çalıştırdık. Kapının arkasına servo motorumuzu yerleştirdik. Keypad’den girilen değer eğer doğruysa yeşil ledimiz yanıyor ve kapı otomatik olarak açılıyor. Eğer keypad’den girilen değer yanlış ise kırımızı led yanıyor ve kapı açılmıyor.
Kapı açıldıktan 5 saniye sonra otomatik olarak kendini kapatıyor ve kilitliyor. Bunu daha fazla arttırabiliriz. Biz prototipini yaptığımız için bu şekilde gerçekleştirdik.

19 Şubat 2018 Pazartesi

MQ-7 Sensör Kullanımı

MQ-7 SENSÖR KULLANIMI
                       Merhaba arkadaşlar bu yazımda Arduino ile uğraşanların ilgi alanları olan sensörlerden MQ-7 nin kullanımını bahsedeceğim.

                        Teknik olarak Ortamda bulunan ve konsantrasyonu 10 ile 10,000 ppm arasında değişen karbonmonoksiti algılayan bu yarıiletken gaz sensörü, -10 ile 50°C arasında çalışabilir ve 5V’ta sadece 150mA akım çeker. Analog çıkışı sayesinde algılanan gaz konsantrasyonu kolayca okunabilir. 


                       Bizim dilimizde Karbonmonoksit gazını ölçebilen bir sensördür. Kullanım alanımız soba zehirlenmelerine karşı kullanıyoruz. Öğrencilerle yaptığımız proje de mq-7 gaz sensörü karbonmonoksit gazını algılayınca(bunun limitini siz belirliyorsunuz) istediğiniz işlevi yaptırabiliyorsunuz.  Biz öğrencilerimle karbonmonoksit gazını algılayınca alarmlı ışıklı hem de servo motor ile çalışan pencereler yaptık. Zehirlenmelerin Önüne geçmek amacımızdı.







17 Aralık 2017 Pazar

Teknolojik Ögretmenlere Plickers

Bu uygulamanın en güzel yanı da öğrencilerin hiçbir teknolojik alete ihtiyaç duymadan teknoloji ile içi içe saatler geçirmesi :) 

Benim okulum gibi profil diğer okullara göre düşük bir okuldaysanız öğrencilerin seviyelerine inmek şart müfredat hak getire çünkü. Müfredata göre gidemiyoruz. Müfredat illerde seçilen pilot okulların seviyesinde oluyor. Bizim gibi gariban köy okulları o müfredatın kenarından köşesinden geçerse ne mutlu! Müfredatın da önemli olduğunu düşünmüyorum. Bilgisayar dersi verilecekse tabi ki öncelikle kullanmayı öğreteceksin ardından çağımıza ayak uyduracaksın. Ben geçen sene Arduino öğretiyordum. Bu sene Arduino ile projeler yapıyoruz. Bu sene Python diyecektim ki bu sene gelen öğrencilerimin çoğu bilgisayar kullanmasını bilmiyor. O yüzden 2.dönem bilgisayar öğreneceğiz. Bilgisayarımız olsa keşke... 


Gelelim Plickers programına yarın bende ilk defa uygulayacağım öğrencilerime, deneyimlerimi buradan paylaşırım. 

www.plickers.com  Sitesine giriş yapın. 

Ardından Hakan Emre ŞAHİN'in hazırlamış olduğu bu yazı ile yönergeleri takip ederek kullanmaya başlayabilirsiniz. 

Yarın uygulayıp sizlerle olacağım. 


30 Ekim 2017 Pazartesi

100 Adımda Python Programlama Kısım 4

PYTHON

76) Son olarak aşağıdaki kodları açıklayarak sys.stdout konusunu daha iyi anlayalım.  
>>> sys.stdout.name
 >>> sys.stdout.mode 
>>> sys.stdout.encoding 
Burada sys.stdout.name komutu standart çıktı konumunun o anki adını verecektir. sys.stdout.mode komutu ise standart çıktı konumunun hangi kipe sahip olduğunu gösterir. Standart çıktı konumu genellikle yazma kipinde (w) bulunur. sys.stdout.encoding kodu ise standart çıktı konumunun sahip olduğu kodlama biçimini gösterir. Kodlama biçimi, standart çıktı konumuna yazdıracağınız karakterlerin hangi kodlama biçimi ile kodlanacağını belirler. Kodlama biçimi Windows’ta genellikle ‘cp1254’, GNU/Linux’ta ise ‘utf-8’dir. Eğer bu kodlama biçimi yanlış olursa, mesela dosyaya yazdıracağınız karakterler içindeki Türkçe harfler düzgün görüntülenemez.

77) Kaçış dizileri (escape sequence) nedir? Python’da özel anlam taşıyan işaret veya karakterleri, sahip oldukları özel anlam dışında başka bir amaçla kullanmamızı sağlayan araçlardır. Örnek; 
>>> print("Python programlama dilinin adı \"piton\" yılanından gelmez") 
Python programlama dilinin adı "piton" yılanından gelmez 
Yukarıdaki karakter dizisini hem çift tırnak içine alıp hem karakter dizisi içinde çift tırnak kullandığımız halde herhangi bir hata almadığımızı görüyorsunuz. Yukarıdaki kodlarda hata almamızı önleyen şey \ (ters taksim) işaretidir. \ (ters taksim) kaçış dizilerinden sadece bir tanesidir. Başka bir örnek: 
>>> print("Python 1990 yılında Guido Van Rossum 
\ tarafından geliştirilmeye başlanmış, oldukça \
 güçlü ve yetenekli bir programlama dilidir.") 
Python 1990 yılında Guido Van Rossum tarafından geliştirilmeye başlanmış, oldukça güçlü ve yetenekli bir programlama dilidir. 

Normal şartlar altında, bir karakter dizisini tanımlamaya tek veya çift tırnakla başlamışsak, karakter dizisinin kapanış tırnağını koymadan Enter tuşuna bastığımızda Python bize bir hata mesajı gösterir. İşte \ kaçış dizisi bizim burada olası bir hatadan kaçmamızı sağlar. Eğer Enter tuşuna basmadan önce bu işareti kullanırsak Python tıpkı en üst örnekteki çift tırnak işaretinde şahit olduğumuz gibi hata vermeden bir alt satıra geçecektir.

78) Bazen kaçış dizilerini fark etmemiz gerekir çünkü kodumuz hata verebilir. Örnek: 
>>> open("C:\nisan\masraflar.txt") 
Traceback (most recent call last): 
File "", line 1, in 
open("C:\nisan\masraflar.txt") 
OSError: [Errno 22] Invalid argument: 'C:\nisan\\masraflar.txt' 

Yukarıdaki kodumuz hata verdi. Bir dosya açmaya çalıştık ama dosyanın içindeki \n ifadesini gözden kaçırdık. Bu aslında bir kaçış dizisidir ve daha önceki konularda gördüğümüz üzere satırbaşı yapmaya yarar. Eğer sorunun gözden kaçan bir kaçış dizisinden kaynaklandığını fark edemezseniz, bu sorunu çözebilmek için saatlerinizi ve hatta günlerinizi harcamak zorunda kalabilirsiniz. Ancak ve ancak yukarıdaki karakter dizisi içinde sinsice gizlenen bir \n kaçış dizisi olduğu gözünüze çarparsa bu sorunu çözme yolunda bir adım atabilirsiniz. Bu problemi en başta kullandığımız kaçış dizisi olan \ işareti ile çözebiliriz.

>>>open("C:\\nisan\\masraflar")    // bir \ işareti ile \n parametresini yok saydık. >>>open("C:/nisan/masraflar")      // ya da dizin adlarını ters taksim yerine düz taksim ile ayırmayı tercih edebiliriz. 

79) Sekme (\t) kaçış dizisi: 

>>> print("abc\tdef")        
abc def 

Ne olduğunu fark ettiniz mi? \t parametresi “abc” ifadesinden sonra sanki Tab (sekme) tuşuna basılmış gibi “def” ifadesini sağa doğru itiyor.

>>> print(*"123456789", sep="\t") 
1 2 3 4 5 6 7 8 9

Peki, şimdi ne yaptık? String karakterlerinin arasına belli aralıklarla boşluk bıraktık.

80) Zil sesi (\a) kaçış dizisi:

>>> print("\a")              // bir bip sesi elde ettik.
!bip!

>>> print("\a"*5)               // bip sesini 5 katına çıkardık.
!bip!!bip!!bip!!bip!!bip!

Bu kaçış dizisinin GNU/Linux üzerinde çalışma garantisi yoktur. Hatta Windows sistemlerinde dahi çalışmayabilir. Hatta burada çıktı olarak !bip! ifadesinin yerine sembolü gelebilir.

81) Aynı satırbaşı (\r) kaçış dizisi:

>>> print("Merhaba\rDünya")

 Dünyaba

Burada, “Merhaba” karakter dizisi ekrana yazdırıldıktan sonra \r kaçış dizisiyle satır başına dönülüyor ve bu kaçış dizisinden sonra gelen “Dünya” karakter dizisi “Merhaba” karakter dizisinin üzerine yazıyor. Tabii “Dünya” karakter dizisi içinde 5 karakter, “Merhaba” karakter dizisi içinde ise 7 karakter olduğu için, “Merhaba” karakter dizisinin son iki karakteri (“ba”) dışarda kalıyor. Böylece ortaya “Dünyaba” gibi bir şey çıkıyor. Bu kaçış dizisinin her işletim sisteminde çalışma garantisi yok. Ancak yine de bilmek te fayda var.

82) Düşey sekme(\v) kaçış dizisi:

>>> print("düşey\vsekme")           // alt satıra geçip tab tuşuna basılmış etkisi yarattı. düşey
sekme

Her işletim sisteminde çalışmayabilir. Dolayısıyla önerilmez.

83) İmleç Kaydırma (\b) kaçış dizisi:

>>> print("yahoo.com\b.uk")
yahoo.co.uk

\b kaçış dizisinin etkisiyle imleç bir karakter sola kaydığı için, ‘com’ kelimesinin son harfi silindi ve bunun yerine \b kaçış dizisinden sonra gelen .uk karakterleri yerleştirildi. Bu kaçış dizisinin Python’da çok nadir kullanıldığını ve çalışmama ihtimalini söyleyelim.

84) Küçük Unicode (\u) kaçış dizisi:

UNICODE, karakterlerin, harflerin, sayıların ve bilgisayar ekranında gördüğümüz bütün işaretlerin her biri için tek ve benzersiz bir numaranın tanımlandığı bir sistemdir. Bu sistemde, ‘kod konumu’ (code point) adı verilen bu numaralar özel bir şekilde gösterilir. Örneğin ‘İ’ harfi UNICODE sisteminde şu şekilde temsil edilir:

u+0130
Python programlama dilinde yukarıdaki kod konumu ise şöyledir:

\u0130
O halde kodumuzu yazalım ve çıktıyı görelim.


>>> '\u0130'
 'İ'

85) Büyük Unicode (\U) kaçış dizisi

Bu kaçış dizisi \u adlı kaçış dizisiyle hemen hemen aynı anlama gelir. Ancak U ile gösterilen kod konumları u ile gösterilenlere göre biraz daha uzundur. Küçük u kaçış dizisini kullanarak ‘İ’ harfinin UNICODE kod konumunu şöyle temsil ediyorduk:

>>> '\u0130'
'İ'

Eğer aynı kod konumunu büyük U ile göstermek istersek şöyle bir şey yazmamız gerekir:


>>> '\U00000130'
'İ'

Gördüğünüz gibi, burada \U kaçış dizisinden sonra gelen kısım toplam 8 haneli bir sayıdan oluşuyor. \u kaçış dizisinde ise bu kısmı toplam 4 haneli bir sayı olarak yazmıştık. İşte \u kaçış dizisi ile \U kaçış dizisi arasındaki fark budur.

86) Uzun Ad (\N) kaçış dizisi: UNICODE sisteminde her karakterin benzersiz bir kod konumu olduğu gibi bir de uzun adı vardır. Örneğin ‘a’ harfinin UNICODE sistemindeki uzun adı şudur: LATIN SMALL LETTER A

Bu uzun adları öğrenmek için unicodedata adlı bir modülden yararlanabilirsiniz:

>>>import unicodedata // Bir modül kullanmak için import komutu hayatidir unutmayın
>>>unicodedata.name('a')
'LATIN CAPITAL LETTER A WITH CEDILLA'

İşte \N kaçış dizisi bu uzun isimleri kullanarak asıl karakterleri elde eder.

>>> print("\N{LATIN SMALL LETTER A}")
A

87) Onaltılı Karakter (\x) kaçış dizisi: Onaltılı (hexadecimal) sayma sistemindeki bir sayının karakter karşılığını gösterir.

>>> "\x41" // Onaltılı sayma sistemindeki 41 sayısı ‘A’ harfine karşılık gelir.
'A'

88) Etkisizleştirme (r) kaçış dizisi: Bu kaçış dizisini, daha önce öğrendiğimiz \r adlı kaçış dizisi ile karıştırmayın. Şöyle bir çıktı almak istediğimizi düşünün;

Kurulum dizini: C:\aylar\nisan\toplam masraf

>>> print("Kurulum dizini: C:\aylar\nisan\toplam masraf") 
Kurulum dizini: C:ylar
isan oplam masraf

Olmadı dimi? Python karakter dizisi içinde geçen ‘\aylar’, ‘\nisan’, ve ‘\toplam masraf’ ifadelerinin ilk karakterlerini yanlış anladı! Bu gibi ifadeler Python’ın gözünde birer kaçış dizisi. Dolayısıyla Python \a karakterlerini görünce bir !bip! sesi çıkarıyor, \n karakterlerini görünce satır başına geçiyor ve \t karakterlerini görünce de Tab tuşuna basılmış gibi bir tepki veriyor. Daha önce bu durumu şöyle bir kod yazarak engellemiştik:

>>> print("Kurulum dizini: C:\\aylar\\nisan\\toplam masraf") Kurulum dizini: C:\aylar\nisan\toplam masraf

Ama bu sorunun üstesinden gelmenin çok daha basit ve pratik bir yolu vardır:

>>> print(r"Kurulum dizini: C:\aylar\nisan\toplam masraf") Kurulum dizini: C:\aylar\nisan\toplam masraf // baştaki r harfi her şeyi hallediyor.


89) Amacımız aşağıdaki gibi bir çıktı elde etmek olsun.

Kaçış dizisi: \

O halde kodumuzu yazalım.

>>>print("Kaçış dizisi: \") 
SyntaxError: EOL while scanning string literal

Durup dururken bu kod neden çalışmadı acaba? Biliyorsunuz ki çift tırnak açtığımız zaman tekrar kapatmamız gerekiyor. Ancak ilginç bir şekilde burada çift tırnağımızı kapattığımız görülüyor. Yani sorun yok gibi. Ama öyle değil, lütfen sondaki kapanış tırnağının soluna bakın. Ne görüyorsunuz? \ işareti dimi? Peki bu işaretin anlamı neydi? Bu işaret önündeki parametreleri geçersiz kılıyordu. Yani bir nevi yok edici. Bu işaret yüzünden sanki kapanış tırnağını kapatmamışız gibi bir etki yarattık. Hatta öyle ki bu etkisizleşmeyi, karakter dizisinin başına koyduğunuz ‘r’ kaçış dizisi de engelleyemez. O halde çözüm nedir? Birinci çözüm \ işaretinin sağına bir adet boşluk karakteri yerleştirmektir. Çünkü \ işareti sağına baktığı zaman sadece bir boşluk görecek ve etkisizleştirecek bir şey bulmayacak. Örnek:

>>> print("Kaçış dizisi: \ ") \ işaretinin hemen sağında bir boşluk bıraktık. 
Kaçış dizisi: \

Diğer bir çözüm kaçış dizisini çiftlemek. Yan yana ters taksim yapacağız. Böylece birbirini götürecekler ve bir etki olmayacak.

>>> print("Kaçış dizisi: \\") 
Kaçış dizisi: \

Ya da karakter dizisi birleştirme yöntemlerinden herhangi birini kullanabilirsiniz:

>>> print("Kaçış dizisi: " + "\\") 
>>> print("Kaçış dizisi:", "\\") 
>>> print("Kaçış dizisi: " "\\") 

90) Sayfa Başı (\f) kaçış dizisi: Pek kullanılmayan bir kaçış dizisidir. Görevi, özellikle eski yazıcılarda, bir sayfanın sona erip yeni bir sayfanın başladığını göstermektir. Eski model yazıcılar, bu karakteri gördükleri noktada mevcut sayfayı sona erdirip yeni bir sayfaya geçer.

>>> f = open("deneme.txt", "w") 
>>> print("deneme\fdeneme", file=f) 
>>> f.close()

Şimdi bu kodlarla oluşturduğunuz deneme.txt adlı dosyayı Microsoft Word gibi bir programla açın. ‘deneme’ satırlarının iki farklı sayfaya yazdırıldığını göreceksiniz. Bu arada, eğer Microsoft Word dosyayı açarken bir hata mesajı gösterirse, o hata mesajına birkaç kez ‘tamam’ diyerek hata penceresini kapatın. Dosya normal bir şekilde açılacaktır.

91) Programları Kaydetme ve Çalıştırma: Şimdiye kadar bütün işlerimizi Python’ın etkileşimli kabuğu üzerinden hallettik. Ancak etkileşimli kabuk son derece kullanışlı bir ortam da olsa, bizim asıl çalışma alanımız değildir. Kodlar çoğalıp büyümeye başlayınca bu ortam yetersiz gelmeye başlayacaktır.

92) Etkileşimli kabuğu genellikle ufak tefek Python kodlarını test etmek için kullanırız.

93) Asıl programlarımızı etkileşimli kabuğa değil, program dosyasına yazarız.

94) Bu arada yazdığınız kodları bir yere kaydedip saklamak isteyeceksiniz. İşte burada metin düzenleyiciler devreye girecek.

95) Python kodlarını yazmak için istediğiniz herhangi bir metin düzenleyiciyi kullanabilirsiniz. Hatta Notepad bile olur. Ancak Python kodlarını ayırt edip renklendirebilen bir metin düzenleyici ile yola çıkmak her bakımdan hayatınızı kolaylaştıracaktır.

96) Python kodlarınızı yazmak için Microsoft Word veya OpenOffice.Org OOWriter gibi, belgeleri ikili (binary) düzende kaydeden programlar uygun değildir. Kullanacağınız metin düzenleyici, belgelerinizi düz metin (plain text) biçiminde kaydedebilmeli.

97) Eğer kullandığınız sistem GNU/Linux’ta Unity veya GNOME masaüstü ortamı ise başlangıç düzeyi için Gedit adlı metin düzenleyici yeterli olacaktır. Eğer kullandığınız sistem GNU/Linux’ta KDE masaüstü ortamı ise Kwrite veya Kate adlı metin düzenleyicilerden herhangi birini kullanabilirsiniz. Şu aşamada kullanım kolaylığı ve sadeliği nedeniyle Kwrite önerilebilir.

98) Python programlama dilini öğrenmeye yeni başlayan Windows kullanıcıları için en uygun metin düzenleyici IDLE’dır. Başlat > Tüm Programlar > Python3.5 > IDLE (Python GUI) yolunu takip ederek IDLE’a ulaşabilirsiniz. IDLE aslında Python’ın etkileşimli kabuğudur. Dolayısıyla asıl kodları buraya yazmayacağız. Python programlama diline yeni başlayanların en sık
yaptığı hatalardan biri de, kaydetmek istedikleri kodları bu ekrana yazmaya çalışmalarıdır.





99) Unutmayın, aşağıdaki ekrana yazdığınız kodlar kapattığınızda kaybolur. IDLE’ı açtığınızda şöyle bir ekranla karşılaşacaksınız:
Sol üst köşede File [Dosya] menüsüne tıklayın ve menü içindeki New Window [Yeni Pencere] düğmesine basın. Aşağıdaki gibi bir ekranla karşılaşacaksınız. İşte Python kodlarımızı bu beyaz ekrana yazacağız.



100) Açtığımız yeni dosyaya aşağıdaki kodları yazalım. Dikkat ettiyseniz artık >>> sembolü yok.

tarih = "02.01.2012"
gün = "Pazartesi"
vakit = "öğleden sonra"
print(tarih, gün, vakit, "buluşalım", end=".\n")




Bu noktadan sonra File > Save as yolunu takip ederek programımızı masaüstüne randevu.py adıyla kaydediyoruz. Şu anda programımızı yazdık ve kaydettik. Artık programımızı çalıştırabiliriz. Bunun için Run > Run Module yolunu takip etmeniz veya kısaca F5 tuşuna basmanız yeterli olacaktır. Bu iki yöntemden birini kullanarak programınızı çalıştırdığınızda şöyle bir çıktı elde edeceksiniz:

02.01.2012 Pazartesi öğleden sonra buluşalım.

Tebrikler! İlk Python programınızı yazıp çalıştırdınız.

Öne Çıkan Yayın

Hibernate Nedir?

Hibernate Nedir? Veritabanı işlemlerinde bize yardımcı olan, obje kavramından uzaklaşmadan işimize devam etmemizi sağlayan bir yapı. Artık...