Ev otomasyonu ve uzaktan kontrol sistemleri, günümüzde hayatımızı kolaylaştıran önemli teknolojilerdir. Bu projede, basit bir Arduino devresi ile uzaktan kumandalı bir kapı kilidi mekanizması yapacağız. Bir IR (kızılötesi) kumanda kullanarak bir servo motoru kontrol edecek ve böylece küçük bir kapıyı veya kutuyu uzaktan açıp kapatabileceksiniz. Hem elektronik hem de mekanik bir projenin birleşimini deneyimleyeceksiniz!
Bu projeyi hayata geçirmek için ihtiyacın olan tüm malzemeler aşağıda listelenmiştir. Çoğu bileşen elektronik hobi kitlerinde bulunur.
Devre bağlantılarını doğru yapmak, projenin başarılı bir şekilde çalışmasını sağlar. Özellikle IR alıcının pin sıralamasına dikkat edin.
1. IR Alıcı Modülü Bağlantıları:
2. Servo Motor (SG90) Bağlantıları:
3. (Opsiyonel) Buton Bağlantısı:
4. Genel Güç Bağlantısı:
Devre bağlantılarını tamamladıktan sonra sıra projenin beynini oluşturan koda geldi. Arduino IDE'yi açın ve aşağıdaki kodları kopyalayıp yapıştırın. Bu kod, IR kumandadan gelen sinyalleri okuyacak ve belirlenen tuşlara basıldığında servo motoru hareket ettirerek kilidi açıp kapatacaktır.
Önemli Not: Bu kod "IRremote" ve "Servo" kütüphanelerini gerektirir. "IRremote" kütüphanesini kurmak için Arduino IDE'de Taslak > Kütüphaneleri Dahil Et > Kütüphaneleri Yönet yolunu izleyip "IRremote" aratarak kurabilirsiniz. "Servo" kütüphanesi genellikle Arduino IDE ile birlikte gelir.
Önce Kumanda Tuş Kodlarını Öğrenelim:
Her IR kumandanın her tuşu, benzersiz bir onaltılık (hex) kod gönderir. Kendi kumandanızın tuş kodlarını öğrenmek için önce aşağıdaki "IR Kumanda Kodu Öğrenme" kodunu yükleyin, Seri Monitör'ü açın ve kumandanızın tuşlarına basın. Gelen kodları not alın.
C++
#include <IRremote.h>
const int RECV_PIN = 11; // IR alıcı sinyal pini
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // IR alıcıyı başlat
Serial.println("IR Kumanda Kodu Öğrenme Modu Basın Tuşlara!");
}
void loop() {
if (irrecv.decode(&results)) {
Serial.print("IR Kodu: ");
Serial.print(results.value, HEX); // Kodu HEX formatında yazdır
Serial.print(" (");
Serial.print(results.bits);
Serial.println(" bit)");
irrecv.resume(); // Bir sonraki değeri beklemeye devam et
}
delay(100);
}
Kumandanızdan "Kilit Açma" ve "Kilit Kapama" için kullanmak istediğiniz tuşlara basarak Seri Monitör'den çıkan HEX kodlarını bir yere not alın. Örneğin, "Kilit Açma" tuşu için FFC23D ve "Kilit Kapama" tuşu için FFA25D gibi kodlar görebilirsiniz.
Servo Kontrollü Kapı Kilidi Kodu:
Kumanda kodlarını öğrendikten sonra, aşağıdaki kilitleme koduyla devam edelim. Not aldığınız kodları IR_BUTTON_UNLOCK ve IR_BUTTON_LOCK değişkenlerine girin.
C++
#include <IRremote.h>
#include <Servo.h>
// Pin Tanımları
const int RECV_PIN = 11; // IR alıcı sinyal pini
const int SERVO_PIN = 9; // Servo motorun PWM pini
const int BUTTON_PIN = 2; // Fiziksel buton pini (opsiyonel)
// Kendi kumandanızın tuş kodlarını buraya girin (ÖĞRENME KODU İLE BULDUĞUNUZ DEĞERLERİ)
#define IR_BUTTON_UNLOCK 0xFFC23D // Örnek: Kumandadaki "Açma" tuşu
#define IR_BUTTON_LOCK 0xFFE01F // Örnek: Kumandadaki "Kapama" tuşu
// Servo pozisyonları
const int LOCKED_POS = 0; // Kilitli pozisyon (derece)
const int UNLOCKED_POS = 90; // Kilit açık pozisyon (derece) - servo motorunuzun mekanik yapısına göre ayarlayın
// Nesne tanımları
IRrecv irrecv(RECV_PIN);
decode_results results;
Servo myServo;
// Durum değişkenleri
bool isLocked = true; // Başlangıçta kilitli
int buttonState = 0;
int lastButtonState = 0;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // IR alıcıyı başlat
myServo.attach(SERVO_PIN); // Servo motoru belirtilen pine bağla
pinMode(BUTTON_PIN, INPUT); // Buton pinini giriş olarak ayarla (opsiyonel)
// Başlangıçta kilitle
myServo.write(LOCKED_POS);
Serial.println("Kapı Kilidi Hazır! Başlangıçta Kilitli.");
}
void loop() {
// IR Kumanda Sinyallerini Kontrol Et
if (irrecv.decode(&results)) {
Serial.print("Algılanan IR Kodu: ");
Serial.println(results.value, HEX);
if (results.value == IR_BUTTON_UNLOCK && isLocked) {
// Kilit açma tuşuna basıldıysa ve kilitliyse
myServo.write(UNLOCKED_POS);
isLocked = false;
Serial.println("Kilit Açıldı!");
delay(500); // Servo hareketini tamamlaması için bekle
} else if (results.value == IR_BUTTON_LOCK && !isLocked) {
// Kilit kapama tuşuna basıldıysa ve kilit açık ise
myServo.write(LOCKED_POS);
isLocked = true;
Serial.println("Kilit Kapandı!");
delay(500); // Servo hareketini tamamlaması için bekle
}
irrecv.resume(); // Bir sonraki değeri beklemeye devam et
}
// (Opsiyonel) Fiziksel Butonu Kontrol Et
buttonState = digitalRead(BUTTON_PIN);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) { // Butona basıldıysa
if (isLocked) {
myServo.write(UNLOCKED_POS);
isLocked = false;
Serial.println("Buton ile Kilit Açıldı!");
} else {
myServo.write(LOCKED_POS);
isLocked = true;
Serial.println("Buton ile Kilit Kapandı!");
}
delay(200); // Buton sıçramasını engellemek için
}
lastButtonState = buttonState;
}
}
Önemli: LOCKED_POS ve UNLOCKED_POS değerlerini, servo motorunuzun mekanik kilit mekanizmanızla uyumlu olacak şekilde ayarlamanız gerekebilir. Servonuzu 0 ile 180 derece arasında manuel olarak döndürerek en uygun kilitli ve açık pozisyonları bulun.
Bu projede, IR alıcı modülü uzaktan kumandadan gelen sinyalleri yakalar. Arduino, "IRremote" kütüphanesi sayesinde bu sinyalleri çözerek hangi tuşa basıldığını temsil eden HEX kodunu alır. Kodumuz, algılanan bu HEX kodu önceden belirlediğimiz kilit açma veya kapama tuş kodlarıyla karşılaştırır. Eşleşme durumunda, "Servo" kütüphanesi aracılığıyla servo motor belirlenen açılara hareket ettirilir ve kilit mekanizması çalışır.
Bu projeyi daha da geliştirmek isterseniz:
Bu proje, uzaktan kontrol ve mekanik hareketin birleşimini anlamak için harika bir adımdır. Kendi güvenlik veya otomasyon ihtiyaçlarınıza göre projeyi daha da kişiselleştirebilirsiniz!