13 Mayıs 2017 Cumartesi

Arduino'da Pin İşlemleri

Merhaba Webkolog takipçileri,

Arduino'nun asıl büyüsü, fiziksel dünyayla etkileşim kurabilme yeteneğinde yatar. Sensörlerden veri almak, motorları kontrol etmek veya ışıkları yakıp söndürmek gibi tüm bu işlemler, Arduino kartı üzerindeki pinler aracılığıyla gerçekleşir. Pinler, Arduino'nuzun dış dünyayla iletişim kurduğu kapılardır ve doğru şekilde kullanıldıklarında projelerinize hayat verirler. Bu yazımda, Arduino'da pinleri nasıl yöneteceğimize dair temel fonksiyonları ve kavramları detaylıca ele alacağım. Hazırsanız, bu kapıların ardındaki dünyayı keşfetmeye başlayalım!


Pin Modu Belirleme: pinMode()

Herhangi bir pini kullanmadan önce, o pinin ne amaçla kullanılacağını Arduino'ya bildirmemiz gerekir. Bu işlemi pinMode() fonksiyonu ile yaparız. Bu fonksiyon iki argüman alır: kullanılacak pin numarası ve pinin modu (Giriş veya Çıkış).

  • OUTPUT: Pini çıkış modu olarak ayarlar. Yani bu pinden dışarıya elektrik (voltaj) verebiliriz. LED yakmak, motor çalıştırmak gibi durumlarda kullanılır.
  • INPUT: Pini giriş modu olarak ayarlar. Bu pinden dışarıdan gelen bir elektrik sinyalini okuyabiliriz. Buton basılı mı, sensörden veri geliyor mu gibi durumlarda kullanılır.
  • INPUT_PULLUP: Dahili bir "pull-up" direncini etkinleştirir. Bu direnç, pini varsayılan olarak HIGH seviyesinde tutar ve dışarıdan bir sinyal geldiğinde LOW seviyesine düşmesini sağlar. Özellikle buton bağlantılarında harici direnç kullanımını ortadan kaldırarak bağlantıları basitleştirir.
const int LED_PIN = 13; // LED'in bağlı olduğu pin numarası
const int BUTON_PIN = 2; // Butonun bağlı olduğu pin numarası

void setup() {
  pinMode(LED_PIN, OUTPUT);      // LED_PIN'i çıkış olarak ayarla
  pinMode(BUTON_PIN, INPUT_PULLUP); // BUTON_PIN'i dahili pull-up direnci ile giriş olarak ayarla
}

void loop() {
  // Loop kısmı projenize göre doldurulur
}

Dijital Pin İşlemleri: digitalWrite() ve digitalRead()

Dijital pinler, sadece iki durumu (HIGH veya LOW) temsil eden sinyallerle çalışır. HIGH genellikle 5 volt (açık), LOW ise 0 volt (kapalı) anlamına gelir.

  • digitalWrite(pin, durum): Bir dijital çıkış pinine HIGH veya LOW değeri yazar.
  • digitalRead(pin): Bir dijital giriş pininin durumunu (HIGH veya LOW) okur ve bu değeri döndürür.
const int LED_PIN = 13;
const int BUTON_PIN = 2;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTON_PIN, INPUT_PULLUP); // Buton için pull-up kullanıyoruz
}

void loop() {
  int butonDurumu = digitalRead(BUTON_PIN); // Butonun durumunu oku

  if (butonDurumu == LOW) { // Buton basılıysa (pull-up kullanıldığında basıldığında LOW olur)
    digitalWrite(LED_PIN, HIGH); // LED'i yak
  } else {
    digitalWrite(LED_PIN, LOW);  // LED'i söndür
  }
}

Analog Pin İşlemleri: analogWrite() ve analogRead()

Arduino'da analog pinler, dijital pinlerin aksine sadece HIGH veya LOW değil, belirli bir aralıktaki çeşitli değerleri okumamıza veya yazmamıza olanak tanır. Bu sayede bir LED'in parlaklığını ayarlamak veya bir sensörden hassas okumalar almak gibi işlemleri yapabiliriz.

  • analogWrite(pin, değer): PWM (Pulse-Width Modulation) destekli bir dijital pine (Arduino Uno'da ~ işareti olan pinler: 3, 5, 6, 9, 10, 11) 0 ile 255 arasında bir değer yazarak analog benzeri bir çıkış sağlar. 0 tamamen kapalı, 255 ise tamamen açık anlamına gelir.
  • analogRead(pin): Bir analog giriş pininden 0 ile 1023 arasında bir değer okur. Örneğin, A0 analog pini 0 ile 5V arasındaki voltajı 1024 farklı seviyeye bölerek (0-1023) bize bir değer döndürür.
const int POT_PIN = A0; // Potansiyometrenin bağlı olduğu analog pin
const int LED_PWM_PIN = 9; // Parlaklığını ayarlayacağımız LED'in bağlı olduğu PWM pini

void setup() {
  pinMode(LED_PWM_PIN, OUTPUT); // PWM pini çıkış olarak ayarlanır
}

void loop() {
  int potDegeri = analogRead(POT_PIN); // Potansiyometreden 0-1023 arası değer oku
  
  // Bu değeri LED parlaklığı için 0-255 aralığına dönüştür
  int parlaklik = map(potDegeri, 0, 1023, 0, 255); 
  
  analogWrite(LED_PWM_PIN, parlaklik); // LED'in parlaklığını ayarla
  delay(10); // Küçük bir gecikme
}

Zaman Tabanlı Sinyal Ölçümleri: pulseIn()

Bazı sensörler (örneğin ultrasonik mesafe sensörleri), sinyallerin HIGH veya LOW kalma sürelerini ölçerek çalışır. pulseIn() fonksiyonu, belirli bir pindeki sinyalin belirtilen durumda (HIGH veya LOW) ne kadar süre kaldığını mikrosaniye cinsinden döndürür.

  • pulseIn(pin, değer, zamanAşımı): Belirtilen pin'deki sinyalin, değer (HIGH/LOW) olma durumunun süresini döndürür. zamanAşımı (isteğe bağlı) ise, sinyal beklentisinin maksimum süresini belirler.
const int TRIG_PIN = 9; // Ultrasonik sensörün tetik pini
const int ECHO_PIN = 10; // Ultrasonik sensörün yankı pini

void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}

void loop() {
  // Tetik pininden kısa bir pulse gönder
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // Yankı pininden gelen pulse süresini ölç
  long sure = pulseIn(ECHO_PIN, HIGH);

  // Sesin havada yayılma hızına göre mesafeyi hesapla (cm)
  // (Ses hızı 340 m/s = 0.034 cm/mikrosaniye. Gidiş-dönüş olduğu için 2'ye bölünür.)
  long mesafe = sure * 0.034 / 2; 

  Serial.print("Mesafe: ");
  Serial.println(mesafe);
  delay(100);
}

Servo Motor Kontrolü İçin Özel Bir Not

Servo motorlar, genellikle belirli bir açıya dönmek için kullanılırlar. Arduino'da servo motor kontrolü için ayrı bir kütüphane (Servo.h) bulunur, ancak mantığı PWM sinyalleri üzerine kuruludur. Arduino'nun analog pinlerinin 0-1023 değer aralığına sahip olması ve bir servo motorun genellikle 0-180 derece arasında dönmesi nedeniyle, bu değerler arasında bir oranlama yapmak gerekir. Basit bir hesaplama ile:

Dönüş Oranı = Servo Motor Toplam Dönüş Açısı / Arduino Analog Pin Sinyal Sayısı = $180 / 1024 \approx 0.175$ derece/birim.

Ancak, Servo kütüphanesi bu dönüşü sizin için otomatik olarak yapar. Sadece servo.write(açı) şeklinde derece cinsinden değeri vermeniz yeterlidir.

Arduino'da pin işlemleri, projelerinizin donanımla nasıl etkileşim kurduğunu anlamanın anahtarıdır. Dijital ve analog pinleri doğru bir şekilde yönetmek, basit bir LED yakma işleminden karmaşık robotik sistemlere kadar her türlü projenin temelini oluşturur. Şimdi öğrendiğiniz bu bilgileri kullanarak kendi projelerinize başlayabilirsiniz!

Webkolog'u takipte kalın!

Hepinize bol kodlu ve başarılı projeler dilerim!

0 yorum:

Yorum Gönder