Mục lục:

Bộ giải mã cảm biến RF Arduino: 5 bước
Bộ giải mã cảm biến RF Arduino: 5 bước

Video: Bộ giải mã cảm biến RF Arduino: 5 bước

Video: Bộ giải mã cảm biến RF Arduino: 5 bước
Video: Giải Mã Remote RF Bằng Arduino Uno R3 | Thực Hành Arduino | Điện tử DAT 2024, Tháng bảy
Anonim
Bộ giải mã cảm biến RF Arduino
Bộ giải mã cảm biến RF Arduino

Ngôi nhà trước đây của tôi có một hệ thống an ninh được cài đặt sẵn có cảm biến cửa, cảm biến chuyển động và bảng điều khiển. Mọi thứ đều được nối dây cứng với một hộp điện tử lớn trong tủ quần áo và có hướng dẫn cách đấu dây điện thoại cố định để tự động gọi ra trong trường hợp có báo động. Khi tôi thử chơi với nó, tôi phát hiện ra rằng một trong các cảm biến cửa được lắp đặt chưa hoàn chỉnh và một cảm biến khác bị gián đoạn do căn chỉnh không đúng cách. Rất nhiều cho việc cài đặt chuyên nghiệp chào hàng trên danh thiếp của công ty bảo vệ. Giải pháp của tôi lúc đó là mua một vài camera an ninh internet và một thiết bị báo động an ninh không dây giá rẻ.

Tua đi nhanh đến ngày hôm nay và báo động không dây đó đang nằm trong một chiếc hộp ở tầng hầm của tôi. Sau khi mua một bộ thu RF giá rẻ, tôi quyết định xem liệu tôi có thể giải mã các tin nhắn được truyền bằng nhiều loại cảm biến cảnh báo và điều khiển từ xa mà tôi có hay không. Tôi nhận ra rằng vì tất cả họ đều làm việc với hộp báo động rẻ tiền nên tất cả họ phải sử dụng cùng một định dạng tin nhắn với chỉ một ID khác. Tôi sớm phát hiện ra rằng chúng chỉ giống nhau về cấu trúc chung của các tin nhắn. Vì vậy, dự án nhanh chóng đi từ tầm thường thành rất thú vị.

Bước 1: Mô-đun cảm biến

Mô-đun cảm biến
Mô-đun cảm biến
Mô-đun cảm biến
Mô-đun cảm biến
Mô-đun cảm biến
Mô-đun cảm biến
Mô-đun cảm biến
Mô-đun cảm biến

Như bạn có thể thấy trong các hình trên, các bộ phát bao gồm cảm biến mở cửa, máy dò chuyển động, điều khiển vũ khí từ xa và bàn phím không dây được sử dụng để lập trình hộp báo động. Hóa ra, không có hai thiết bị nào trong số này sử dụng cùng độ dài đồng bộ hóa hoặc thời lượng bit. Điểm chung duy nhất, ngoài độ dài thông điệp, là định dạng cơ bản của các bit. Mỗi bit chiếm một khoảng thời gian cố định với sự khác biệt giữa số không và số một là chu kỳ nhiệm vụ của các phần cao / thấp.

Dạng sóng đẹp hiển thị ở trên KHÔNG phải là những gì tôi nhận được lần đầu tiên. Vì có rất nhiều lưu lượng trong dải tần 433 MHz, tôi phải đảm bảo kích hoạt cảm biến ngay trước khi tôi đặt phạm vi để thực hiện một lần kích hoạt. May mắn thay, các cảm biến đưa ra một số bản sao của thông điệp dữ liệu khi được kích hoạt và điều khiển từ xa và bàn phím tiếp tục xuất ra thông báo miễn là nhấn một phím. Bằng cách sử dụng phạm vi, tôi có thể xác định độ dài đồng bộ hóa và thời lượng bit dữ liệu cho mỗi mục. Như đã đề cập trước đây, thời gian đồng bộ khác nhau và thời gian bit khác nhau nhưng các định dạng thông báo đều có đồng bộ hóa mức thấp, tiếp theo là 24 bit dữ liệu và một bit dừng. Điều đó là đủ để tôi có thể xây dựng một bộ giải mã chung trong phần mềm mà không cần phải viết mã tất cả các chi tiết khác nhau cho từng thiết bị.

Bước 2: Phần cứng

Phần cứng
Phần cứng
Phần cứng
Phần cứng

Ban đầu, tôi đã chế tạo một bộ giải mã cảm biến sử dụng vi điều khiển PIC và hợp ngữ. Gần đây, tôi đang chơi với các biến thể Arduino nên tôi nghĩ mình sẽ xem liệu mình có thể tái tạo nó hay không. Sơ đồ đơn giản được hiển thị ở trên và cũng có một hình ảnh về nguyên mẫu của tôi. Tất cả những gì tôi làm là sử dụng ba dây jumper chung để đi từ Arduino Nano đến bo mạch thu RF. Nguồn và một đường dữ liệu duy nhất là tất cả những gì cần thiết.

Nếu bạn đọc Tài liệu hướng dẫn của tôi trên “Màn hình hiển thị thời gian và thời tiết 3 trong 1”, bạn sẽ thấy rằng tôi sử dụng bộ thu RXB6, 433 MHz phổ biến. Bạn có thể có được bộ thu thực sự rẻ để hoạt động ở phạm vi ngắn cần thiết cho dự án này nhưng tôi vẫn khuyên bạn nên sử dụng bộ thu siêu dị.

Bước 3: Phần mềm

Phần mềm chuyển đổi các bit nhận được thành các ký tự ASCII có thể hiển thị. Nó xuất ra giá trị của độ dài đồng bộ và độ dài của bit 1 và 0. Bởi vì tôi đã biết độ dài đồng bộ và định dạng bit, tôi có thể đã viết phần mềm dành riêng cho chúng. Thay vào đó, tôi quyết định xem liệu tôi có thể viết nó để sắp xếp độ dài đồng bộ hóa và tự động tìm ra các bit dữ liệu hay không. Điều đó sẽ giúp dễ dàng sửa đổi hơn trong trường hợp tôi muốn cố gắng phát hiện các định dạng khác vào một lúc nào đó. Điều quan trọng cần lưu ý là phần mềm không biết liệu bit đầu tiên của thông báo là 1 hay 0. Nó giả định rằng đó là 1 nhưng, nếu nó phát hiện ra rằng nó đáng lẽ phải là 0, nó sẽ đảo ngược các bit trong tin nhắn đã hoàn thành trước khi gửi nó ra cổng nối tiếp.

Thời gian của xung đồng bộ và các bit dữ liệu được xác định bằng cách sử dụng đầu vào ngắt bên ngoài INT0 để kích hoạt trình xử lý ngắt. INT0 có thể kích hoạt khi tăng, giảm hoặc cả hai cạnh hoặc ở mức thấp ổn định. Phần mềm bị gián đoạn ở cả hai cạnh và đo lượng thời gian xung duy trì ở mức thấp. Điều đó đơn giản hóa mọi thứ vì bắt đầu / đồng bộ hóa thông báo là một xung mức thấp và các bit có thể được xác định dựa trên thời gian ở mức thấp của chúng.

Đầu tiên, trình xử lý ngắt xác định xem số đếm được bắt có đủ dài để trở thành xung bắt đầu / đồng bộ hóa hay không. Các thiết bị khác nhau mà tôi có sử dụng xung đồng bộ 4, 9, 10 và 14 mili giây. Các câu lệnh xác định cho các giá trị đồng bộ hóa tối thiểu / tối đa được phép hiển thị trước trong phần mềm và hiện được đặt trong 3 và 16 mili giây. Thời gian bit cũng khác nhau giữa các cảm biến vì vậy thuật toán giải mã bit cần phải tính đến điều đó. Thời gian bit của bit đầu tiên được lưu giống như thời gian của bit tiếp theo có sự khác biệt đáng kể so với bit đầu tiên. Việc so sánh trực tiếp các thời gian bit tiếp theo là không thể thực hiện được vì vậy định nghĩa "yếu tố fudge" ("Biến thể") được sử dụng. Quá trình giải mã bit bắt đầu bằng cách giả định rằng bit dữ liệu đầu tiên luôn được ghi dưới dạng logic 1. Giá trị đó được lưu và sau đó được sử dụng để kiểm tra các bit tiếp theo. Nếu số lượng bit dữ liệu tiếp theo nằm trong cửa sổ phương sai của giá trị đã lưu thì nó cũng được ghi lại dưới dạng logic 1. Nếu nó nằm ngoài cửa sổ phương sai của giá trị đã lưu thì nó được ghi lại dưới dạng logic 0. Nếu logic 0 thời gian bit ngắn hơn thời gian bit đầu tiên sau đó cờ được đặt để thông báo cho phần mềm biết rằng các byte cần được đảo ngược trước khi hiển thị. Trường hợp duy nhất mà thuật toán này không thành công là khi các bit trong một tin nhắn đều là 0. Chúng tôi có thể chấp nhận hạn chế đó vì loại thông điệp đó là vô nghĩa.

Các cảm biến mà tôi quan tâm đều có độ dài bản tin là 24 bit dữ liệu nhưng phần mềm không giới hạn độ dài đó. Có một bộ đệm cho tối đa bảy byte (có thể thêm nhiều hơn nữa) và xác định độ dài thông báo tối thiểu và tối đa tính bằng byte. Phần mềm được thiết lập để thu thập các bit, chuyển đổi chúng thành byte, lưu trữ tạm thời và sau đó xuất chúng ở định dạng ASCII thông qua cổng nối tiếp. Sự kiện kích hoạt đầu ra của thông báo là nhận được một xung khởi động / đồng bộ hóa mới.

Bước 4: Ghi dữ liệu

Đăng nhập vào dữ liệu
Đăng nhập vào dữ liệu

Phần mềm được thiết lập để xuất dữ liệu được chuyển đổi dưới dạng ký tự ASCII thông qua đầu ra nối tiếp (TX) của Arduino. Khi tạo phiên bản PIC, tôi cần giao diện với chương trình đầu cuối trên PC để hiển thị dữ liệu. Một ưu điểm của Arduino IDE là nó có chức năng Serial Monitor được tích hợp sẵn. Tôi đặt tốc độ cổng nối tiếp thành 115,2k và sau đó đặt cửa sổ Serial Monitor thành cùng một tốc độ. Ảnh chụp màn hình ở đây cho thấy một màn hình điển hình với kết quả đầu ra từ nhiều loại cảm biến mà tôi có. Như bạn thấy, dữ liệu đôi khi không hoàn hảo nhưng bạn có thể dễ dàng xác định giá trị thực của mỗi cảm biến phải là bao nhiêu.

Bước 5: Phần mềm nhận mẫu

Phần mềm nhận mẫu
Phần mềm nhận mẫu

Tôi đã bao gồm một danh sách phần mềm mẫu cho thấy cách bạn có thể sử dụng thông tin thu thập được để nhận một bộ mã cụ thể cho ứng dụng của mình. Ví dụ này được thiết lập để mô phỏng một trong các cửa hàng từ xa Etekcity của tôi. Một lệnh bật đèn LED được tích hợp trong Nano (D13) và lệnh còn lại sẽ tắt đèn LED. Nếu bạn không có đèn LED tích hợp trong Arduino, thì hãy thêm điện trở và đèn LED như trong sơ đồ. Trong một ứng dụng thực tế, chức năng này sẽ bật / tắt nguồn cho ổ cắm điện (sử dụng rơ le hoặc triac). Thời gian đồng bộ, thời gian bit và byte dữ liệu dự kiến đều được xác định trước để dễ sửa đổi. Bạn có thể sử dụng bất kỳ dòng dữ liệu nào còn lại để bật / tắt mọi thứ, v.v. cho ứng dụng cụ thể của mình. Chỉ cần thêm mã lệnh áp dụng xác định và thay thế logic bật / tắt đèn LED trong “vòng lặp” để phù hợp với nhu cầu của bạn.

Đề xuất: