Arduionayla ilgilenen arkadaşlar bir buluşma yapsak iyi olur ne dersiniz? |
Ardunio, kodların yazıldığı sayfaya sketch adını veriyor yani karalama.Setup() ve Loop() bölümeri bu karalamalarda mutlaka olmak zorunda. void setup () Bu yazımda Arduino'nun çıkışlarına led bağlayarak, bir kaç örnekle çıkışlara hükmedeceğiz.Yazımda yapacağımız uygulamalardaki malzemeler ise şunlar: - 4 adet Led (Farklı renklerde olursa güzel olur.) - Jumper Kablolar - Direnç (İsteğe bağlı ben şahsen kullanmadım.) Öncelikle her mikroişlemciye girişte olduğu gibi klasik bir giriş ile yani led flaşör ile giriş yapalım. Launchpad 10.pinini çıkış olarak aldım ve oraya bir led bağladım. Dileyen ledin önüne direnç de koyabilir. İsteğimiz şu olacak, led 1 saniye yanacak ve 1 saniye sönecek. Kodlar ve şeması; void setup() { < Resime gitmek için tıklayın > Biraz daha görsel tabiri caizse cix birşey yapalım :) . 4 adet ledi yanyana sırayla yakalım ve 4'ü aynı anda yanmadan hiçbiri sönmesin. Kodlar : int led1=7; < Resime gitmek için tıklayın > Video : Videoyu izlemek için tıklayınız |
Daha önce dijital çıkışlara hakim olmuştuk. "1" ve "0" mantığı ile ledimizi yakmış ve söndürmüştük.Fakat hayatta ki ölçülebilen değerler sadece "1" ve "0" lardan oluşmuyor. Bu yazımda analog çıkışlarla ilgili çalışma yapacağız. Arduino UNO ve türevleri bu özelliği barındırmakta. Bu özellik elbette ki tüm çıkış pinlerinde yok. Üzerinde ~ işareti bulunan pinleri kullanırsak analog özelliğini de kullanabiliriz. Dijital çıkışlarda " digitalWrite(10, HIGH ), digitalWrite(10, LOW) " komutunu kullanıyorduk. Çıkışımız ya "1" ya da "0" oluyordu. Analog özelliğini kullanabilmemiz için ise aşağıdaki komuta ihtiyacımız olacak.
Öncelikle devremizi aşağıdaki gibi kuruyoruz.Tabi siz isterseniz üzerinde "~" işareti bulunan herhangi bir pini de kullabilirsiniz. < Resime gitmek için tıklayın > Kodlar ve açıklaması : int led=9; 9. pinimizi çıkış olarak ayarladık Parlaklık ismiyle integer bir değer okuttuk.Bu değerimiz analog çıkış almamızı sağlayacak. 8 bitlik dijital değeri analog değere çevirmiş olduk 2^8=256 formülünden analog çıkışımız 0-255 arasında değişecek. Biz bu değeri 5'er 5'er 255'e kadar arttırdık ve sonra da 255'ten 5'er 5'er azalttık. Böylece analog olarak ledimizin parlaklığını arttırmış ve azaltmış olduk. |
Butonlar mikroişlemcilerle yapılan her proje önemli elemanlardır. Yazılan programları çalıştırmada ya da çalışan programlara anında müdahele için butonlar kullanılmaktadır. Açıkçası yazılan program sonrası uygulamaya geçildiğinde ve butona basıldığında bir led in yanması bile ayrı bir zevk veriyor insana :). < Resime gitmek için tıklayın > Butonlar önemli çünkü mikroişlemciler ile yapacağımız herhangi bir robotik uygulamada, robota bu butonlar sayesinde yön verme gibi bir seçeneğimiz bulunmakta. Oyuncak arabalar için git/gel komutları gibi. Arduino'dan önce kullanmış olduğum MSP430 Launchpad üzerinde kendi butonu bulunmaktaydı ve geriye sadece onu programa okutmak kalıyordu. Arduino UNO'da sadece reset butonu olduğu için bu butonu kendimiz harici olarak eklicez. Butonu şemada görüldüğü gibi +Vin ile toprak arasına bir direnç ile birlikte bağlıcaz. Arduino, PC ile seri haberleşme yapabilme özelliğine sahip bir mikroişlemci. Arduino programının üst menüsünde bulunan Tools kısmından Serial Monitor yazan yere tıklarsak seri haberleşmeyi gösterecek olan pencereyi görebiliriz. Elbette ki bu seri haberleşmeyi kullanmamız için gereken bir komutumuz olacak.Bir kez kullanacağımız için bu komutu void setup() içerisinde kullanıcaz.
Şemamızdaki devreyi kurduktan sonra aşağıdaki komutları yükleyebiliriz artık mikroişlemcimize. int buton = 2; // 2.pini isimlendirdik INPUT_PULLUP komutunu kullandım çünkü sadece INPUT komutunu kullandığımda buton değerleri saçmaladı biraz. INPUT_PULLUP komutunu kullandığımda sonuçlarım daha sağlıklı oldu. Mikroişlemcilerin tipine göre butonların okunması farklılık gösterebiliyor. Arduino'da butona bastığımızda "0", basılmadığında "1" sonucunu alıyoruz. < Resime gitmek için tıklayın > Seri haberleşme özelliği sayesinde butonun durumunu ekranda görebiliyoruz. 0 ise basılı , 1 ise basılı değil. Küçük bir uygulama yapalım şimdi. Bir portu input, başka bir portu output olarak kullanalım. Çıkışa led bağlayalım,butona bastığımızda led yansın diğer koşulda da sönük halde kalsın. Devremizi aşağıdaki gibi bağlayalım. < Resime gitmek için tıklayın > 2.pine buton, 4.pine de led bağladık.Komutlar : int buton = 2; //buton'a 2 sayısı atandı < Resime gitmek için tıklayın > Videoyu izlemek için tıklayınız |
Hayatta herşeyin "1" ve "0" lardan oluşmadığından bahsetmiştik.Hayat analog değerlerle kaynıyor :D. Bu yazımda bunu daha iyi anlıcaz. Maksimum 5V'a kadar ölçüm yapabilen bir voltmetre yapıcaz. < Resime gitmek için tıklayın > Arduino analog girişleri 10bitliktir. 2^10= 1024 matematiksel hesabından, okunan her analog değer 1024 örneğe ayrılır.Bu ayrılan örneklere göre de okunma işlemi yapılır yani her değer 0-1023 değerleri ve bu değerler arasında ki en yakın tamsayı değerine atanır. Aslında daha önce bahsetmem gerekiyordu (Analog çıkışlarda) bu ADC olayından , geç kaldığım için özür dilerim. Bizim analog gerilim değerimiz maksimum 5V olacak. Bu 5V'luk değer 0-1023 değerleri arasında atanacak. Bu, seri haberleşme portunu kullanıp değer okurken küçük bir matematiksel formüle ihtiyacımız olacağını gösteriyor bize. Öncelikle potansiyometrenin bir ucu 5V'ta, bir ucu toprakta, orta ucu da A1 pininde olmak üzere şekildeki gibi devremizi bağlıyoruz.Analog girişi üzerinde Analog yazan pinlerden yapıyoruz. void setup () A1 pininden okunan değerler 0 ile 1023 arasında değişen değerler olacak. Temel Ölçme dersinde öğrendiğimiz analog ölçüm formülünü bu kısımda kullandık, kullandık ki seri haberleşme sayesinde ekrana yazdıracağımız değer volt biriminde olsun. Gerilim = Okunan Skala Değeri x ( Maksimum Okunabilen Değer / Maksimum Skala ) < Resime gitmek için tıklayın > Analog olarak değer okumak bizim için çok mühim olacak çünkü aklıma gelen örnek Helikopterler,Multikopterler vb. araçları kullanırken yapacağımız kumanda sistemlerinde kullanabiliriz bu analog değer okumayı. |
Butonların öneminden daha önceki yazımda bahsetmiştim. Burada da yine bir öncekine benzer bir uygulama yapacağız. Bu uygulamanın yapılış amacını aslında 7 segment display uygulamalarına giriş için yaptığımızı düşünebiliriz. < Resime gitmek için tıklayın > Kısaca uygulamadan söz etmek gerekirse amacımız burda 1 sayısal giriş ile 2 sayısal çıkışı yönetmek olacak. Butona her bastığımızda çıkışın yeri değişecek. Yani çıkış olarak kullandığımız yeşil ve turuncu ledleri sırayla butona basarak yanmasını sağlayacağız. Bu uygulamaya geçmeden önce size aritmetik bir operatör olan " mod " almayı anlatacağım. Arduino'da ve bir çok C tabanlı dilde mod " % " ifadesi ile alınmakta. Yani biz herhangi bir integer değerin herhangi bir sayı modunda almak istersek şu şekilde kullanmamız gerekiyor. Integer değeri= sayi , mod=5 olsun;
Uygulamamızda bu kavramın daha iyi anlaşılacağını düşünüyorum. int led1=8; //yeşil led Programda çıkışları seçmeyi (aslında 1 olanı seçmeyi) mod2ye bağlı olarak ledsirasi integer değerine göre seçtim. ledsirasi 0'dan başlamak üzere her butona basıldığında 1 artacak ve mod2ye göre de ya "1" ya da "0" olacak. Buna göre de ya yeşil led ya da kırmızı led in yanması sağlanmış olacak. Videoyu izlemek için tıklayınız Bir sonraki uygulamamızda 7 segmentli gösterge ile 0-9 arası sayıcı yapacağız. Daha önce CMOS 4026 entegresi ile hazır olarak bunu yapmıştım bu sefer arduinoyu kendimiz programlayarak bunu yapacağız. Videoyu izlemek için tıklayınız |
Bir önceki yazımda ledleri buton yardımıyla sırasıyla yakmıştık. Bu yazımda ise 7 segment gösterge (display) kullanarak 0-9 sayıcı yapacağız. Ama önce 7 segment display hakkında biraz bilgi edinmeliyiz. Displaylerin bir çok çeşiti bulunmakta (ortak anot,ortak katot, 7seg,14 seg, 16 seg vs.). Biz projemizde 7 segmentli ortak katot display kullanacağız. Display 8 adet ledden oluşmakta. Bunlardan 7 tanesini istediğimiz rakamları göstermek için kullanacağız. Bu yüzden de hangi ledi hangi harfle adlandırdığımızı programlamanın ve sayıcının sağlığı açısından iyi öğrenmemiz gerekiyor. Sağdaki resim hangi ledin hangi harf ile standardize edildiğini gösteriyor. Bu isimler standarttır tabi siz kendi istediğiniz gibi adlandırabilirsiniz fakat şimdiki proje için standarda uyacağız. < Resime gitmek için tıklayın > < Resime gitmek için tıklayın > Elimizde bulunan katot displayin hangi pininin hangi ledi yaktığı yandaki resim göstermekte. A ledini yakmak için örneğin 7 numaralı display pinine gerilim vermeliyiz. Tabii ki 5 voltu aşmamak ve 8.,3. pinlerin toprağa bağlı olması şartı ile. Herhangi bir lede gerilim uygulamadaki direnç bağlama kuralımızı burda da işleyebiliriz o yüzden pinlere direkt 9v veya benzeri gerilimleri uygulamayın :) . Projemize gelince, yanmasını istediğimiz ledleri teker teker Arduino'muzdaki belirlediğimiz pinlere takıyoruz. Kusura bakmayın fritzingde devre biraz karışık çıktı fakat eminim ki kodlara bakarak zaten devreyi kendiniz de kurabilirsiniz rahatlıkla. Devrede bir önceki yazıda yaptığımız uygulamaya benzer olacak sadece daha gösterişli ve daha anlamlı daha işe yarar bir proje olacak. Geliştirilerek skorboard yapılabilir bu proje ile. < Resime gitmek için tıklayın > Butona her bastığımızda sırasıyla istediğimiz sayılar yanmaya başlayacak. Örneğin, 1 sayısı için B ve C ledlerine bağlı pinler 1, diğerleri 0 olacak. Peki bunu nasıl yapacağız. Kodlarımızda "sayi" isimli bir integer değer gireceğiz ve 0'da itibaren her döngüde 1 artacak. Bu integer değerin 10 ile bölümünden kalan sayıyı displayde göstereceğiz. Yani "%10" ifadesini kullanacağız. Kodlarımız; int buton=12; Devremizin Resmi; < Resime gitmek için tıklayın > Devrenin Çalışma Videosu : Videoyu izlemek için tıklayınız |
Güzel çalışma, örnekler ve zorluk dercesi giderek artacaktır umarım :-) |
Tatilde arduinoya başlamayı planlıyordum artık burdan takip ederim örnekleri ![]() |
tebrik ederim son derece açıklayıcı. arduino ya başlamayı düşünenler için güzel bir Türkçe kaynak olacaktır ![]() |
Teşekkür ederim arkadaşlar... Öğrendikçe yazmaya ve daha ileri seviyede uygulamalara da başlayacağım tekrar teşekkür ederim :). |
Güzel bir rehber daha ellerine sağlık ![]() |
Hocam blogunuz çok güzelmiş teşekkürler güzel paylaşımlar için |
Hocam merhaba polis çakar devresi yapmaya çalıştım ancak bu kodlara göre 2 led birden yanıyor ayrı ayrı yakamıyorum kodlardamı bi sorun var acaba(8i pinmodede9 olarak yazmışım mesajı editlerken düzelttim)son durum iki led birden pin10un ayarlarına göre yanıyor kodlar şu şekilde: void setup() { // Pinler Çıkış olarak belirleniyor pinMode(10, OUTPUT); // MAVI LED pinMode(8,OUTPUT); } void loop() { digitalWrite(10, HIGH); // LED yanik delay(50); digitalWrite(10,LOW); delay(50); digitalWrite(10,HIGH); delay(50); digitalWrite(10,LOW); delay(1000); digitalWrite(8,HIGH); delay(50); digitalWrite(8, LOW); delay(50); digitalWrite(8,HIGH); delay(50); digitalWrite(8,LOW); delay(1000); } < Resime gitmek için tıklayın > |
Hemen yazdıktan sonra aklıma geldi.Sorun çözüldü.Aynısını yaşayanlar için çözüm: pin8 yerine pin5e çevirdim.digitalin diger parçasında olması için ya değilse sanırsam seri baglama gibi oluyor. ledi de breadbordun sağ tarafına çektim.gndyi de kabloyla oraya çektim ve sonuç başarılı oldu.isteyenler kullanabilir. :) |
Merhaba , çalıştığım şirkette otomasyon panelleri üzerinde endalara çeşitli 4.20 (analog input ) değerleri gösteriyoruz. basınç sıcaklık transmitterlerinden. benim yapmak istediğim bu endalardan kurtulmak. ardunio'nun hangi ürünü ile bu ar-ge mi tamamlarım. ? projemde birde PLC var.PLC üzerinden bu AI değerleri kendi yazılımımıza geliyor. yani 4.20 değerleri ----- bir ayağı ardunio üzerinden tablete diğer ayağı ardunio dan çıkıp plc ye girmem gerekiyor. bu konuda yol gösterebilir misiniz ? ardunio üzerinde analog output var mı ? |
Arduinoda bu pinler (~ işaretli olanlar) analog output görevi görmektedir. Yukarıdaki bir kaç örnek uygulama yapılmış. |
@ogzcndyr hocam çok teşekkür ederim. Pulse-width modulation (PWM) olarak geçen kısım mı yani ? bilgi işlem uzmanıyım aslında. Bu akıllı kartlarda çok tecrübeli değilim.Doğru ürüne karar verip projeyi başlatmam gerekiyor.:( |
Aynen pwm çıkış olarakta geçiyor. BU LİNKTEN pwm hakkında fikir edinebilirsiniz. Ayrıca BURDAKİ facebook grubuna üye olursanız projenizde yardımcı olabilecek insanlar bulabilirsiniz. |
Bu mesaja 1 cevap geldi. Cevapları Gizle