2-) Düğmeye Basma Vakti Geldi


     Sonunda 3. yazımızıda yazmak nasip oldu, inşallah yeni bir arduino uygulamasını yapımını daha anlatmaya çalışıcam. Yapıcağımız uygulama ne derseniz açıkçası yukardaki resimle pek ilgisi yok o resmi ilginizi çeksin diye koydum :D bu gün yapıcağımız uygulama biraz daha yazının başlığıyla ilgili. 2. yazımızda arduino karttan veri almayı öğrenmiştik bu yazımızda arduino kartımıza bir buton yardımıyla veri gönderip LED'imizin yanmasını sağlıycaz. Yalnız sizden ufak bir ricam var lütfen yapılan bu LED  yakıp söndürme uygulamalarını küçümsemeyelim, siz eğer o ledlerin yerine gerekli motorları koyarsanız yukardakine benzer bir robot kolda yapabilirsiniz. Bazı arkadaşlar alttarafı ampül yakıp söndürüyosun diye bu işleri küçümsüyo o yüzden böyle bir uyarıda bulunuyum dedim :) İnşallah biyerlerden para bulup kendime bi 3d yazıcı alabilirsem ilerleyen uygulamalarda bir robot kol yapmayıda düşünüyorum, o zamana kadar resmiyle yetinelim :D

      Uygulamaya başlamadan hatırlatmamızı yapalım, bu uygulamaya başlamadan lütfen önceki yazıları okuyalım, çünkü orda verdiğim bazı bilgileri kalabalık olmasın diye burda vermiyorum.
     Bu uygulamamızda tek bi devre yapıcaz ama yazdığımız kodlarda ufak değişiklikler yapıp, LEDin farklı tepkiler vermesini sağlıycaz O yüzden uygulama hakkında biraz daha bilgi veriyim.

**İlk baştaki amacımız butona bastığımız sürece LEDin yanması, aslında bunun için arduino karta gerek yok, pil, LED, anahtar ve birazda kabloyla bunları kolaylıkla yapabilirz. Ama karta veri gönderme mantığını anlamamız için gerekli.
**2. olarak butona bastığımız sürece LEDin 50ms aralıklarla yanıp sönmesini sağlıycaz. (50ms 1 saniyenin 20'te biridir sıkıyosa bunu arduinosuz elinizle yapmaya çalışın :D)
**3. olarakta butona basılı değilken ledin 500ms lik aralıklarla yanıp sönmesini, basıldığındaysa 50ms lik aralıklarla yanıp sönmesini sağlıycaz.
Şimdi uygulama için malzeme listesini vererek başlayalım.

Neler Gerekli?
*Arduino Uno/Mega
*Arduino Yazılımı
*Breadboard
*Jumper Kablo Seti
*2 tane 470 Ohm Direnç
*5mm LED
*Buton

      Bu uygulamada daha önceden açıklamadığımız bi buton var onuda tanımlamaya gerek yok heralde bildiğiniz düğme işte :)

     Uygulamamıza ilk olarak kurmamız gereken devre ile başlayalım




     Şimdi yukardaki devreyi inceleyelim, bir önceki yazımızda LEDin bağlantılarını anlattığım için o kısma değinmiyorum direk buton kısmından başlıyorum, yukardaki sağ kısımda yani butonun olduğu yerde ne olmuş bakalım, butonun bir bacağına 5v bağlanmış diğer bacağında ise bir koldan direk 42 numaralı pin'e kablo çekilmiş, bir koldanda direnç üzerinden GND yani toprağa kablo çekilmiş. Şimdi bana göre yukardaki devrenin saçmalığından bahsediyim biraz, bizim amacımız ne 42 numaralı pin'e veri göndermek, veri dediğimiz şeyde 5v elektrik göndermek, veri diyince gözünüz korkmasın :D butonun bir ucunda 5v bir ucundada 42 numaralı pin herşey iyi hoşta pinin bi ucunda neden direnç vasıtasıyla toprağa bağlantı var demi? Bunun sebebi elektrik elektronik mühendislerinin biz makina mühendisleri kadar becerikli olmayışı arkadaşlar :D biz eğer orda toprağa bağlantı sağlamazsak parazitmi ne oluşuyo kart saçmalıyo biraz. O yüzden direnç üzerinden GND pin'ine kablo çekiyoruz.

     Şimdi kodlama bölümüne geçelim, Uygulamamızda 42 numaralı pin'e buton aracılığıyla veri göndericez daha sonrada 21 numaralı pin'deki LEDin yanmasını sağlıycaz
İlk olarak kartımızdaki 21 numaralı pin'i çıkış 42 numaralı pin'i de giriş olarak tanımlayalım
void setup bölümündeki süslü parantezler arasına

pinMode(42, INPUT);          //42 numaralı pin'i giriş olarak ayarladık
pinMode(21, OUTPUT);      //21 numaralı pin'i çıkış olarak ayarladık

yazıyoruz. Daha öncede dediğim gibi 3 tane program yazıcaz, bu 3 programdada void setup bölümünde aynı şeyler yazıcak çünkü devrede kullandığımız pinlerde herhangi bir değişiklik yapmıyoruz.

     Şimdi ilk baştaki kısmı yani butona basınca LEDin yanması elimizi çekince LEDin sönmesi için olan bölümün kodlarını yazalım. void loop bölümündeki süslü parantezler arasına aşağıdaki kodları yazalım.

int buton = digitalRead(42);  
                                             //digitalRead(xx) kodu istediğiniz bir pindeki değerin HIGH mı yoksa LOW mu olduğunu belirlemek için kullanılıyor. Yani elektrik varmı yokmu onu öğreniyoruz. ``int`` kodunu ise digitalRead(42) den aldığımız değere buton ismini vermek için kullandık.

if (buton == HIGH)
{
digitalWrite(21, HIGH);
digitalWrite(21, LOW);
}
                                                //bu bölümde if kodunu kullandık, dedikki eğer butondan HIGH değeri geliyosa 21 numaralı pin'e elektrik gönder. Burda aklınıza neden digitalWrite(21, LOW) dediğimiz gelebilir, bunun nedeni butondan elimizi çekince LEDin sönmesi eğer bunu yazmasaydık LED birkez yanardı ve daha sonra sönmezdi.

     Evet uygulamamızın ilk bölümü bitti, Arduino programına kodların yazılmış hali aşağıdaki gibi olucak. Bu kodları yazıp kartımıza yüklersek butona basınca LED yanıcak butondan elimizi çekince sönücek.


     Şimdi 2. kod bölümüne geçelim, bu sefer butona basınca LEDin 50ms aralıklarla yanıp sönmesini istiyoruz. void setup bölümü daha öncede dediğim gibi aynı olduğu için onu yazmıyorum direk void loop bölümünden başlıyorum. void loop bölümüne aşağıdaki kodları yazıyoruz.

int buton = digitalRead(42);
if (buton == HIGH)
{
digitalWrite(21, HIGH);
delay(50);
digitalWrite(21, LOW);
delay(50);
}

farkettiyseniz burda bir öncekiyle aynı kodları yazdım sadece yanma ve sönme sürelerini aralarına delay kodu ile 50ms aralık koyarak yanma ve sönme sürelerini ayarladım. 2. Bölümümüzde bitti kodların programa yazılmış hali aşağıdaki gibi olucak, eğer bu kodları yazıp kartımıza yüklersek butona basınca LED 50ms lik aralıklarla yanıp sönücek.



     Son bölüme geçme vakti geldi, bu bölümde LED karta elektrik verildiği müddetçe 500ms lik aralıklarla yanıp sönücek, eğer LEDe basılırsada 50ms lik aralıklarla yanıp sönücek. Yine öncekilerdeki gibi void setup bölümü aynı olduğu için void loop bölümündeki kodları veriyorum. Kodlar aşağıdaki gibi olucak.

int buton = digitalRead(42);
if (buton == HIGH)
{
digitalWrite(21, HIGH);
delay(50);
digitalWrite(21, LOW);
delay(50);
}

else
{
digitalWrite(21, HIGH);
delay(500);
digitalWrite(21, LOW);
delay(500);
}

farketmişsinizdir bu bölümde 2. bölüme çok benziyo tek farklılığı biz karta dedikki sen butona basılmadığındada bişeyler yap boş durma. Son bölümümüzde bitti, eğer bu kodları yazıp karta yüklersek, LED karta elektrik verildiği anda 500ms lik aralıklarla yanıp sönmeye başlıcak, butona basıldığında ise 50ms lik aralıklarla yanıp sönmeye başlıcak. Kodların yazılmış hali aşağıda.

     Bir uygulamamızın daha sonuna geldik :) ben sizi yazdığımız kodlarla kartın neler yaptığını gösteren video ile başbaşa bırakıyorum, sormak istediğiniz bir soru olursa aşağıdaki yorum bölümünden veya mesaj yoluyla sorabilirsiniz, herkese hayırlı ramazanlar :)


4 yorum:

  1. Vallahi hacı bu kadar zevkli anlatan görmedim.
    Daha ileri seviye proje anlatımlarını bekliyorum.

    YanıtlaSil
    Yanıtlar
    1. Teşekkürler :)
      Yurt dışından baya parça sipariş ettim, inşallah onlar gelirse farklı şeyler yapmaya çalışıcam :)

      Sil
  2. Benim gibi elektronik bilgisi olmayanlar için bile anlaşılır olmuş. Bende ses ile fotoğraf makinesini tetikleyecek bir sistem yapmak istiyorum. Buradan okuduklarım ile yapabilirim inşallah...

    YanıtlaSil
    Yanıtlar
    1. Ben arduino işine sıfırdan başladım, Genelde internetteki anlatımları elektronik bilgisi olan kişiler anlatıyor, o anlatımları okurken bazı yerlerde hiç bilgim olmadığı için takılıyodum. Bu blogda elimden geldiğince basit ve anlaşılır anlatımlar yapmaya çalıştım :)

      Sil