Khi mới bắt đầu tìm hiểu về hồng ngoại (IR), nhiều người thường nghĩ rằng tất cả các remote đều hoạt động giống nhau: bấm nút nào thì remote phát ra một mã tương ứng với nút đó. Thực tế điều này chỉ đúng với phần lớn remote điều khiển đèn LED, TV hoặc quạt, còn remote máy lạnh lại sử dụng một phương thức hoàn toàn khác.
Đối với remote điều khiển đèn LED, mỗi nút bấm sẽ tương ứng với một mã hồng ngoại cố định. Ví dụ, nút ON luôn phát ra một chuỗi dữ liệu giống nhau, nút OFF cũng có một chuỗi cố định khác, nút đổi màu đỏ, xanh hay tăng giảm độ sáng đều có mã riêng biệt. Bộ điều khiển chỉ cần nhận đúng mã đó là thực hiện lệnh tương ứng. Vì vậy, nếu dùng ESP32 hoặc Arduino để học lệnh của loại remote này thì chỉ cần lưu lại từng mã và phát lại khi cần.
Remote máy lạnh thì hoàn toàn khác. Nó không gửi một lệnh đơn lẻ như "tăng nhiệt độ" hay "bật quạt". Thay vào đó, mỗi lần nhấn bất kỳ nút nào, remote sẽ gửi toàn bộ trạng thái hiện tại của máy lạnh trong một chuỗi dữ liệu rất dài.
Trong chuỗi dữ liệu đó có thể bao gồm rất nhiều thông tin như:
Trạng thái bật hoặc tắt máy.
Chế độ hoạt động (Cool, Dry, Fan, Heat...).
Nhiệt độ cài đặt.
Tốc độ quạt.
Hướng gió.
Chế độ Swing.
Chế độ Turbo, Sleep, Eco...
Các bit kiểm tra lỗi (Checksum) để đảm bảo dữ liệu truyền chính xác.
Ví dụ, giả sử máy lạnh đang ở chế độ làm lạnh 26°C với quạt mức 2. Khi bạn chỉ bấm tăng nhiệt độ lên 27°C, remote không chỉ gửi thông tin "tăng thêm 1°C". Thay vào đó, nó sẽ phát lại toàn bộ trạng thái mới, bao gồm:
Bật máy.
Chế độ Cool.
Nhiệt độ 27°C.
Quạt mức 2.
Swing đang bật hoặc tắt.
Tất cả các thiết lập khác.
Checksum.
Điều này có nghĩa là mỗi lần thay đổi bất kỳ cài đặt nào, gần như toàn bộ chuỗi dữ liệu hồng ngoại cũng thay đổi theo.
Đây chính là lý do nhiều người gặp khó khăn khi muốn tự tạo remote máy lạnh bằng vi điều khiển. Nếu chỉ lưu riêng mã của từng nút như cách làm với remote đèn LED thì sẽ không hoạt động chính xác. Muốn điều khiển được máy lạnh, chương trình phải hiểu cấu trúc gói dữ liệu, thay đổi đúng các bit đại diện cho nhiệt độ, chế độ hoặc tốc độ quạt rồi tính lại checksum trước khi phát đi.
Có thể hình dung sự khác nhau như sau:
Remote đèn LED: giống như gửi một câu lệnh ngắn "Bật đèn", "Đổi sang màu đỏ", "Tăng sáng".
Remote máy lạnh: giống như gửi cả một bản cấu hình hoàn chỉnh của máy mỗi lần nhấn nút, trong đó chứa đầy đủ mọi thông số đang được cài đặt.
Chính vì nguyên lý này mà việc đọc và phát lại tín hiệu của remote đèn LED thường rất đơn giản, trong khi việc điều khiển máy lạnh bằng ESP32 hoặc Arduino đòi hỏi phải phân tích giao thức truyền, hiểu ý nghĩa từng byte dữ liệu và xây dựng lại toàn bộ gói tin trước khi phát. Đây cũng là lý do các thư viện như IRremoteESP8266 hay IRremote dành rất nhiều mã nguồn để xử lý riêng cho từng hãng máy lạnh, bởi mỗi nhà sản xuất đều có cấu trúc gói dữ liệu và cách mã hóa khác nhau.
Dựa vào tính chất trên, trong bài viết này mình sẽ hướng dẫn anh chị em cách để làm một màn hình hiển thị nhiệt độ cho những máy lạnh không có màn hình hiển thị. Mình sử dụng máy lạnh Sharp nên anh chị em có thể tham khảo và làm tương tự cho những dòng máy lạnh khác khi đã hiểu được cách thức hoạt động của nó.
Về phần cứng mình sử dụng ESP32, modun led 7 đoạn 74hc595d và mắt nhận hồng ngoại IR1838. Mình sử dụng ESP32 mục đích để có thể mở rộng chức năng sau này như điều khiển máy lạnh từ xa thông qua wifi hoặc mở rộng chức năng khác nên anh chị em có thể sử dụng những vi điều khiển có chức năng thấp hơn cho dự án này.
Đầu tiên mình kết nối ESP32 với máy tính và nạp chương trình đọc dữ liệu từ remote để tìm ra nguyên lý truyền tin của remote mình đang sử dụng. Mã nhận được mình cho hiển thị trên serial vì nó là một chuối thông tin khá dài nên không thể hiển thị lên led 7 đoạn. sau khi có được một số mã khi mình thay đổi nút nhấn thì mình tìm nguyên tắc của remote xem khi thay đổi nhiệt độ thì những byte dữ liệu nào thay đổi để mình chọn lọc các byte đó ra giải mã hiển thị lên modun led của mình.
Đối với remote máy lạnh Sharp mình đang sử dụng thì khi thay đổi nhiệt độ, byte dữ liệu thứ 5 sẽ thay đổi (byte chứa dữ liệu nhiệt độ), byte cuối cùng luôn thay đổi khi nhấn nút (byte check sum), byte thứ 6 sẽ báo trạng thái on, off hoặc nhấn nút khác on, off. Có được những thông số trên, mình sẽ giải mã byte thứ 5 thành số nhiệt độ tương ứng với giá trị thập phân của nó.
Sau đó viết chương trình hiển thị nhiệt độ lên modun led 7 đoạn loại giải mã sẵn để tiết kiệm thời gian cũng như ngõ ra của vi điều khiển. chương trình giải mã từ remote và chương trình màn hình máy lạnh mình để ở đây. Anh chị em có máy lạnh Sharp giống mình có thể lấy nguyên chương trình màn hình để nạp (sơ đồ đấu dây trong code), còn những dòng máy lạnh khác mình chưa thử nên anh chị em có thể làm theo phương pháp mình làm ở trên, dò mã và viết chương trình theo remote đang có. chúc anh chị em thành công với dự án này.
Linh kiện để làm màn hình này cũng rất đơn giản, anh chị em có thể tham khảo ở đây:
+ ESP32
+ mắt đọc hồng ngoại IR1838
+ modun led 7 đoạn ghi dịch 74hc595d
+ test board
+ dây cắm test board