Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Có một hệ thống mô hình xe lửa quy mô TT cũ, tôi đã có ý tưởng làm thế nào để điều khiển các locos riêng lẻ.
Với suy nghĩ này, tôi đã tiến thêm một bước và tìm ra những gì cần thiết để không chỉ điều khiển tàu mà còn có thêm một số thông tin về toàn bộ bố cục và điều khiển thứ gì đó khác (đèn, công tắc đường ray…)
Đây là cách hệ thống tàu mô hình điều khiển bằng WiFi ra đời.
Bước 1: Hoạt động Priciples
Nguyên tắc chính là điều khiển từng phần tử riêng lẻ, từ một bộ điều khiển duy nhất hoặc từ nhiều nguồn điều khiển. Điều này vốn dĩ cần một lớp vật lý chung - rõ ràng nhất là WiFi - và một giao thức truyền thông chung, MQTT.
Yếu tố trung tâm là Nhà môi giới MQTT. Mọi thiết bị được kết nối (tàu, cảm biến, đầu ra…) chỉ được phép giao tiếp thông qua Nhà môi giới và chỉ có thể nhận dữ liệu từ Nhà môi giới.
Trái tim của thiết bị là bộ điều khiển WiFi dựa trên ESP8266, trong khi nhà môi giới MQTT chạy trên Raspberry pi.
Lúc đầu, vùng phủ sóng Wifi được cung cấp bởi bộ định tuyến WiFi và mọi thứ đều được kết nối thông qua mạng không dây.
Có 4 loại thiết bị:
- Bộ điều khiển tàu hỏa: có 2 đầu vào kỹ thuật số, 1 đầu ra kỹ thuật số, 2 đầu ra PWM (để điều khiển 2 động cơ DC riêng lẻ), - Bộ điều khiển cảm biến: có 7 đầu vào kỹ thuật số (cho công tắc đầu vào, cảm biến quang…), - Bộ điều khiển đầu ra: có 8 đầu ra kỹ thuật số (cho công tắc đường sắt…), - Điều khiển từ xa WiFi: có 1 đầu vào mã hóa tăng dần, 1 đầu vào kỹ thuật số (để điều khiển tàu từ xa).
Hệ thống cũng có khả năng hoạt động từ Node-Red (từ máy tính bảng, PC, hoặc điện thoại thông minh…).
Bước 2: Trao đổi và cấu hình dữ liệu MQTT
Dựa trên giao thức MQTT, lúc đầu, mọi thiết bị đăng ký một chủ đề nhất định và có thể xuất bản sang một chủ đề khác. Đây là cơ sở giao tiếp của mạng lưới điều khiển tàu.
Câu chuyện giao tiếp này diễn ra thông qua các tin nhắn có định dạng JSON, ngắn gọn và con người có thể đọc được.
Nhìn từ góc độ xa hơn: Mạng có bộ định tuyến WiFi với SSID (tên mạng) và mật khẩu riêng. Mọi thiết bị đều phải biết 2 điều này để truy cập mạng WiFi. Nhà môi giới MQTT cũng là một phần của mạng này, vì vậy để sử dụng giao thức MQTT, mọi thiết bị phải biết địa chỉ IP của nhà môi giới. Và cuối cùng, mọi thiết bị đều có chủ đề riêng để đăng ký và xuất bản tin nhắn.
Trên thực tế, một điều khiển từ xa nhất định sử dụng cùng một chủ đề để xuất bản tin nhắn mà một chuyến tàu nhất định được đăng ký.
Bước 3: Đào tạo bộ điều khiển
Để điều khiển một đoàn tàu đồ chơi, về cơ bản chúng ta cần có 3 thứ: nguồn điện, bộ điều khiển hỗ trợ WiFi và thiết bị điện tử điều khiển động cơ.
Nguồn cung cấp phụ thuộc vào kế hoạch sử dụng thực tế: trong trường hợp LEGO, đây là hộp pin Power Functions, trong trường hợp bộ xe lửa quy mô "oldschool" TT hoặc H0, đó là nguồn điện 12V của đường ray.
Bộ điều khiển hỗ trợ WiFi là bộ điều khiển Wemos D1 mini (dựa trên ESP8266).
Thiết bị điện tử điều khiển động cơ là một mô-đun dựa trên TB6612.
Bộ điều khiển tàu có 2 đầu ra PWM được điều khiển riêng. Về cơ bản, một cái được sử dụng để điều khiển động cơ và cái kia được sử dụng để báo hiệu ánh sáng. Có 2 đầu vào cho cảm biến dựa trên tiếp xúc sậy và một đầu ra kỹ thuật số.
Bộ điều khiển chấp nhận tin nhắn JSON thông qua WiFi và giao thức MQTT.
SPD1 điều khiển động cơ, ví dụ: thông báo {"SPD1": -204} được sử dụng để di chuyển động cơ lùi ở mức 80% công suất (giá trị tốc độ tối đa là -255).
SPD2 điều khiển cường độ ánh sáng LED "nhạy cảm với hướng": Thông báo {"SPD2": -255} làm cho đèn LED (lùi) sáng hết công suất.
OUT1 điều khiển trạng thái của đầu ra kỹ thuật số: {"OUT1": 1} bật đầu ra.
Nếu trạng thái của đầu vào thay đổi, bộ điều khiển sẽ gửi một thông báo theo nó: {"IN1": 1}
Nếu bộ điều khiển nhận được một thông báo hợp lệ, nó sẽ thực thi nó và cung cấp phản hồi cho nhà môi giới. Phản hồi là lệnh thực sự được thực thi. Ví dụ: nếu nhà môi giới gửi {"SPD1": 280} thì động cơ đang hoạt động hết công suất nhưng thông báo phản hồi sẽ là: {"SPD1": 255}
Bước 4: Điều khiển tàu LEGO
Trong trường hợp tàu LEGO, các sơ đồ có một chút khác biệt.
Nguồn điện trực tiếp đến từ hộp pin.
Cần có một bộ chuyển đổi bước xuống nhỏ để cung cấp 3,5V cho bo mạch Lolin dựa trên ESP8266.
Các kết nối được thực hiện bằng dây kéo dài LEGO 8886, được cắt làm đôi.
Bước 5: Bộ điều khiển từ xa
Bộ điều khiển chỉ xuất bản tin nhắn cho tàu (được xác định bởi công tắc BCD).
Bằng cách xoay bộ mã hóa, điều khiển từ xa sẽ gửi tin nhắn {"SPD1": "+"} hoặc {"SPD1": "-"}.
Khi tàu nhận được thông báo "kiểu tăng dần" này, nó sẽ thay đổi giá trị đầu ra PWM của nó bằng 51 hoặc -51.
Bằng cách này, điều khiển từ xa có thể thay đổi tốc độ của tàu trong 5 bước (mỗi hướng).
Nhấn bộ mã hóa tăng dần sẽ gửi {"SPD1": 0}.
Bước 6: Bộ điều khiển cảm biến
Bộ điều khiển cảm biến được gọi là bộ điều khiển cảm biến đo trạng thái của các đầu vào của nó và nếu bất kỳ đầu vào nào trong số chúng thay đổi, sẽ công bố giá trị đó.
Ví dụ: {"IN1": 0, "IN6": 1} trong ví dụ này 2 đầu vào thay đổi trạng thái cùng một lúc.
Bước 7: Bộ điều khiển đầu ra
Bộ điều khiển đầu ra có 8 đầu ra kỹ thuật số, được kết nối với mô-đun dựa trên ULN2803.
Nó nhận được tin nhắn thông qua chủ đề đã đăng ký của nó.
Ví dụ: thông báo {"OUT4": 1, "OUT7": 1} bật đầu ra kỹ thuật số 4. và 7..
Bước 8: Raspberry Pi và Bộ định tuyến WiFi
Tôi đã sử dụng bộ định tuyến TP-Link WiFI, vì vậy tôi đã sử dụng bộ định tuyến này làm Điểm truy cập.
Nhà môi giới MQTT là Raspberry Pi có cài đặt Mosquitto.
Tôi sử dụng hệ điều hành Raspbian tiêu chuẩn với MQTT được cung cấp với:
sudo apt-get install mosquitto mosquitto-client python-mosquitto
Bộ định tuyến TP-Link phải được định cấu hình để có địa chỉ đặt trước cho Raspberry, vì vậy sau mỗi lần khởi động lại Pi có cùng địa chỉ IP và mọi thiết bị đều có thể kết nối với nó.
Và đó là nó!
Bước 9: Hoàn thành bộ điều khiển
Đây là các bộ điều khiển đã hoàn thành.
Chiếc loko quy mô TT có kích thước nhỏ đến mức một tấm ván Lolin phải được thu hẹp (cắt) để đủ nhỏ để lắp vào đoàn tàu.
Các tệp nhị phân đã biên dịch có thể được tải xuống. Vì lý do bảo mật, phần mở rộng thùng rác đã được thay thế thành txt.