Module IR1838 và ứng dụng điều khiển cửa cuốn bằng remote với Arduino

 Bài trước:  Điều khiển led bằng remote 



1. Giới thiệu về Module IR 1838


Module IR 1838 có ba chân theo thứ tự là (-) (+) (Signal) như hình được dùng để thu nhận tín hiệu hồng ngoại từ các nguồn phát 38khz như remote,.... Thông thường chân (+) được nối với chân 5V trong Arduino, chân (-) nối với GND và chân (S) nối với chân digital.

Để điều khiển IR1838 chúng ta cần cài đặt thư viện IRRemote (Download tại đây) .

2. Sơ đồ kết nối với Arduino.



Trong sơ đồ trên IR kết nối với Arduino như sau:
    Arduino                                     IR1838
        5V                                              +
     GND                                             -
        8                                                 S
Ngoài ra còn có dirver L298N điều khiển động cơ DC với chân In3 và In4 nối với chân 9 và 10 của Arduino. Chân D0 của cảm biến mưa nối với chân 7 của Arduino

3. Code

a. Trước hết chúng ta cần đoạn code để đọc các giá trị nút nhấn trên một Remote cụ thể để từ các giá trị đó chúng ta xử lý theo ý đò của mình.

Đoạn code sau đây sẽ cho phép đọc và in ra Serial giá trị một nút nhân trên Remote.

#include<IRremote.h> Khai báo thư viện IR
const int chanRemote=8; //Chân IR nối với chân 8
IRrecv irrecv(chanRemote); //khai báo 
decode_results results; //Khai báo biến nhận giá trị trả về
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  irrecv.enableIRIn(); //Cho phép nhận tín hiệu
}

void loop() {
  // put your main code here, to run repeatedly:
  if(irrecv.decode(&results)) //Nếu có kết quả trả về
  {
    Serial.println(results.value, HEX); //In giá trị nút nhấn kiểu HEX
    delay(200);
    irrecv.resume(); //Chờ nhận tín hiệu tiếp theo
  }
}

Giải thích code:

Với đoạn code trên mình dùng remote hồng ngoại như sau:

Khi nhấn trước cảm biến thu hồng ngoại sẽ có mã như sau:
    Play --> FFC23D,    Next --> FF02FD,   PRE --> FF22DD,   V+ --> FFA857,   V- -->FFE01F,...
Khi đã có được mã cần thiết của các nút bấm chúng ta có chương trình điều khiển cửa cuốn như sau:
#include<IRremote.h>
const int chanRemote=8; //Chân IR1838
IRrecv irrecv(chanRemote); 
decode_results results; //Nhận kết quả trả về

int in3=9; //Chân In3 trên L298N
int in4=10; //Chân In4 trên L298N
int ctht1=2; //Công tắc hành trình 1 nối với chân 2
int ctht2=3; //Công tắc hành trình 2 nối với chan 3
int cbmua=7; // CB mưa nối với chân 7
void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(ctht1,INPUT);
  pinMode(ctht2,INPUT);
  pinMode(cbmua,INPUT);
}

void loop() {
  
    int trangthaict1=digitalRead(ctht1);
    int trangthaict2=digitalRead(ctht2);
    int thcbmua=digitalRead(cbmua);
    Serial.print(trangthaict1);
    Serial.println(trangthaict2);
    if(thcbmua==1) //Dang khong mua
    {
     if(irrecv.decode(&results))
      {
        if (results.value==0xFF18E7 )//Nhấn lên
        { 
          while(trangthaict1!=1 ) //Công tắc hành trình trên chưa chạm thì chạy lên đến khi chạm
          {                       //Nếu muốn dừng giữa chừng thì không dùng while mà dùng if
            len();
            trangthaict1=digitalRead(ctht1);
          }
          dung();
        }
        else if (results.value==0xFF4AB5 )//Nhấn nút xuống
        { 
          while(trangthaict2!=1 ) //Công tắc hành trình dưới chưa chạm
          {
            xuong();
            trangthaict2=digitalRead(ctht2);
          }
          dung();
        }
        else {dung();}
      irrecv.resume();
    }
    }
    else //Co Mua
    {
      if(trangthaict2!=1)//Nếu có mưa cà cửa đang mở thì chạy xuống
    {
      xuong();
      }
      else {dung();}
    }
}
void len(){
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  }
 void xuong(){
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);
  }
 void dung(){
  
  digitalWrite(in3,LOW);
  digitalWrite(in4,LOW);
  }

Giải thích: Trong đoạn code trên hệ thống sẽ hoạt đông như sau.

  • Lúc đầu đọc trạng thái của 2 công tăc hành trình và cảm biến mưa.
  • Nếu không có mưa:
    • Nếu nút lên được nhấn thì kiểm tra tiếp công tắc hành trình trên, nếu chưa chạm tức khác 1 thì cho chạy lên đến khi công tắc hành trình trên bằng 1 thì dừng. Nếu các bạn muốn nhấn giữ nút nhấn khi buôn ra thì dừng các bạn không nên dùng vòng while ở đây mà dùng if như sau:
#include<IRremote.h>
const int chanRemote=8; //Chân IR1838
IRrecv irrecv(chanRemote); 
decode_results results; //Nhận kết quả trả về

int in3=9; //Chân In3 trên L298N
int in4=10; //Chân In4 trên L298N
int ctht1=2; //Công tắc hành trình 1 nối với chân 2
int ctht2=3; //Công tắc hành trình 2 nối với chan 3
int cbmua=7; // CB mưa nối với chân 7
void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(ctht1,INPUT);
  pinMode(ctht2,INPUT);
  pinMode(cbmua,INPUT);
}

void loop() {
  
    int trangthaict1=digitalRead(ctht1);
    int trangthaict2=digitalRead(ctht2);
    int thcbmua=digitalRead(cbmua);
    Serial.print(trangthaict1);
    Serial.println(trangthaict2);
    if(thcbmua==1) //Dang khong mua
    {
     if(irrecv.decode(&results))
      {
        if (results.value==0xFF18E7 )//Nhấn lên
        { 
          if(trangthaict1!=1 ) //Công tắc hành trình trên chưa chạm thì chạy lên đến khi chạm
          {                       //Nếu muốn dừng giữa chừng thì không dùng while mà dùng if
            len();
            //trangthaict1=digitalRead(ctht1);
          }else {dung();}
        }
        else if (results.value==0xFF4AB5 )//Nhấn nút xuống
        { 
          if(trangthaict2!=1 ) //Công tắc hành trình dưới chưa chạm
          {
            xuong();
            //trangthaict2=digitalRead(ctht2);
          }
          else {dung();}
        }
        else {dung();}
      irrecv.resume();
    }
    }
    else //Co Mua
    {
      if(trangthaict2!=1)//Nếu có mưa cà cửa đang mở thì chạy xuống
    {
      xuong();
      }
      else {dung();}
    }
}
void len(){
  digitalWrite(in3,HIGH);
  digitalWrite(in4,LOW);
  }
 void xuong(){
  digitalWrite(in3,LOW);
  digitalWrite(in4,HIGH);
  }
 void dung(){
  
  digitalWrite(in3,LOW);
  digitalWrite(in4,LOW);
  }
    • Ngược lại nếu nút xuống được nhấn thì kiểm tra công tắc hành trình dưới nếu chưa chạm thì chạy xuống ngược lại thì dừng.
    • Trong trường hợp có mưa thì chương trình sẽ kiển tra công tắc dưới xem có bằng 1 không nếu chưa bằng 1 có nghĩa là cửa đang mở nên cho cửa chạy xuống.
    • Bên dưới là các hàm len xuong dung để điều khiển động cơ.
Trên đây tôi đã giới thiệu với các bạn một module nhận tín hiệu hồng ngoại là IR1838 và ứng dụng module này để điều khiển cửa cuốn kết hợp với cảm biến mưa. Như vậy là các bạn có thể an tâm đi uống cà phê với bạn rồi he. Trời mưa đã có Arduino lo, hệ thống sẽ tự đóng lại và bạn sẽ không có một bộ đồ nào bị ướt do trời mưa.

Các bạn hoàn toàn có thể ứng dụng để bật tắt đèn hoặc các thiết bị trong nhà thông qua relay (Sẽ giới thiệu trong các bài sau).
Bài tiếp theo tôi sẽ trình bày cách sử dụng remote và IR1838 để điều khiển xe 3 bánh cũng với module L298N các bạn nhé.
Các bạn có thể xem chi tiết tại Video sau:


Download:
CODE: Lấy mã Remote
            Thư viện
Bài tiếp theo

Nhận xét, góp ý, thắc mắc, câu hỏi của bạn

أحدث أقدم