Dùng điều khiển Tivi kết hợp với arduino để khiến thiết bị trong nhà hoạt động
Dùng điều khiển Tivi kết hợp với arduino để khiến thiết bị trong nhà hoạt động
I. Linh kiện và giới thiệu mô hình
1 board Arduino Uno
1 test board và nhiều dây cắm test board
Pin 9v,đế pin và jack kết nối pin với Arduino
1 remote TV bất kì hoặc remote có trong bộ KIT Arduino
1 hay nhiều relay 5v
Dựa vào số thiết bị bạn muốn điều khiển tương ứng với số relay
Tùy vào điều kiện mà ta sẽ chọn modul relay lắp sẵn hay relay và linh kiện riêng lẻ
Dưới đây là modul relay làm sẵn
Bên dưới là mạch relay riêng biệt có sử dụng 1 transitor c1815 và relay
1 mắt thu nhận hồng ngoại TSOP1738
Đã có bao giờ ban mơ ước với 1 chiếc remote cầm tay mà bạn có thể bật tắt tất cả các thiết bị như đèn, điều khiển quạt, máy bơm,… trong nhà. Ứng dụng đơn giản này sẽ giúp bạn thỏa mãn được ước muốn. Chỉ với chiếc remote TV cũ, 1 board Arduino và bộ thu nhận hồng ngoại là bạn đã có một thiết bị hữu dụng.
II. Sơ đồ toàn mạch và cách kết nối các linh kiện
Ở đây ta dùng 4 relay
III. Giải thích các linh kiện
Mắt nhận hồng ngoại TSOP1738
Là mắt thu nhận có thể nhận 1 sóng mang ở tần số 38Khz để đưa tín hiệu đã được mã hóa dưới dạng các xung có độ rộng khác nhau vào 1 chân digital được xem như là ngõ vào 1 tín hiệu để có thể đóng hoặc mở các chân digital khác dùng kích relay hoặc sáng led
Relay 5v
Được dùng để đóng ngắt gián tiếp các thiết bị điện xoay chiều 220v trở lên, cơ chế của nó là khi dòng điện đi qua cuộn dây sẽ đóng tiếp điểm thường đóng và mở tiếp điểm thường hở làm cho các thiết bị hoạt động, việc đóng ngắt relay được thực hiện không phải trực tiếp qua mức áp từ ngõ ra số của Arduino mà sử dụng 1 transitor như vài trò khóa đóng và mở khi có dòng điện kích vào chân C của trans
- Giới thiệu về chương trình
Ở đây ngoài, ta có thể viết chương trình theo nhiều cách, với nhiều ứng dụng khác nhau
Những bước đầu tiên là ta phải đọc tín hiệu từ remote và để làm được điều đó ta phải tải về thư viện của Arduino về IR hồng ngoại https://github.com/shirriff/Arduino-IRremote/ trong đây chứa thư viện hỗ trợ tất cả liên quan đến IR hồng ngoại. Ta kết nối như hình sau
#include <IRremote.h> // thưviệnhỗtrợ IR remote
constintreceiverPin = 8; // chân digital 8 dùngđểđọctínhiệu
IRrecvirrecv(receiverPin); // tạođốitượngIRrecvmới
decode_results results;// lưugiữkếtquảgiảimãtínhiệ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
}
}
Bạn sẽ nhập phần chương trình ở trên vào, chương trình này sẽ mã hóa tín hiệu thành 1 dãy hex và xuất ra serial
Sau đó bạn mở monitor ra và sẽ đọc được tín hiệu
Như thế này, sau khi đọc được mã hex đó bạn sẽ copy, sau đó đưa vào đoạn code
#include <IRremote.h>
constint RECV_PIN=11;
IRrecvirrecv(RECV_PIN);
decode_results results;
#define IN1 3
#define IN2 4
#define IN3 5
#define IN4 6
booli=false;
bool j=false;
bool k=false;
bool l=false;
bool m=false;
void setup()
{
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value,HEX);
delay(100);
/////////////////////////
if(results.value==0x40BD00FF)
{
i=!i;
digitalWrite(IN1, i);
}
////////////////////////
if(results.value==0x40BD807F)
{
j=!j;
digitalWrite(IN2, j);
// delay(200);
}
if(results.value==0x40BD40BF)
{
k=!k;
digitalWrite(IN3, k);
// delay(200);
}
//////////////////////////////
if(results.value==0x40BDC03F)
{
l=!l;
digitalWrite(IN4, l);
// delay(200);
}
//////////////////////
if(results.value==0x40BD28D7)
{
m=!m;
digitalWrite(IN1, m);
digitalWrite(IN2, m);
digitalWrite(IN3, m);
digitalWrite(IN4, m);
// delay(200);
}
irrecv.resume(); // Receive the next value
//delay(100);
}
}
Ở phần results.value==() bạn sẽ cho vào mã hex mà bạn chọn tùy theo nút nhất với cú pháp 0x mã hex, sau đó bạn sẽ đấu 4 led thử vào Arduino theo các chân đã chọn trên code là chân digital 2,3,4,5 và bấm vào 4 nút điều khiển 4 led ,ta sẽ thấy được led nào sáng theo ý mình muốn.
Ngoài ra nếu bạn muốn biến 1 chiếc quạt để bàn bình thường thành một chiếc quạt điều khiển từ xa thì ta có thể code theo 1 kiểu, trong code, ta mặc định theo 3 chân, là 3 chân số của quạt, theo 3 màu RED, GREEN, YELLOW
#include <IRremote.h> // thư viện hỗ trợ IR remote
constintreceiverPin = 8; // chân digital 8 dùng để đọc tín hiệu
IRrecvirrecv(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
constint RED = 7;
constint YELLOW = 6;
constint GREEN = 5;
booleanstateRED = false;
booleanstateYELLOW = false;
booleanstateGREEN = false;
void setup()
{
Serial.begin(9600);// serial
irrecv.enableIRIn(); // start the IR receiver
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
}
// translate IR signals
voidtranslateIR()
{
switch(results.value)
{
case 0xFF30CF: stateRED = !stateRED;
stateYELLOW = stateGREEN = false;
digitalWrite(YELLOW, 0);
digitalWrite(GREEN, 0);
digitalWrite(RED, stateRED);
break;
case 0xFF18E7: stateYELLOW = !stateYELLOW;
stateRED = stateGREEN = false;
digitalWrite(RED, 0);
digitalWrite(GREEN, 0);
digitalWrite(YELLOW, stateYELLOW);
break;
case 0xFF7A85: stateGREEN = !stateGREEN;
stateRED = stateYELLOW= false;
digitalWrite(RED, 0);
digitalWrite(YELLOW, 0);
digitalWrite(GREEN, stateGREEN);
break;
case 0xFFE21D: stateRED = stateYELLOW = stateGREEN = false;
digitalWrite(RED, 0);
digitalWrite(YELLOW, 0);
digitalWrite(GREEN, 0);
}
}
void loop()
{
if (irrecv.decode(&results)) // nếu nhận được tín hiệu
{
translateIR();
Serial.println(results.value, HEX);
delay(200);
irrecv.resume(); // nhận giá trị tiếp theo
}
}
Trong đây, khi t cho 1 số hoạt động thì các số khác dừng lại, tức là mỗi lần chỉ được 1 chân có mức logic ra, 3 chân tín hiệu ra là 3 chân digital 5,6,7