mİkrodenetleyİ İ ii la. deney fÖyÜ deneyin adı ......u projenin yazılımında bir dijital...

28
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.

Upload: others

Post on 21-Jan-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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ı

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.

Page 2: 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ı

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)

Page 3: 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ı

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

Page 4: 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ı

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

Page 5: 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ı

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.

Page 6: 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ı

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.

Page 7: 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ı

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

Page 8: 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ı

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ı:

Page 9: 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ı

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.

Page 10: 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ı

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.

Page 11: 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ı

11

Şekil 3.2 Şekil 3.3

Şekil 3.4

Page 12: 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ı

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.

Page 13: 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ı

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.

Page 14: 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ı

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.)

Page 15: 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ı

15

Şekil 4.2

Şekil 4.3

Page 16: 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ı

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.

Page 17: 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ı

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.

Page 18: 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ı

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

mikrokontrolörün 5V bacağına bağlanır.

Servo motorun turuncu ucu (bilgi ucu) Arduinonun D9 bacağına bağlanır. Servo motorumumuzu bu

pinden kontrol edeceğiz. Potansiyometrenin orta bacağı (bilgi ucu) Arduinonun A0 bacağına bağlanır.

Mikrodenetleyici A0 pininden analog değer okuyacaktır(Şekil 2.2 de gösterilmiştir.)

Page 19: 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ı

19

Programın Yazılması:

#include <Servo.h>

Servo myservo; // create servo object to control a servo

int potpin = 0; // analog pin used to connect the potentiometer

int val; // variable to read the value from the analog pin

void setup()

{

myservo.attach(9); // attaches the servo on pin 9 to the servo object

}

void loop()

{

val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)

val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)

myservo.write(val); // sets the servo position according to the scaled value

delay(15); // waits for the servo to get there

}

İlk önce servo kütüphanesi çağırılıyor. Servo Motor’un kontrolü için servom adında bir nesne

oluşturuluyor. Potansiyometre analog sıfır pinine bağlanıyor. Potansiyometreden gelen analog değeri

taşıması için oluşturulan val değişkeni tanımlanıyor.Servo Motor 9. pine bağlanıyor.

Potansiyometreden aldığımız değeri val değişkenine yüklüyoruz(yüklenen değer 0 ile 1023

arasında).Değişkenin sayısal değerini servo motora göre oranla (0 ile 1023 arasında olan değer 0 ile

Page 20: 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ı

20

180 arasına çekildi).Servo Motor’u val değişkeninde bulunan açı değerine karşılık gelecek şekilde

konumlandır.15 milisaniye beklenilir.

Page 21: 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ı

21

Deney Adı: Arduino ile PIR sensor

Gerekli olan malzemeler

1 adet Arduino

PIR sensor

Erkek jumper kablo

1 adet breadboard

1 adet led

(Şekil 1.1 de gösterilmiştir)

(şekil 1.1)

Donanımın Hazırlanması

İlk olarak PIR sensorumuzun kenar bacaklarını gnd ve 5v’a bağlıyoruz. Orta bacağını

digital pin 3 ‘ e bağlıyoruz. Led’in + bacağını digital pin 4 e - bacağını da gnd ’ ye bağlıyoruz.

Donanım şekil 1.1 de gösterilmiştir.

.

Sensörün 3 pini bulunmaktadır.

Page 22: 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ı

22

1-Pozitif

2-Data

3- Negatif

Programın Yazılması:

int pirPin = 3; // PIR pin

int ledPin = 4; // LED pin

int deger = 0;

void setup() {

pinMode(pirPin, INPUT); // PIR Pin'i giriş yapılıyor

pinMode(ledPin, OUTPUT); // LED Pin'i çıkış yapılıyor

Serial.begin(9600); //Serial Porttan veri göndermek için

baundrate ayarlanıyor.

}

void loop(){

deger = digitalRead(pirPin); // Dijital pin okunuyor

Serial.println(deger); // Okunan değer seri porttan okunuyor.

if (deger == HIGH) {

digitalWrite(ledPin, HIGH); // Eğer okunan değer 1 ise LED yakılıyor.

}

else{

digitalWrite(ledPin,LOW); // Eğer okunan değer 0 ise LED

söndürülüyor.

}

}

Deney Adı: Arduino ile HC-SR04 Ultrasonic Ping Sensor

Gerekli olan malzemeler

1 adet Arduino

Ultrasonic sensor

Erkek jumper kablo

1 adet breadboard

2 adet led

(Şekil 1.1 de gösterilmiştir)

Page 23: 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ı

23

(şekil 1.1)

Donanımın Hazırlanması

.

Breadboard için HC-SR04 sensoru ve LED'leri board’a yerleştirin.Yeşil ledi

Arduino Pin 3 e, Kırmızı ledi Pin 2 ye takın sensör üzerinde ki 5v u VCC pimini takın

sensör üzerinde trigonometri pimini Pin 13 e takın . Sensör üzerinde echo pimini Pin

12 ye takın.Aşağıdaki kodu yazıp , bilgisayarınıza Arduino bağlayın, ve upload ediniz.

Programın Yazılması:

const int pingPin = 13;

int inPin = 12;

int safeZone = 5;

int greenLed = 3, redLed = 2;

void setup() {

Serial.begin(9600);

}

void loop()

{

long duration, cm;

pinMode(pingPin, OUTPUT);

Page 24: 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ı

24

pinMode(greenLed, OUTPUT);

pinMode(redLed, OUTPUT);

digitalWrite(pingPin, LOW);

delayMicroseconds(2);

digitalWrite(pingPin, HIGH);

delayMicroseconds(5);

digitalWrite(pingPin, LOW);

pinMode(inPin, INPUT);

duration = pulseIn(inPin, HIGH);

cm = microsecondsToCentimeters(duration);

Serial.print(cm);

Serial.print("cm");

Serial.println();

if (cm > safeZone)

{

digitalWrite(greenLed, HIGH);

digitalWrite(redLed, LOW);

}

else

{

digitalWrite(redLed, HIGH);

digitalWrite(greenLed, LOW);

}

delay(100);

}

long microsecondsToCentimeters(long microseconds)

{

return microseconds / 29 / 2;

}

Deney Adı: Arduino ile LCD keypad’e yazı yazma

Gerekli olan malzemeler

1 adet Arduino

LCD Keypad Shield

Erkek jumper kablo

1 adet breadboard

Page 25: 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ı

25

(Şekil 1.1 de gösterilmiştir)

(şekil 1.1)

Donanımın Hazırlanması

. .

Programın Yazılması:

#include <Wire.h>

#include <LiquidCrystal.h>

LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 );

void setup()

{

lcd.begin(16, 2);

lcd.print("karatekin");

}

Page 26: 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ı

26

void loop()

{

//Ana Döngü kodu yazımı…

}

Deneyin Adı: Kesme(Interrupt) Kontrol

Page 27: 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ı

27

Deneyde Gerekli olan Malzemeler: Arduino Uno, 8.2 k direnç, pır dedektörü, bağlantı kabloları

Deneyin Yapılışı:

Yazdığımız uygulamaların kesintiye uğramadan çalışması istenilen bir durumdur.

Interrupt yani kesme ise en temel anlamda işlemcinin hali hazırdaki aktivitesini kesip başka

bir iş yapabilmemize imkan sağlar. Mikrodenetleyici hassas bir kontrol işlemi gerçekleştirirken

o süre içinde pinlere gelen herhangi bir istek yada veri değişimi söz konusu olabilir. Bu

değişimlere cevap verebilmek için Interrupt kullanabiliriz.

Program normal akışı içerisinde devam ederken, zamanlama yada donanım

kesmelerinden birisi aktif olduğunda program akışı o kesme ile ilgili alt programa yönlendirilir.

Altprogramdaki komutlar çalıştırıldıktan sonra ana program kaldığı yerden çalışmasına devam

eder. Interrupt fonksiyonları oldukça basit ve belirli bir işi yerine getirecek şekilde yazılır. Bu

fonksiyonların mümkün olduğunca çabuk çalıştırılıp bitirilmesi beklenir.

Arduino uno iki adet donanım interruptına sahiptir. Gerekli ayarlamalar yapıldıktan

sonra 2 ve 3 nolu dijital pinlerin lojik seviyesi değiştiğinde kesme(interrupt) tetiklenir ve ilgili

kesme fonksiyonu çalıştırılır.

Donanım kesmesinin tetiklenmesinde 4 mod vardır.

LOW: kesme pini LOW seviyesinde olursa.

CHANGE: kesme pinine uygulanan gerilim değiştiğinde, LOW iken HIGH, HIGH iken

LOW olduğunda.

RISING: yükselen kenar. kesme pini LOW konumundan HIGH konumuna çekildiğinde.

FALLING: düşen kenar. kesme pini HIGH konumundan LOW konumuna geçtiğinde.

Bu modlardan herhangi birisi seçilerek istenen donanım kesmesinin tetiklenmesi

sağlanır. program yazarken dikkat etmemiz gereken noktalardan birisi de kesme fonksiyonu

içerisinde delay() ve Serial.available() metodlarını kullanamayız.

Kesmeleri kullanabilmek için öncelikle ayarlarını yapmalıyız.

attachInterrupt(0,fonksiyon,mod) metodu ile kesme aktifleştirilir. Burada 0 ile belirtilen ilk

parametre INT0 olarak 2 nolu dijital pinin parametresidir. Daha sonra ikinci parametre olarak

kesme sinyali geldiğinde çalışmasını istediğimiz fonksiyonun ismini yazıyoruz. Bu fonksiyonun

diğer fonksiyonlardan farkı geri dönüş değerinin olmaması ve parametre almamasıdır. Mod

parametresi ise kesmenin nasıl tetikleneceğini belirtir.

Kesmeleri pasifleştirmek için noInterrupts() metodu, pasif olan kesmeleri tekrar

aktifleştirmek için interrupts() metodu kullanılır. Kesmenin kapatılması için

detachInterrupt(interrupt) metodu kullanılır.

Page 28: 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ı

28

Devremizde arduino uno nun 2 nolu dijital bacağını kesme giriş sinyali için kullandık.

Kesme sinyalini pır dedektörünün tetikleme ucundan aldık. Kesme oluştuğu zaman da seri

monitörden kesme oluştu yazısını yazdırdık.

Programın kodları;

const int Led=13;

void setup()

{

pinMode(Led,OUTPUT);

Serial.begin(9600);

attachInterrupt(0,kesme,RISING);

}

kesme()

{

Serial.println(“kesme calisti”);

}

void loop()

{

digitalWrite(Led,HIGH);

delay(1000);

digitalWrite(Led,LOW);

delay(1000);

}