Herkese Merhaba,
Sizlere Arduino 'ya bir infrared alıcı bağlamayı, kumanda ile sinyal göndermeyi ve aldığımız sinyali Arduino'da yorumlamayı anlatacağım. Burada alıcı olarak VS1838B Infrared Receiver Module kullandım. Bu kızılötesi algılayıcısını alırken buna uygun kumandayı da yanında bulabilirsiniz. Bende kumandasıyla birlikte mevcuttu. ben uygulamayı anlatmak için kapı açma kapama gibi bir konu oluşturdum. kumandadan 1 tuşuna basınca kapı açılsın (servo motor 90 derecelik açı yapsın ve led yansın), 2 tuşuna basıncada kapansın (servo motor 0 dereceye dönsün ve led sönsün).
Aşağıda bulunan resimde kullandığımız alıcıların bacaklarını gösteren bir datasheet i bulunmaktadır. alıcının sol bacağından kumandadan gönderilen 2 bitlik sinyaller değerini okuyacağız.
Kullanılan Malzemeler :
1- Arduino Uno R3
2- Servo Motor
3- Kızılötesi Alıcı (IR Reciever)
4- Kızılötesi Kumanda (Remote controller)
5- Led
6- Direnç
Devre Şeması :
Kod Paylaşımına geçmeden önce bir bilgi daha vermem gerekiyor. Kullandığımız Arduino IDE programında Kızıl Ötesi algılayıcının kütüphanesi(IRRemote.h) bulunamamaktadır. Bunun için bu kütüphaneyi Arduino IDE mize eklememiz gerekiyor. Bu derste kütüphane eklemeyi de görmüş oluyoruz. Öncelikle buradan kütüphane için gerekli olan dosyaları indiriyoruz. Dosyaları zip ten çıkardıktan sonra Arduino IDE'nin olduğu klasördeki libraries klasörünün içerisine kopyalıyoruz. İşte eklemiş olduk 🙂 Arduino IDE Programını açtığımızda Sketch > Import Library > bölümüne baktığınızda kütüphanenin eklenmiş olduğunu görürsünüz. Şimdi Kodlara geçebiliriz.
Arduino Kodları:
#include <IRremote.h> // kızıl ötesi alıcı için gerekli olan kütüphane
#include <Servo.h> // kapıyı açma kapama için kullandığımız servo motoru kullanabilmek için gerekli olan kütüphane
Servo myservomotor; // sınıfın bir örneğini aldık
int INFRARED_PIN = 2; // Arduino nun 2 nolu pini alıcının girişi olarak belirledik
int LED_PIN = 10; //Arduino nun 10 nolu pini led için çıkış belirledik
IRrecv irrecv(INFRARED_PIN); // belirlediğimiz 2 nolu pini kızılötesi alıcıdan değerleri oku dedik.
decode_results results; // ** results değerinde kumandadan bir tuşa bastığımızda alıcının algıladığı değeri okuyacağız. **
void setup()
{
Serial.begin(9600); // saniyede 9600 defa okuma işlemi yap.
irrecv.enableIRIn(); // alıcıdan değer okumaya başla.
myservomotor.attach(8); // Arduinonun 8. pinini servo motor için çıkış yaptık.
myservomotor.write(0); // başlangıçta açısını 0(sıfır) a çektik. (Kapı Kapalı durumu)
}
void loop() {
if (irrecv.decode(&results)) { // Eğer bir değer geldiyse
Serial.println(results.value); // Değeri serial monitöre yansıt. Buradan basılan her tuşun ürettiği değeri görebiliriz. Böylece diğer değerleride if ya da switch case ye bağlayıp çeşitli komutla üretebilirsiniz.
irrecv.resume(); // Sonraki değeri alamaya devam et.
}
// Kumandanın 1 nolu tuşu 167241175 değerinde bir değer ürettiği için gelen değer bu değere eşit mi diyoruz.
// Kumanda direk alıcıyı gördüğü yerde bu değeri üretir. alıcı ile kumandanın vericisi birbiriniz görmesede bir değer üretir ama bunlar sürekli değişir.
// Direk gördüğünde ise tek bir değer üretir. Biz bu değeri baz alıyoruz. Farklı değerler üretmesiniz sebebibe gelen ışık dalgalarında bozulmalar olmasıdır.
if(16724175==results.value)
{
Serial.println("1"); // 1 tuşuna basıldıysa ekrana 1 yazdır.
digitalWrite ( LED_PIN , HIGH ); // led i yak
myservomotor.write(90); // Servo motoru 90 derecelik açı yap. (kapıyı aç)
results.value=0; // Kumandaya basıldığında algılanan değer results.value de kalır. sürekli aynı değer okunmaya devam etmesin diye o(sıfıra) eşitliyoruz. bunu yapmazsak serial monitörde hep 16724175 değerini bastığını görürsünüz.
}
else if(16718055==results.value) //eğer 2 tuşuna basıldıysa
{
Serial.println("2"); // 2 tuşuna basıldıysa ekrana 2 yazdır.
digitalWrite ( LED_PIN , LOW ); // led i söndür
myservomotor.write(0); // Servo motoru 0. derece açıya çek. (kapıyı kapat)
results.value=0;
}
}