You are on page 1of 237

Ders Hedefleri

• Bazı giriş cihazlarını tanıma


• Giriş cihazlarının özelliklerini anlama
• Giriş cihazlarıyla tümdevreler arasına giriş arabirim devreleri tasarlayabilme
• TTL ve CMOS lojik gerilim seviye diyagramları kullanarak lojik seviyelerini belirleyebilme
• Seçili TTL ve CMOS IC'yi kullanma, giriş ve çıkış gerilimleri, akımları ve gürültü marjı gibi
özellikleri anlama.
• Sürme kapasitesi, fan-in, fan-out, yayılma gecikmesi ve güç tüketimi diğer IC
spesifikasyonlarını anlama.
• TTL ve CMOSlar için birkaç basit anahtar arayüzünü tanıma, tasarlama, titreşim ve
titreşim giderme (bouncing and debouncing) yöntemlerini anlama.
• Optik ve manyetik bazı anahtarlar için arayüz devrelerini tanıma ve tasarlama
• LED'ler, lambalar, röleler, motorlar ve diğer çıkış cihazları için arabirim devrelerini analiz
etme ve tasarlama

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Ders Hedefleri

• Bir tümdevre çıkışının kaynak ve almaç modunda (source and sink) kullanımını anlama
ve açıklama
• TTL-CMOS ve CMOS-TTL arayüz devrelerini anlama ve tasarlama
• Sesli uyarıcılar, röleler, motorlar ve solenoidler için hem TTL hem de CMOS IC arayüz
devrelerinin çalışmasını açıklama.
• Optoizolatör arabirim devrelerini anlama.
• Bir servo motoru darbe genişliği modülasyonu (PWM) kullanılarak nasıl kontrol
edileceğini anlama.
• Bir step motorun birincil özelliklerini sıralama step motor sürücü devrelerinin çalışmasını
anlama.
• Açık kollektör çıkışları ve arayüzlerini anlama.
• Basit bir mantık devreleri ile ilgili sorunları giderebilme.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Ders Özeti

• Lojik tümdevrelerin avantajları, çeşitliliği ve kolay temin edilebilmeleri dijital devrelerin ve


sistemlerin kullanımını artırmıştır.
• Günümüzde dijital devreler elektroniğin hemen her alanında yaygın olarak
kullanılmaktadır.
• Bununla beraber farklı lojik ailelerden tümdevrelerin bir arada kullanılması da kaçınılmaz
olmuştur.
• Fakat farklı ailelere mensup tümdevrelerin birbirine direkt bağlanması çoğu zaman
mümkün olmaz.
• Böyle durumlarda arayüz devreleri kullanmak gerekir.
• Bunun yanında tümdevreler ile dış dünya arasında bağlantı kurmak için de arayüz
devreleri kullanmak zorunda kalırız.
• Arayüzleme; voltaj ve akım seviyelerini değiştiren devreler tasarlayarak, devre ve
sistemler arasındaki ara bağlantıların uyumlu hale getirilmesi olarak tanımlanabilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Ders Özeti

• Arayüz (interface) devrelerine arabirim adı da verilir.


• Yukarıdaki tarife göre arabirim; bir devrenin veya sistemin çıkış(lar)ını farklı elektriksel
özellikleri olan başka bir devrenin veya sistemin giriş(ler)ine bağlamak için kullanılan
devredir.
• Yani arabirim devresinin görevi; bir devre yada sistemin ürettiği bir sinyalin başka bir
devre için uygun hale getirilmesidir.
• Buradaki uygunluk; lojik seviyeler, akım, gerilim ve emepedans gibi elektriksel özellikleri
kapsamaktadır.
• Dijital devrelerle çalışan teknisyen ve mühendisler için basit arayüz tekniklerine ilişkin
temel bilgiler mutlaka gereklidir.
• Çoğu mantık devresi “gerçek dünya” cihazlarıyla arayüzlenmemişse hiçbir işlevselliği ve
değeri olmaz.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Tümdevre Arayüz Devreleri

Arayüzleme işlemini iki ana grupta inceleyebiliriz.

1. Dış dünya ile devreler arasında arayüzleme

2. Devreler ve sistemler arasında arayüzleme


(Örneğin CMOS ve TTL gibi farklı lojik aileler arasında arayüzleme)

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Tümdevrelerle Dış Dünya Arasında Arayüzleme

Hemen her elektronik devre dış dünya ile veri alışverişinde bulunmaktadır.
Kullanıcının bir butona basmasını algılama veya kullanıcıya bir sonucu göstermek için
bir LEDi yakma buna basit bir örnek olarak verilebilir.

Örnekte, hem giriş hem de çıkış işlemi yapılmaktadır.


Bir giriş ya da çıkış cihazını bir devreye çoğu zaman direkt olarak bağlayamayız.

Bu sebepten dolayı; hem giriş cihazlarının (elemanlarının), hem de çıkış cihazlarının


(elemanlarının) arayüzlenmesine ihtiyaç vardır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Tümdevrelerle Dış Dünya Arasında Arayüzleme

Bu bölümün ilk kısmında temel giriş ve çıkış elemanlarının, ikinci kısmında ise farklı
lojik ailelere ait (CMOS, TTL...) devre ve sistemlerin birbirleriyle pratik ve basit şekilde
arayüzlenmesini öğreneceğiz.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Temel Giriş Elemanları

Temel giriş elemanları olarak mekanik butonları, anahtarları, tuş takımlarını (keypad),
optik ve manyetik anahtarları, sinyal üreteçlerini, kodlayıcıları (encoder), analog ve
digital sensörleri sayabiliriz.

Bunlar dış dünya ile elektronik devre arasında ilişki kurmak için yaygın olarak
kullanılan cihazlardır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Temel Giriş Elemanları

Bir bulaşık makinesini göz önüne alalım.


Kullanıcı makineyi uygun şekilde programlamak için genelde butonları veya döner
anahtarları kullanır.

Yani kullanıcı bir yıkama programını bir butona basarak seçer ve sonrasında başlat
butonuna basarak yıkama işlemini başlatır.

Sistem; yıkamanın başladığını, sürdüğünü, bittiğini veya bir hata olduğunu kullanıcıya
genelde ilgili LEDleri yakarak bildirir.

Bu örnekte kullanıcının bulaşık makinesi ile etkileşimi butonlar ve LEDler ile


sağlanmaktadır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Buton ve anahtar arayüzleme (Interfacing with buttons and
switches)
En basit ve en yaygın giriş cihazı tipi basmalı butonlar ve çeşitli anahtarlardır:

Basmalı butonlar (push button),

Basmalı düğme anahtarlar (push-button switches),

Mekanik geçiş anahtarları (toggle switch),

Açık kapalı güç anahtarları (rocker switch),

Reed anahtarları, v.b. çeşitleri yaygın olarak kullanılmaktadır.

Kullanıcı; bir anahtar kullanarak, bir düğmeye basarak veya bir mıknatısı hareket
ettirerek girişin durumunu basitçe değiştirebilir

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Karadeniz Teknik Üniversitesi

Abdullah Kanca MYO


Elektronik

İŞ GÜVENLİĞİ UZMANLIĞI
İleri Mikrodenetleyiciler
TEMEL EĞİTİM PROGRAMI

Öğr. Gör. Ahmet AKTOĞAN


Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
MİKRODENETLEYİCİ NEDİR?
• CPU, RAM, ROM ve I/O birimlerinin aynı çip içerisinde bulunduran programlanabilir
elektronik devre elemanlarına mikrodenetleyici denir.
• Gelişmiş mikrodenetleyicilerde temel donanım birimlerinin yanında bir çok ek birim
bulunur.
• Bu ek birimlerin başında Kesme Denetleyici (Interrupt Controller), Timer/Counter, ADC,
DAC, PWM, USART, I2C, SPI birimleri gelir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
MİKRODENETLEYİCİLER NE ZAMAN TERCİH EDİLİR?

• Sistemde işlem gücü gerekiyorsa


• Sistemi programlamak gerekiyorsa
• Sistem karmaşıklığı azalıyorsa
• Aynı işi yapabilmek için kullanılan ayrık devre elemanlarının maliyeti daha yüksekse
• Sistemde çeşitli sensör ve aktuatör kullanımı varsa
• Başka sistemler ile iletişim gerekiyorsa

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
MİKRODENETLEYİCİLER NE ZAMAN TERCİH EDİLMEZ?

• Eğer sistemin işlem yükü çok az ya da işlem yükü barındırmıyorsa


• Programlamanın sağladığı esnekliğin bir avantajı yoksa
• Ayrık devre elemanları kullanarak daha kolay ve ucuza üretilebiliyorsa
• Bunun gibi sistem tasarımında dezavantaj getirebilecek herhangi bir durumda
mikrodenetleyici kullanımı tercih edilmez.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
MİKRODENETLEYİCİLERİN GENEL DONANIM YAPISI

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ATMega328

• Atmel şirketinin ürettiği 8 bit Flash ROM’lu bir mikrodeneleyicidir.


• THT ve SMD versiyonları 28 pin DIP, 32 pin TQFP ve QFN paketlerde üretilmektedir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ATMega328

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ATMega328

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ATMega328

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ATMega328

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ATMega328

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ATMega328

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO VERİ TİPLERİ

TİP ADI TÜRÜ BOYU İŞARET ? DEĞER ARALIĞI ÖRNEK


bool devam = true;
bool, boolean Mantıksal 1 bit İşaretsiz true, false
boolean geri= false;
byte, unsigned byte not=100;
Sayı 8 bit İşaretsiz 0-255
char unsigned char karakter=245;
char myChar = 'A';
char Karakter 8 bit işaretsiz ASCII Karakterler
char myChar = 65; //aynı
-32.768 …. int uzaklik = 0;
int, short Sayı 16 bit İşaretli
+32.767 short ledPin = 13;
unsigned int , İşaretsiz 0…. unsigned int frekans = 85000;
Sayı 16 bit
word +65.535 word gerilim = 35000;
-2.147.483.648 ….
long Sayı 32 bit İşaretli long isiginHizi_km_s = 300000L;
+2.147.483.648
0…
unsigned long Sayı 32 bit İşaretsiz unsigned long sure = 9876549;
+4.294.967.295
3,4028235E+38.... double yuk=45.87;
double, float Virgüllü sayı 32 bit İşaretli
3,4028235E+38 float sensorKatsayi = -1.117;
String Tekst Stringler konusunda işlenecek

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO SABİTLER

SABİT ADI KÜTÜPHANEDEKİ TANIMI

false #define false 0x0

true #define true 0x1

LOW #define LOW 0x0

HIGH #define HIGH 0x1


INPUT #define INPUT 0x0
INPUT_PULLUP #define INPUT_PULLUP 0x2
OUTPUT #define OUTPUT 0x1
LED_BUILTIN #define LED_BUILTIN 13

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL I/O PORT GENEL YAPISI

• ATMega serisi denetleyicilerde; her


digital I/O ucu üç durumludur (tri-state).
• Yani portlar; giriş, çıkış ve yüksek
empedans (float=HiZ) durumlarına
programlanabilir.
• Bu işlem, her porta ait DDR (Data
Direction Register) kaydedicisinin ilgili
bitlerini set/reset ederek gerçekleştirilir.
• I/O pinlerinin hem pin uçlarını/a hem de
dahili kaydedicilerini/e okuma ve
yazma imkanı vardır.
• Portların dahili pull-up dirençleri vardır
ve dirençleri aktif ve pasif etmek
mümkündür.
• Ayrıca güç tasarrufu için portları uyku
(SLEEP) moduna alma imkanı da
vardır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL I/O PORT ÇIKIŞ YAPISI

• Arduino port giriş/çıkışları şekildeki gibi push-pull yapısındadır.


• Sink, source veya float (HiZ) moduna programlanabilir.
• Sink ve source modlarında pin başına maksimum 40mA akım kapasitesi vardır.
• Pin başına 20mA önerilir.
• Fakat herhangi bir portun tüm pinlerinin toplam akımlarının sink modunda 100mA’i, source modunda
150mA’i aşmaması önerilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL I/O SINK MODU

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL I/O SOURCE MODU

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL I/O FLOAT (Hi) MOD

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL I/O PORTLARINI ÇIKIŞ OLARAK AYARLAMA

pinMode(pin,mode); fonksiyonu
• Sentaks : pinMode(pin, mode);
• Parametreler : pin: Pin numarası.
mode: INPUT, OUTPUT, INPUT_PULLUP.
• Dönüş değeri : Yok

ÖRNEK KOD

void setup() {
pinMode(13, OUTPUT); // digital pin 13 çıkış
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL I/O PORTLARINI GİRİŞ OLARAK AYARLAMA

• ATMega serisi denetleyicilerde; bir digital I/O ucu pinMode(pin,mode); fonksiyonuyla giriş olarak ayarlanır.
Mode parametresi olarak INPUT belirlenirse ilgili pin giriş olarak ayarlanır ve yüksek empedans durumuna
(float=HiZ) geçer. Bu modda olan bir girişi boşta bırakmamalı, boşta kalacaksa harici dirençlerle yükseğe
veya düşüğe çekmeliyiz. Özellikle buton okumalarında bu husus önemlidir.

ÖRNEK KOD
void setup() {
pinMode(5, INPUT); // digital pin 5 giriş (float)
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL I/O DAHİLİ PULL-UP DİRENCİ

• ATMega serisi denetleyicilerde; bir digital I/O ucu giriş olarak ayarlandığında yüksek empedans durumuna
(float=HiZ) geçer. Pin float durumundayken eğer pin dışarıdan herhangi bir lojik seviyeye çekilmemiş ise
gürültüye açık halde olur ve gürültülü bir ortamda pin ucunda sahte sinyaller oluşabilir. Giriş olarak
ayarlanmış bir pini boşta bırakmak istemezsek ya dışarıdan bir dirençle yukarı veya aşağı çekmeli ya da
dahili yukarı çekme direncini programla aktif etmeliyiz.
• Dahili yukarı çekme direncini programla aktif etmenin iki yolu vardır.
1. Pin giriş olarak ayarlandıktan sonra yükseğe çekilir.
2. INPUT-PULLUP moduna alınır.

ÖRNEK KOD
void setup() {
pinMode(5, INPUT); // digital pin 5 giriş (float) Dahili
pinMode(8, INPUT_PULLUP); // digital pin 8 giriş pull-up pul-up
} direnci

Not:
1. Arduino port pinlerine besleme geriliminden daha yüksek
ve toprak seviyesinden daha düşük yani negatif gerilim
verilmemelidir.
2. PU direnci 20k-50k arasında bir değerde olur.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME

• Arduino’da herhangi bir digital I/O pininden farklı formatlarda dijital çıkış üretmek mümkündür. Bu amaç
için üç fonksiyon kullanılır.
1. digitalWrite()
2. tone()
3. shiftOut()

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME digitalWrite() FONKSİYONU
digitalWrite() fonksiyonu, herhangi bir dijital I/O pininde 1 ve 0 oluşturmak için kullanılır.

Fonksiyon yapısı ve detayları aşağıdaki gibidir.


Sentaks : digitalWrite(pin,değer);
Dönüş değeri : Yok
Parametreler :
pin: Pin numarası,
değer: HIGH, LOW

ÖRNEK KOD:
void setup() {
pinMode(13, OUTPUT); //digital pin 13 çıkış
}
void loop() {
digitalWrite(13, HIGH); // digital pin 13 Lojik 0
delay(1000); // 1000mS= 1 saniye bekle
digitalWrite(13, LOW); // digital pin 13 Lojik 0
delay(1000); // 1 saniye bekle
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME
Digital pinlerin başlangıç (default) durumları:
• AVR chipli arduinolarda tüm port pinleri başlangıç durumunda yüksek
empedans (float) durumundadır.
• Bu durum pinlerin çalışmaya giriş olarak başladıkları anlamına da gelir.
• Daha sonra pinMode (pin, OUTPUT); yaparsanız, pin OUTPUT LOW'a
döner.
• Bununla birlikte, pini önce INPUT_PULLUP'a ve ardından OUTPUT'a
ayarlarsanız, pin, OPUTPUT HIGH durumuna geçer.
• Bazen, pinlerin OUTPUT'a çevrildiğinde sahip olacakları durumu tam olarak
garanti altına almak istersiniz.
• Örneğin, bir pini OUTPUT olarak ayarladığınızda HIGH durumundan
kaçınmak istediğiniz durumda en güvenli yol, pini OUTPUT'a değiştirmeden
önce çıkış seviyesini LOW’a çekmektir.
digitalWrite (pin, LOW); // önce bunu yap
pinMode (pin, OUTPUT);

• Yukarıdaki kodda pini OUTPUT olarak ayarlamadan önce pine LOW yazdık.
OUTPUT olarak ayarlanmamış bir pin üzerinde digitalWrite ()
gerçekleştirmenin bir yan etkisi, pine LOW’ yazarsanız INPUT'a (float), HIGH
yazarsanız INPUT_PULLUP'a geçmesidir. Eğer bir pin harici olarak düşük bir
seviyeye bağlı iken INPUT_PULLUP'a geçirilirse pinden dışarıya doğru akım
akacaktır. Bu durumlar, AVR IO bağlantı noktalarının bir özelliğidir.
• Kodunuzun okunabilir ve taşınabilir olmasını istiyorsanız, bu durumu dikkate
alarak kodlama yapmalısınız.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME tone() FONKSİYONU
• tone() fonksiyonu, herhangi bir dijital I/O pininde belirlenen frekansta belirlenen süre boyunca %50 görev
döngüsüne sahip kare dalga üretmeyi sağlar. Süre sınırı isteğe bağlıdır. Bu sebeple tone() fonksiyonunu iki
prototipi vardır. Birinde süre parametresi yoktur birinde vardır.
• Bir süre belirtilebilir, aksi takdirde sinyal, noTone() fonksiyonu çağrılana kadar kadar devam eder. Pin, tonları
çalmak için bir piezo veya başka bir hoparlöre bağlanabilir.
• Bir seferde yalnızca bir ton üretilebilir. Zaten farklı bir pin üzerinde bir ton çalıyorsa, ton çağrısının () bir etkisi
olmayacaktır. Ton aynı pin üzerinde çalıyorsa, çağrı frekansını ayarlayacaktır.
• 3 ve 11 pinlerinde tone() işlevinin kullanılması, (Mega dışındaki kartlarda) PWM çıkışını engelleyecektir.
• 31Hz-65535Hz aralığında tonlar üretilebilir.
• Birden fazla pin üzerinde farklı tonlar çalmak istiyorsanız, sonraki pin için tone() çağırmadan önce mevcut
pin için noTone()'u çağırmanız gerekir.
Fonksiyon yapısı ve detayları aşağıdaki gibidir.
Sentaks :
tone(pin,frekans);
tone(pin,frekans,süre);
Dönüş değeri : Yok
Parametreler :
pin: Pin numarası,
frekans: 31-65535
süre: Milisaniye cinsisnden unsigned long

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME tone() FONKSİYONU

ÖRNEK KOD:
void setup() {
tone(8, 330, 500);
delay(1000);
noTone(8);
}

void loop() {

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME tone() FONKSİYONU
#define NOTE_B0 31 #define NOTE_E4 330 #define NOTE_A7 3520
#define NOTE_C1 33 #define NOTE_F4 349 #define NOTE_AS7 3729
ÖRNEK KOD: #define NOTE_CS1 35 #define NOTE_FS4 370 #define NOTE_B7 3951
#define NOTE_D1 37 #define NOTE_G4 392 #define NOTE_C8 4186
#include "pitches.h" #define NOTE_DS1 39 #define NOTE_GS4 415 #define NOTE_CS8 4435
#define NOTE_E1 41 #define NOTE_A4 440 #define NOTE_D8 4699
int melody[] = { NOTE_C4, NOTE_G3, NOTE_G3, #define NOTE_F1 44 #define NOTE_AS4 466 #define NOTE_DS8 4978
#define NOTE_FS1 46 #define NOTE_B4 494
NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; #define NOTE_G1 49 #define NOTE_C5 523
#define NOTE_GS1 52 #define NOTE_CS5 554
int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; #define NOTE_A1 55 #define NOTE_D5 587
#define NOTE_AS1 58 #define NOTE_DS5 622
void setup() { #define NOTE_B1 62 #define NOTE_E5 659
#define NOTE_C2 65 #define NOTE_F5 698
for (int thisNote = 0; thisNote < 8; thisNote++) { #define NOTE_CS2 69 #define NOTE_FS5 740
#define NOTE_D2 73 #define NOTE_G5 784
int noteDuration = 1000 / noteDurations[thisNote]; #define NOTE_DS2 78 #define NOTE_GS5 831
#define NOTE_E2 82 #define NOTE_A5 880
tone(8, melody[thisNote], noteDuration); #define NOTE_F2 87 #define NOTE_AS5 932
#define NOTE_FS2 93 #define NOTE_B5 988
#define NOTE_G2 98 #define NOTE_C6 1047
int pauseBetweenNotes = noteDuration * 1.30; #define NOTE_GS2 104 #define NOTE_CS6 1109
#define NOTE_A2 110 #define NOTE_D6 1175
delay(pauseBetweenNotes); #define NOTE_AS2 117 #define NOTE_DS6 1245
#define NOTE_B2 123 #define NOTE_E6 1319
noTone(8); #define NOTE_C3 131 #define NOTE_F6 1397
#define NOTE_CS3 139 #define NOTE_FS6 1480
} #define NOTE_D3 147 #define NOTE_G6 1568
#define NOTE_DS3 156 #define NOTE_GS6 1661
} #define NOTE_E3 165 #define NOTE_A6 1760
#define NOTE_F3 175 #define NOTE_AS6 1865
void loop() { #define NOTE_FS3 185 #define NOTE_B6 1976
#define NOTE_G3 196 #define NOTE_C7 2093
} #define NOTE_GS3 208 #define NOTE_CS7 2217
#define NOTE_A3 220 #define NOTE_D7 2349
#define NOTE_AS3 233 #define NOTE_DS7 2489
#define NOTE_B3 247 #define NOTE_E7 2637
#define NOTE_C4 262 #define NOTE_F7 2794
#define NOTE_CS4 277 #define NOTE_FS7 2960
#define NOTE_D4 294 #define NOTE_G7 3136
#define NOTE_DS4 311 #define NOTE_GS7 3322
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME shiftOut() FONKSİYONU
• Kaydırmalı kaydedicilier (shift register) dijital elektronikte yaygın olarak kullanılan elemanlardır.
• Seri giriş-seri çıkış, seri giriş-paralel çıkış, paralel giriş-seri çıkış ve paralel giriş-paralel çıkış çeşitleri vardır.
• 74HC595 seri giriş-paralel çıkışlı bir kaydırmalı kaydedicidir.
• LED göstergelerde ve LED panellerde kayan yazı uygulamalarında yaygın olarak kullanılırlar.
• Seri giriş-paralel çıkışlı olması bağlandığı mikrodenetleyicinin az sayıda pinini kullanarak çok sayıda çıkış
üretme imkanı verir.
• Entegrenin temel çalışması üç girişle kontrol edilir.
1. Seri data girişi,
2. Clock girişi,
3. Latch girişi.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME shiftOut() FONKSİYONU
• Daha önce bahsedildiği gibi 74HC595 entegresi 3 girişle kontrol edilen seri girişli-8-bit paralel
çıkışlı bir shift register entegresidir. İç yapısında seri giriş-paralel çıkışlı bir kaydırmalı
kaydedici ve çıkış latch (mandal) kaydedicisi vardır. Çalışma mantığı şöyledir:
1. Öncelikle latch girişi “0” yapılır. Böylece entegrenin çıkış kaydedicisi pasif hale getirilerek
çıkışlarındaki bitlerin sabit tutulması ve girişlerindeki bitlerin çıkışlarını etkilememsi
sağlanır.
2. Data pinine hafızaya alınması istenilen bit verilir (1 veya 0).
3. Clock pinine bir saat darbesi (Clock Pulse) gönderilir. Böylece data pinine verilen değer
LSB’ye yazılırken diğer bitler birer bit kaydırılır. Bu işlem sırasında MSB’deki bit silinir ya
da varsa bir sonraki entegrenin LSB’sine aktarılır.
4. Her yeni bit için yeni bir saat darbesi uygulanır. 8 bit ve 8 adet saat darbesi yapıldığında
ise eski 8 bitlik değerler giderken, yeni verilen 8 bitlik data hafızaya alınmış olur.
5. 8 bit datanın girişi 8 saat darbesiyle yapıldıktan sonra Latch pini “1” yapılarak giriş
hafızasında tutulan 8 bitlik değer çıkışa hafızasına ve çıkışa aktarılır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME shiftOut() FONKSİYONU
• shiftOut() fonksiyonu, 74HC595 gibi seri giriş-paralel çıkış yapısındaki kaydırmalı kaydedici entegreleri
kullanmayı kolaylaştıran bir fonksiyondur.
• shiftOut() fonksiyonu, 8 bitlik veri baytını bit bit kaydırarak çıkış pinine seri şekilde yazar. LSB’den MSB’ye
veya tersi şekilde kaydırma yönü ayarlanabilir. Sıradaki bit veri pinine yazılır, ardından saat pininde önce
yüksek sonra düşük şekilde bir saat darbesi üretilir.
• Not: Saatin yükselen kenaryla tetiklene bir entegre kullanıyorsanız shiftOut() çağrısından önce
digitalWrite(clockPin, LOW) çağrısıyla saat pinini düşüğe çekin.
Fonksiyon yapısı ve detayları aşağıdaki gibidir.
Sentaks :
shiftOut(dataPin, clockPin, bitSırası, değer);
Dönüş değeri : Yok
Parametreler :
dataPin: Data pin numarası,
clockPin: Clock pin numarası,
bitSırası: MSBFIRST veya LSBFIRST,
clockPin: Byte tipinde veri,

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME shiftOut() FONKSİYONU

//Pin connected to ST_CP of 74HC595


int latchPin = 9;
//Pin connected to SH_CP of 74HC595
int clockPin = 10;
////Pin connected to DS of 74HC595
int dataPin = 8;

void setup() {
//set pins to output because they are addressed
in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}

void loop() {
//count up routine
for (int j = 0; j < 256; j++) {
//ground latchPin and hold low for as long as
you are transmitting
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, j);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, HIGH);
delay(1000);
}
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME shiftOut() FONKSİYONU

Q7’1->DS1

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO GİRİŞ DARBE SÜRESİ ÖLÇME pulseIn() FONKSİYONU
• Darbe sürelerinin ölçümüne digital elektronikte her zaman ihtiyaç duyulmaktadır. Veri haberleşmesi, PWM
gibi kontrol teknikleri, sensör darbe sürelerinin okunması, zamanlama sinyallerinin değerlendirilmesi v.b.
uygulamalar darbe sürelerinin bilinmesini gerektiren örneklerdir.
• pulseIn() fonksiyonu, bir pindeki darbenin YÜKSEK veya DÜŞÜK sürelerini okur. Örneğin, değer
parametresi HIGH ise, pulseIn () pinin LOW'dan HIGH'a gitmesini bekler ve geçiş gerçekleşince
zamanlamayı başlatır, ardından pinin LOW’a gitmesini bekler ve geçiş gerçekleşince zamanlamayı durdurur.
Darbenin uzunluğunu mikrosaniye cinsinden döndürür veya zaman aşımı belirlenmişse bu süre içinde içinde
tam bir darbe alınmadıysa vazgeçip 0 değerini döndürür.
• Bu işlevin zamanlaması deneysel olarak belirlenmiştir ve muhtemelen 3 dakikadan daha uzun darbelerde
hatalar oluşacaktır. 10 mikrosaniye ila 3 dakika uzunluğundaki darbelerde doğru çalışır.
• Not: HIGH / LOW parametresi, sinyalin yüksek veya düşük periyodunu ölçmenizi sağlar. Yalnızca HIGH
veya LOW ölçülebilir. Aynı anda ikisi ölçülemez.
Fonksiyon yapısı ve detayları aşağıdaki gibidir.
Sentaks :
pulseIn(pin, değer)
pulseIn(pin,değer, zaman_aşımı)
Dönüş değeri : unsigned long tipinde mikro saniye olarak zaman darbe süresi. Zaman aşımı süresince darbe
oluşmazsa 0 döndürür.
Parametreler :
dataPin: int tipinde darbe giriş pin numarası,
değer: LOW veya HIGH olarak ölçülmek istenen darbe seviyesi,
zaman_aşımı: Darbenin başlaması için beklenecek mikrosaniye süresi. Varsayılan 1 saniyedir. Seçimlik bir
parametredir. İzin verilen veri tipi: unsigned long.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO GİRİŞ DARBE SÜRESİ ÖLÇME pulseIn() FONKSİYONU

int pin = 7;
unsigned long darbe_suresi;

void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
}

void loop() {
darbe_suresi = pulseIn(pin, HIGH);
Serial.println(darbe_suresi);
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO GİRİŞ DARBE SÜRESİ ÖLÇME pulseInLong() FONKSİYONU
• pulseInLong(), uzun darbe sürelerini okumak ve kesmelerden etkilenen senaryolarda daha doğru sonuçlar
elde etmek için pulseIn()'e bir alternatiftir.
• Bir pin üzerindeki bir darbenin (HIGH veya LOW) okur. Örneğin, değer parametresi HIGH ise, pulseInLong()
pinin LOW'dan HIGH'a gitmesini bekler, zamanlamayı başlatır, ardından pinin LOW’a gitmesini bekler ve
zamanlamayı durdurur. Darbenin uzunluğunu mikrosaniye cinsinden döndürür veya zaman aşımı içinde tam
bir darbe alınmadıysa vazgeçip 0 değerini döndürür.
• Bu işlevin zamanlaması deneysel olarak belirlenmiştir ve muhtemelen kısa darbelerde hatalı ölçüm
yapacaktır. 10 mikrosaniye ila 3 dakika uzunluğundaki darbeler üzerinde çalışır. Bu rutin, yalnızca kesmeler
etkinleştirildiğinde kullanılabilir. Ayrıca en yüksek çözünürlük geniş aralıklarla elde edilir.
• Bu işlev micros() ‘a dayanır, bu nedenle noInterrupts() bağlamında kullanılamaz.
• Fonksiyon yapısı ve detayları aşağıdaki gibidir.
Sentaks :
pulseInLong(pin, değer)
pulseInLong(pin,değer, zaman_aşımı)
Dönüş değeri : unsigned long tipinde mikro saniye olarak zaman darbe süresi. Zaman aşımı süresince darbe
oluşmazsa 0 döndürür.
Parametreler :
dataPin: int tipinde darbe giriş pin numarası,
değer: LOW veya HIGH olarak ölçülmek istenen darbe seviyesi,
zaman_aşımı: Darbenin başlaması için beklenecek mikrosaniye süresi. Varsayılan 1 saniyedir. Seçimlik bir
parametredir. İzin verilen veri tipi: unsigned long.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO GİRİŞ DARBE SÜRESİ ÖLÇME pulseIn() FONKSİYONU

int pin = 7;
unsigned long darbe_suresi;

void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
}

void loop() {
darbe_suresi = pulseInLong(pin, HIGH);
Serial.println(darbe_suresi);
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
pulseIn() ile pulseInLong() FARKLARI

1. pulseIn() kısa darbelerde daha doğru sonuç verir.


2. Hem kesmeli hem kesmesiz bağlamlarda çalışır. pulseIn()’den önce kesmeler pasif edilirse daha
doğru sonuç verir.
noInterrupts();
pulseIn(pin,HIGH); // 10 second timeout.
interrupts();
3. pulseInLong() fonksiyonu uzun darbelerde daha doğru sonuç verir.
4. pulseInLong() fonksiyonu zamanlamayı timer kesmesiyle ölçer. micros() fonksiyonunu ve dolayısıyla
Timer 0 kesmesini kullanır. Bu yüzden kesmeler kesinlikle pasif edilmemeli.
5. Sadece kesmeli bağlamda çalışır.
NOT: Kesmelerin pasif edilmesinin zorunlu olduğu durumlarda pulseInLong() kullanılamaz. O durumda
pulseIn() kullanılmalı.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIGITAL GİRİŞTEN SAATLİ SERİ BİT OKUMA shiftIn() FONKSİYONU
• Dış dünyadan veri almak için az pin kullanmak çoğu durumda tercih edilen bir yöntemdir. Bu amaçla
çoğunlukla seri haberleşme tercih edilir ve bu alandaki çalışmalar son zamanlarda hız kazanarak SPI, I2C
gibi bir çok seri haberleşme protokolü geliştirilmiştir.
• Lojik entegreler içinde de paralel veriyi seriye dönüştüren bir çok chip vardır. 74HC165, CD4021 bunlardan
bazılarıdır. Bunlar paralel giriş-seri çıkış kaydırmalı kaydedicilerdir.
• 74HC165, A,B,C,D,E,F,G,H girişlerindeki 8 bit paralel veriyi CLK girişine uygulanan her saat darbesinde bit
olmak üzere QH seri çıkışına aktarır.
• Shift/Load ve ClockInhibit pinleri de entegrenin diğer kontrol pinleridir.
• Shift/Load pinine uygulanan HIGH-LOW-HIGH darbesi, giriş datasının entegreye yüklenmesini sağlar.
• ClockInhibit pini LOW’a çekilerek saat girişi aktif edilir (ClockInhibit pini düşük aktif çalışır)
• Her saat periyodunda bir bit olmak üzere giriş datası H’den A’ya 8 saat periyodunda çıkışa seri
olarak aktarılır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIGITAL GİRİŞTEN SAATLİ SERİ BİT OKUMA shiftIn() FONKSİYONU
• shiftIn() fonksiyonu, her saat periyodunda bir bit olmak üzere bir pinden 8 bit veri okur ve döndürür. Saat
darbelerini otomatik üretir. Data okuma sırası parametreyle belirlenenebilir.
• Her bit için saat pini otomatik olarak HIGH’a çekilir, sonraki bit veri hattından okunur ve ardından saat pini
LOW’a alınır.
• Saatin yükselen kenarlarında tetiklenen bir entegre ile arayüz oluşturuyorsanız, ilk shiftIn () çağrısından
önce saat pininin düşük olduğundan emin olmanız gerekir. digitalWrite (clockPin, LOW) çağrısıyla bunu
yapabilirsiniz.
Fonksiyon yapısı ve detayları aşağıdaki gibidir.
Sentaks :
byte gelenVeri = shiftIn(dataPin, clockPin, bitSirasi)
Dönüş değeri : byte tipinde seri olarak okunan 1 byte veri.
Parametreler :
dataPin: int tipinde veri giriş pin numarası, INTPUT olarak ayarlanmalı,
clockPin: Saat sinyalinin üretileceği pin. OUTPUT olarak ayarlanmalı,
bitSirasi: MSBFIRST veya LSBFIRST.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIGITAL GİRİŞTEN SAATLİ SERİ BİT OKUMA shiftIn() FONKSİYONU
// PL pin 1
int load = 7;
// CE pin 15
int clockEnablePin = 4;
// Q7 pin 7
int dataIn = 5;
// CP pin 2
int clockIn = 6;

void setup()
{
// Setup Serial Monitor
Serial.begin(9600);

// Setup 74HC165 connections


pinMode(load, OUTPUT);
pinMode(clockEnablePin, OUTPUT);
pinMode(clockIn, OUTPUT);
pinMode(dataIn, INPUT);
}
void loop()
{

// Write pulse to load pin


digitalWrite(load, LOW);
delayMicroseconds(5);
digitalWrite(load, HIGH);
delayMicroseconds(5);

// Get data from 74HC165


digitalWrite(clockIn, HIGH);
digitalWrite(clockEnablePin, LOW);
byte incoming = shiftIn(dataIn, clockIn, LSBFIRST);
digitalWrite(clockEnablePin, HIGH);

// Print to serial monitor


Serial.print("Pin States:\r\n");
Serial.println(incoming, BIN);
delay(200);
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ADC (Analog to Digital Converter)

• Analogdan Dijitale Dönüştürücü bir giriş voltajını dijital bir değere dönüştürür.
• Arduino ADC standart olarak 0V ile 5V arasındaki gerilimleri 4.88mV çözünürlükle dijitale dönüştürür,

• ARDUİNO ANALOG PİNLERİ


• Arduino Uno'da ADC ölçümü için seçilebilen altı pin vardır; A0 ~ A5 olarak gösterilmektedir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ADC (Analog to Digital Converter)

• Arduino’da kullanılan ATMega328 mikrodenetleyicisinde bir dahili ADC vardır.


• Bu ADC’nin girişinde yine dahili bir multiplexer(veri seçici) bulunur ve bu multiplexer, altı analog giriş
pininden birini programla seçerek ADC‘nin girişine bağlar.
• Örneğin A4 pininden bir analog voltaj okumak için aşağıdaki kod ve işlev kullanılır:

int val;
val = analogRead (A4);

• Gördüğünüz gibi giriş ucunun (A0 ~ A5) seçimi programla otomatik olarak yapılmaktadır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ADC ÖZELLİKLERİ

ADC'lerde, ideal giriş eşik değeri ile belirli bir çıktı kodunun
ölçülen eşik değeri arasındaki sapmadır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ADC ÇÖZÜNÜRLÜĞÜ

• Arduino ADC'nin 10 bitlik bir dönüştürücüsü vardır ve bu, ADC'nin çıkışında 210=1024 farklı değer olacağı
anlamına gelir:

• 1023 VEYA 1024'E BÖLMEK?


• Her bit için voltaj değerini elde etmek için 1024'e mi yoksa 1023'e mi bölüneceği konusunda her zaman bazı
karışıklıklar vardır.
• Ancak ATMega328P veri sayfası aşağıdaki formülü verir:

ADC= (Vin*1024) / Vref


Vin = (Vref / 1024)*ADC

• Vref; 5 voltluk Arduino kartlarında 5V, 3.3 voltluk Arduino kartlarında 3.3V’tur.
• Dolayısıyla, Vref = 5V için, 1 LSB bitlik bir ADC adımı, 4.88mV'lik bir Voltaj adımıyla sonuçlanır.
• Yani Arduino ADC çözünürlüğü 4.88mV’tur.

• Bununla birlikte, maksimum ADC çıkış değerinin 1023 olduğunu ve bu nedenle ölçülebilecek maksimum
ADC analog giriş voltajının şu şekilde olduğunu unutmayın:

• Vin = (Vref / 1024)*ADC = (5/1024)*1023 = 4,9951V


Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ADC SAAT SİSTEMİ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ADC TİPİ VE ÖRNEKLEME HIZI

• Arduino ADC, ardışık yaklaşım (successive approximation) ADC tipindedir.


• Bu tip ADC’ler birkaç saat döngüsünde dönüşüm yaparlar.
• Normal bir dönüşüm 13 ADC saat döngüsü alır. ADC açıldıktan sonraki ilk dönüştürme 25 ADC saat
döngüsü alır.
• ADC saati 50kHz ile 200kHz arasında olabilir
• Bu aralıkta geçerli bir ADC saati elde etmek için ön ölçekleyici değeri seçilir.
• ADC saati ön ölçekleyici, 2,4,8,16,32,64 veya 128'e ayarlanabilir.
• Kullanılan saat frekansında için en hızlı dönüştürme oranını isteriz
• 16MHz sistem saatinden 200kHz ADC saati elde etmek için ön ölçekleyici değeri 16MHz/200kHz = 80
olmalıdır fakat ön ölçekleyicide 80 seçeneği yoktur. 80’e en yakın 64 vardır.
• Ancak 16MHz/64=250kHz'dir ve bu frekans 200kHz’den büyüktür. O sebepten kullanılamaz.
• Bu nedenle, 128 böleninin seçilmesi gerekir. Böylece ADC saati 16MHz/128 = 125kHz olur.
• Bir dönüşüm 13 ADC saat döngüsünde gerçekleştiği için bir dönüşüm periyodu:
• 13*1/125kHz = 104us olur.
• Arduino Uno örnekleme frekansı (sample rate) (16MHz kristal) = 1/104uS= 9615 Hz hesaplanır.
• Aslında, Arduino referans sayfasında örnekleme frekansının yaklaşık 10 kHz olduğu yazıyor. Bu
yüzden bu hesaplama bu bilgiyle eşleşiyor.
• Yani 16MHz kristalle maksimum Arduino ADC örnekleme frekansı: 9,615 kHz

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ADC TİPİ VE ÖRNEKLEME HIZI

• Yukarıdaki frekans 16MHz kristalli Arduino’nun maksimum örnekleme frekansıdır, ancak bir sinüs
dalgasını yeniden üretmek için örnekleme frekansı sinyal frekansının en az iki katı olmalıdır (Nyquist
ktiteri).
• Bir başka deyişle, güvenle yeniden üretebileceğiniz sinyalin bant genişliği örnekleme frekansının en
fazla yarısı olmalıdır.
• Uyarı: 9.615kHz örnekleme hızı ile en yüksek 4.8kHz sinyalleri örnekleyebiliriz.
• Ancak bu sadece sinüs dalgaları ile ilgilidir.
• 4.8kHzlik bir kare dalgayı yeniden üretemezsiniz çünkü kare dalganın kenarları çok daha yüksek
frekanstadır
• Aslında 4.8kHz'lik bir kare dalgayı dönüştürerek yeniden oluşturmaya çalışırsanız 4.8kHz'lik bir sinüs
dalgası elde edersiniz.
• Dijital osiloskopların istenen maksimum çalışma frekansından yaklaşık 10 kat daha yüksek örnek
hızlarına sahip olmasının nedeni budur.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ÖRNEKLEME HIZINI DEĞİŞTİRME

• ADC saat hesaplamaları


• Sistem saatini 20MHz olarak ayarlarsanız, 20MHz / 128 = 156250.0 elde edersiniz - biraz daha hızlı
dönüştürme için.
• İlginç bir şekilde, bir tasarım kararı olarak farklı bir açıdan bakarsak:
• 200kHz'lik en hızlı ADC saat hızını istiyorsanız, o zaman şu soruyu sormamız gerekir:
• «Hangi kristal frekansı ADC ön ölçeklemesinden sonra 200 kHz ADC hızıyla sonuçlanır?"

• XTAL = 200KHZ * ÖN ÖLÇEK


• formülünde ön ölçek olarak 64 denersek Xtal=12800.000 yani 12,8 MHz verir
• 12.8MHz/ 64 = 200kHz ADC saati elde edilir.
• Dolayısıyla, Xtal frekansını düşürmek, 200 kHz'lik daha hızlı bir dönüşüm oranına izin verir!
• Bu durumda maksimum örnekleme oranı :
• 200kHz/13 = 15384Hz (12.8MHz XTAL İÇİN) olur.
• Ancak bulunması daha kolay olduğu için muhtemelen 12MHz kristal kullanacaksınız, bu nedenle
yukarıdaki örnekleme hızı biraz daha düşük olacaktır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ADC REFERANS VOLTAJI

• Üç ADC referans voltaj kaynağı kullanabilirsiniz:


1. Güç kaynağı.
2. Dahili referans diyot (nominal olarak 1.1V).
3. Harici bir voltaj referansı.
• Referans voltajı, yukarıda açıklandığı gibi çalışan ADC dönüştürücüye uygulanabilecek tam ölçek
voltajını belirler.
• Vref değerini 1V olarak değiştirdiğinizi varsayalım, algılayabileceğiniz minimum LSB=1/1024=0.976mV
• İPUCU:
• Dahili 1.1V referansını seçebilirsiniz ve bu, yaklaşık 0.1mV'luk bir adım aralığı verecektir:
• Tam hesaplama, adım başına 1.1 / 1024 = 0.00107V ~ 0.11mV’tur.
• Bu, ADC'nin 1.1V üzerindeki voltajları dönüştüremeyeceği anlamına gelir.

• Uyarı: Referans pinine harici bir voltaj uygularken asla dahili referansı açmayın.
• Dahili referansı açmadan önce, uygulanan harici voltaj olmadığını kontrol edin. Varsa, muhtemelen bir
şeyi patlatacaksınız (ADC blok şemasına bakın).
• 'Dahili 1V1 referans' voltajı ve AVCC voltajı, bir MUX aracılığıyla ve ardından bir MOSFET aracılığıyla
kontrol edilir ve ardından AREF'e bağlanır. Harici bir voltaj uygulanır ve referans veya AVCC seçilirse,
MOSFET (ve MUX) voltaj farkı yanmaya sebep olur!

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ADC REFERANS VOLTAJI analogReference() fonksiyonu
• Arduino Kodu hangi Referans voltajını kullanır?
• Arduino örnek kodu incelerseniz, analog referans AREF'den hiç bahsedilmediğini göreceksiniz.
• Halbuki ADC'nin voltajı ölçebilmesi için bir referansa sahip olması gerekir!
• Aslında analogread() işlevi, seçilen referans kaynağını etkinleştirecektir. Varsayılan referans kaynağı
AVCC'dir (güç kaynağı).
• Arduino kodunu yazarken bu, analog okuma işlevini kullanmayı kolaylaştırır, çünkü varsayılan durum,
referans voltajı için güç kaynağını kullanmaktır.
• Referans kaynağı olarak AREF giriş pinini kullanmak istiyorsanız her zaman kodun başlangıcında -
setup () işlevinde - herhangi bir analog okuma işlevi kullanılmadan önce referans kaynağını
seçmelisiniz.
• Arduino referans kaynağını ayarlama
• Dahili 1V1 referansını kullanmak için:
• analogReference(INTERNAL);
• AREF pinindeki voltajı referans olarak kullanmak için:
• analogReference (EXTERNAL);
• Bu işlev, ADC'yi, Kaynağı (VCC) referans olarak kullanacak şekilde ayarlar.
• analogReference (DEFAULT);
• NOT: Referans sadece analog okuma sırasında güncellenir.

• NOT: Bazı kartlarda başka dahili voltaj referans seviyeleri mevcuttur. Daha fazla bilgi için Arduino
analogReference() sayfasına bakın.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
analogRead() FONKSİYONU

• Belirtilen analog pinden değeri okur. Arduino kartları çok kanallı, 10-bit analogdan dijitale dönüştürücü içerir.
Bu, 0 ile çalışma voltajı (5V veya 3.3V) arasındaki giriş voltajlarını 0 ila 1023 arasındaki tam sayı değerlerine
eşleyeceği anlamına gelir.
• Örneğin bir Arduino UNO'da bu, 5 volt / 1024 birim veya birim başına 0,0049 volt (4,9 mV).
• Giriş aralığı analogReference () kullanılarak değiştirilebilirken çözünürlük analogReadResolution ()
kullanılarak değiştirilebilir (yalnızca Zero, Due ve MKR kartları için).
• ATmega tabanlı kartlarda (UNO, Nano, Mini, Mega), bir analog girişi okumak yaklaşık 100 mikrosaniye
(0.0001 sn) sürer, bu nedenle maksimum okuma hızı saniyede yaklaşık 10.000 kezdir.
• Fonksiyon yapısı ve detayları aşağıdaki gibidir.
Sentaks :
analogRead(pin)
Dönüş değeri : int tipinde 0-1023 aralığında tamsayı,
Parametreler :
pin: Okunacak analog giriş pininin adı (çoğu kartta A0 ila A5, MKR kartlarında A0 ila A6, Mini ve
Nano'da A0 ila A7, Mega üzerinde A0 ila A15).

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
analogRead() FONKSİYONU

int analogPin = A3;


int val = 0;

void setup() {
Serial.begin(9600);
}
void loop() {
val = analogRead(analogPin);
Serial.println(val);
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KONULAR

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KONULAR

• Giriş-çıkış arayüzleme • Zamanlayıcılar


• Buton/anahtar • Kesmeler
• Tuş takımı • Harici kesmeler
• Analog sensör • Dahili Kesmeler
• Digital sensör • Zamanlayıcı kesmeleri
• Optik elemanlar • Haberleşme kesmeleri
• LED • ADC kesmeleri
• Röle • EEPROM
• Güç elemanları • Sleep/low power (batarya operasyonu)
• DC motor • Watchdog Timers
• Step Motor
• Servo Motor
• Analog-Digital Conversion (ADC)
• Digital-Analog Conversion (DAC)
• PWM
• UART
• SPI
• I2C
• CAN

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Bazı buton ve anahtar çeşitleri

Normal açık basmalı buton (düğme) (Normally open push-button, tact


switch, tactile switch)

Normal kapalı basmalı buton (düğme) (Normally closed push-button)

Normal açık tek kutup tek yol anahtar (Normally open SPST switch)

Tek kutup çift yol anahtar (SPDT switch)

Tek kutup çok yol anahtar (komütatör)

SPST: Single pole single throw (Tek kutup tek yol)


DPST: Double pole, single throw (Çift kutup tek yol)
SPDT: Single pole, double throw(Tek kutup çift yol)
DPDT: Double pole, double throw(Çift kutup çift yol)

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Buton ve anahtar arayüzleme

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Buton ve anahtar arayüzleme

Negatif Lojik

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Buton ve anahtar arayüzleme

Pozitif Lojik

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIP SWITCH ARAYÜZLEME

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIP SWITCH ARAYÜZLEME

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Kontak titreşimi (Contact bounce)

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Kontak titreşimi (Contact bounce)

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Kontak titreşimi (Contact bounce)

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
THINKERCAD

Thinkercad

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI (KEYPAD) ARAYÜZLEME

• Matrix tuş takımları, mikrodenetleyici tabanlı sistemlere kullanıcı giriş verisi


sağlamanın mükemmel bir yoludur.
• Tuş takımları; uzaktan kumandalarda, veri kayıt cihazlarında, güvenlik sistemlerinde,
kapı giriş sistemlerinde, hesap makinelerinde, mikrodalga fırınlarda vb.
uygulamalarda bulunur.
• Genellikle I / O bağlantı sayısını azaltmak için satır ve sütun matris biçiminde
düzenlenmiş buton anahtarları olarak uygulanır.
• Örneğin, 16 anahtarlı bir tuş takımı, 8 G / Ç bağlantısı gerektiren 4 X 4 matris
biçiminde düzenlenmiştir.
• Basılı bir tuş, bir satır ve bir sütun teli arasında kısa devre yapar ve bu durum tuş
takımı taranarak algılanır ve basılı tuş tanımlanır.
• Tuş takımı taraması yoklama veya bir kesme (interrupt) rutini ile yapılabilir.
• Yoklama yaklaşımında, tarama işlemi sürekli bir döngüde tekrarlanır ve bu da CPU
zamanının boşa gitmesine neden olur.
• Kesme yaklaşımı daha verimlidir ve bir tuş vuruşu olduğunda işlemciyi uyarır.
• Bir tuş takımını mikrodenetleyiciye arabirimlemenin başka bir yaklaşımı, I / O
bağlantılarını daha da azaltan ve arayüzü daha basit hale getiren özel bir tuş takımı
kodlayıcı IC kullanmaktır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI (KEYPAD) ARAYÜZLEME

• 4x4 tuş takımının dış görünüşü iç yapısı uç


isimleri şekillerdeki gibidir.
• Tuş takımı matris yapısında olup satırlar (Rx), ve
sütunlardan (Cx) oluşmaktadır
• Her tuş, bir buton yapısında olup satır ve
sütunların kesişim noktalarına yerleştirilmiştir
• Tuşa basıldığında, tuşun bulunduğu satır ile
sütun kısa devre olmaktadır

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI (KEYPAD) ARAYÜZLEME

• Örneğin; 8 tuşuna basıldığında; C2 sütunu ile


R3 satırı kısa devre olur.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI (KEYPAD) ARAYÜZLEME

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI (KEYPAD) ARAYÜZLEME

• Satır ve sütunlar ayrı ayrı digital I/O uçlarına bağlanır.


• I/O seçimi keyfidir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI TARAMA YÖNTEMİ

Bu yöntemde, sütunlara bağlanan I / O pinlerinin


tümü çıkış olarak, satırlara bağlananların tümü
giriş olarak yapılandırılır veya tersi de geçerlidir.
Giriş olarak yapılandırılan satır pinleri lojik 1 yapılarak,
dahili yukarı çekme dirençleri aktif edilir. Böylece pinler
lojik 1 e çekilir. Bu sayede satırlar 1 durumunda bekler.
Sütünları sırayla sıfıra çekip her sütun için satırları
sırayla okuyarak tuşların durumu araştırılabilir.
Örneğin, ilk sütunu 0 olarak ayarla ve tüm satırları oku.
Bu sütunda herhangi bir tuşa basılmışsa, karşılık gelen
satır 0 olarak okunacaktır.
Ardından sonraki sütunu 0 olarak ayarla ve
satırları tekrar oku.
Bu işlemi, bir satırda 0 bulana kadar tekrarla.
Bu işlemle, basılan tuşun satırı ve sütunu
belirlenir.
Not: ATMega328 denetleyicisinde; bir digital I/O
ucu giriş olarak ayarlandıktan sonra yükseğe çekilirse
dahili yukarı çekme (pull-up) direnci aktif edilmiş olur ve
tuşlara basılmadığında giriş uçları boşta (float) kalmaz.
Dahili pul-up
Böylece tuş takımına dışarıdan pull-up direnci bağlamak
direnci
zorunda kalmayız.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI TARAMA ALGORİTMASI
ADIMLAR
1. Sütunları çıkış olarak ayarla.
2. Satırlar giriş olarak ayarlayıp yükseğe çek.
4. İlk sütunu düşüğe, diğerleri yükseğe çek.
5. Satırları sırasıyla oku ve düşük olup olmadığına bak.
6. Düşük olan satır bulununca; basılan
tuşun düşüğe çekilmiş sütun ile
lojik 0 okunan satırın kesişimindeki tuş olduğu anla.
7. Bu adımları tüm sütun ve satırlar için sürekli tekrarla

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI TARAMA ALGORİTMASI

void setup()
{
pinMode(c1, OUTPUT);
int r1=11;
pinMode(c2, OUTPUT);
int r2=10;
pinMode(c3, OUTPUT);
int r3=9;
int r4=8;
pinMode(c4, OUTPUT);
int c1=7; pinMode(r1, INPUT);
int c2=6; pinMode(r2, INPUT);
int c3=5; pinMode(r3, INPUT);
int c4=4; pinMode(r4, INPUT);
int rd1; digitalWrite(r1,HIGH);
int rd2;
digitalWrite(r2,HIGH);
int rd3;
digitalWrite(r3,HIGH);
int rd4;
digitalWrite(r4,HIGH);
Serial.begin(9600);
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI TARAMA KODU
1. KOLON LOW 2. KOLON LOW 3. KOLON LOW 4. KOLON LOW
void loop() digitalWrite(c1,HIGH); digitalWrite(c1,HIGH); digitalWrite(c1,HIGH);
{ digitalWrite(c2,LOW); digitalWrite(c2,HIGH); digitalWrite(c2,HIGH); Soru
digitalWrite(c1,LOW); digitalWrite(c3,HIGH); digitalWrite(c3,LOW); digitalWrite(c3,HIGH); 3 tuşuna basılmışsa
digitalWrite(c2,HIGH); digitalWrite(c4,HIGH); digitalWrite(c4,HIGH); digitalWrite(c4,LOW); hangi kolon düşükken
digitalWrite(c3,HIGH); rd1= digitalRead(r1); rd1= digitalRead(r1); rd1= digitalRead(r1); hangi satır düşük
digitalWrite(c4,HIGH); rd2= digitalRead(r2); rd2= digitalRead(r2); rd2= digitalRead(r2); okunur?
rd1= digitalRead(r1); rd3= digitalRead(r3); rd3= digitalRead(r3); rd3= digitalRead(r3);
rd2= digitalRead(r2); rd4= digitalRead(r4); rd4= digitalRead(r4); rd4= digitalRead(r4);
rd3= digitalRead(r3); if(rd1==LOW) if(rd1==LOW) if(rd1==LOW)
rd4= digitalRead(r4); {Serial.println("2"); {Serial.println("3"); {Serial.println("A");
if(rd1==LOW) delay(200);} delay(200);} delay(200);}
{Serial.println("1"); else else else
delay(200);} { { {
else if(rd2==LOW) if(rd2==LOW) if(rd2==LOW)
{ {Serial.println("5"); {Serial.println("6"); {Serial.println("B");
if(rd2==LOW) delay(200);} delay(200);} delay(200);}
{Serial.println("4"); else else else
delay(200);} { { {
else if(rd3==LOW) if(rd3==LOW) if(rd3==LOW)
{ {Serial.println("8"); {Serial.println("9"); {Serial.println("C");
if(rd3==LOW) delay(200);} delay(200);} delay(200);}
{Serial.println("7"); else else else
delay(200);} { { {
else if(rd4==LOW) if(rd4==LOW) if(rd4==LOW)
{ {Serial.println("0"); {Serial.println("#"); {Serial.println("D");
if(rd4==LOW) delay(200);} delay(200);} delay(200);}
{Serial.println("*"); }}} }}} }}}
delay(200);} }
}}}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI (KEYPAD) SİMÜLASYON

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TUŞ TAKIMI KODLAYICI (KEYBOARD ENCODER)

Bir tuş takımını mikrodenetleyiciye arabirimlemenin başka bir yaklaşımı, I / O


bağlantılarını daha da azaltan ve arayüzü daha basit hale getiren özel bir tuş takımı
kodlayıcı IC kullanmaktır. Tuş takımı kodlayıcı tuş takımındaki bir anahtar kapamasını
n bitlik ikili sayı çıkışına dönüştüren bir tümdevredir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
74922 TUŞ TAKIMI KODLAYICISI

• MM74C922 kodlayıcı, 16 tuşlu bir anahtar matrisini dijital bir sisteme bağlamak için
gerekli tüm mantığı sağlar.
• Kodlayıcı çipi bir tuşa basmayı bekleyen tuş takımını sürekli olarak tarar.
• Bir anahtara basıldığında, çıkış uçları D, B, C ve A'da basılmış anahtara karşılık
gelen 4 bitlik bir nibble sağlar.
• Çip, çalıştırmak için Keybounce Mask pinine (6) tek bir harici kapasitörün
bağlanmasını gerektiren dahili bir debounce devresi içerir.
• Kondansatörün değeri, gerekli debounce süresine bağlıdır.
• Geçerli bir tuşa basma algılandığında ve tuş debounce devresi zaman aşımına
uğradığında, kodlanan veriler çıkış bağlantı noktasına kilitlenir ve Veri Kullanılabilir
(DAV) pini (11) yükselir.
• Basılan tuş bırakıldığında DAV pini alçalır. DAV çıkışı, böylece bir tuş vuruşu
olduğunda işlemci için bir kesme sinyali olarak kullanılabilir.
• Mandallı (Latch) çıkış, anahtar bırakıldıktan sonra bile A-D pinlerinde aktif kalır.
• Yeni veriler yeni bir tuşa basıldığında oluşur.
• Çip ayrıca, aktif bir tuş vuruşu sırasında herhangi bir ikinci tuşa basmayı göz ardı
eden iki tuşlu rollover özelliğine sahiptir.
• Tuş takımı tarama hızı, Osilatör pinine (5) bağlı harici bir kondansatör ile de
yapılandırılabilir.
• Aşağıdaki grafikler, bekleme süresi ve tarama hızının ilgili kapasitör değerlerine
bağımlılığını göstermektedir.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
74922 TUŞ TAKIMI KODLAYICISI

Bacak yapısı:

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
74922 TUŞ TAKIMI KODLAYICISI

Tarama hızı ve debounce süresi belirleme kapasitörlerinin seçimi.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
74922 TUŞ TAKIMI KODLAYICISI DEVRE ŞEMASI

Bu projenin devre şeması aşağıda gösterilmiştir. Debounce Mask ve Osilatör pinleri


için seçilen kapasitör değerleri, sırasıyla 1 uF ve 0.1 uF'dir. Bu, titreşim engelleme
süresini yaklaşık 10 ms'ye ve tuş takımı tarama hızını yaklaşık 600 Hz'ye ayarlar
(yukarıdaki grafiklerden).
DAV pinine bağlı bir LED, geçerli bir tuşa basıldığında görsel bir gösterge görevi
görür.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
74922 TUŞ TAKIMI KODLAYICISI DEVRE ŞEMASI

Yukarıdaki düzenlemedeki 16 anahtar 0-9, *, # ve A-D olarak adlandırılmıştır.


Aşağıdaki tabloda, her tuşa basışa karşılık gelen çıkış ucu HEX değerleri
gösterilmektedir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
74922’nin MİKRODENETLEYİCİYE ARAYÜZLENMESİ

• Bu bölümde, bir matris tuş takımının bir ana mikro denetleyiciye 74922 ile nasıl
arayüzleneceğini göreceğiz.
• Burada Arduino platformunu kullanıyoruz ama aynı mantık başka bir
mikrodenetleyici platformuna uygulanabilir.
• Tuş takımı Arduino kartından 5V besleme ile çalışır.
• DAV çıkış pini, Arduino kartının INT0 (dijital I / O pin 2) pinine gider.
• Bu, bir tuş vuruşu algılandığında, Arduino'nun basılan tuş değerini okumak için ilgili
kesme rutinine dallanacağı anlamına gelir.
• Enkoder çıkış pinleri A, B, C ve D, sırasıyla Arduino dijital I / O pimlerine 7, 6, 5 ve 4
bağlanır.
• Aşağıdaki resim bu projenin tüm kurulumunu göstermektedir.
• Algılanan tuş vuruşu PC'deki Seri Monitör penceresinde görüntülenir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
74922 ARDUINO PROGRAMI
• Bir tuş vuruşu algılandığında (DAV darbesinin düşen kenarında); kodlayıcı çıkışını
(A-D) okumak için bir kesme servis rutini yazılır.
• Kodlanmış nibble, bir arama tablosu (look-up table) aracılığıyla matristeki anahtar
adlarıyla eşlenir.
#define PINA 7 void loop()
#define PINB 6 {
#define PINC 5 if(basmaDurumu){
#define PIND 4 Serial.println("Tusa basma algilandi.");
Serial.print("Basilan Tus = ");
int cikis, basmaDurumu = 0; Serial.print(str[cikis]);
Serial.print(" (");
char str[16] = {'1', 'A', '3', '2', '4', 'B', '6', '5', Serial.print(cikis, HEX);
'7', 'C', '9', '8', '*', 'D', '#', '0'}; Serial.println(')');
basmaDurumu = 0;
void setup() }}
{ void Veri_Oku() {
pinMode(4, INPUT); cikis = 0;
pinMode(5, INPUT); cikis = cikis | digitalRead(4);
pinMode(6, INPUT); cikis = cikis << 1;
pinMode(7, INPUT); cikis = cikis | digitalRead(5);
Serial.begin(9600); cikis = cikis << 1;
attachInterrupt(0, Veri_Oku, FALLING); cikist = cikis | digitalRead(6);
} cikis = cikis << 1;
cikis = cikis | digitalRead(7);
basmaDurumu = 1;
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ADC KULLANIMI

• ADC Yİ BURADA ANLAT.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ADC Girişi ile buton çoklama

𝑉𝑐𝑐
𝐼=
𝑅𝑡𝑜𝑝
𝑉𝑎𝑑𝑐𝑛 = 𝐼 ∗ 𝑅𝑥
𝑉𝑐𝑐
𝑉𝑎𝑑𝑐𝑛 = ∗ 𝑅𝑥
𝑅𝑡𝑜𝑝

Vadc0 = 0
𝑉𝑐𝑐 ∗ 𝑅1
Vadc1=
𝑅𝑐𝑐+𝑅1

𝑉𝑐𝑐 ∗ (𝑅1+𝑅2)
Vadc2=
𝑅𝑐𝑐+𝑅1+𝑅2

𝑉𝑐𝑐 ∗ (𝑅1+𝑅2+𝑅3)
Vadc3=
𝑅𝑐𝑐+𝑅1+𝑅2+𝑅3

𝑉𝑐𝑐 ∗ (𝑅1+𝑅2+𝑅3+𝑅4)
Vadc4=
𝑅𝑐𝑐+𝑅1+𝑅2+𝑅3+𝑅4
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ADC Girişi ile buton çoklama

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ADC Girişi ile buton çoklama
int analogDeger = 0; if (analogDeger>70 && analogDeger<110){
int i=8; digitalWrite(10,LOW);
void setup() Serial.print("S2->");
{ Serial.println(analogDeger);
for(i=8;i<13;i++){ }
pinMode(i,OUTPUT); if (analogDeger>130 && analogDeger<200){
digitalWrite(i,HIGH); digitalWrite(9,LOW);
} Serial.print("S3->");
Serial.begin(9600); Serial.println(analogDeger);
} }
if (analogDeger>300 && analogDeger<400){
void loop(){ digitalWrite(8,LOW);
analogDeger = analogRead(A0); Serial.print("S4->");
Serial.println(analogDeger);
if (analogDeger<10){ }
digitalWrite(12,LOW); if (analogDeger>1000){
Serial.print("S0->"); for(i=8;i<13;i++){
Serial.println(analogDeger); digitalWrite(i,HIGH);
} }
Serial.println("Butonlara basilmadi");
if (analogDeger>20 && analogDeger<50){ }
digitalWrite(11,LOW);
Serial.print("S1->"); delay(100);
Serial.println(analogDeger);
} }
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KESMELER (INTERRUPT)
• Kesmeler mikrodenetleyici programlarında işlerin otomatik olarak gerçekleşmesi
için faydalıdır ve zamanlama sorunlarının çözülmesine yardımcı olabilir.

• Örneğin bir döner kodlayıcıyı okumak, sensörleri veya tuşları taramak, haberleşme
portlarından ver beklemek gibi zaman harcanan uygulamalarda kesme kullanmak
iyi bir çözümdür.

• Mikrodenetleyiciler zaman bölmeli çalışmaktadır. Dolayısıyla bir program bir iş


yaparken dışarıdan gelen sinyali kaçırabilir. Örneğin bir hesaplama yaparken veya
bir göstergeye çıktı gönderirken kullanıcı bir tuşa basmış veya sensörlerde bir
değişim olmuş olabilir. Eğer bu olay çok kısa süreliyse mikrodenetleyici mevcut işini
bitirene kadar zaten olup bitmiş olacaktır.

• Böyle olumsuzluklardan kaçınmanın en kolay yolu kesme kullanmaktır.

• Tüm bu durumlarda, bir kesme kullanılması, mikro denetleyiciyi, girişi kaçırmadan


başka işler yapmak için serbest bırakacaktır.

• Yani kesmeler kullanımı; mikrodenetleyicinin, başka bir şey yaparken "harici"


olaylara cevap vermesini sağlar.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KESMELER (INTERRUPT)

Kesmeli Çalışma

• Mikrodenetleyici bir iş yapmaktayken bir kesme oluşursa mikrodenetleyici şöyle


davranır:
1. Mevcut işini bırakır ve bıraktığı noktayı kaydeder.
2. Gelen kesmenin fonksiyonuna (kesme servis fonksiyonu) (Interrupt Service
Routine=ISR) dallanarak o fonsiyonu çalıştırıp bitirir ve kaldığı noktaya geri dönüp
işini yapmaya devam eder.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KESMELERİ KULLANMANIZIN ANA NEDENLERİ
• Pin değişikliklerini tespit etmek için (örn. Döner kodlayıcılar, düğmeye basma)

• Bekçi zamanlayıcısı (örn. 8 saniye sonra hiçbir şey olmazsa, beni durdur)

• Zamanlayıcı kesmeleri, karşılaştırmaları / taşmaları izlemek için kullanılır

• SPI veri aktarımları

• I2C veri aktarımları

• USART veri aktarımları

• ADC dönüşümleri (analogdan dijitale)

• EEPROM kullanıma hazır

• Flash bellek hazır

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KESMELERİ KULLANMANIZIN ANA NEDENLERİ
Veri aktarımları:

• Seri bağlantı noktası, SPI bağlantı noktası veya I2C bağlantı noktasından veri
gönderilirken veya alınırken bir programın başka bir şey yapmasına izin vermek için
kullanılabilir.

İşlemciyi uyandırmak için:

• Harici kesmeler, pin değişim kesmeleri ve bekçi zamanlayıcısı kesmesi de


kullanılabilir.
• Bu çok kullanışlı olabilir, çünkü uyku modunda işlemci çok daha az güç kullanacak
şekilde yapılandırılabilir (örn. Yaklaşık 10 mikroamper).
• İşlemciyi uyandırmak için yükselen, düşen veya düşük seviyeli bir kesme
kullanılabilir (örneğin, üzerinde bir düğmeye basarsanız, veya saate, sıcaklığa göre
uyandırabilirsiniz).

• pin değişim kesmeleri, tuş takımında veya benzeri bir tuşa basıldığında işlemciyi
uyandırmak için kullanılabilir.

• İşlemci ayrıca bir zamanlayıcı kesmesi (örn. Belirli bir değere ulaşan veya taşan bir
zamanlayıcı) ve gelen I2C mesajı gibi diğer bazı olaylarla da uyandırılabilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KESMELERİ ETKİNLEŞTİRME / DEVRE DIŞI BIRAKMA
" Reset" kesmesi devre dışı bırakılamaz. Bununla birlikte, diğer kesmeler, kesme
bayrağını silerek geçici olarak devre dışı bırakılabilir.

Kesmeleri etkinleştirme iki şekilde yapılabilir:

interrupts ();
veya
sei (); // set interrupts flag

Kesmeleri devre dışı bırakma aşağıdaki gibi yapılır.


Kesmeleri devre dışı bırakmanız gerekirse, kesme bayrağını da "temizlemelisiniz":

noInterrupts ();
veya
cli (); // clear interrupts flag

Her iki yöntem de aynı etkiyi yaratır, "interrupts" / "noInterrupts" komutunu kullanmanın
nasıl bir yol olduğunu hatırlamak biraz daha kolaydır.

Arduino'daki kesmeler varsayılan durumda etkinidir.


Bunları uzun süre devre dışı bırakmayın, aksi takdirde zamanlayıcılar düzgün çalışmaz.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KESMELERİ NEDEN DEVRE DIŞI BIRAKIRIZ?

Kesintiye uğramasını istemediğiniz zamanlama açısından önemli kod parçaları olabilir,

Ayrıca çok baytlı alanlar bir ISR tarafından güncelleniyorsa, verileri "atomik olarak" almak
için kesintileri devre dışı bırakmanız gerekebilir. Aksi takdirde, bir bayt okunurken diğeri
ISR tarafından güncellenebilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KESMELER NELERDİR? KESME ÖNCELİĞİ NEDİR?
• Arduino'da farklı görevlerde kullanılmak üzere çeşitli Interrupt'lar (kesmeler) bulunur.

• Zamanlayıcı kesmesi (timer interrupt) ve dış kesmeler (external İnterrupt) en yaygın


olarak kullanılan Arduino kesmeleridir.

• RESET dışında 25 kesme vardır.

• Bir kerede birden fazla kesme olayı meydana gelebilir veya en azından biri, bir
öncekinin işlenmesinden önce gerçekleşebilir.

• Öncelik sırası, işlemcinin kesme olaylarını kontrol ettiği dizidir.

• Listede ne kadar üstte olursa, öncelik de o kadar yüksek olur.

• Böylece, örneğin, Harici Kesme İsteği 1'den (pin D3) önce bir Harici Kesme İsteği 0'a
(pin D2) servis yapılır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ATMEGA328 İÇİN ÖNCELİK SIRASINA GÖRE KESME LİSTESİ
1 Reset
2 External Interrupt Request 0 (pin D2) (INT0_vect)
3 External Interrupt Request 1 (pin D3) (INT1_vect)
4 Pin Change Interrupt Request 0 (pins D8 to D13) (PCINT0_vect)
5 Pin Change Interrupt Request 1 (pins A0 to A5) (PCINT1_vect)
6 Pin Change Interrupt Request 2 (pins D0 to D7) (PCINT2_vect)
7 Watchdog Time-out Interrupt (WDT_vect)
8 Timer/Counter2 Compare Match A (TIMER2_COMPA_vect)
9 Timer/Counter2 Compare Match B (TIMER2_COMPB_vect)
10 Timer/Counter2 Overflow (TIMER2_OVF_vect)
11 Timer/Counter1 Capture Event (TIMER1_CAPT_vect)
12 Timer/Counter1 Compare Match A (TIMER1_COMPA_vect)
13 Timer/Counter1 Compare Match B (TIMER1_COMPB_vect)
14 Timer/Counter1 Overflow (TIMER1_OVF_vect)
15 Timer/Counter0 Compare Match A (TIMER0_COMPA_vect)
16 Timer/Counter0 Compare Match B (TIMER0_COMPB_vect)
17 Timer/Counter0 Overflow (TIMER0_OVF_vect)
18 SPI Serial Transfer Complete (SPI_STC_vect)
19 USART Rx Complete (USART_RX_vect)
20 USART, Data Register Empty (USART_UDRE_vect)
21 USART, Tx Complete (USART_TX_vect)
22 ADC Conversion Complete (ADC_vect)
23 EEPROM Ready (EE_READY_vect)
24 Analog Comparator (ANALOG_COMP_vect)
25 2-wire Serial Interface (I2C) (TWI_vect)
26 Store Program Memory Ready (SPM_READY_vect).
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO KESME KULLANIMI (INTERRUPT)
NOTLAR

• Kesme rutini içinde delay() ve millis() çalışmaz.

• delayMicroseconds() normal çalışır.

• Kesme rutini içindeyken alınan seri veriler kaybolabilir.

• Kesme rutini içinde kullanılan değişkenler ana programla paylaşılacaksa volatile


olarak bildirilmelidir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
• attachInterrupt(kesme, ISR, mod) (önerilmez)

• attachInterrupt(digitalPinToInterrupt(pin), ISR, mod) (önerilen)

PARAMETRELER:

• kesme : kesme numarası. İzin verilen veri türleri: int.

• pin : Arduino pin numarası.

• ISR : kesme oluştuğunda çağrılacak olan ISR fonksiyonu


• Bu fonksiyon parametre almamalı ve hiçbir şey döndürmemelidir.
Bu fonksiyon «kesme hizmeti rutini olarak» adlandırılır.

• mod : kesmenin nasıl tetikleneceğini tanımlar. Dört sabit değer


önceden tanımlanmıştır:
LOW, CHANGE, RISING, FALLING
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
• LOW : pin düşükken tetikleme

• CHANGE : pin durumu değişince tetikleme.

• RISING : pin, düşükten yükseğe geçerken tetikleme

• FALLING : pin, yüksekten düşüğe geçerken tetikleme

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

Bir kesmeyi kullanmak için o kesmeye ait önceden tanımlı sabiti (kesme vektörleri)
bilmemiz gerekir. Kesme vektörlerini ezberlemek yerine:

digitalPinToInterrupt (pin) ; fonksiyonunu kullanabiliriz:

• Bu fonksiyon; pin numaralarını, kesme vektör numaralarına dönüştürmeyi


basitleştirmek için kullanılır.

• Parametre olarak kesme özelliği olan bir pinin numarası alır.

• Uygun bir pin belirtilmişse kesme vektör numarasını döndürür.

• Örneğin, Uno'da, kesme 0, D2 pinindedir ve aşağıdaki iki satır aynı etkiye sahiptir.

attachInterrupt (0, kesmeFonk, CHANGE);


attachInterrupt (digitalPinToInterrupt (2), kesmeFonk, CHANGE);

• Ancak ikincisinin okunması daha kolay ve farklı Arduino tiplerine daha taşınabilirdir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
KESME NUMARALARI ÖZET

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIŞ KESME KULLANIMI
• Arduino projelerinde sıkça kullanılan kesme çeşidi dış kesmelerdir.

• Dış kesmeler, Arduino'nun özel pinlerinde gerçekleşen voltaj değişimlerini takip eden
kesmelerdir.

• Örneğin Arduino'nun dış kesme pinine bağlanmış bir düğmeye basıldığında, dış kesme
Arduino'ya otomatik olarak haber verir.

• Bu kesme sayesinde Arduino sürekli olarak düğmeye basılıp basılmadığını kontrol etmek
zorunda kalmaz, bu sırada başka işlemleri yerine getirebilir.

• Kullanılacak dış kesme pini, setup fonksiyonu içerisinde "attachInterrupt"


fonksiyonu ile belirtilmeli.

• Bu fonksiyonun içinde kullanılacak olan sayı, pinin numarası değil, kesme vektör
numarasıdır.

• Örneğin Arduino Uno kullanıcısı 2. pindeki kesmeler için 0, 3. pindeki kesmeler için
1 değerini kullanmalıdır.
• Bundan kurtulmak için digitalPinToInterrupt (pin) foksiyonunu kullanırız.

• "attachInterrupt" fonksiyonunun ikinci parametresi kesme durumunda çalışacak


fonksiyonu belirler, üçüncü parametre ise hangi durumlarda kesmenin
gerçekleşeceğini belirler.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIŞ KESMELİ BUTON İLE LED KONTROLÜ -1
• Bu uygulamada dış kesme özelliğinden faydalanarak buton okunur

• Butona basıldığında Arduino'nun 13. pinine bağlanmış olan LED yakılıp söndürülür.

• Dış kesme kullanılması Arduino'nun sürekli buton durumunu kontrol etmek zorunda
kalmasını engeller.

• Butona basıldığında Arduino kesme birimi otomatik olarak tetiklenir ve kesme servis
fonksiyonu çalışır.

• Böylece; butona basılmadığı sürece Arduino butonu okumak zorunda kalmadan diğer
işlemleri yerine getirebilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIŞ KESMELİ BUTON İLE LED KONTROLÜ -1

const byte LED = 13;


const byte BUTON = 2;
long i;
void setup ()
{
pinMode (LED, OUTPUT);
pinMode (BUTTON, INPUT);
digitalWrite (BUTON, HIGH); //Dahili pull-up aktif
attachInterrupt (digitalPinToInterrupt (BUTTON), ledYakSon, CHANGE);
Serial.begin(9600);
}

void loop ()
{
for(i=0;i<1000000;i++){
Serial.println(i);
}
}

void ledYakSon () // Interrupt Service Routine (ISR)


{
if (digitalRead (BUTON) == HIGH)
digitalWrite (LED, HIGH);
else
digitalWrite (LED, LOW);
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIŞ KESMELİ BUTON İLE LED KONTROLÜ -2
• Bu uygulamada dış kesme özelliğinden faydalanarak buton okunur

• Butona basıldığında Arduino'nun 13. pinine bağlanmış olan LED yakılır.

• Kullanıcı butondan elini çektiğinde yine dış kesme kullanılarak, LED otomatik olarak
söndürülür.

• Dış kesme kullanılması Arduino'nun sürekli buton durumunu kontrol etmek zorunda
kalmasını engeller.

• Butona basıldığında veya butondan el çekildiğinde, Arduino kesme birimi otomatik olarak
tetiklenir ve kesme servis fonksiyonu çalışır.

• Böylece; butona basılmadığı sürece Arduino butonu okumak zorunda kalmadan diğer
işlemleri yerine getirebilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DIŞ KESMELİ BUTON İLE LED KONTROLÜ -2
const byte LED = 13;
const byte BUTON = 2;
void setup()
{
pinMode(LED, OUTPUT);
attachInterrupt(digitalPinToInterrupt (BUTTON), LEDiyak, FALLING);
Serial.begin(9600);
}

void loop()
{
Serial.println("Arduino burada baska islemler yapabilir");
delay(100);
}

void LEDiyak() /* Dugmeye basıldığında çalışacak fonksiyon */


{
digitalWrite(LED,HIGH);
attachInterrupt(digitalPinToInterrupt (BUTTON), LEDisondur, RISING);
}

void LEDisondur() /* Dugmeden el çekildiğinde çalışacak fonksiyon */


{
digitalWrite(LED,LOW);
attachInterrupt(0, LEDiyak, FALLING);
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ZAMANLAYICI KESMESİ KULLANIMI (TIMER
INTERRUPT)
Zamanlayıcı kesmesi (timer interrupt), belirli süre aralıklarında belirli görevlerin yapılabilmesi için
kullanılır. Yani, belirlediğimiz süre sonunda, belirlediğimiz görevleri yapmaya yarayan kesmedir.

Örneğin 1 saniyede bir kodda nerede olursak olalım sensörden veri okumak istersek bu kesmeyi
kullanabiliriz. Kod o sırada delay fonksiyonu içinde bile olsa sensörden veri almaya devam
edecektir.

Örneğin bir LED'in belli aralıklarla yakılıp söndürülmesi gerekmektedir. Bu işlem için loop
fonksiyonunun kullanılması yerine, zamanlayıcı kesmesinin kullanılması Arduino programının
rahatlamasını sağlayacaktır. Kullanılan kesme belirlenen zaman dolunca işlemciye haber vererek,
LED'in yakılıp söndürülmesini sağlayacaktır.

Zamanlayıcı kesmesi kullanımı için zaman sayıcısının değerleri ayarlanmalıdır. Zaman sayıcısı,
her saat sinyalinde 1 artan sayaç gibi düşünülebilir ve taşma değerine ulaştığında sıfırlanır ve
sürenin dolduğu anlaşılır ve Arduino'ya sürenin dolduğunu, kesmenin yapılması gerektiğini bildirir.
İşlemcimiz kesme fonksiyonu içerisine girer.

Zamanlayıcılar otomasyonun kalbidir. Zamanlayıcılar, bize sadece ne olduğu hakkında değil, ne


zaman olduğu veya olacağı konusunda da yetki vererek ekstra kontrol sağlıyor.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ZAMANLAYICI MODLARI

Normal Mod:
Saat kaynağı (dahili saatten veya harici bir kaynaktan) darbeleri ön ölçekleyiciye gönderir ve ön
ölçekleyici darbeleri belirli bir oranda bölerek kontrol devresine iletir. Kontrol devresi, TCNTn
yazmacını 1 artırır. TCNTn son değere ulaştığında (8 bit zamanlayıcılarda 0xFF ve 16 bit
zamanlayıcıda 0xFFFF) 0'a döner, TIFR yazmacındaki TOVn bitini set ederek kesmeyi tetiklemek
için kullanılabilecek (zamanlayıcı taşması) sinyali gönderir.

Normal Mod ile ilgili sorun, kesin bir aralık için kullanmanın çok zor olmasıdır, çünkü bu Normal
Mod yalnızca spesifik olmayan bir zaman aralığına ihtiyacınız varsa yararlıdır. Bu sınırlama
nedeniyle, birçok programcı zamanlayıcılar için CTC modunu kullanmayı seçer.

CTC Modu:
CTC, "Clear Timer on Compare" anlamına gelir ve aşağıdakileri yapar.
Saat kaynağı (dahili saatten veya harici bir kaynaktan) darbeleri ön ölçekleyiciye gönderir ve ön
ölçekleyici darbeleri belirli bir oranda bölerek kontrol devresine iletir. Kontrol devresi, TCNTn
yazmacını 1 arttırır. TCNTn yazmacı, her artımdan sonra OCRn yazmacı ile karşılaştırılır. Bir
eşleşme gerçekleştiğinde TIFR yazmacındaki TOVn biti set edilerek kesmeyi tetiklemek için
kullanılabilecek (zamanlayıcı taşması) sinyali gönderilir.

OCRn = [(saat_frekansı / ön ölçekleyici) * kesme periyodu)] - 1


OCRn = [(16.000.000Hz / ön ölçekleyici) * kesme periyodu)] - 1

OCRn bir tam sayı olmak zorunda. Ondalık bir sayı olursa, istediğiniz süre kesin olmayacaktır.
Ayrıca sayınız OCRn’ sığmalıdır.
8bit zamanlayıcılar için en fazla 255 ve 16bit zamanlayıcı için en fazla 65535.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ZAMANLAYICILARI
• Timer0 – 8-bit bir zamanlayıcıdır. Counter değişkeni maksimum 255 değerini alır. Arduino için
gerekli temel fonksiyonlar( delay() ve millis() gibi ) bu timer’a bağlıdırlar. Bu timer üzerinde ne
yaptığınızı bilmediğiniz sürece değişiklik yapmamak en iyisi olacaktır.

• Timer1 – 16-bit bir zamanlayıcıdır. Counter değişkeni maksimum 65535 değerini alır. Servo
kütüphanesi bu zamanlayıcıyı kullanmaktadır.

• Timer2 – 8-bit bir zamanlayıcıdır. Counter değişkeni maksimum 255 değerini alır. tone()
fonksiyonu bu zamanlayıcıyı kullanmaktadır.

• Kullandığınız işlemcide bunların dışında farklı Timer3, Timer4, Timer5 gibi zamanlayıcılar
bulunabilir. Gerekli bilgilere onların pdfleri üzerinden ulaşabilirsiniz. Genel anlamda yapacağımız
ayarlamaların hepsi birbiri için geçerli olacaktır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ZAMANLAYICI KESMESİ KULLANIMI (TIMER
INTERRUPT)
Zamanlayıcı Yazmaçlarının Ayarlanması
• TCCRxA ve TCCRxB’ de x yerine ayarlamak istediğiniz timer numarasını yazabilirsiniz. Aşağıda
örnek olarak Timer1 için bu yazmaçlar verilmiştir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ZAMANLAYICI KESMESİ KULLANIMI (TIMER
INTERRUPT)
Zamanlayıcı Yazmaçlarının Ayarlanması

(Zamanlayıcı Sayaç Artım Hızı(Hz)) = (Arduino saat frekansı(16MHz)) / ön ölçekleyici değeri

Ön ölçekleyici değerlerine göre sayıcı frekansı:


1 için 16MHz
8 için 2MHz
64 için 250kHz
256 için 62,5kHz
1024 için 15,625kHz

Şimdi OCRn değerini aşağıdaki denklemle hesaplayabilirsiniz:

OCRn = [(16.000.000Hz / ön ölçekleyici) * kesme periyodu)] - 1

0 ve 2 zamanlayıcılarını kullandığınızda, bu sayının 256'dan az

1 zamanlayıcısı için 65536'dan az olması gerektiğini unutmayın

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ZAMANLAYICI KESMESİ KULLANIMI (TIMER
INTERRUPT)
Zamanlayıcı Yazmaçlarının Ayarlanması

Örneğin saniyede bir kesinti istiyorsanız (1 sn periyot):

OCRn = [(16.000.000Hz / ön ölçekleyici) * kesme periyodu)] - 1

OCRn = [(16.000.000Hz / ön ölçekleyici) * 1)] - 1

1024 ön ölçeklendirme ile hesaplarsak:

OCRn = [(16.000.000Hz / 1024) * 1)] - 1

OCRn = 15,624

256 <15,624 <65,536 olduğundan, bu kesme için timer1 kullanmanız gerekir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ZAMANLAYICI KESMESİ KULLANIMI (TIMER
INTERRUPT)
const int LED=13;
boolean led_durumu = LOW;

void setup(){
cli();
pinMode(LED,OUTPUT); // set up LED for OUTPUT
TCCR1A = 0; // Timer1 A kontrol yazmacını temizle
TCCR1B = 0; // Timer1 B kontrol yazmacını temizle
TCCR1B |= (1 << WGM12); // CTC mode bitini set et
TCCR1B |= (1 << CS12) | (0 << CS11) | (1 << CS10);// ön ölçek 1024
OCR1A = 15624; // 15624 (1 saniye)
TIMSK1 |= (1 << OCIE1A); // OCR1A üzerindeki kesmeyi aktif et
TCNT1 = 0; // Sayıcıyı sıfırla
sei();
}

void loop(){
delay(10000); // uzun bir görev
}

ISR(TIMER1_COMPA_vect){ // Kesme servis fonksiyonu


led_durumu = !led_durumu;
digitalWrite(LED,led_durumu);
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ZAMANLAYICI KESMESİ KULLANIMI (TIMER
INTERRUPT)
const int LED=13;
boolean led_durumu = LOW;

void setup(){
cli();
pinMode(LED,OUTPUT); // set up LED for OUTPUT
TCCR1A = 0; // Timer1 A kontrol yazmacını temizle
TCCR1B = 0; // Timer1 B kontrol yazmacını temizle
TCCR1B |= (1 << WGM12); // CTC mode bitini set et
TCCR1B |= (1 << CS12) | (0 << CS11) | (1 << CS10);// ön ölçek 1024
OCR1A = 23437; // ( 23437 1.5 saniye için)(2 sn için 31249)
TIMSK1 |= (1 << OCIE1A); // OCR1A üzerindeki kesmeyi aktif et
TCNT1 = 0; // Sayıcıyı sıfırla
sei();
}

void loop(){
delay(10000); // uzun bir görev
}

ISR(TIMER1_COMPA_vect){ // Kesme servis fonksiyonu


led_durumu = !led_durumu;
digitalWrite(LED,led_durumu);
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ZAMANLAYICI KESMESİ KULLANARAK KARA ŞİMŞEK DEVRESİ

https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-401/zaman-kesmesi-timer-interrupt

https://maker.robotistan.com/arduinoda-kesme-islemleri/

https://sites.google.com/site/qeewiki/books/avr-guide/timers-on-the-atmega328

https://www.instructables.com/id/Arduino-Timer-Interrupts/

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OPTİK ELEMAN ARAYÜZLEME
Işık
İnsan gözü, dalga boyu 380 nanometreden 780 nanometreye kadar
olan dalgaları ışık olarak algılar. Gözün en yüksek duyarlılığı yeşil ile
sarı renkleri arasındadır. Ultraviyole (mor ötesi), ve enfraruj (kızıl
ötesi) Işınlar ise insan gözü tarafından algılanamaz.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OPTİK ELEMAN ARAYÜZLEME

• Optik eleman; ışığa duyarlı eleman olup üzerine düşen ışık miktarındaki değişimleri elektriksel
değişimlere dönüştürürler.
• Optik eleman çeşitleri şunlardır

• https://uk.rs-online.com/web/c/displays-optoelectronics/optocouplers-photodetectors-photointerrupters/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OPTİK ANAHTARLAR (PHOTO INTERRUPTER)
OPTICAL SWITCH
• Optik Anahtarlar (veya opto anahtarlar), giriş arabirimi olarak kullanılabilecek bir tür optik
elemandır.
• Bunlardaki avantaj; optik anahtarların, nesne algılarken; mikrodenetleyicilerin ve diğer
dijital devrelerin giriş pinlerini zararlı voltaj seviyelerinden korumasıdır.
• Çünkü optik anahtarlar, birbirinden elektriksel olarak yalıtılmış olan ve ışıkla haberleşen
iki bileşenden oluşmaktadır ve izolasyon gerilimleri 2-5kV civarındadır.
• Optik anahtarlar, çeşitli arabirim uygulamalarında kullanım için farklı tip ve tasarımlarda
olur.
• Optik-anahtarlar için en yaygın kullanım, hareketli veya sabit nesnelerin tespit
edilmesidir.
• Fototransistör ve photodarlington konfigürasyonları, optik-anahtarlar için gereken
özelliklerin çoğunu sağlar ve bu nedenle çok yaygın olarak kullanılır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OPTİK ANAHTARLAR

• İki çeşit optik anahtar vardır:


1. Oluklu optik anahtarlar (Slotted optical switch veya transmissive opt. switch)
2. Yansımalı optik anahtarlar (Reflective optical switch)

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN YAPISI

• Bir yanında DC giriş sinyalini kızılötesi ışık enerjisine dönüştüren bir ışık yayan diyot (LED)
bulunur.
• Bu ışık, izolasyon boşluğunun diğer tarafındaki fototransistör tarafından toplanır ve çıkış
sinyaline dönüştürülür.

• https://www.electronics-tutorials.ws/io/input-interfacing-circuits.html

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLAR KULLANIM ALANLARI

• Oluklu optik sensörler, konumsal enkoderler, şaft enkoderler ve hatta bilgisayar farenizin döner
tekerleğinde yaygın olarak kullanılırlar ve mükemmel giriş arayüz cihazlarıdırlar.
• Döner disk, opak bir tekerlekten kesilmiş eşit aralıklı bir dizi yuvaya sahiptir ve yuvaların sayısı
dönme derecesi başına çözünürlüğü temsil eder.
• Diskin dönmesi sırasında LED'den gelen kızılötesi ışık, yuvadan geçerek fototransistöre çarpar
ve disk döndükçe bloke edilir. Böylece yuvanın her geçişinde transistörü “AÇIK” ve ardından
“KAPALI” duruma getirir.
• Çıkış bir dijital sayaca bağlanırsa, şaftların dakika başına devir sayısını (rpm) vermek, şaftların
konumunu belirlemek veya birim zaman başına şaft devir sayısını saymak mümkün olacaktır.
• Ayrıca doğrusal pozisyon belirleme, nesne algılama da yapılabilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLAR KULLANIM ALANLARI

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLAR KULLANIM ALANLARI

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLAR KULLANIM ALANLARI

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI

• Opto anahtarlarda LED 3 ila 20 miliamper arasında akımla sürülür.


• LED’in iletim gerilimi (Vf = forward voltage) yaklaşık 1.2 - 1.6 volttur.
• Rf direnci LED akımını ayarlar.
• Rc yukarı çekme direnci transistöre besleme voltajını sağlar.
• LED ışığı çıkış transistörüni iletime sokar ve çıkış transistörünün kollektöründen akım akar
• Çıkış transistörünün kollektör akımı opto anahtarın Akım Aktarım Oranına (CTR) bağlıdır.
• https://learnabout-electronics.org/Semiconductors/opto_52.php

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI
• Akım Aktarım Oranı CTR (Current Transfer Ratio):
• Opto anahtarın kazancıdır.
• Fototransistörün kollektör akımının LED ileri yön akımına oranı olarak hesaplanır ve % olarak
ifade edilir.
𝑰𝒄
𝑪𝑻𝑹 = ∗ 𝟏𝟎𝟎%
𝑰𝒇

𝑰𝒇 ∗ 𝑪𝑻𝑹
𝑰𝒄 =
𝟏𝟎𝟎
• Örnek: If=20mA için CTR= %10 ile %20 arasında olduğuna göre çıkış transistörünün kollektör
akımı kaç mA olacaktır.
• Çözüm: CTR, çalışma sıcaklığı ve yaş arttıkça azalacağı için minimum değerle maksimum
değer arasında seçilmelidir.
• CTR=%15 alırsak
𝑰𝒇 ∗𝑪𝑻𝑹
• 𝑰𝒄 =
𝟏𝟎𝟎
20∗15
• 𝐼𝑐 =
100
• 𝑰𝒄 = 𝟑𝒎𝑨

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI
• CTR, LED akımına, ortam sıcaklığına ve yaşlanmaya bağlı olarak değişir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI
• Örnek: TCST2103 opto anahtarı için arayüz devresi tasarlanacaktır.
• Vi=5V Vcc=5V olarak verilmiştir.
• TCST2103 elemanının karakteristiklerini göz önüne alarak arayüz devresindeki Rf ve Rc
dirençlerini hesaplayınız.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI

Giriş Devresi Verileri ve tasarımı Çıkış Devresi Verileri ve tasarımı


𝑽𝒄𝒄 = 𝟓𝑽, VCESAT=0,4V
𝑽𝒊 = 𝟓𝑽,Vf=1.25V, 𝑰𝒇=20mA
𝑰𝒇 ∗ 𝑪𝑻𝑹
𝑰𝒄 =
𝑽𝒊 − 𝑽𝒇 𝟏𝟎𝟎
𝑹𝒇 =
𝑰𝒇 𝟐𝟎∗𝟏𝟓
𝑰𝒄 =
𝟏𝟎𝟎
𝟓−𝟏,𝟐𝟓
𝑹𝒇 = _ =186,5=187Ω
𝟐𝟎∗𝟏𝟎 𝟑 𝑰𝒄 = 𝟑𝒎𝑨

𝑽𝒄𝒄 − 𝑽𝑪𝑬𝑺𝑨𝑻
𝑹𝒄 =
𝑰𝑪
𝟓−𝟎,𝟒
𝑹𝒄 = _ =1533Ω=1600 Ω
𝟑∗𝟏𝟎 𝟑
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI

• https://www.electronics-tutorials.ws/io/input-interfacing-circuits.html
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI
• AKIMI AZALTMA
• Çıkış kısmındaki fototransistörün akımı, LED'den ne kadar ışık geldiğine bağlıdır.
• Rc yi büyüterek Rc'den geçen akımı olabildiğince azaltıp daha sonra transistör hala yeterli ışık
alana kadar LED akımını azaltabiliriz.
• Fakat bu durumda transistörün kapatma süresiyle ilgili bir sorun ortaya çıkar.
• Transistörün kollektör akımı düşük olduğunda kapatma süresi çok artar.
• Devrenizin yüksek empedansı nedeniyle ek gürültü problemleri alabileceğiniz için Rc'yi çok
artırmayınız.
• Gerçek uygulamanızda, güvenli ve kararlı çalışma için LED akımını yaklaşık% 30…% 50
artırmayı düşünün.
• Gerçekte, aynı tipte olsalar bile, bireysel fotosel kesicilerin farklı performansları vardır.
• Performans sıcaklık ve zamanla da değişir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI

https://www.vishay.com/docs/81147/tcst2103.pdf
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR

https://sites.google.com/site/myscratchbooks/home/projects/project-11-infrared-speed-sensing-module
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR

https://sites.google.com/site/myscratchbooks/home/projects/project-11-infrared-speed-sensing-module
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR

https://androminarobot.blogspot.com/2016/04/tutorial-sobre-el-encoder-fotoelectrico.html
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR

https://sites.google.com/site/myscratchbooks/home/projects/project-11-infrared-speed-sensing-module
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR

https://sites.google.com/site/myscratchbooks/home/projects/project-11-infrared-speed-sensing-module
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR
int encoder_pin = 2; // encoder pin
unsigned int rpm; // rpm
volatile byte darbeSayisi; // pulse sayısı
unsigned long zamanilk;
unsigned int yarikSayisi = 20; //Disk yarık sayısı

void darbeSay(){ //Kesme rutini. Sayıcıyı günceller


darbeSayisi++;
}
void setup(){
Serial.begin(9600);
pinMode(encoder_pin, INPUT);
attachInterrupt(digitalPinToInterrupt(2), darbeSay, FALLING);
darbeSayisi = 0;
rpm = 0;
zamanilk = 0;
}
void loop(){
if (millis() - zamanilk >= 1000){ /*Bu blok her saniyede 1 kez çalışır*/
detachInterrupt(digitalPinToInterrupt(2));
rpm = (60 * darbeSayisi) / yarikSayisi ;
zamanilk = millis();
darbeSayisi = 0;
Serial.print("RPM = ");
Serial.println(rpm,DEC);
attachInterrupt(0, darbeSay, FALLING);
} }
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTARLAR
• Giriş arabirim anahtarları olarak oluklu opto aygıtlarını kullanmanın yanı sıra, bir nesneyi
algılamak için bir IR verici LED ve alıcı foto eleman kullanan yansıtıcı optik sensör adı verilen
başka bir optik aygıt türü vardır .
• Yansıtıcı opto anahtar, algılanan yansıtıcı nesnelerin, LED'in kızılötesi ışığını yansıtması
prensibiyle çalışır.
• Nesneden yansıyan ışık alıcı foto elemana çarparak çıkışının değişmesine sebep olur.
• Böylece bir nesnenin yokluğunu veya varlığını tespit edebilir.
• Yansıtıcı opto sensörün temel düzeni aşağıda verilmiştir.

• https://www.electronics-tutorials.ws/io/input-interfacing-circuits.html
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTARLAR

• https://osoyoo.com/2018/12/21/arduino-lesson-ir-obstacle-avoidance-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTARLAR

• https://osoyoo.com/2018/12/21/arduino-lesson-ir-obstacle-avoidance-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTARLAR

• https://osoyoo.com/2018/12/21/arduino-lesson-ir-obstacle-avoidance-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTAR ARDUINO UYGULAMASI

• https://osoyoo.com/2018/12/21/arduino-lesson-ir-obstacle-avoidance-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTAR ARDUINO KODU
int LED = 13;
int engelPin = 2; // This is our input pin
int engelVarmi = HIGH;
void setup() {
pinMode(LED, OUTPUT);
pinMode(engelPin, INPUT);
Serial.begin(9600);
}
void loop() {
engelVarmi = digitalRead(engelPin);
if (engelVarmi == LOW){
Serial.println("ENGEL!!, ENGEL!!");
digitalWrite(LED, HIGH);
}else{
Serial.println("TEMIZ");
digitalWrite(LED, LOW);
}
delay(200);
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM TEKNİĞİ
• Mikrodenetleyici ve lojik entegre gibi dijital çıkış veren elektronik elemanların çıkışlarına, DC
motor, LED, lamba, analog aktüatör veya hoparlör gibi analog cihazları bağlamak ve onları
verimli bir şekilde kontrol etmek sık sık ihtiyaç duyulan uygulamalardır.

• Analog devreleri dijital olarak kontrol etmek, sistem maliyetlerini ve güç tüketimini büyük
ölçüde azaltabilir.

• Bu işlem PWM tekniğiyle gerçekleştirilir ve birçok mikrodenetleyici ve DSP zaten bu görevi


yerine getirecek PWM birimlerini çip üzerinde içerir, bu da uygulamayı kolaylaştırır.

• Yani PWM, dijital bir kaynak kullanarak analog bir sinyal üretme yöntemidir.
• PWM sinyalleri çok çeşitli kontrol uygulamaları için kullanılır. Ana kullanım alanları DC
motorları ve LEDleri kontrol etmektir, ancak vanaları, pompaları, hidrolikleri ve diğer mekanik
parçaları kontrol etmek için de kullanılabilir.

• Çünkü bu cihazlar yavaş tepki gösteren cihazlardır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM NEDİR NERELERDE KULLANILIR
• PWM, (Pulse Width Modulation) yani Darbe Genişliği Modülasyonu: Bir elektrik sinyali
tarafından sağlanan gücü, parçalara bölerek (kıyarak) ortalamasını ayarlama yöntemidir. Bu
yönteme Darbe Süresi Modülasyonu (Pulse-Duration Modulation =PDM) da denir.

• Yüke aktarılan ortalama voltaj (ve akım) değeri, besleme kaynağı ile yük arasındaki anahtarın
hızlı bir şekilde açılıp kapatılmasıyla kontrol edilir.

• Anahtarın kapalı ve açık kalma süreleri, yüke aktarılan ortalama gücü ayarlar. Anahtar, kapalı
kalma sürelerine kıyasla ne kadar uzun süre açık kalırsa, yüke sağlanan toplam güç o kadar
yüksek olur.

• PWM sinyalinin frekansı yani anahtarlama hızı (veya frekans), uygulamaya ve çalıştırılan
sistemin yanıt süresine bağlı olacaktır. PWM anahtarlama frekansı yükü etkilemeyecek kadar
yüksek olmalıdır, yani yük tarafından algılanan dalga formunun mümkün olduğunca pürüzsüz
olması gerekir.
• Örneğin, elektrikli bir ocakta dakikada birkaç ile 100 Hz arasında veya daha yüksek, bir lamba
dimmerinde 120 Hz veya daha yüksek, bir motor sürücüsü 5-10 kHz veya daha yüksek, güç
kaynakları veya ses amplifikatörlerinde 20-200 kHz veya üstü olmalıdır.
• Bazı sistemler, istenen yanıt türüne bağlı olarak burada listelenenlerden daha hızlı frekanslara
ihtiyaç duyabilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM NEDİR
• PWM'nin ana avantajı, anahtarlama cihazlarındaki güç kaybının çok düşük olmasıdır.
• Gerilim veya akım kaynağından sağlanan güç , tekrarlayan açma ve kapama darbeleri serisi
ile analog yüke beslenir. Açık kalma süresi, DC beslemenin yüke uygulandığı süre, ve kapalı
kalma süresi, beslemenin kapatıldığı süredir.
• Bir anahtar kapalıyken neredeyse hiç akım yoktur. Açıkken yani güç yüke aktarılırken, anahtar
boyunca neredeyse hiç voltaj düşüşü olmaz. Anahtarlama elemanının gerilim ve akımının
çarpımı olan güç kaybı her iki durumda da sıfıra yakındır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM NEDİR
• Bir PWM sinyalini iki ana kısım tanımlar: Frekans ve Görev Döngüsü(Duty Cycle)
• Frekans, PWM sinyalinin bir periyodu (döngüyü) ne kadar hızlı tamamladığını yani yüksek ve
düşük durumlar arasında ne kadar hızlı geçiş yaptığını belirler. F=1/T dir
• Görev Döngüsü: Sinyalin yüksek durumda olduğu sürenin sinyal periyoduna oranı olup yüzde
olarak ifade edilir. Yani darbe süresinin periyoda oranıdır.
• D=Duty Cycle,
• Tw=Darbe genişliği,
• T=Periyot olarak alınırsa;
𝑻
• 𝑫 = 𝒘 ∗ 100%
𝑻

• Dijital bir sinyali belirli bir görev döngüsüyle yeterince hızlı şekilde kapatıp açarsak, çıkış
cihazlarına sağlanan güç, analog bir sinyal gibi davranacaktır.
• Çıkışta oluşan sinyalin analog değerini Görev Döngüsü belirler.
• Örnek: 5V yüksek (açık) ve 0V düşük (kapalı) olan bir dijital kaynaktan, 3V analog sinyal
oluşturmak için, 5V un % 60'ını veren % 60 görev döngülü bir PWM kullanabiliriz.
• Dijital sinyalin frekansı yeterince yüksek olursa, çıkışta ortalama voltaj görünür.
• Dijital düşük 0V ise (genellikle durum budur), çıkışın ortalama voltaj değeri, dijital yüksek
voltajın görev döngüsü ile çarpımı olacaktır. Yani 5V x 0.6 = 3V hesaplanır.
• % 80'lik bir görev döngüsünün seçilmesi çıkışta 5V x 0.8= 4V, % 20‘lik seçilmesi 1V verir vb.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM DALGA ŞEKLİ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM DALGA ŞEKLİ

ANALOG
PWM SİNYALİ DEĞER

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM ÇIKIŞ ETKİSİ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
FARKLI ARDUINO KARTLARININ PWM ÖZELLİKLERİ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO UNO PWM ÇIKIŞLARI

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
analogWrite(pin,PWM_değer); FONKSİYONU

• Arduino ile PWM üretmek için analogWrite(pin,değer); fonksiyonu kullanılır.


• Kullanmak istediğimiz PWM çıkış kanalını pin parametresi ile belirtiriz.
int tipinde olmalıdır. Arduino Uno için 3,5,6,9,10 ve 11 değerlerini alabilir.
• PWM_değer parametresi ile Duty Cycle değerini belirleriz. Bu değer int tipinde ve 0-255
arasında olmalıdır.
• Burada dikkat edilmesi gereken husus %100 Duty Cycle elde etmek için 255 değerini, %50
için 128 değerini … girmemiz gerektiğidir.
NOT:
• Pin 5 ve 6'da üretilen PWM sinyalleri beklenenden
daha yüksek görev döngülerine sahip olacaktır.
Bunun nedeni, millis () ve delay () fonksiyonlarının
bu PWM sinyallerini oluşturmak için kullanılan dahili
zamanlayıcıyı kullanmasıdır. Bu çoğunlukla düşük
görev döngüsü değerlerinde (örn. 0 - 10) oluşur ve
0 değerinin, 5 ve 6 numaralı pinlerdeki PWM çıkışını
tamamen kapatamamasına neden olabilir.
• analogWrite() fonksiyonundan önce ilgili pini çıkış olarak ayarlamak için pinMode ()
fonksiyonunu çağırmanız gerekmez.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO PWM SİNYAL ÜRETİMİ

int PWMPin = 9;
int analogGirisPin = 0;
int deger = 0;
void setup() {
Serial.begin(9600);
}

void loop() {
deger = analogRead(analogGirisPin);
analogWrite(PWMPin, deger / 4);
Serial.println(deger/4);
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO PWM İLE MOTOR HIZ KONTROLÜ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO PWM İLE MOTOR HIZ KONTROLÜ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
H KÖPRÜSÜ (H-BRIGDE) İLE ÇİFT YÖNLÜ MOTOR SÜRME

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
H KÖPRÜSÜ (H-BRIGDE) İLE ÇİFT YÖNLÜ MOTOR SÜRME

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
L293D ÇİFT H KÖPRÜLÜ MOTOR SÜRÜCÜ

• L293D, çift H-köprülü motor sürücüsü entegre devresidir (IC).


• Motor sürücüleri, düşük akımlı bir kontrol sinyali ile yüksek akımlı motorları sürerler.
• L293D, iki adet dahili H köprüsü sürücü devresi içerir.
• Genel çalışma modunda, iki DC motor hem ileri hem de geri yönde aynı anda çalıştırılabilir.
• İki motorun çalışması, 2 ve 7 ve 10 ve 15 pinlerine uygulanan giriş mantığı ile kontrol edilebilir.
• Giriş mantığı 00 veya 11, ilgili motoru durduracaktır.
• Mantık 01 ve 10, sırasıyla saat yönünde ve saat yönünün tersine dönüş sağlayacaktır.
• Motorların çalışmaya başlaması için 1 ve 9 numaralı pinlerin (iki motora karşılık gelen)
etkinleştirilmesi yani yüksek olması gerekir.
• Bir etkinleştirme girişi yüksek olduğunda, ilişkili H köprüsü etkinleşir. Sonuç olarak, çıkışlar
aktif hale gelir.
• Benzer şekilde, etkinleştirme girişi düşük olduğunda, bu sürücü devre dışı bırakılır ve çıkışları
kapalı ve yüksek empedans durumuna geçer.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
L293D ÇİFT H KÖPRÜLÜ MOTOR SÜRÜCÜ

10 İleri 01 Geri
10 İleri 01 Geri

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
L293D ÇİFT H KÖPRÜLÜ MOTOR SÜRÜCÜ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
L293D ÇİFT H KÖPRÜLÜ MOTOR SÜRÜCÜ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
L298N ÇİFT H KÖPRÜLÜ MOTOR SÜRÜCÜ MODÜLÜ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
L298N ÇİFT H KÖPRÜLÜ MOTOR SÜRÜCÜ MODÜLÜ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO VE L298N İLE DC MOTOR SÜRME

http://qqtrading.com.my/stepper-motor-driver-module-L298N
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO VE L298N İLE DC MOTOR SÜRME
int IN1 = 4; // Motor B ileri
int IN2 = 5; digitalWrite(IN3, HIGH);
int speedPinA = 9; digitalWrite(IN4, LOW);
int IN3 = 6; delay(2000);
int IN4 = 7;
int speedPinB = 10; // Motor B dur
digitalWrite(IN3, HIGH);
void setup(){ digitalWrite(IN4, HIGH);
pinMode(IN1, OUTPUT); delay(500);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); // Motor A geri
pinMode(IN4, OUTPUT); digitalWrite(IN1, LOW);
pinMode(speedPinA,OUTPUT); digitalWrite(IN2, HIGH);
pinMode(speedPinB,OUTPUT); delay(2000);
}
// Motor A dur
void loop(){ digitalWrite(IN1, HIGH);
// Hız digitalWrite(IN2, HIGH);
analogWrite(speedPinA, 255); delay(500);
analogWrite(speedPinB, 255);
//Motor B geri
// Motor A ileri digitalWrite(IN3, LOW);
digitalWrite(IN1, HIGH); digitalWrite(IN4, HIGH);
digitalWrite(IN2, LOW); delay(2000);
delay(2000);
// Motor B dur
// Motor A dur digitalWrite(IN3, HIGH);
digitalWrite(IN1, HIGH); digitalWrite(IN4, HIGH);
digitalWrite(IN2, HIGH); delay(500);
delay(500); }
http://qqtrading.com.my/stepper-motor-driver-module-L298N
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO VE L298N İLE NEMA 17 Bipolar ADIM MOTOR
SÜRME

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO VE L298N İLE NEMA 17 Bipolar ADIM MOTOR
SÜRME

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO VE L298N İLE NEMA 17 Bipolar ADIM MOTOR
SÜRME
• Adım motorun A +, A-, B + ve B- pinlerini belirlemeniz gerekecektir. Örnek motorumuzda
bunlar kırmızı, yeşil, sarı ve mavidir.
• A +, A-, B + ve B- tellerini adım motordan sırasıyla modül bağlantılarına 1, 2, 13 ve 14
bağlayın. L298N modülü ile birlikte verilen jumper'ları modül noktaları 7 ve 12'deki çiftlerin
üzerine yerleştirin. Sonra güç kaynağını gereken şekilde 4 (pozitif) ve 5 (negatif / GND)
noktalarına bağlayın.
• Ardından, L298N modül pinleri IN1, IN2, IN3 ve IN4'ü sırasıyla Arduino dijital pinleri D8, D9,
D10 ve D11'e bağlayın. Son olarak, Arduinoyu modülden besleyecekseniz, Arduino GND'yi
modül üzerindeki 5 noktasına ve Arduino 5V'yi 6 noktasına bağlayın.
• Arduino IDE'ye standart olarak dahil edilen Stepper Arduino kütüphanesi sayesinde step
motorun kontrol edilmesi çok basittir.
• Motorunuzu çalıştırmak için, Stepper kütüphanesinde bulunan stepper_oneRevolution örneğini
yükleyin:
• İki motorun çalışması, 2 ve 7 ve 10 ve 15 pinlerine uygulanan giriş mantığı ile kontrol edilebilir.
• Giriş mantığı 00 veya 11, ilgili motoru durduracaktır. Mantık 01 ve 10, sırasıyla saat yönünde
ve saat yönünün tersine dönüş sağlayacaktır.
• Motorların çalışmaya başlaması için 1 ve 9 numaralı pinlerin (iki motora karşılık gelen)
etkinleştirilmesi yani yüksek olması gerekir.
• Bir etkinleştirme girişi yüksek olduğunda, ilişkili H köprüsü etkinleşir. Sonuç olarak, çıkışlar
aktif hale gelir.
• Benzer şekilde, etkinleştirme girişi düşük olduğunda, bu sürücü devre dışı bırakılır ve çıkışları
kapalı ve yüksek empedans durumuna geçer.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
http://qqtrading.com.my/stepper-motor-driver-module-L298N
ve Araştırma Merkezi Temel Eğitim Programı
ARDUINO VE L298N İLE NEMA 17 Bipolar ADIM MOTOR
SÜRME

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
http://qqtrading.com.my/stepper-motor-driver-module-L298N
ve Araştırma Merkezi Temel Eğitim Programı
ARDUINO VE L298N İLE NEMA 17 Bipolar ADIM MOTOR
SÜRME
Örnekteki stepsPerRevolution yani devir başına adım sayısını kendi motorunuza göre değiştirin.

Ayrıca motor hızınızı aşağıdaki satırdaki gibi 60 RPM olarak ayarlayın.

Adım motorunuzu bir tur ileri bir tur geri döndürecek olan fonksiyonlar aşıdaki gibidir.
Kodunuzu yükleyin ve çalıştırın.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
http://qqtrading.com.my/stepper-motor-driver-module-L298N
ve Araştırma Merkezi Temel Eğitim Programı
ARDUINO VE L298N İLE NEMA 17 Bipolar ADIM MOTOR
SÜRME
#include <Stepper.h>

const int stepsPerRevolution = 200;

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup()
{
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// initialize the serial port:
Serial.begin(9600);
}
void loop()
{
Serial.println("Saat yönü");
myStepper.step(stepsPerRevolution);
delay(500);
Serial.println("Saati tersi");
myStepper.step(-stepsPerRevolution);
delay(500);
}

Karadeniz Teknik Üniversitesi https://lastminuteengineers.com/stepper-motor-l298n-arduino-tutorial/ İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
I2C SMBus PROTOKOLÜ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
https://demirten.gitbooks.io/gomulu-linux/i2c_protokolunun_tanitilmasi.html
ve Araştırma Merkezi Temel Eğitim Programı
I2C SMBus PROTOKOLÜ

• I2C (Inter-Integrated Circuit), 1980'li yılların başında, Philips Semiconductor tarafından


geliştirilmiş bir seri iletişim protokülüdür.

• İşlemci ve mikrodenetleyiciler, aynı veri yolu (bus) üzerinden, birden çok çevre birimiyle
(peripheral) haberleşebilmelidir. Çevre birimlerine örnek olarak, sensörler, EEPROM, Analog
Sayısal Dönüştürücü (ADC), LCD sürücü ve zamanlayıcı (Real Timer) aygıtlarını gösterebiliriz.
Ayrıca başka işlemciler de çevre birimi olabilmektedir.

• Aynı veri yolu birden çok birim tarafından kontrollü bir şekilde paylaşılmalı ve iletişim kurulacak
çevre birimi, işlemci tarafından, herhangi bir yöntemle seçilebilmelidir. Bu seçim ayrı bir adres
yolu üzerinden yapılabilir. Fakat bu durumda işlemcinin, normalde başka amaçlarla
kullanabileceği bazı uçların, sadece adresleme için tahsis edilmesi zorunluluğu ortaya
çıkacaktır. Ayrıca bu adres yolları sebebiyle, PCB'nin karmaşıklığı da artacaktır.

• Yukarıda bahsettiğimiz dezavantajları gidermek için Philips, yakın mesafelerde düşük band
genişliği ile çalışan, 2 kablolu (2 Wired), I2C protokolünü geliştirmiştir. I2C protokolü, biri clock
diğeri de veri olmak üzere 2 adet iletişim hattına sahiptir. Bu hatlar, SCL (Serial Clock) ve SDA
(Serial Data) olarak isimlendirilmektedir. SDA veri iletişimi için kullanılmakta, SCL ile ise
gönderen ve alan taraflar veri senkronizasyonunu sağlamaktadır.

• SDA ve SCL veri yolları üzerinde birçok aygıt bulunabilir. Bu aygıtlar, düğümleri (node)
oluşturmaktadır. İletişimi başlatan taraf (CPU, mikrodenetleyici) master, karşı taraf ise slave
olarak isimlendirilir. SCL master'ın kontrolündedir ancak slave de, ihtiyaç halinde, SCL'deki
elektriksel seviyeyi değiştirebilmektedir.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
https://demirten.gitbooks.io/gomulu-linux/i2c_protokolunun_tanitilmasi.html
ve Araştırma Merkezi Temel Eğitim Programı
I2C SMBus PROTOKOLÜ

• Slave aygıtlar genel olarak, bir bölümü sabit diğerleri ise programlananabilen 7 bit'lik adreslere
sahiptir. Örneğin, ilk 4 bit üretim aşamasında belirlenirken diğer 3 bit ise elektriksel olarak
programlanabilir. Bu kullanıma ileride değineceğiz. Master, bu adres üzerinden slave aygıta
ulaşabilmektedir. Adresleme, veri transferinde olduğu gibi, SDA üzerinden seri biçimde
olmaktadır.
• I2C, standard 100kHz, fast 400kHz ve high speed 3.4MHz olmak üzere 3 farklı hızı
desteklemektedir.
• Not: Protokole sonradan yapılan eklentilerle beraber 10bit'lik adreslerin de kullanılabilmesi
mümkündür.
• Örnek bir I2C bağlantısı aşağıdaki gibidir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
https://demirten.gitbooks.io/gomulu-linux/i2c_protokolunun_tanitilmasi.html
ve Araştırma Merkezi Temel Eğitim Programı
I2C SMBus PROTOKOLÜ

• Not: I2C veri yolu üzerindeki birimler open drain veya open collector özelliği göstermektedir.
Bu birimler tarafından, SDA ve SDC üzerindeki elektriksel seviye ancak aşağıya yani lojik 0
seviyesine çekilebilir, lojik 1 yapılamaz. Bu sebeple SDA ve SDC hatları birer pull-up direnciyle
lojik 1 seviyesine çekilmelidir. Pull-up direnci olarak 1K ile 10K aralığında dirençler
kullanılabilmektedir.
• I2C ile ilgili temel özellikleri maddeler halinde aşağıdaki gibi özetleyebiliriz.
• I2C birçok aygıt arasında, ayrı bir adres yoluna ihtiyaç duymaksızın, 2 kablolu bir iletişim
kanalı oluşturur. Ayrıca referans olarak ortak bir toprak hattına (ground) ihtiyaç vardır.
• I2C, SDA ve SDC olmak üzere 1 adet veri ve 1 adet clock kanalına sahiptir.
• CPU ve mikrodenetleyici gibi, iletişimi başlatan birim master olarak isimlendirilir ve saat
frekansını (clock) master üretir. Ayrıca iletişim yine master tarafından sonlandırılır.
• Slave çevre birimleri genellikle 7 bitlik adreslere sahiptir ve bu birimlere bu adresler üzerinden
erişilir. Aynı veriyolu üzerine 112 tane aygıt bulunabilir. Bazı adresler rezerve edilmiş
durumdadır bu sebeple 7 bitlik adres alanının tamamı aygıtlar için kullanılamamaktadır. (CBUS
adres desteği, Start Byte, General Call, 10 bit adresleme desteği için ayrılmış adresler, farklı
bus formatlarını desteklemek için ayrılmış adresler gibi rezerve adresler bulunmaktadır)
• Master ve slave arasındaki iletişim çift yönlüdür (bidirectional). İletişimin yönünü master
belirler.
• İletişim yolu üzerinde birden çok master bulunabilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
https://demirten.gitbooks.io/gomulu-linux/i2c_protokolunun_tanitilmasi.html
ve Araştırma Merkezi Temel Eğitim Programı
I2C SMBus PROTOKOLÜ

• İletişim hızını, SCL üzerinden, master dikte etmektedir. Fakat slave, bu hızda veri
gönderemediği veya işleyemediği durumda SCL'nin elektriksel seviyesini değiştirerek (lojik 0
yaparak) iletişimi belli bir süre bloklayabilmektedir. Bu işlem clock stretching olarak
isimlendirilir.
• I2C ile aynı kart üzerinde olduğu gibi kartlar arasında da iletişim mümkündür, maksimum
iletişim kanal uzunluğu yaklaşık 4m'dir.
• I2C veriyolu herhangi bir anda ya iletişim modundandır yada idle konumdadır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
https://demirten.gitbooks.io/gomulu-linux/i2c_protokolunun_tanitilmasi.html
ve Araştırma Merkezi Temel Eğitim Programı
I2C İLETİŞİM AŞAMALARI

1. Hattın boşta olması durumu (Idle): Herhangi bir veri transferinin gerçekleşmediği
durumdur. Bu aşamada SCL ve SDA hatları lojik 1 seviyesindedir.
2. Başlangıç aşaması: SCL lojik 1 iken, SDA'nın lojik 1'den 0 çekilmesiyle oluşur. Bu işlem
master tarafından yapılmaktadır.
3. Adresleme aşaması: Bu aşamada, master tarafından, slave’e, aygıt adresi ve iletişim modu
gönderilmektedir. İletişim modu, master tarafından okuma mı yoksa yazma işlemi mi
yapılacağını belirler (R / W).
4. Veri iletim aşaması: Bit düzeyinde veri iletişiminin yapıldığı aşamadır. SCL’nin her sıfır
durumunda 1 bit gönderilir.
5. Sonlandırma aşaması: SCL lojik 1 iken, SDA'nın lojik 0'dan 1'e çekilmesiyle oluşur. Bu
işlem master tarafından yapılmaktadır, başlangıç aşamasının tersi olarak düşünülebilir.
6. Başlangıç aşamasının tekrarlanması (Repeated start): Bazen, bir iletişim kurulmuş olmasına
karşın, iletişim sonlandırılmadan, yeni bir başlangıç durumu oluşturulmakta ve slave yeniden
adreslenmektedir. Bu sayede hattın kullanımı kaybedilmemekte ve aygıtlar arasındaki
iletişim kesilmeden, birbirini takip eden okuma ve yazma işlemleri (combined read/write)
yapılabilmektedir. Ayrıca EEPROM gibi çevre birimlerine yeni komutlar gönderebilmek için
başlangıç durumunun yeniden oluşturulması gerekebilmektedir. EEPROM ancak başlangıç
sinyalinden sonra bazı komutları anlayabilmektedir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
https://demirten.gitbooks.io/gomulu-linux/i2c_protokolunun_tanitilmasi.html
ve Araştırma Merkezi Temel Eğitim Programı
I2C İLETİŞİM AŞAMALARI

Şimdi IC2 aşamalarında daha yakından bakalım.


1. Veri transferi sırasında, SDA hattındaki verinin, SCL lojik 0 iken değişmesi ve 1 iken
değişmemesi gerekmektedir. SCL lojik 0'dan 1'e geçerken (yükselen kenar) veri
örneklenmektedir. Bu sebeple SCL lojik 1 iken SDA'nın lojik seviyesinin değişmesi, iletişimin
başlatılması ve sonlandırılması gibi, özel anlamlara gelmektedir.
2. IC2 üzerindeki iletişim 8 bit'lik paketler şeklindedir, sonrasında alıcı taraf 9.bit olarak bir onay
biti (ACK/NACK) göndermektedir. Lojik 0 ACK, lojik 1 ise NACK anlamına gelmektedir. ACK
ve NACK master ve slave için aşağıdaki anlamlara gelmektedir.
3. Eğer veriyi gönderen taraf master ve alıcı slave ise, slave tarafından gönderilen ACK verinin
doğru bir şekilde alındığını, NACK ise bir problem olduğunu veya iletişimin sonlandığını
gösterir. Veriyi gönderen taraf slave ise, master yeni bir veri paketi talep ediyorsa ACK,
etmiyorsa NACK gönderir ve sonrasında iletişimi sonlandırır. Buradaki NACK biti bir
probleme işaret etmemektedir.
4. Master ve slave arasında 1 byte'lık alışveriş sırasında, SDA üzerinden, gidip gelen veri
aşağıdaki şekilde gösterilmiştir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
https://demirten.gitbooks.io/gomulu-linux/i2c_protokolunun_tanitilmasi.html
ve Araştırma Merkezi Temel Eğitim Programı
I2C İLETİŞİM AŞAMALARI

Karadeniz Teknik Üniversitesi http://www.gammon.com.au/i2c İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
I2C İLETİŞİM AŞAMALARI
Onay İşareti (ACK – NACK)
İletişim kuracağımız modüle adres veya veri gönderdiğimizde bize onay kodu gönderir. Bu onay
kodu ACK (acknowledge) olarak geçer tam tersi de NACK tır.
Bu onay geldiğinde SDA pini normalde pull-up tan dolayı “1” durumunda iken “0” durumuna
geçer böylece ACK onay kodu gelmiş olur.
Veri okumada ise tam tersi olarak okuma yaptıkça biz modüle ACK göndererek okumanın devam
edeceğini bildiririz. En son okuma biteceği zaman 9. bit i 0 yapmak yerine 1 olarak bırakırız
böylece NACK gönderilmiş olur ve iletişim durdurulur.
Bu sebeple adres gönderildiğinde ya da veri yazma yapıldığında daima 9. bit kontrol edilir eğer
onay kodu gelmez ise tüm işlem iptal edilip yeniden START işareti gönderilerek iletişime yeniden
başlanmalıdır.

Karadeniz Teknik Üniversitesi https://www.ercankoclar.com/2018/01/i2c-iletisim-protokolu-ve-mikroc-kutuphanesi/ İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
I2C İLETİŞİM AŞAMALARI

Yukarıda görüldüğü gibi START işaretinden sonra 7 bit adres ve beraberinde yazma yapılacağını
bildiren 8. bit gönderilmiş.
Bu durumdan sonra SCL ile clock gönderilmeye devam eder . 7 bit adres ve 1 bit işlem
işaretinden sonra gönderilen clock ile iletişime geçtiğimiz slave SDA pinini sıfıra çekerek ACK
yani onay gönderir. Onay gelmez ise iletişim yenilenmelidir. Bu durumdan sonra gönderilecek
yada okunacak tüm veriler başta adresi belirtilen slave ile yapılacaktır.
Adres slave tarafından onaylandı ve yazma yapacağımızı belirtmiştik. Şimdi 8 bit verimizi
gönderiyoruz ve yine 9. bitte onay kodunu bekliyoruz slave yine SDA pinini sıfıra çekiyor ve veri
yazmanın başarılı olduğunu onaylıyor.
NOT: Eğer yazma değilde okuma yaparsak ACK kodunu biz oluşturuyoruz yani 8 bit veriyi
okuduktan sonra SDA pinini sıfıra çekiyoruz böylece okuma işlemi devam ediyor. Okuma
biteceği zaman son okunan 8 bitin ardından bu sefer NACK gönderiyoruz yani SDA yı 1
durumunda bırakıp sadece clock gönderiyoruz böylece slave okuma işleminin bittiğini anlıyor.
Ardından STOP işareti ile iletişim sonlandırılıyor. İstenirse arka arkaya durmaksızın veri
yazılmaya devam edebilir bunda bir kısıtlama yoktur.
Yazma yaparken birden okuma yapmak istersek yine START işareti ile beraber aynı yolu takip
ediyoruz.
Karadeniz Teknik Üniversitesi https://www.ercankoclar.com/2018/01/i2c-iletisim-protokolu-ve-mikroc-kutuphanesi/ İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
I2C İLE 1 BYTE VERİ GÖNDERME ÖRNEĞİ

Master'dan 42 numaralı adresteki slave cihaza "S" (0x53) karakterini gönderme.


1. İletim "Başlatma koşulu" ile başlar (Start etiketli). SCL (seri saat) yüksekken SDA (seri veri)
düşüğe çekilir.
2. Daha sonra slave cihazın 7 bit adresi iletilir. İletime MSB bitinden başlanır. Bu örnekte 42
(0x2A veya 0b0101010) idi.
3. Ardından okuma / yazma biti iletilir. 0 yazma (master->slave), 1 okuma (slave->master)
anlamına gelir.
4. Daha sonra master, slave'in SDA hattını alçaltmasını bekler, bu bir ACK (bu adresin bir
slave'inin var olduğunu ve veri almaya hazır olduğunu kabul eder). Bağlı ve açık bir slave
yoksa veya adresi doğru değilse, SDA hattı yüksekte kalarak (çekme direnci ile) adresi
yoksayar. Bu bir NAK (olumsuz) olarak sayılır. Bu, yazılımla test edilebilir.
5. Daha sonra veri baytı (bu durumda 0x53) iletilir. İletime MSB bitinden başlanır.
6. Yine, 8 veri bitinden sonra, master slave'in SDA hattını aşağı çekerek onayladığını kontrol
eder. Böylece, her bayt kabul edilir.

Karadeniz Teknik Üniversitesi http://www.gammon.com.au/i2c İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
I2C İLE 1 BYTE VERİ GÖNDERME ÖRNEĞİ

Master'dan 42 numaralı adresteki slave cihaza "S" (0x53) karakterini gönderme.


1. Bu adımdan sonra daha fazla veri baytı iletilebilir, ancak burada gösterilmedi.
2. İletim, "Durdurma koşulu" (Stop etiketli) ile sonlandırılır.
3. Durdurma koşulu, SCL yüksekken, SDA hattının serbest bırakılması ve böylece pull-up
dirençleri tarafından yukarı çekilmesiyle sağlanır

Karadeniz Teknik Üniversitesi http://www.gammon.com.au/i2c İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ile I2C ÖRNEĞİ – Wire.h KÜTÜPHANESİ

Karadeniz Teknik Üniversitesi http://www.gammon.com.au/i2c İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ile I2C ÖRNEĞİ – Wire.h KÜTÜPHANESİ

• wire.begin(): I2C haberleşmesini başlatan fonksiyondur. Bu fonksiyon parametre olarak slave cihazın
adresini alır. Eğer cihaz master olarak tanımlanacak ise bu fonksiyona herhangi bir parametre
atanmaz.
• Örneğin haberleşme hattında '1' adresine sahip slave bir Arduino tanımlanmak isteniyorsa,
wire.begin(1); yazılır. Eğer bu Arduino haberleşme hattının master cihazı olarak tanımlanmak
istenseydi fonksiyon, wire.begin(); olarak çağırılmalıydı.

• wire.available(): Fonksiyon hat üzerinden Arduino'ya ulaşmış veri paketlerinin sayısını döndürür. Eğer
fonksiyonun değeri 0'dan büyükse Arduino'ya gelen yeni veri paketi vardır.

• wire.beginTransmission(SlaveAdresi): Master cihazın hat üzerinde bulunan slave cihazlardan


hangisiyle haberleşmek istediğini belirler. Fonksiyon, parametre olarak haberleşmeye başlayacağı
cihazın adresini alır.

• wire.endTransmission(): Hat üzerindeki veri aktarımının sonlandığını belirtir.

• wire.read(): Veri hattından gelen verinin okunmasını sağlar.

• wire.write(): Fonksiyona yazılan parametreyi veri hattına aktarır. Kısaca veri yollamak için kullanılır.

Karadeniz Teknik Üniversitesi https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-401/i2c-fonksiyonlari İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ile I2C ÖRNEĞİ – Wire.h KÜTÜPHANESİ

• wire.onReceive(Görev_Fonksiyonu): Slave olarak tanımlanmış cihaza veri geldiğinde, cihazın


yapacağı işlemi belirleyen fonksiyondur. Fonksiyon parametre olarak veri geldiğinde, çağırılacak
fonksiyonun ismini alır.

• wire.requestFrom(): Master tarafında kullanılan bu fonksiyon ile slave cihazdan veri istenir.
Fonksiyonun ilk parametresi, slave cihazın adresini belirler. İkinci parametre ise slave cihazdan kaç
byte'lık veri beklendiğini belirler. Üçüncü ve son parametre ise hattın istekten sonraki durumunu
belirler.

• wire.onRequest(): Slave tarafında kullanılan bu fonksiyon, master cihazdan veri isteği geldiğinde
çalıştırılacak fonksiyonu belirler. Bu fonksiyon parametre olarak çalıştırılacak fonksiyonun ismini alır.

Karadeniz Teknik Üniversitesi https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-401/i2c-fonksiyonlari İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ile I2C ÖRNEĞİ – Wire.h KÜTÜPHANESİ

Karadeniz Teknik Üniversitesi https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-401/i2c-fonksiyonlari İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO ile I2C ÖRNEĞİ – Wire.h KÜTÜPHANESİ
#include <Wire.h> #include <Wire.h>
char gelenKarakter; const int LED = 13;
void setup() void setup(){
{ Wire.begin(1);
Wire.begin(); Wire.onRequest(istekGeldiginde);
Serial.begin(9600); Wire.onReceive(veriGeldiginde);
} pinMode(LED,OUTPUT);
}
void loop() void loop(){
{ delay(1);
Wire.beginTransmission(1); }
Wire.write("a"); void veriGeldiginde(int veri){
Wire.endTransmission(); char gelenKarakter;
delay(1000); while(Wire.available()){
Wire.beginTransmission(1); gelenKarakter = Wire.read();
Wire.write("b"); }
Wire.endTransmission(); if(gelenKarakter == 'a')
delay(1000); digitalWrite(LED,HIGH);
Wire.requestFrom(1, 7); else if(gelenKarakter == 'b')
/* 1 adresine sahip slave (köle) digitalWrite(LED,LOW);
cihazından 7 BYTE'lık veri bekleniyor }
*/ void istekGeldiginde(){
while(Wire.available()){ /*
/* I2C hattında yeni veri olduğu * Eğer master bu cihazdan veri istiyor ise
sürece döngü devam edecek */ master cihaza "Merhaba" verisi yollanılır
gelenKarakter = Wire.read(); * Eğer bu bir sensör olsaydı "merhaba"
Serial.print(gelenKarakter); yerine sıcaklık veya ivme verisi yollanıyor
} olacaktı
Serial.println(); */
delay(1000); Wire.write("Merhaba");
} }
Karadeniz Teknik Üniversitesi https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-401/i2c-fonksiyonlari İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
GY-906 MLX90614 IR SICAKLIK SENSÖRÜ MODÜLÜ

https://protosupplies.com/product/gy-906-mlx90614-non-contact-precision-thermometer-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
GY-906 MLX90614 IR TERM. MODÜLÜNÜN TEMEL ÖZELLİKLERİ

• Sıcaklık ölçüm aralığı: -70 ° C ila + 380 ° C


• I2C / SMBus arayüzü
• İsteğe bağlı PWM ve kesme çıkışı
• 3.3V veya 5V çalışma

• Sensör ölçtüğü sıcaklığa maruz kalmadığı için geniş bir sıcaklık aralığını okuyabilir.
• Oda sıcaklığında 0,5 ° C hassasiyetle -70 ° C (-94 ° F) ila + 380 ° C (+ 720 ° F) aralığında
ölçüm yapar.
• Sensörün kendisi -40 ° C ila + 125 ° C arasında çalışabilir.

• Sensörün 90 derecelik bir görüş alanı vardır ve hesaplanan sıcaklık, bu görüş alanındaki
ortalama sıcaklıktır.
• Bu nedenle uygun ölçüm mesafesi, görüş alanının ne kadar genişlikte olmasının
istendiğine bağlıdır. IC veya döner şaft gibi bir nesnenin yüzey sıcaklığını ölçüyorsanız,
tipik olarak yaklaşık 1 cm'lik bir ölçüm mesafesi kullanılır.

• Sensör, okuma üzerindeki etkilerini en aza indirmek için görünür ve yakın kızılötesi ışığı
kesen dahili bir optik filtreye sahiptir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
GY-906 MLX90614 IR TERM. MODÜLÜNÜN TEMEL ÖZELLİKLERİ

• Modülün 3 temel çalışma modu vardır.

1. I2C Modu: Bu modda I2C veri yolu kullanarak ayarların yapılandırılmasını ve sıcaklığın
okunması sağlanır.
2. PWM Modu: Bu modda sıcaklık bilgisi PWM sinyali ile kodlanır ve PWM pininden
sürekli olarak gönderilir.
3. Termal Anahtar Modu: Sıcaklık, önceden programlanmış bir noktaya geldiğinde çıkış
üretir.

• I2C / SMBus Kullanımı


• Cihazın birincil arayüzü SMBus, temelde I2C ile aynı olup I2C gibi SDA (Veri) ve SCL
(Saat) hatlarını kullanır. Modül, bu hatlarda 4.7K çekme dirençlerine sahiptir. Modülün
SCL ve SDA pinleri, I2C / SMBus portuna sahip MCU üzerindeki SCL ve SDA pinlerine
bağlanır.

• Nesnenin sıcaklığı ve MLX90614'ün ortam sıcaklığı ° C ve ° F olarak okunabilir. Cihaz,


geniş bir aralık, yüksek çözünürlük ve çok iyi doğruluk sağlayan yüksek çözünürlüklü 17
bitlik ADC ve DSP birimine sahiptir.

• Ayrıca cihaz, 127 I2C adresinden birine sahip olacak şekilde arayüz üzerinden
programlanabilir, böylece cihazların 127'si tek I2C veriyolunda çalışabilir.
• PWM çıkışı veya termal anahtar çalışma modu gibi başka ayarlar da I2C arayüzü
kullanılarak yapılandırılabilir.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
GY-906 MLX90614 IR TERM. MODÜLÜNÜN TEMEL ÖZELLİKLERİ

• PWM Modunu Kullanma


• PWM moduna geçildiğinde, modül SDA pininde, ölçülen nesne sıcaklığını temsil eden
sürekli bir 10 bit PWM sinyali verir. Modül PWM sinyali varsayılan olarak 0.14C çıkış
çözünürlüğüyle -20C ila 120C aralığını kapsar, ancak bu varsayılan aralık I2C veri yolu
üzerinden ayarlanabilir.

• Termal Anahtar Modunu Kullanma


• Termal anahtar olarak kullanıldığında, cihaz belirli bir sıcaklık noktasına programlanabilir.
Bu sıcaklığa ulaşıldığında PWM pimi tetiklenir. Bu çıkış bir MCU'ya kesme girişi olarak
kullanılabileceği gibi doğrudan bir röleyi veya benzer bir cihazı sürmek için de
kullanılabilir. Çıkış sürme kapasitesi 25mA'dir.

• Güç Sağlama
• Modül üzerinde 662K (LM6206-3.3) 3.3V gerilim regülatörü bulunur. 5V tipik olsa da, VIN
güç giriş pininden maksimum 6V'a kadar gerilim uygulanabilir. Modül VIN pininden 3.3V
ile beslenirse, voltaj regülatörden minimum voltaj düşüşüyle ​geçer, bu nedenle modül
hem 5V hem de 3.3V MCU'larla uyumludur.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
GY-906 MLX90614 IR TERM. MODÜLÜNÜN TEMEL ÖZELLİKLERİ

• Modül Bağlantıları
• MCU ile eşleşmek için VIN = 3,3 veya 5V
• GND = Toprak
• SCL = I2C Saat
• SDA = I2C Veri

• PROGRAM:

• Aşağıdaki program, sıcaklık verilerini sensörden Seri Monitör Penceresine yazdıran basit
bir test programıdır.

• MLX90614 sensörü için birkaç kütüphane bulunmaktadır. Buradaki örnekte, kullanımı çok
kolay olan Adafruit kütüphanesi kullanılmıştır. Ancak bu kütüphane, MLX90614ün temel
özelliklerini destekliyor, gelişmiş özelliklerini desteklemiyor. Kütüphane, Arduino IDE
Kütüphane Yöneticisi'nden indirilebilir.

• Çalıştırmak için VIN'i MCU ile ortak 5V veya 3.3V'ye bağlayın. GND'yi MCU ile ortak
toprağa bağlayın. Ayrıca SCL'yi MCU'daki SCL'ye ve SDA'yı MCU'daki SDA'ya bağlayın.

• Programı yükleyin ve sonuçları görmek için Seri Monitör Penceresini açın.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
MLX90614 IR TERMOMETRENİN ARDUINO İLE KULLANIMI

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
MLX90614 IR TERMOMETRENİN ARDUINO İLE KULLANIMI
#include <Wire.h>
#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();


void setup() {
Serial.begin(9600);
mlx.begin();
}
void loop() {
Serial.print("Ortam Sicakligi = ");
Serial.print(mlx.readAmbientTempC());
Serial.print("\xC2\xB0"); //Derece sembolünü basar
Serial.print("C\tNesne Sicakligi = ");
Serial.print(mlx.readObjectTempC());
Serial.print("\xC2\xB0");
Serial.println("C");
Serial.print(" Ortam Sicakligi = ");
Serial.print(mlx.readAmbientTempF());
Serial.print("\xC2\xB0");
Serial.print("F\tNesne Sicakligi = ");
Serial.print(mlx.readObjectTempF());
Serial.print("\xC2\xB0");
Serial.println("F");
Serial.println();
delay(1000);
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
https://protosupplies.com/product/gy-906-mlx90614-non-contact-precision-thermometer-module/
MLX90614 IR TERMOMETRENİN ARDUINO İLE KULLANIMI

https://create.arduino.cc/projecthub/SurtrTech/contactless-temperature-sensor-mlx90614-1e7bc7

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
UART (UNİVERSAL ASYNCHRONOUS RECEIVER-TRANSMITTER)
ASENKRON SERİ HABERLEŞME
• Seri iletişim, mikrodenetleyicilerin, modemlerin, veri terminallerinin veya bilgisayarların
birbirleriyle veya başka cihazlarla haberleşebilmesi için kolay ve esnek bir yol sağlar.

• Bu bölümde, asenkron seri haberleşme kullanarak nasıl bilgi gönderileceği ve alınacağı


açıklanmaktadır.

• Yıllar içinde, gömülü sistemlerin özel ihtiyaçlarını karşılamak için düzinelerce seri
protokol hazırlanmıştır. USB (evrensel seri veri yolu) ve Ethernet, daha iyi bilinen bilgi
işlem seri arabirimlerinden birkaçıdır. Diğer çok yaygın seri arayüzler arasında SPI, I2C
ve bugün konuşacağımız UART seri standart yer alıyor. Bu seri arayüzlerin her biri iki
gruptan birine ayrılabilir:

• Senkron (eş zamanlı) ve asenkron (eş zamanlı olmayan).

• Senkron seri haberleşmede veri bitleri bir saat sinyali eşliğinde, saat sinyali ile
senkronize olarak gönderilir ve alınır. Yani eşzamanlı seri arabirim her zaman veri
hatlarını bir saat sinyali ile eşleştirir, bu nedenle eşzamanlı seri veri yolundaki tüm
cihazlar ortak bir saati paylaşır. Bu, daha basit, genellikle daha hızlı bir seri aktarımı
sağlar, ancak iletişim aygıtları arasında en az bir ekstra kablo gerektirir. Senkron
arayüzlere örnek olarak SPI ve I2C verilebilir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
UART (UNİVERSAL ASYNCHRONOUS RECEIVER-TRANSMITTER)
ASENKRON SERİ HABERLEŞME
• Asenkron haberleşme ise, verilerin harici bir saat sinyalinden destek olmadan aktarıldığı
anlamına gelir. Yani, veri bitleri herhangi bir saat sinyaliyle senkronize edilmeksizin peş
peşe gönderilir ve alınır.

• Bu iletim yöntemi, gerekli kabloları ve G/Ç pinlerini en aza indirmek için mükemmeldir.
Ancak bu, verileri güvenilir bir şekilde aktarmak ve almak için fazladan çaba sarfetmemiz
gerektiği anlamına gelir. Asenkron haberleşmede iki cihazın arasındaki uyum veri
paketlerinin başına ve sonuna konulan başlama ve durma bitleri ile sağlanır. Bunun
yanında, asenkron seri haberleşen iki cihazın haberleşme hızları yani saniyede
gönderilip alınacak bit sayıları (baud rate) eşit olmalıdır.

• Basit hata denetimi ve düzeltme için parity bit yöntemi de seçimlik olarak
kullanılmaktadır.

• Bu derste tartışacağımız seri protokol, en yaygın asenkron aktarım biçimidir. Aslında o


kadar yaygındır ki, çoğu kişi “seri” derken bu protokol hakkında konuşurlar (bu eğitimde
muhtemelen fark edeceğiniz bir şey).

• Bu derste tartışacağımız saatsiz seri protokol, gömülü elektroniklerde yaygın olarak


kullanılmaktadır. Projenize bir GPS modülü, Bluetooth, XBee, seri LCD'ler veya diğer
birçok harici cihaz eklemek istiyorsanız, muhtemelen asenkron seri haberleşme
kullanacaksınızdır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ASENKRON SERİ HABERLEŞME KURALLARI

• Eşzamansız seri protokol, sağlam ve hatasız veri aktarımını sağlamaya yardımcı olan bir
dizi yerleşik kurala ve mekanizmaya sahiptir. Harici saat sinyalinden kaçınmak için
kullanılan bu mekanizmalar şunlardır:

• Veri bitleri,
• Senkronizasyon bitleri,
• Eşlik bitleri,
• Baud hızı.

• Bu sinyal mekanizmalarının çeşitliliği sayesinde, seri olarak veri göndermenin oldukça


esnek olduğunu ve farklı şekillerde yapılandırılabileceğini göreceksiniz.

• Kritik kısım, seri veri yolundaki her iki cihazın da aynı protokolleri kullanacak şekilde
yapılandırıldığından emin olmaktır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
BAUD RATE (BAUD HIZI)

• Baud hızı, verinin seri hat üzerinden ne kadar hızlı gönderileceğini belirtir. Genellikle
saniyede bit (bps) birimi cinsinden ifade edilir. Baud hızını ters çevirirseniz, tek bir bit
iletmenin ne kadar sürdüğünü öğrenebilirsiniz.

• Bu değer, vericinin bir seri hattı ne kadar yüksek / düşük tutacağını veya alıcı cihazın
hattı ne zaman örneklediğini belirler.

• Baud hızları, akıldaki herhangi bir değer olabilir. Tek şart, her iki cihazın da aynı hızda
çalışmasıdır.

• Özellikle hızın kritik olmayan basit işler için daha yaygın baud hızlarından biri 9600
bps'dir. Diğer "standart" baud, 1200, 2400, 4800, 19200, 38400, 57600 ve 115200'dür.

• Bir baud hızı ne kadar yüksek olursa, veri o kadar hızlı gönderilir / alınır, ancak verilerin
ne kadar hızlı aktarılabileceğine dair sınırlamalar vardır.

• Genellikle 115200'ü aşan hızlar görmezsiniz - bu çoğu mikrodenetleyici için hızlıdır. Çok
yükseğe çıktığınızda, saat hızları ve örnekleme peryotları yetmeyeceği için alıcı uçta
hatalar görmeye başlayacaksınız.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
VERİLERİ ÇERÇEVELEME (DATA FRAMING)

• İletilen her veri bloğu (genellikle bir bayt) aslında bir paket veya bit çerçevesinde
gönderilir. Çerçeveler, verilerimize senkronizasyon ve eşlik bitleri eklenerek oluşturulur.

• UART protokolünde bir seri çerçeve yukarıdaki yapıdadır.

• Çerçevedeki bazı kısımların boyutları isteğe göre yapılandırılabilir.

• Çerçevedeki kısımların her birinin ayrıntılarına girelim.


Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
VERİLERİ ÇERÇEVELEME (DATA FRAMING)

• Veri Bitleri

• Her seri paketin gerçek veriyi taşıdığı kısmıdır. Bu veri bloğunu belirsiz bir şekilde yığın
olarak adlandırıyoruz, çünkü boyutu özellikle belirtilmemiştir. Her paketteki veri miktarı 5
ila 9 bit arasında bir değere ayarlanabilir. Elbette, standart veri boyutu temel 8 bit
baytınızdır, ancak diğer boyutların kullanımları vardır. 7 bitlik bir veri yığını, özellikle 7
bitlik ASCII karakterleri aktarıyorsanız, 8'den daha verimli olabilir.

• Veri uzunluğunu belirledikten sonra, her iki seri cihazın, verilerin endianitesi yani önce en
anlamlı bitin mi (MSB), yoksa en anlamsız bitin mi (LSB) gönderileceği üzerinde
anlaşması gerekir. Aksi belirtilmedikçe, genellikle verilerin önce en az anlamlı bitin (LSB)
aktarıldığını varsayabilirsiniz.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
VERİLERİ ÇERÇEVELEME (DATA FRAMING)

• Senkronizasyon bitleri

• Senkronizasyon bitleri, her bir veri paketiyle aktarılan iki veya üç özel bittir.

• Bunlar başlangıç ​biti ve bitiş bitidir.

• Adlarına göre, bu bitler bir paketin başlangıcını ve sonunu işaretler.

• Her zaman yalnızca bir başlangıç ​biti vardır, ancak durdurma bitlerinin sayısı bir veya iki
olarak yapılandırılabilir (genellikle bir olarak bırakılır).

• Başlangıç ​biti her zaman 1'den 0'a giden boş bir veri hattıyla gösterilirken, durdurma bit
(ler)i, hattı 1'de tutarak tekrar boşta (Idle) durumuna geçer.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
VERİLERİ ÇERÇEVELEME (DATA FRAMING)

• Eşlik bitleri (Parity bits)

• Eşlik; çok basit, düşük seviyeli bir hata kontrolü biçimidir.


• İki çeşittir: Tek parity ve çift parity.
• Eşlik bitini üretmek için, verinin içindeki 1’ler sayılır ve 1’lerin sayısının tek ve çift
olmasına ve kullanılacak parity yöntemine göre eşlik biti ayarlanır. Örneğin, çift parite
kullanılacağını ve verinin 0b01011101 olduğunu varsayalım. Verideki 1’lerin sayısı 5 olup
tektir. Bundan dolayı veriye 1 eklenerek 1’ler çiftlenir.
• Tersine, parite modu tek olarak ayarlanırsa , eşlik biti 0 olacaktı.
• Eşlik isteğe bağlıdır ve çok yaygın olarak kullanılmaz. Gürültülü ortamlar arasında iletim
yapmak için yararlı olabilir, ancak aynı zamanda veri aktarımınızı biraz yavaşlatır ve hata
işlemeyi uygulamak için hem gönderen hem de alıcı tarafta parite işleme birimi olmalıdır.
Başarısız olan alınan veriler genelde yeniden gönderilir.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
VERİLERİ ÇERÇEVELEME (DATA FRAMING)

• UART Protokol Ayarlaması

• 9600 8N1 (bir örnek)


• 9600 8N1 - 9600 baud, 8 veri biti, eşlik yok ve 1 durdurma biti - daha sık kullanılan seri
protokollerden biridir. Peki,
• 9600 8N1 verilerinin paketi neye benzer? Bir örnek verelim!

• ASCII 'O' ve 'K' karakterlerini ileten bir cihazın iki veri paketi oluşturması gerekir. O'nun
ASCII değeri (bu büyük harf) 79'dur ve bu değer, 8 bitlik ikili bir 01001111 değerine
ayrılırken, K'nin ikili değeri 01001011'dir. Geriye kalan tek şey senkronizasyon bitleri
eklemek.

• Özellikle belirtilmemiştir, ancak verilerin ilk önce en az anlamlı bitten başlayarak


aktarıldığı varsayılmaktadır. İki baytın her birinin sağdan sola okurken nasıl
gönderildiğine dikkat edin.

• "OK" Paketi
• 9600 bps'de aktardığımızdan, bu bitlerin her birini yüksek veya düşük tutmak için
harcanan süre, bit başına 1 / (9600 bps) veya 104 µs'dir.

• İletilen her veri baytı için aslında 10 bit gönderilir: bir başlangıç ​biti, 8 veri biti ve bir
durdurma biti. 9600 bps'de saniyede 9600 bit veya saniyede 960 (9600/10) paket
gönderiyoruz.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
SERİ HABERLEŞME DONANIM VE BAĞLANTI YAPISI

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
SERİ HABERLEŞME DONANIM VE BAĞLANTI YAPISI

• Bir seri veri yolu; biri veri göndermek için diğeri almak için olmak üzere sadece iki
kablodan oluşur. Bu nedenle, seri cihazların iki seri pini olmalıdır: Alıcı, RX ve verici, TX.

• Seri Kablolama
• Bu RX ve TX etiketlerinin cihazın kendisiyle ilgili olduğunu belirtmek önemlidir. Bu
nedenle, bir cihazdaki RX, diğerinin TX'ine gitmeli ya da tam tersi. VCC'yi VCC'ye,
GND'den GND'ye bağlamalısınız.

• Her iki cihazın da veri gönderip alabileceği seri arabirim, tam çift yönlü veya yarı çift
yönlüdür. Tam çift yönlü, (full dublex) her iki cihazın aynı anda gönderip alabileceği
anlamına gelir. Yarı çift yönlü (half dublex) iletişim, seri cihazların sırayla gönderme ve
alma yapması gerektiği anlamına gelir.

• Bazı seri cihazlar sadece alıcıdır. Örneğin bir LCD. Sadece alçıdır. Simpleks seri iletişim
olarak bilinen şey budur. Tek ihtiyacınız olan, ana cihazın TX'inden dinleyicinin RX
hattına kadar tek bir kablo bağlamaktır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
SERİ HABERLEŞME DONANIM VE BAĞLANTI YAPISI

• Kavramsal açıdan asenkron seriyi ele aldık. Hangi tellere ihtiyacımız olduğunu biliyoruz.

• Ancak seri iletişim aslında sinyal düzeyinde nasıl uygulanır?

• Yani bitlerin gerilim seviyeleri nelerdir.

• Seriye ait birkaç popüler donanım uygulamasına bakalım: bir çok çeşit olsa da yaygın
olarak iki tür kullanılır. TTL ve RS-232.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
TTL SİNYAL SEVİYELERİ

• Mikrodenetleyiciler ve diğer düşük seviyeli IC'ler seri olarak iletişim kurduğunda bunu
genellikle bir TTL (transistör-transistör mantığı) seviyesinde yaparlar. TTL seri sinyalleri
mikrodenetleyicinin voltaj besleme aralığı arasında bulunur - genellikle 0V ila 3.3V veya 5V.

• VCC seviyesindeki bir sinyal (3.3V, 5V vb.), hattın boşta olduğunu (idle), 1 değerinde bir biti
veya bir durdurma bitini gösterir.

• 0V (GND) sinyali ise, başlangıç ​bitini veya 0 değeri olan veri bitini temsil eder.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
RS-232 SİNYAL SEVİYELERİ

• Daha eski bilgisayarların ve çevre birimlerinin bazılarında bulunabilen RS-232’de, lojik


seviyeler değiştirilmiştir.

• RS-232 sinyalleri genellikle -13V ve 13V arasında değişir, ancak spesifikasyon +/- 3V ila
+/- 25V arasında herhangi bir seviyeye izin verir.

• Bu sinyallerde düşük bir voltaj (-5V, -13V, vb.), hattın boşta olmasını, bir durdurma bitini
veya 1 değerine sahip bir veri bitini gösterir.

• Yüksek bir RS-232 sinyali bir başlangıç ​bitini veya 0 değerli veri bitini gösterir.

• RS-232, TTL’in tam tersidir.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
RS-232 TTL SİNYAL DÖNÜŞÜMLERİ
• TTL'in gömülü devrelere uygulanması çok daha kolay ve verimlidir.
• Fakat TTL’in düşük voltaj seviyeleri uzun iletim hatlarındaki kayıplara uygun değildir. Bu
sebeple uzun menzilli seri iletimler için RS-232 veya RS-485 gibi standartlar kullanılır
• İki seri cihazı birbirine bağlarken, sinyal voltajlarının eşleştiğinden emin olmak önemlidir.
Bir TTL seri cihazını bir RS-232 arayüze direkt olarak bağlayamazsınız.
• Araya TTL-RS232 seviye dönüştürücü koymanız gerekir.

RS-232 TTL

RS-232 TTL

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
RS-232 TTL SİNYAL DÖNÜŞÜMLERİ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi https://www.electricaltechnology.org/2014/10/max232-construction-working-types-uses.html
ve Araştırma Merkezi Temel Eğitim Programı
YAZILIM SERİ PORTLARI

• Bir mikrodenetleyicide bir UART yoksa (veya yeterli değilse), seri arabirimi yazılımla
yapabilirsiniz ve seri haberleşme doğrudan işlemci tarafından kontrol edilebilir.

• SoftwareSerial gibi Arduino kütüphanelerinin yaklaşımı budur.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
DİKKAT EDİLMESİ GEREKEN DİĞER HUSUSLAR

• RX-TX, TX-RX hatlarının eşleşmesi:

• Yeterince basit görünüyor ama RX ve TX hatlarını seri cihazlar arasında


eşleştirdiğinizden emin olun.

• Baud Hızı Uyuşmazlığı:

• Baud hızları, seri iletişim dilleri gibidir. İki cihaz aynı hızda konuşmuyorsa, veriler yanlış
yorumlanabilir veya tamamen gözden kaçabilir. Alıcı cihazdan anlamsız karakterler
alıyorsanız, baud hızlarının uyuşup uyuşmadığını kontrol edin.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO SERİ HABERLEŞME DONANIMI

• Arduino’da modeline göre bir veya birden çok seri port bulunmaktadır.

• Bunun yanında SoftwareSerial kütüphanesi ile, isteğiniz dijital pinleri Tx ve Rx olarak


seçip yazılım seri portu da kurabilirsiniz.

• Arduino kartı üzerinde Serial-USB dönüştürücü entegre bulunmakta ve bu sayede


Arduino kartlar PC USB portuna bağlanarak PC ile seri olarak haberleşmektedir.

• Arduino kart üzerindeki CH340, CP2112, FT232 gibi entegrelerin görevi budur.

• Arduino seri portunun Tx Rx pinleri kenar konnektörlerinden ayrıca alınabilmektedir.

• Arduino Uno’da tek donanım seri portu vardır ve hem PC ile haberleşmede kullanılır hem
de istenirse Tx Rx uçları ile başka bir Arduino’ya ya da cihaza bağlanabilir.

• Fakat aynı anda kullanılamayacaktır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO SERİ HABERLEŞME DONANIMI

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DONANIM SERİ HABERLEŞME KÜTÜPHANESİ

• Arduino’da modeline göre bir veya birden çok seri port bulunmaktadır.

• Arduino kartı üzerinde Serial-USB dönüştürücü entegre bulunmakta ve bu sayede


Arduino kartlar PC USB portuna bağlanarak PC ile seri olarak haberleşmektedir.

• Arduino kart üzerindeki CH340, CP2112 gibi entegrelerin görevi budur.

• Arduino seri portunun Tx Rx pinleri kenar konnektörlerinden ayrıca alınabilmektedir.

• Arduino Uno’da tek donanım seri portu vardır ve hem PC ile haberleşmede kullanılır hem
de istenirse Tx Rx uçları ile başka bir Arduino’ya ya da cihaza bağlanabilir.

• Fakat aynı anda kullanılamayacaktır.

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DONANIM SERİ HABERLEŞME KÜTÜPHANESİ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DONANIM SERİ HABERLEŞME KÜTÜPHANESİ

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Serial.begin()

• Serial.begin(speed)
• Serial.begin(speed, config)

• SERIAL_5N1
• SERIAL_6N1
• SERIAL_7N1
• SERIAL_8N1 (the default)
• SERIAL_5N2
• SERIAL_6N2
• SERIAL_7N2
• SERIAL_8N2
• SERIAL_5E1: even parity
• SERIAL_6E1
• SERIAL_7E1
• SERIAL_8E1
• SERIAL_5E2
• SERIAL_6E2
• SERIAL_7E2
• SERIAL_8E2
• SERIAL_5O1: odd parity
• SERIAL_6O1
• SERIAL_7O1
• SERIAL_8O1
• SERIAL_5O2
• SERIAL_6O2
• SERIAL_7O2
• SERIAL_8O2

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Serial.readString()

void setup(){ void setup(){


Serial.begin(9600); Serial.begin(9600);
} }

void loop(){ void loop(){


while(Serial.available() > 0 ){ while(Serial.available() > 0 ){
String str = Serial.readString(); String str = Serial.readString();
if(str.substring(0) == "yak\r\n"){ if(str.indexOf("yak") > -1){
} Serial.println("buldum"); Serial.println("buldum");
else{ }
Serial.println("bulamadim "); else{
} Serial.println("bulamadim ");
} }
} }
}

Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı


Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı

You might also like