1 MİKRODENETLEYİCİ II LAB. DENEY FÖYÜ Deneyin Adı: Buton Kontrol Deneyde Gerekli olan Malzemeler: Arduino Uno, 8.2 k direnç, buton, bağlantı kabloları Deneyin Yapılışı: Dijital pinler giriş olarak ayarlandığında pullup yada pulldown direnç kullanılarak normal şartlardaki lojik durumu belirlenir. Giriş olarak ayarlanan pine bağlı bir buton ve direnç vardır. Butona basıldığında, giriş pinine HIGH değer gelecektir. Giriş pini direnç ile Gnd’ye bağlanmamış olsaydı ne olurdu. Fiziksel olarak 0 Volt yada 5 Volta bağlı olmadığı için elektriksel gürültülerden ve yandaki pinlerin lojik durumlarından etkileneceği için giriş pininin lojik durumunda kararsızlık olacaktır. Bu olumsuzluğu ortadan kaldırmak için pullup veya pulldown dirençleri ile pinin lojik durumu normal şartlarda HIGH yada LOW bir değere sabitlenir. Pulldown direnci olarak 8.2 k lık direnç seçilmiştir. 10k’dan büyük direnç değerlerinde pinin toprak seviyesine çekilmesi zorlaşacaktır. const int Led=13; //Led in bağlı olduğu pin numarası const int Buton=4;//butonun bağlı olduğu pin numarası void setup() { pinMode(Led,OUTPUT); pinMode(Buton,INPUT); } void loop() { if (digitalRead(Buton)==HIGH) { digitalWrite(Led,HIGH); } else { digitalWrite(Led,LOW); } } Butonlar, herhangi bir cihazı kontrol etmek istediğimizde kullandığımız en basit elektrik devre elemanlarından birisidir. Butonun yapı olarak basitliği, maliyeti azaltıp, güvenliği ve kullanımı kolaylaştırsa da mekanik olarak çalışan parçaları olduğu için butona basılma ve bırakma anlarında elektriksel salınım meydana gelir. Bu salınımlar her uygulamada karşımıza problem olarak çıkmayabilir. Yüksek hızda çalışan uygulamalarda butona basma süresinin milisaniyelerle ölçüldüğü noktalarda butonun 5 ms lik süre boyunca lojik durumunun 0 ve 1 arasında gidip gelmesi, tasarımcı için başlı başına bir sorun olur. Butona basıldığı an bu salınımlar başlar ve 5 ms lik bir süre boyunca devam eder. Bu süre zarfında kontrolü kaybetmemek için yazılımsal olarak 5 ms lik sürenin gözönüne alınması gerekir. Bunu için programı şu şekilde düzenleyebiliriz. 1. Butonun şimdiki ve sonraki durumlarını kaydet.
28
Embed
MİKRODENETLEYİ İ II LA. DENEY FÖYÜ Deneyin Adı ......u projenin yazılımında bir dijital giriş, bir dijital çıkış ve çıkışı kontrol etmek için if şartlı yapısı
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
MİKRODENETLEYİCİ II LAB. DENEY FÖYÜ
Deneyin Adı: Buton Kontrol
Deneyde Gerekli olan Malzemeler: Arduino Uno, 8.2 k direnç, buton, bağlantı kabloları
Deneyin Yapılışı:
Dijital pinler giriş olarak ayarlandığında pullup yada pulldown direnç kullanılarak normal şartlardaki
lojik durumu belirlenir. Giriş olarak ayarlanan pine bağlı bir buton ve direnç vardır. Butona
basıldığında, giriş pinine HIGH değer gelecektir. Giriş pini direnç ile Gnd’ye bağlanmamış olsaydı ne
olurdu. Fiziksel olarak 0 Volt yada 5 Volta bağlı olmadığı için elektriksel gürültülerden ve yandaki
pinlerin lojik durumlarından etkileneceği için giriş pininin lojik durumunda kararsızlık olacaktır. Bu
olumsuzluğu ortadan kaldırmak için pullup veya pulldown dirençleri ile pinin lojik durumu normal
şartlarda HIGH yada LOW bir değere sabitlenir. Pulldown direnci olarak 8.2 k lık direnç seçilmiştir.
10k’dan büyük direnç değerlerinde pinin toprak seviyesine çekilmesi zorlaşacaktır.
const int Led=13; //Led in bağlı olduğu pin numarası
const int Buton=4;//butonun bağlı olduğu pin numarası
void setup()
{
pinMode(Led,OUTPUT);
pinMode(Buton,INPUT);
}
void loop()
{
if (digitalRead(Buton)==HIGH)
{
digitalWrite(Led,HIGH);
}
else
{
digitalWrite(Led,LOW);
}
}
Butonlar, herhangi bir cihazı kontrol etmek istediğimizde kullandığımız en basit elektrik devre
elemanlarından birisidir. Butonun yapı olarak basitliği, maliyeti azaltıp, güvenliği ve kullanımı
kolaylaştırsa da mekanik olarak çalışan parçaları olduğu için butona basılma ve bırakma anlarında
elektriksel salınım meydana gelir. Bu salınımlar her uygulamada karşımıza problem olarak
çıkmayabilir. Yüksek hızda çalışan uygulamalarda butona basma süresinin milisaniyelerle ölçüldüğü
noktalarda butonun 5 ms lik süre boyunca lojik durumunun 0 ve 1 arasında gidip gelmesi, tasarımcı
için başlı başına bir sorun olur. Butona basıldığı an bu salınımlar başlar ve 5 ms lik bir süre boyunca
devam eder. Bu süre zarfında kontrolü kaybetmemek için yazılımsal olarak 5 ms lik sürenin gözönüne
alınması gerekir. Bunu için programı şu şekilde düzenleyebiliriz.
1. Butonun şimdiki ve sonraki durumlarını kaydet.
2
2. Butonda değişim olup olmadığını kontrol et.
3. Butonda değişim varsa 5 ms bekle tekrar kontrol et.
4. Sonraki durum aynı ise çıkışa ver, değilse 2. maddeye git.
const int Led=13;
const int Buton=4;
boolean oncekiDurum=LOW;
boolean sonrakiDurum=LOW;
void setup()
{
pinMode(Led,OUTPUT);
pinMode(Buton,INPUT);
}
void loop()
{
sonrakiDurum=digitalRead(Buton);
if(sonrakiDurum=!oncekiDurum)
delay(5);
sonrakiDurum=digitalRead(Buton);
if(sonrakiDurum=!oncekiDurum)
{
if (digitalRead(Buton)==HIGH)
{
digitalWrite(Led,HIGH);
}
else
{
digitalWrite(Led,LOW);
}
}
}
programı bir fonksiyon ile yazmak istersek;
*******programın diğer bir versiyonu
const int Led=13;
const int Buton=4;
boolean oncekiDurum=LOW;
boolean sonrakiDurum=LOW;
void setup()
{
pinMode(Led,OUTPUT);
pinMode(Buton,INPUT);
}
boolean butonKontrol(boolean oncekiDurum)
3
{
boolean sonrakiDurum=digitalRead(Buton);
if(sonrakiDurum!=oncekiDurum)
{
delay(5);
boolean sonrakiDurum=digitalRead(Buton);
if(sonrakiDurum!=oncekiDurum)
{
return sonrakiDurum;
}
else
{
return oncekiDurum;
}
}
else
{
return oncekiDurum;
}
}
void loop()
{
if (butonKontrol(oncekiDurum)==HIGH)
{
digitalWrite(Led,HIGH);
}
else
{
digitalWrite(Led,LOW);
}
}
Deney Adı: Bir anahtar yardımıyla dc motoru çalıştırmak
Gerekli olan malzemeler: (Şekil 1.1 de gösterilmiştir.)
- Arduino uno
- motor shield
- on/off switch
4
- dc motor
- breadbord
- dc güç kaynağı
- bağlantı kabloları
Şekil 1.1
Donanımın Hazırlanması:
İlk önce motor shield ile arduino uno arasındaki bağlantılar yapılır. Daha sonra motor shielddeki A
terminaline dc motorun uçları bağlanır. Sonra on/off switch arduino nun ground ve 10 nolu dijital
ucuna bağlanır. Son olarak dc güç kaynağı bağlantıları da motor shield üzerindeki yerlerine bağlanır.
(Şekil 1.2, 1.3 ve 1.4 bu bağlantıları göstermektedir.)
Şekil 1.2 Şekil 1.3
5
Şekil 1.4
Programın Yazılması:
Bu projenin yazılımında bir dijital giriş, bir dijital çıkış ve çıkışı kontrol etmek için if şartlı yapısı
kullanılmıştır. Yazılımın kodları aşağıda verilmiştir.
6
Bu programda buttonPin isimli değişkene sabit olarak 10 nolu pin değeri, motorPin’e 3 nolu pin değeri
ve buttonVal isimli değişkene sayısal olarak 0 değeri atanmıştır. Daha sonra setup yapısında
buttonPin giriş olarak, motorPin ise çıkış olarak ayarlanmıştır. Önemli bir ayarlama işlemi de 10 nolu
pin’in pull-up direncinin aktif hale gelmesidir. Bu da devre içerisindeki direncin digitalWrite()
fonksiyonu ile aktif hale getirilmesiyle olur. Mesela 10 nolu pin’i giriş olarak belirlediğimiz halde
digitalWrite(10,HIGH) fonksiyonu 10 nolu pin’e bağlı pull-up direncini aktif hale getirir. (Eğer bunu
yapmasaydık 10 nolu uca harici bir direnç bağlamamız gerekecekti tâki switch doğru çalışsın.) Loop
döngü yapısı içinde buttonPin nolu pinden okuduğumuz dijital değeri buttonVal isimli değişkene
atarız. Daha sonra if şartlı yapısıyla buttonVal değişkeninin değerini kontrol ettiririz. Eğer buttonVal
değeri lojik 1 ise motorPin numaralı çıkışa HIGH (yani lojik 1), değilse LOW (yani lojik 0) gönderilir.
Böylece motor çalıştırılmış veya durdurulmuş olur.
7
Deney Adı: Potansiyometre ile bir dc motorun hızının kontrol edilmesi
Dc motor hız kontrolünde potansiyometrenin kullanımı temel becerilerden biridir. Bu deneyde daha
önce görmediğimiz map() fonksiyonunun kullanımını da öğreneceğiz. Arduino’daki analog girişi
kullanarak dc motorun hızını kontrol edeceğiz. Potansiyometreden gelen analog voltajı (bu voltaj 0 ile
5 volt arasındadır.) dijitale çevirip, bu voltaj ile doğru orantılı 0-1023 arasında bir sayı elde edeceğiz.
Bu sayıyı ölçeklendirerek, motor shield üzerindeki pwm girişinin (ki bu aynı zamanda dc motorun
hızını kontrol eder.) duty cycle’nı kontrol edecek 0-255 arasında sayılar üreteceğiz.
Gerekli olan malzemeler: (Şekil 2.1 de gösterilmiştir.)
-Arduino Uno
-motor shield
-dc motor
-10 kohm potansiyometre
-ayarlı güç kaynağı
-bread bord
-bağlantı kabloları
Şekil 2.1
Öncelikle motor shield’ı arduino’ya bağlamalıyız. Daha sonra potansiyometreyi arduinoya
bağlamamız gerekir. Potansiyometrenin orta ucunu arduinonun analog pin 0’a, diğer uçlarının birini
+5V pin ucuna diğerini ground ucuna bağlarız. Daha sonra motoru, motor shieldın A portuna bağlar
8
ve gerekli motor besleme bağlantısını yaparız. Daha sonra arduinoyu USB kablosuyla bilgisayara
bağlayarak yazılımı yükleriz.
Şekil 2.2
Şekil 2.3
Programın yazılması:
9
Bu deneyde analog pin ve dijital pwm pinini kullanacağız. Bu sebeple pot ile motor arasındaki iletişimi
sağlamak için analogRead() ve analogWrite() fonksiyonlarını kullanacağız. Program kodları aşağıda
verilmiştir.
Program potPin=A0, motorPin=3, potVal=0 ve mappedPotVal=0 değerleri atanarak başlar. Daha sonra
setup yapısında potPin, giriş olarak, motorPin ise çıkış olarak atanır. Sonra loop yapısında potPin
numaralı girişden okunan analog voltaj değeri ile orantılı bir sayı değeri (0-1023) potVal değişkenine
atanır. Bu değer map() fonksiyonu kullanılarak ölçeklendirilir ve (0-255) arasında bir değer pwm
sinyalinin duty cycle’nı belirler, bu da motorun hızını tayin eder. map(potVal,0,1023,0,255);
fonksiyonu pot’un ürettiği 0-1023 arasındaki değeri 0-255 arasında ölçekler. Bu fonksiyonun genel
kullanımı şu şekildedir:
programı çalıştırdığımızda potansiyometreden okunan değerlerle orantılı bir pwm değeri 3 nolu
uçdan motor shielda uygulanır. Bu da motorun hızını belirler. Potaniyometrenin değerini değiştirdikçe
motorun hızının değiştiğini görürüz.
10
Deney Adı: İki adet dc motorun arduino ile kontrolü
Gerekli olan malzemeler:(Şekil 3.1’de gösterilmiştir.)
- arduino uno
- motor shield
- iki adet dc motor
- iki adet anahtar
- bread bord
- ayarlı güç kaynağı
- bağlantı kabloları
Şekil 3.1
Donanımın Hazırlanması:
Bu deneyde iki adet push buton bulunmaktadır. Butonlardan birincisinin bir ucu arduinonun 9 nolu
dijital pinine diğer ucu grounda bağlanır. İkinci butonun bir ucu 10 nolu dijital pine diğer ucu da
grounda bağlanır. Motorlar motor shieldın A ve B portlarına bağlanır. Motorların beslemesi bağlanır.
Bu deneyde motor hızı kontrol edilmeyeceğinden pwm sinyali kullanılmayacaktır. Şekil 3.2, 3.3 ve 3.4
yapılan bağlantıları göstermektedir.
11
Şekil 3.2 Şekil 3.3
Şekil 3.4
12
Programın Yazılması:
Bu deneyde arduino ile haberleşmek için digitalRead() ve digital Write() fonksiyonlarını kullanacağız.
Butonlardan biri A portundaki motoru çalıştırmak için diğeri ise B portundaki motoru çalıştırmak için
kullanılmaktadır. Yazılımın kodları aşağıda verilmiştir.
Kodun başlangıcında pin değerleri ayarlanmış buttonVal1 ve buttonVal2 değişkenlerine 0 değeri
atanmıştır. Setup yapısında ise butona bağlı pinler giriş olarak, motora bağlı pinler çıkış olarak
belirlenmiştir. Bu ayarlamalardan sonra giriş butonlarına bağlı pinlerdeki pull-up dirençleri aşağıdaki
iki komutla aktif edilmiştir.
13
digitalWrite(buttonPin1,HIGH);
digitalWrite(buttonPin2,HIGH);
Daha sonra loop yapısı içerisinde buttonPin1’in aldığı değere göre buttonVal1, buttonPin2’nin aldığı
değere göre buttonVal2 ayarlanmıştır. Bunun için şartlı durumlarda kullandığımız if yapısı
kullanılmıştır.
14
Deney Adı: Arduino ile dc motorun hız ve yön kontrolü
Gerekli olan malzemeler:(Şekil 4.1’de gösterilmiştir.)
- arduino uno
- motor shield
- 10 kohm potansiyometre
- anahtar (switch)
- dc motor
- ayarlı güç kaynağı
- breadbord
- bağlantı kabloları
Şekil 4.1
Donanımın Hazırlanması:
Bu deneyde yapılacak ilk iş motor shield’ı arduino’ya bağlamaktır. İkinci olarak potansiyometrenin
orta ucu analog pin 0’a diğer iki ucu +5V ve Ground’a bağlanır. Daha sonra on/off anahtarı (switch)
dijital pin 10 ile toprak (ground) arasına bağlayın. En son USB den Arduino’yu bilgisayara bağlayın. (
Şekil 4.2, Şekil 4.3 ve Şekil 4.4’de gösterilmiştir.)
15
Şekil 4.2
Şekil 4.3
16
Şekil 4.4
Programın Yazılması:
Bu deneyde hem dijital hem analog pinleri kullanacağız. Analog pin motorun hızını kontrol etmek
için, dijital pin motorun yönünü kontrol etmek için kullanılacak. Yazılımın kodları aşağıda verilmiştir.
17
Bu kodlarda ilk önce switchPin, potPin, motorPin, SwitchVal, potVal ve mappedPotVal’in başlangıç
değerleri belirlenir. Daha sonra setup yapısında switchPin ve potPin giriş olarak, motorPin çıkış olarak
belirlenir. Sonra digitalWrite() fonksiyonu ile pull-up direnci aktif hale getirilir. Daha sonra döngü
yapısı içerisinde switchPin’den okuduğumuz değeri switchVal’e, potPin’den okuduğumuz değeri
potVal’e aktarırız. Potansiyometreden gelen analog voltaj değerine göre map() fonksiyonu
kullanılarak 0 ile 255 arasındaki değerler mappedPotVal’e aktarılır. Bu da motorun hızını kontrol
etmek için motorPin’e gönderilir. Son olarak if yapısıyla da motorun yönü kontrol edilir. Eğer
switchVal değeri lojik 1 olursa motor saat yönünde, lojik 0 olursa saat yönünün tersinde döner.
18
Deney Adı: Potansiyometre ile servo motor kontrolü
Gerekli olan malzemeler
1 adet Arduino
1 adet potansiyometre(5-10 Kohm yeterli olacaktır.)
1 adet servo motor
Erkek jumper kablo
1 adet breadboard
(Şekil 1.1 de gösterilmiştir)
(şekil 1.1)
Donanımın Hazırlanması
Servo motorun kahverengi bacağı (Toprak) ve potansiyometrenin en sağdaki bacağı Arduinonun gnd
bacağına bağlanır. Servo motorun kırmızı bacağı (Artı) ve potansiyometrenin en sol bacağı Arduino