7. Gömülü Sistem Uygulamaları 1 - Mekatronik Mühendisliği Bölümü
Transkript
7. Gömülü Sistem Uygulamaları 1 - Mekatronik Mühendisliği Bölümü
T.C. ERCİYES ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ BÖLÜMÜ ELEKTRONİK SİSTEMLER LABORATUVARI – 1 ARDUINO DİJİTAL GİRİŞ-ÇIKIŞ KONTROLÜ DENEY SORUMLUSU Arş. Gör. Burak ULU ŞUBAT 2015 KAYSERİ ARDUINO DİJİTAL GİRİŞ-ÇIKIŞ KONTROLÜ 1. GİRİŞ Arduino, açık kaynaklı bir geliştirme platformudur. Arduino kartları üzerinde Atmega firmasının 8 ve 32 bit mikrodenetleyicileri bulunur. Arduino kütüphaneleri ile mikrodenetleyicileri kolaylıkla programlayabilirsiniz. Klasik bir mikrodenetleyiciden farkı ise kolay kullanım imkanı sağlamasıdır. Ama tabi ki buna paralel olarak sağladığı kolaylığa karşı üzerindeki mikrodenetleyiciyi tam performansda kullanamamak gibi eksileri de mevcuttur. Bu deneylerde, daha önceden edinilen programlama bilgisinin pekiştirilmesi ve gömülü sistemlere giriş yapılması amaçlanmıştır. Arduino gibi bir geliştirme platformunu kullanabilme becerisi kazanmak, çeşitli yelpazede proje yapılabilmesine katkı sağlayacaktır. 2. DENEYİN AMACI Arduino dijital giriş-çıkışlarının kontrol edilebilmesi ve motor sürücü devresi kurularak Arduino üzerinden motor kontrolünün gerçekleştirilmesi. 3. ÖN BİLGİ 3.1. Gömülü Sistemler Belirli bir işi gerçekleştirmek için tasarlanmış bir takım bilgisayar donanım ve yazılım kombinasyonları gömülü sistemler olarak adlandırılmaktadır. Bilinen genel amaçlı bilgisayarlardan farklı olarak, kişisel bilgisayar gibi, gömülü bir sistem kendisi için önceden özel olarak tanımlanmış görevleri yerine getirir. Sistem belirli bir amaca yönelik olduğu için tasarımların her geçen gün boyutu ve maliyeti düşmektedir. Gömülü bir sistemin çekirdeğini, belirli bir sayıda görevi yerine getirmek için programlanan mikroişlemciler ya da mikrodenetleyiciler oluşturmaktadır. Kullanıcıların üzerinde istediği yazılımları çalıştırabildiği genel maksatlı bilgisayarlardan farklı olarak, gömülü sistemlerdeki yazılımlar yarı kalıcıdırlar ve firmware ismiyle anılırlar. Şekil 3.1. Mikrodenetleyici ve Mikroişlemci yapıları. 1 Gömülü sistemlere örnekler: -atm cihazları (automatic teller machines) -cep telefonları -network ekipmanları (router, firewall vs.) -bilgisayar yazıcıları -disk sürücüleri -motor denetleyicileri ve abs sistemleri -ev otomasyon ürünleri (termostat, klima, güvenlik sistemleri) -elektronik ev eşyaları (mikrodalga fırın, çamaşır makinesi, tv, dvd player) -savunma sistemleri, uçaklardaki ve füzelerdeki uçuş kontrol sistemleri -medikal ekipmanlar -ölçüm sistemleri (osiloskop, spektrum anizörü, enerji analizörü) -kişisel sayısal asistanlar (pda) -endüstriyel otomasyon ve izleme sistemleri -oyun konsolları Şekil 3.1. Gömülü sistem örnekleri. 2 3.2. Arduino Uno R3 Donanım: Arduino Uno, üzerinde Atmega328 mikrodenetleyicisi bulunan bir geliştirme kartıdır. Şekil 3.2. Arduino Uno üzerinde birimlerin görünüşü. 14 tane giriş/çıkış pini (6’ sı pwm için) 6 analog giriş 16 Mhz seramik rezonatör USB bağlantı Power jack ICSP Header Reset buton mevcuttur. Çalışma gerilimi 5V Yazılım: Geliştirme ortamı ile Arduino programları yazılıp, derlenip kart içerisine yüklenebilmektedir. Arduino programlamada C/C++/Java temelli bir dil kullanılmaktadır. Kütüphaneler sayesinde donanım seviyesine inmeye gerek kalmamaktadır. Zaten Arduino platformunun tercih edilmesindeki en büyük sebeplerden bir tanesi de geniş kütüphane desteği sağlamasıdır. Arduino web sitesinde programlama, donanımlar ve kütüphaneler hakkında bilgiler yer almaktadır. Ayrıca internet üzerinde oldukça canlı bir Arduino topluluğu bulunmakta ve aklınıza gelebilecek hemen her konuda yapılmış proje bulunmaktadır. 3 Değişkenler ve kullanılan pinler tanımlanır Giriş/çıkışlar ve başlangıç işlemleri tanımlanır Ana Program Şekil 3.3. Arduino program arayüzü görünüşü. Önemli Yapılar void setup(): setup() fonksiyonu, program(sketch) başladığında çağırılır. Başlangıç değerleri, pin durum tanımlamaları, kullanılan kütüphanelerin başlatılması gibi işlemler bu fonksiyon içinde gerçekleştirilir. setup() fonksiyonu dışarıdan herhangi bir müdahale olmadığı sürece programda bir kez çalışır. void loop(): Arduino’ yu kontrol eden ana program bu döngü içerisine yazılır ve dışarıdan müdahale olmadığı sürece sürekli olarak çalışır. if: If karşılaştırma operatörünün Arduino’ da kullanımına aşağıda örnek verilmiştir. if (x > 120) digitalWrite(LEDpin, HIGH); if (x == 120 && y <=100) digitalWrite(LEDpin, HIGH); if (x != 120){ digitalWrite(LEDpin, HIGH); } 4 if (x < 120 || ){ digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); } for döngüsü: Temel olarak bir kod bloğunu belirli bir sayıda ve üst üste çalıştırmak için kullanılan döngüdür. for ( başlangıç ; koşul ; artış yada azalış) while döngüsü: İçerisindeki şart doğru olduğu sürece devam eder. Dolayısıyla döngü içerisindeki şartı değiştiren bir ifade bulunmadığı takdirde sonsuz döngüye girer. İstenilen şart sağlanmadığı zaman döngüden çıkılır. while(şart){… …} do.. while döngüsü: do.. while döngüsünün while döngüsünden farkı şartın çevrim sonucunda kontrol edilmesidir. do{ }while(şart); #include: Önişlemci direktifleri # işareti ile başlar ve program derlenmeden önce C önişlemcisi tarafından işletilir. #include direktifi program içerisinde kullanılan fonksiyonlar için gerekli kodları programa dahil etmek için kullanılır. #define: #define komutu bir sembol tanımlamak için kullanılır. 5 3.3. Motor Sürücü Devresi L293D: L293D motor sürücü entegreleri içerisinde en basit yapılı entegredir diyebiliriz. 16 bacaklı kılıf yapısındadır ve 2 motoru birbirlerinden ayrı şekilde ileri- geri kontrol edebilir. Enable bacağı da kullanılarak motor PWM ile de sürülebilir. 4.5V – 36V aralığında motorlar L293D ile kontrol edebilmektedir. L293D’ nin maksimum akım sınırı 600mA’ dir. L293B’ nin akım sınırı ise 1A’ dir. H Köprü mantığıyla çalışır. Şekil 3.4. L293D bağlantı şeması. H Köprü akım yönünü dijital olarak kontrol edebileceğiniz bir yapıdır. Bu yapıda transistor, tristör ve triyak gibi elemanlar kullanıldığı için aynı zamanda düşük akımlarla yüksek akımlar kontrol edilebilmektedir. Şekil 3.5. H Köprü devre şeması 6 4. DENEYİN YAPILIŞI 4.1. Arduino İle Led Yakma Şekil 4.1. Arduino led yakma uygulama devresi. Deneyin Yapılısı: 1- Şekil 4.1’ te görülen bağlantıları Arduino ve board üzerinde gerçekleştiriniz. 2- Arduino Vin pininden 12v besleme ile Arduino’ ya güç veriyoruz. 3- Giriş/çıkış pinlerinin de bağlantılarını yapıp program aşamasına geçiniz. Program: // Butonun Arduino ile bağlantısı 2 nolu pin ile gerçekleştirildi ve bu pine buttonPin ismi verildi. // LED’ in Arduino ile bağlantısı 13 nolu pin ile gerçekleştirildi ve bu pine ledPin ismi verildi. // Butonun değerini kontol eden buttonState adında bir değişken atandı. // ledPin pini çıkış olarak tanımlandı . // buttonPin pini giriş olarak tanımlandı. 7 //buttonPin’ den okunan değeri buttonState değişkenine yaz . //buttonState değişkeni HIGH değeri aldığında, yani buton aktif olduğunda, aşağıdaki komutu işle. // ledPin pinini HIGH yap, yani LED’ i yak. //aksi halde, yani buttonState değişkeni HIGH değil ise ledPin pinini LOW yap, yani LED’ i söndür. 4.2. Arduino ile Kara Şimşek Uygulaması Şekil 4.2. Kara şimşek uygulama devresi. Deneyin Yapılısı: 1- Şekil 4.2’ te görülen bağlantıları Arduino ve board üzerinde gerçekleştiriniz. 2- Arduino Vin pininden 12v besleme ile Arduino’ ya güç veriyoruz. 3- Giriş/çıkış pinlerinin de bağlantılarını yapıp program aşamasına geçiniz. 8 Program: // 6 adet LED’ in pin numaraları dizi oluşturularak atandı. // beklemeSuresi sabitine 50 değeri atandı. Bu değer, LED’lerin yanıp sönmesi esnasındaki gecikmeler için kullanıldı. // Bir led değişkeni tanımlandı ve for döngüsü içinde 0’ dan 6’ ya kadar birer artırılarak döngü içerinde kullanıldı. // led değişkeni for döngüsünün her bir adımında dizinin bir elemanını çıkış yaparak, LED için kullanılan tüm pinlerin çıkış olarak tanımlanmasında kullanıldı. //led değişkeni for döngüsünün her bir adımında ilk LED’ den son LED’ e kadar ileri yönde LED ‘lerin yanmasını sağlar. //Sırası gelen LED yanar ve 50ms beklenir, daha sonra bir sonraki yanar ve bir 50ms daha beklendikten sonra önceki LED söner. Bu döngü son LED yanıp bir önceki sönene kadar devam eder. //Bu döngüde aynı işlem geri yönlü olarak tekrarlanır. Bu döngü ilk LED yanıp bir önceki sönene kadar devam eder. 9 4.3. Arduino ile DC Motor Kontrol Şekil 4.3. DC motor uygulama devresi. Deneyin Yapılısı: 1- Şekil 4.3’ te görülen bağlantıları Arduino ve board üzerinde gerçekleştiriniz. 2- Arduino Vin pininden 12v besleme ile Arduino’ ya güç veriyoruz. 3- Giriş/çıkış pinlerinin de bağlantılarını yapıp program aşamasına geçiniz. Program: // İlk bölümde değişkenler tanımlandı ve pin numaraları bağlantı şemasına göre belirlendi. Burada sag_motor1 ve sag_motor2 sağdaki motorun + ve – uçlarına bağlı pinleri temsil ederken diğer 2 değişken sol motorun + ve – uçlarına bağlı pinleri temsil ediyor. sag_kontrol, sol_kontrol değişkenlerinin atandığı pinlere ise butonlar bağlanmıştır. //setup() fonksiyonunun içerisinde ilgili pinler giriş/çıkış olarak tanımlandı. 10 //Sağ motoru kontrol eden buton aktif ise sağ motoru çalıştır. //Sol motoru kontrol eden buton aktif ise sol motoru çalıştır. //aksi durumlarda 2 motora da gerilim uygulama yani motorları durdur. 4.4. Arduino ile Servo Motor Kontrol Şekil 4.4. Servo motor uygulama devresi. 11 Deneyin Yapılısı: 1- Şekil 4.4’ te görülen bağlantıları Arduino ve board üzerinde gerçekleştiriniz. 2- Arduino Vin pininden 12v besleme ile Arduino’ ya güç veriyoruz. 3- Giriş/çıkış pinlerinin de bağlantılarını yapıp program aşamasına geçiniz. Program: 12
Benzer belgeler
Ladyana (Adafruit) Motor Shield İle Çalışmak
motor bağlayıp çalıştırabiliyoruz. Ayrıca çift yön kontrol edilebilen 4 DC motor bağlantı desteği yer
alıyor ve 8 bit hız seçimi sunuyor. 2 step motor (unipolar ve bipolar) desteği var. Shield üzer...