Điều khiển desktop (máy tính) từ xa bằng hồng ngoại - Dễ như trở bàn tay

I. MỞ ĐẦU

Thiết bị bạn cần đó là:

  • 1 máy tính (hiển nhiên rồi haha)
  • 1 arduino
  • 1 led thu hồng ngoại (Cái này có thể kiếm ở mấy cái tivi, đầu đĩa cũ, hỏng..)
  • 1 Remote

Bản chất là phát tín hiệu hồng ngoại, Led thu hồng ngoại nhận được tín hiệu rồi truyền đến Arduino, Arduino xử lý và truyền về máy tính thông qua giao thức Serial comport. Phần mềm lập trình trên máy tính (Bằng ngôn ngữ Autoit) sẽ nhận dữ liệu và điều khiển chuột và các lệnh theo ý định.

II. KẾT NỐI 

Các bạn kết nối IR LED với Arduino theo hình dưới đây nhé

Các bạn có thể dùng arduino nano hoặc promini cho thêm phần nhỏ gọn.

Về việc sử dụng IR LED đã có bài hướng dẫn chi tiết cách sử dụng của bác NTP_PRO mình xin phép không nhắc lại. Các bạn có thể vào đây để nghiên cứu về cách xử dụng IR LED nhé

III. LẬP TRÌNH ARDUINO

Phần này khá đơn giản

Trước tiên, các bạn cần xác định được mã của phím nhấn trên điều khiển

Để chắc chắn các bạn hiểu được được này, các bạn nên xem qua bài viết mình đã giới thiệu bên trên của bác NTP_PRO nói về cách xử dụng led thu hồng ngoại nhé

Để xác định được các mã của điều khiển là gì, các bạn sử dụng đoạn code sau:

#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
  }
}

Bật Serial monitor lên rồi bấm phím trên điều khiển, hướng về led hồng ngoại, các bạn có thể biết được mã của từng phím trên điều khiển. Sau đó gán các giá trị ấy vào các đoạn 

// case .......  trong đoạn code dưới đây
#include <IRremote.h>
#include <IRremoteInt.h>
int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600); // thiết lập baudrate là 9600
  irrecv.enableIRIn(); // Khởi tạo trạng thái nhận tín hiệu từ Led thu hồng ngoại
}

void loop() {
  if (irrecv.decode(&results)) {
 switch(results.value)
  {
    case 0xE0E006F9: // nếu nhận được giá trị là 0xE0E006F9
      Serial.print("up"); // truyền về máy tính kí tự "up"
        break;
         case 0xE0E08679: 
      Serial.print("down"); 
        break;
                 case 0xE0E0A659: 
      Serial.print("left"); 
        break;
                 case 0xE0E046B9: 
      Serial.print("right"); 
        break;
                 case 0xE0E016E9: 
      Serial.print("ml");
        break;
                    case 0xE0E01AE5: 
      Serial.print("mr"); 
      delay(1000);
        break;
  } 
    irrecv.resume();
  }
}

Điều đó có nghĩa là mỗi khi bạn nhấn nút trên điều khiển, nếu đúng với mã đã xác định sẵn trong chương trình thì arduino sẽ gửi về serial 1 ký tự up hoặc down, left, right...

ok! Như vậy đã xong phần lập trình cho arduino

Phần tiếp theo mình sử dụng ngôn ngữ lập trình Autoit, một loại ngôn ngữ lập trình cũng khá dễ tiếp cận. các bạn có thể tham khảo tại diễn đàn http://autoitvn.com/

#include 'CommMG.au3'
#NoTrayIcon
HotKeySet("+!d", "thoat") ;Shift-Alt-d

Global  $msg, $port ,$a
Global   $menu=0 , $menu1=0, $data, $chedo1=0, $chedo2=0
$a=InputBox("nhập cổng com"," ","","",50,50,@DesktopWidth/2-50,@DesktopHeight/2-50)

$resOpen = _CommSetPort($a, 1, 9600,8,0,1,0,0,0)
$port = _CommPortConnection()
$name =_ComGetPortNames("Com 1")
$tenport= StringReplace($port,"\\.\COM","Cổng đang kết nối: ")


While 1
    $pos = MouseGetPos()
  Global  $instr = _CommGetString()
	$data = $instr
   if $data = "left" Then
				 MouseMove($pos[0]-30,$pos[1],1)
	  EndIf
	  if $data = "right" Then
			 MouseMove($pos[0]+30,$pos[1],1)
	 EndIf
	  if $data = "up" Then
			 MouseMove($pos[0],$pos[1]-30,1)
	 EndIf
	if $data = "down" Then
			 MouseMove($pos[0],$pos[1]+30,1)
	 EndIf
	 if $data =  "ml" Then
	  MouseClick("left",$pos[0],$pos[1],1,1)
	  EndIf
	  if $data =  "mr" Then
	  MouseClick("right",$pos[0],$pos[1],1,1)
	  EndIf
WEnd



Func thoat()
    _Commcloseport(true)
	
Exit

EndFunc   ;==>Thoát


Toàn bộ phần mã nguồn của Autoit các bạn có thể down tại đây

Chương trình mình đã build và các bạn chỉ việc chạy, sau đó nhập cổng com của arduino vào là xong (Điều khiển bằng điều khiển tivi samsung, với các phím lên xuống, trái, phải) tại đây

Chúc các bạn thành công!

Những hình ảnh về dự án: 
lên
11 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

ST7565 và ESP8266 - Màn hình LCD bự chà bá chưa đến 100k cho thế giới IoT

Mình rất thích LCD ST7565 này, và đã đặt liền 4 con mà mỗi con quá rẻ có 20k. Nhưng khổ một điều, điện áp hoạt động và IO của LCD ST7565 có 3.3V. Bản thân mình lại không thích việc chơi điện trở để chơi LCD này với Arduino. Lý do đơn giản là phải hàn quá nhiều, mình lại lười crying. Hổm nay, mình đang làm loạt bài về ESP8266 và cũng phải gặp vấn đề điện trở để làm cầu phân áp khi giao tiếp giữa ESP8266 và Arduino.

lên
17 thành viên đã đánh giá bài viết này hữu ích.

Thư viện ST7565 trên Arduino Create - Thử nghiệm đầu tiên: Hoàn hảo!

Mình rất tự hào và hãnh diện, khi thư viện made in Việt Nam đầu tiên của Thái Sơn (Nick Chung) được mình tải lên tại Arduino Create với mục đích thử nghiệm việc biên dịch code online trên Arduino Create đã hoàn thành công việc của nó ngay trong lần thử đầu tiên. Qua bài viết này, mình xin hướng dẫn các bạn lập trình Arduino với Arduino Create thông qua việc làm một ví dụ mẫu về việc cài thư viện và sử dụng nó trên Arduino Create.

lên
7 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

ENERGIA -Bản sao của IDE Arduino

Các bạn đã khá quen thuộc với những bo mạch Arduino, IDE lập trình Arduino. Tuy nhiên khi nhìn thấy IDE này chắc hẳn các bạn sẽ không khỏi bất ngờ phiên bản IDE này là phiên bản nào? Câu trả lời: đó là IDE Energia, 1 thế giới khác gần như là 1 bản sao của Arduino.

Bài viết này mình xin giới thiệu tới các bạn 1 bản sao của Arduino

lên
20 thành viên đã đánh giá bài viết này hữu ích.

Nhận dạng giọng nói không cần module đắt tiền với Arudino - Sử dụng module cảm biến âm thanh

Hiện nay mạch nhận dạng giọng nói rất nhiều và phổ biến, tuy nhiên giá thành còn khá cao đối với học sinh sinh viên, đặc biệt là đội ngũ thích "chế cháo". Bài viết này mình xin giới thiệu tới các bạn cách để 1 mạch arduino có thể nhận dạng được giọng nói của bạn với 1 chiếc micro phone nhỏ.

lên
28 thành viên đã đánh giá bài viết này hữu ích.