Want create site? Find Free WordPress Themes and plugins.

Hiện tại, hầu như nhà nào cũng có tivi, đầu đĩa, máy nghe nhạc hoặc dàn karaoke… Những thiết bị này luôn đi kèm với Remote hồng ngoại để chọn/chỉnh kênh. Hôm nay Shop Arduino sẽ có bài viết nhỏ về việc làm sao để hack cái điều khiển cùi bắp nhà bạn thành một cái điều khiển bá đạo dùng để điều khiển các ứng dụng Arduino từ xa.

Để tránh mất thời gian đọc cả bài để nắm nội dung, mình sẽ tóm tắt những kiến thức mà bạn sẽ biết trong bài này:

  1. Nguyên tắc hoạt động của mạch thu phát hồng ngoại
  2. Cách lắp một mạch thu hồng ngoại đơn giản với Arduino
  3. Cơ bản về thư viện IRremote, hỗ trợ giải mã tín hiệu hồng ngoại
  4. Cách “nhìn thấy” tia hồng ngoại từ remote
  5. Đọc giá trị một nút nhấn trên Remote
  6. Điều khiển Bật-Tắt một đèn LED

Và kiến thức trên sẽ giúp bạn phát triển một số dự án DIY như:

  1. Remote điều khiển robot Arduino hay các thiết bị điện khác trong nhà như quạt, đèn,… khi kết hợp với module relay.
  2. Làm thêm một bản sao mini cho remote ở nhà
  3. Tự làm điều khiển từ xa chương trình chơi nhạc và xem phim máy tính từ xa nhé ^^!

1. CHUẨN BỊ VẬT LIỆU & DỤNG CỤ

a. Phần cứng:

Cần chuẩn bị ít nhất:

  1. 1x Board mạch Arduino Uno (có thể thay thế bằng Arduino Nano / Pro Mini / Mega 2560…)
  2. 1x Breadboard (để gắn linh kiện)
  3. 1x IR Receiver 1838 hoặc 4838 (đây là linh kiện thu tín hiệu hồng ngoại)

Ngoài ra còn cần:

  • Dây nối mạch
  • Đèn LED

*** Đây là những linh kiện tối thiểu cần có để thực hiện dự án này. Nếu tra Google bạn sẽ thấy còn những sơ đồ mạch khác yêu cầu thêm điện trở mắc để giới hạn dòng, hoặc tụ điện để chống nhiễu tín hiệu. Do bài này chỉ hướng dẫn các bạn những thứ cơ bản nhất và hạn chế tối đa số linh kiện cần lắp để tránh rủi ro lắp sai và nạp chương trình xong mà mạch không thể chạy như hướng dẫn, nên mình chỉ đưa ra sơ đồ lắp cơ bản nhất. Các bạn cần tối ưu mạch thì giúp mình tra Google tiếp nhek.

b. Phần mềm:

Các bạn tải về link bên dưới:

LINK TẢI THƯ VIỆN VÀ CODE MẪU

***Mặc định, mình cũng sẽ xem như các bạn đang đọc bài viết này đã biết:

  • Arduino IDE là gì và cách sử dụng Arduino IDE để nạp chương trình cho board Arduino?
  • Serial Monitor là gì và cách sử dụng?
  • Cách cài đặt driver để máy tính nhận board Arduino?
  • Các bạn cũng nên đọc bài căn bản Bật tắt đèn LED bằng một nút nhấn để dễ hiểu bài này.

2. THÊM THƯ VIỆN IRremote VÀO THƯ VIỆN CỦA ARDUINO IDE

Bạn cần giải nén file mà bạn vừa tải về.

Trong thư mục “IR I’ble Package” đã giải nén có 1 thư mục con tên “IRremote”. Các bạn copy thư mục này và dán vào thư viện mở rộng của Arduino IDE, theo đường dẫn mặc định: This PC (tên máy tính của các bạn) >> Documents >> Arduino.

3. LẮP MẠCH ĐIỆN LÊN BREADBOARD

Các bạn lắp chính xác theo hình bên dưới nhé:

Mạch thu tín hiệu hồng ngoại IR
Mạch thu tín hiệu hồng ngoại IR

 

Nếu các bạn dùng Arduino Uno thì có thể không lắp điện trở và đèn LED cũng được vì mình sẽ tận dụng đèn LED được gắn sẵn trên board (kết nối với chân số 13).

4. LẬP TRÌNH ĐIỀU KHIỂN BẰNG REMOTE

Tín hiệu điện được mã hóa bằng ánh sáng hồng ngoại và truyền từ Remote đến thiết bị được điều khiển như tivi, quạt. đèn… Để có thể điều khiển được bóng đèn LED bằng Remote thông qua board Arduino, bạn cần làm cho Arduino hiểu được tín hiệu đã được mã hóa bằng ánh sáng hồng ngoại rồi từ đó biên dịch thành tín hiệu gốc.

Bạn cứ tưởng tượng ra một ông Tây mua hàng ngoài chợ. Ông Tây muốn mua được món hàng nhưng không biết nói làm sao cho bà bán hàng hiểu vì bà này không biết tiếng Anh (không xài cử chỉ nhé). Bạn có mặt ở đó và biết tiếng Anh luôn, thế là bạn phiên dịch lại cho bà bán hàng để bà hiểu và lấy đúng món hàng ông Tây cần ^^!

a. Vấn đề mã hóa bằng ánh sáng 

Không biết bạn biết chưa, nhưng ánh sáng hồng ngoại có thể được phát ra từ rất nhiều nguồn nhé, chỉ cần phát nhiệt là đồng nghĩa với phát tia hồng ngoại. Ánh sáng mặt trời có tia hồng ngoại, con người phát tia hồng ngoại, tivi đang bật cũng phát tia hồng ngoại,…

Vậy làm sao để tivi phân biệt được tín hiệu hồng ngoại từ remote chứ không phải từ một nguồn khác để không nhảy loạn cả lên?

  • Ah, đa phần các cặp thu-phát hồng ngoại đều chỉ nhận phát và nhận tia hồng ngoại có tần số 38kHz (tần số có thể dao động từ 36kHz đến 39kHz).

Vậy làm sao bộ thu hồng ngoại hiểu rằng ta đang nhấn nút A trên remote chứ không phải nút B?

  • Người ta đã học hỏi mã Morse. Bằng cách bật và tắt liên module phát tia hồng ngoại (38kHz) trên remote một cách có chủ đích: 0 = Bật, 1 = Tắt, người ta đã tạo nên một tín hiệu ánh sáng được mã hóa để chuyển đến module thu hồng ngoại. Module này sẽ giải mã ngược tín hiệu hồng ngoại nhận được thành chuỗi số 0 – 1 ban đầu. (Vẫn còn cách mã hóa khác nữa đấy cho bạn nào muốn tìm hiểu nâng cao.)
    Nguyên Lý Giao Tiếp Hồng Ngoại
    Nguyên Lý Giao Tiếp Hồng Ngoại

b. Làm sao nhìn thấy tia hồng ngoại?

Nói nhiều vậy rồi làm sao biết cái remote của mình có hoạt động được hay không vì mắt đâu có nhìn thấy tia hồng ngoại đâu?! Lỡ remote hết pin, mình cố gắng bấm mấy thì rồi cũng đập remote như đập điện thoại trong trò Flappy Bird vậy ^^!

  • Đúng, mắt thường không thể nhìn thấy tia hồng ngoại. Nhưng mình có một mánh mà mấy ông sửa TV ở ngoài tiệm vẫn hay dùng: Bạn bật camera trên điện thoại. Cầm điện thoại sao cho đèn hồng ngoại chiếu thẳng vào camera. Ấn nút trên remote. Nếu remote còn pin, bạn sẽ thấy như hình bên dưới, kkk…. ^^!
Tia hồng ngoại nhìn từ Camera
Tia hồng ngoại nhìn từ Camera

Hay quá phải không nào. Còn cái này hay hơn nek, bạn nào muốn sở hữu một cái kính nhìn đêm như quân đội sử dụng?! Đoán xem nó liên hệ với những điều ở mục này như thế nào nhé! Mình sẽ có một hướng dẫn chi tiết về việc chế nó sau.

c. Vào phần chính nhé!

Muốn bật tắt được bóng đèn LED bằng Remote thông qua board Arduino, bạn cần biết tín hiệu hồng ngoại được mã hóa như thế nào hay nó có giá trị tương ứng bao nhiêu khi bạn nhấn 1 nút trên remote. Sau đó dùng giá trị đó cho việc lập trình điều khiển trên Arduino.

Cách đọc giá trị tín hiệu hồng ngoại từ remote

Bạn dùng Arduino IDE để mở file “Giai-ma-tin-hieu-hong-ngoai.ino” trong thư mục con “Giai-ma-tin-hieu-hong-ngoai” của thư mục mà bạn vừa giải nén lúc nãy. Cắm dây USB nối máy tính và board Arduino rồi nhấn nút nạp chương trình cho nó.

Sau khi nạp chương trình thành công, bạn mở Serial Monitor lên. Cầm remote lên và nhắm thẳng vào mắt thu hồng ngoại mà nhấn nút bất kì. Trên màn hình Serial Monitor sẽ hiện như sau:

Kết quả hiển thị trên Serial Monitor
Kết quả hiển thị trên Serial Monitor

Mỗi khi bạn nhấn một nút khác, bạn sẽ thấy dòng đầu tiên trong chuỗi hiện lên bị thay đổi. Bạn copy lại chuỗi số đó và ghi lại tên nút nhấn trên remote mà bạn đã nhấn luôn nhé. Mình sẽ dùng kết quả này sau.

Chữ NEC phía trước chính là kiểu mã hóa của tín hiệu này. F7C03F như hình trên là giá trị của tín hiệu. Khi bạn nhấn một nút nhấn, nó sẽ gửi đi một giá trị riêng,không trùng với nút nhấn khác trên remote.

Điều khiển bật tắt 1 đèn LED bằng remote thông qua Arduino

Bạn dùng Arduino IDE để mở file “Test_LED.ino” trong thư mục con “Test_LED” của thư mục mà bạn giải nén lúc đầu. Mình sẽ chỉnh sửa file này một xíu trước khi nạp chương trình.

Bạn tìm đến dòng này nhé:

Thay giá trị 0x00
Thay giá trị 0x00

Sau đó xóa số “00” đi và thay vào đó bằng chuỗi số bạn đã lưu lúc nãy. Ví dụ: 0x F7C03F

Xong rồi đấy. Bạn nhấn nút nạp chương trình đi và tận hưởng thành quả nhé.

Bạn bấm vào nút mà bạn lưu số, bạn sẽ thấy đèn LED 13 trên board Arduino Uno sáng lên và ấn lại một lần nữa, bạn sẽ thấy nó tắt. Xong rồi đấy, đơn giản phải không nào?

Điều khiển nhiều hơn một thiết bị thông qua Arduino

Lệnh IF cho ta quyền lựa chọn làm gì khi Arduino nhận được một giá trị tương ứng. Để làm nhiều công việc ta có thể viết nhiều lệnh IF với các giá trị khác nhau hoặc có thể dùng một lệnh khác là SWITCH. Bạn tham khảo file “Test_LED_2.ino” để biết cấu trúc viết với lệnh này.

===============> TIẾP

Từ đầu đến giờ các bạn mới chỉ đơn giản là copy – paste và chỉnh sửa đôi chút chương trình của người khác thôi và có hướng dẫn nhé chứ không phải tự đọc hiểu code, đúng nghĩa con nít lớp 5 cũng làm được! Bây giờ mới tới phần thử tài người hâm mộ:

Bạn cần tự học một xíu về viết chương trình để điều khiển Arduino theo cách của bạn. Bạn có thể lựa chọn các chủ đề gắn kết chặt chẽ và sẽ hỗ trợ rất nhiều cho bài này như sau:

  1. If là gì và cách sử dụng hàm If
  2. Switch là gì và cách sử dụng hàm Switch
  3. Ý nghĩa và cách sử dụng các lệnh và hàm trong thư viện IRremote

Đôi lời về thư viện IRremote:

Thư viện này hỗ trợ ta cả truyền và nhận tín hiệu hồng ngoại. Trong bài này các bạn mới chỉ sử dụng phần nhận tín hiệu của thư viện IRremote thôi.

Các hàm và lệnh cho nhận tín hiệu:

IRrecv irrecv(receivePin) – Tạo đối tượng nhận tín hiệu.

Trong đó:

IRrecv là mã lệnh, không thay đổi

irrecv là tên đối tượng, bạn có thể thay bằng cái tên khác, vd: remote1, remote2, …

receivePin là chân Arduino kết nối với chân tín hiệu của mắt thu hồng ngoại

Ví dụ hoàn chỉnh: IRrecv remote1(11);

irrecv.enableIRIn() – Bắt đầu quá trình nhận tín hiệu.

Lệnh này sẽ kích hoạt ngắt của Timer mỗi 50us irrecv.decode(&results) Nhận tín hiệu từ mắt hồng ngoại. Trả kết quả TRUE nếu nhận được tín hiệu, FALSE nếu không nhận được gì hết. Thông tin nếu mắt đọc bắt được tín hiệu sẽ lưu vào biến “results”

results.decode_type    Trả về kiểu mã hóa của tín hiệu.

Các kiểu mã hóa được hỗ trợ: NEC, SONY, RC5, RC6. Nếu tín hiệu được mã hóa khác các loại trên hoặc lúc đọc tín hiệu bị lỗi sẽ trả kết quả UNKNOWN.

results.value   Trả về mã tín hiệu nhận được. Kết quả bằng 0 nếu decode_type là UNKNOW

results.bits Số bit được sử dụng để mã hóa tín hiệu

results.rawbuf  Mảng chứa thời gian mỗi xung trong chuỗi xung của tín hiệu

results.rawlen Số lượng xung chứa trong mảng

irrecv.resume() Reset đối tượng “irrecv”, chuẩn bị nhận tín hiệu mới

irrecv.blink13(true) Nhấp nháy LED 13 nếu có tín hiệu hồng ngoại. Đây là một cách khác để biết remote có đang phát tín hiệu hay không mà không cần phải lấy camera điện thoại ra soi ^^!

Chúc các bạn học vui và nhanh tiến bộ trong lập trình điều khiển với Arduino ^^! Có gì thắc mắc, cứ comment bên dưới 🙂

Minh Thành

Admin ShopArduino.com

Did you find apk for android? You can find new Free Android Games and apps.

One thought on “Biến remote tivi cùi bắp thành điều khiển bá đạo cho ứng dụng Arduino

Trả lời