Nghịch với Arduino: Đa năng hóa remote TV - Phần 2
Bài đăng này đã không được cập nhật trong 3 năm
Ở phần trước mình đã giới thiệu sơ lược về lý thuyết để đa năng hóa remote TV, phần này mình sẽ bắt tay vào thực hiện luôn (hehe)
Linh kiện
Arduino Uno R3
Remote Loại gì cũng được
Relay 5v, 5 chân
Rơ-le là một loại linh kiện điện tử thụ động rất hay gặp trong các ứng dụng thực tế. Khi bạn gặp các vấn đề liên quan đến công suất và cần sự ổn định cao, ngoài ra có thể dễ dàng bảo trì, thì rơ-le chính là cái bạn cần tìm. Rơ-le là một công tắc (khóa K). Nhưng khác với công tắc ở một chỗ cơ bản, rơ-le được kích hoạt bằng điện thay vì dùng tay người. Chính vì lẽ đó, rơ-le được dùng làm công tắc điện tử! Vì rơ-le là một công tắc nên nó có 2 trạng thái: đóng và mở.
LED thu hồng ngoại T1838
Các tính năng: ● Thiết kế nhỏ gọn ● góc rộng và khoảng cách xa ● có thể chịu được tình tiết tăng nặng ánh sáng môi trường xung quanh ● hoạt động điện áp thấp
Xây dựng chương trình điều khiển
Đọc tín hiệu từ Remote
Arduino hổ trợ thư viện IR remote, có thể tải về tại địa chỉ https://github.com/shirriff/Arduino-IRremote Sau khi tải thư viện về, mở cửa sổ Arduino, chọn Sketch--->Import Library...---> Add Library....sau đó chọn file .zip vừa tải về để có thể sử dụng thư viện.
Mục đích của việc đọc tín hiệu là giải mã các tín hiệu gửi tới từ Remote tương ứng với các phím thành mã HEX
Chương trình đọc tín hiệu từ Remote:
#include <IRremote.h> // thư viện hỗ trợ IR remote
const int receiverPin = 8; // chân digital 8 dùng để đọc tín hiệu
IRrecv irrecv(receiverPin); // tạo đối tượng IRrecv mới
decode_results results;// lưu giữ kết quả giải mã tín hiệu
void setup()
{
Serial.begin(9600);// serial baudrate 9600
irrecv.enableIRIn(); // start the IR receiver
}
void loop()
{
if (irrecv.decode(&results)) // nếu nhận được tín hiệu
{
Serial.println(results.value, HEX); // in ra Serial Monitor
delay(200);
irrecv.resume(); // nhận giá trị tiếp theo
}
}
Sau khi upload đoạn code trên, mở cửa sổ Serial và bấm các nút của remote, tùy loại remote sẽ có giá trị trả về khác nhau
Đây là mã HEX của tín hiệu gửi từ Remote Car Mp3, tương ứng với các phím số từ 0 đến 9
Chương trình điều khiển
Mạch mô phỏng
Chương trình chính:
#include <IRremote.h> // thư viện hỗ trợ IR remote
const int receiverPin = 8; // chân digital 8 dùng để đọc tín hiệu
IRrecv irrecv(receiverPin); // tạo đối tượng IRrecv mới
decode_results results;// lưu giữ kết quả giải mã tín hiệu
const int C1 = 7; const int L1 = 13; // Đầu ra 1
const int C2 = 6; const int L2 = 12; // Đầu ra 2
const int C3 = 5; const int L3 = 11; // Đầu ra 3
const int C4 = 4; const int L4 = 10; // Đầu ra 4
const int C5 = 3; const int L5 = 9; // Đầu ra 5
/* trạng thái của các đầu ra*/
boolean stateC1 = false; boolean stateC2 = false;
boolean stateC3 = false; boolean stateC4 = false;
boolean stateC5 = false;
/* trạng thái của các Leds*/
boolean stateL1 = false; boolean stateL2 = false;
boolean stateL3 = false; boolean stateL4 = false;
boolean stateL5 = false;
void setup()
{
Serial.begin(9600);// serial
irrecv.enableIRIn(); // start the IR receiver
pinMode(C1, OUTPUT); pinMode(C2, OUTPUT);
pinMode(C3, OUTPUT); pinMode(C4, OUTPUT);
pinMode(C5, OUTPUT); pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT); pinMode(L3, OUTPUT);
pinMode(L4, OUTPUT); pinMode(L5, OUTPUT);
}
// translate IR signals
void translateIR(){
switch(results.value){
case 0xFF30CF:
stateC1 = !stateC1; digitalWrite(C1, stateC1); //PHÍM 1
stateL1 = !stateL1; digitalWrite(L1, stateL1);
break;
case 0xFF18E7:
stateC2 = !stateC2; digitalWrite(C2, stateC2); //PHÍM 2
stateL2 = !stateL2; digitalWrite(L2, stateL2);
break;
case 0xFF7A85:
stateC3 = !stateC3; digitalWrite(C3, stateC3); //PHÍM 3
stateL3 = !stateL3; digitalWrite(L3, stateL3);
break;
case 0xFF10EF:
stateC4 = !stateC4; digitalWrite(C4, stateC4); //PHÍM 4
stateL4 = !stateL4; digitalWrite(L4, stateL4);
break;
case 0xFF38C7:
stateC5 = !stateC5; digitalWrite(C5, stateC5); //PHÍM 5
stateL5 = !stateL5; digitalWrite(L5, stateL5);
break;
// PHÍM 0 TẮT TẤT CẢ
case 0xFF6897:
stateC1 = stateC2 = stateC3 = stateC4 = stateC5 = false;
stateL1 = stateL2 = stateL3 = stateL4 = stateL5 = false;
digitalWrite(C1, 0); digitalWrite(C2, 0);
digitalWrite(C3, 0); digitalWrite(C4, 0);
digitalWrite(C5, 0); digitalWrite(L1, 0);
digitalWrite(L2, 0); digitalWrite(L3, 0);
digitalWrite(L4, 0); digitalWrite(L5, 0);
break;
//PHÍM 9 MỞ TẤT CẢ
case 0xFF52AD:
stateC1 = stateC2 = stateC3 = stateC4 = stateC5 = true;
stateL1 = stateL2 = stateL3 = stateL4 = stateL5 = true;
digitalWrite(C1, 1); digitalWrite(C2, 1);
digitalWrite(C3, 1); digitalWrite(C4, 1);
digitalWrite(C5, 1); digitalWrite(L1, 1);
digitalWrite(L2, 1); digitalWrite(L3, 1);
digitalWrite(L4, 1); digitalWrite(L5, 1);
break;
}}
void loop(){
if (irrecv.decode(&results)){ // nếu nhận được tín hiệu
translateIR();
Serial.println(results.value, HEX);
delay(100);
irrecv.resume(); // nhận giá trị tiếp theo
}
}
Kết luận
Sản phẩm “Hộp công tắc điều khiển từ xa” hoạt động giống như một công tắc, nhưng thay vì phải đến tận nơi để tắt/bật các thiệt bị điện, chúng ta có thể sữ dụng một chiếc Remote để điều khiển từ xa. Mỗi thiết bị điện cần điều khiển tương ứng với mỗi phím bấm trên Remote.
Trên đây mình đã trình bày xong các bước để đa năng hóa remote tv, tuy nhiên đây chỉ là nghịch cơ bản với Arduino, các bạn có thể nâng cấp bằng cách thêm các cảm biến để tăng tính tự động, có thể sữ dụng smartphone để điều khiển.....
Mr.Nara
All rights reserved