Mục lục:
- Quân nhu
- Bước 1: Nối dây RX và Arduino
- Bước 2: Nhận một số tín hiệu PPM
- Bước 3: Định cấu hình máy phát
- Bước 4: Chạy Joystick
- Bước 5: Mã hóa Arduino
Video: Bộ chuyển đổi PPM sang USB Joystick dựa trên Arduino (JETI) cho FSX: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:31
Tôi đã quyết định chuyển máy phát JETI DC-16 của mình từ Chế độ 2 sang Chế độ 1, về cơ bản sẽ chuyển Throttle và Elevator từ trái sang phải và ngược lại. Vì tôi không muốn làm hỏng một trong các mô hình của mình do một số nhầm lẫn trái / phải trong não của tôi, tôi đã tự hỏi liệu có thể thực hành một chút trong FSX hay không.
Tôi đã đọc và thử nghiệm các bộ phát JETI thực sự hỗ trợ chế độ Cần điều khiển ngoài hộp, tuy nhiên tôi muốn có sự linh hoạt hoàn toàn cho các nhiệm vụ trục và công tắc và sử dụng TX như với một mô hình thực. Bằng cách sử dụng đầu ra của máy thu, bạn cũng có thể tận dụng quá trình xử lý tín hiệu trong DC-16 và sử dụng bộ trộn, giai đoạn bay, tốc độ kép, bất cứ thứ gì bạn có thể lập trình ở đó.
Gần đây, tôi đã tìm thấy một hướng dẫn hay về cách tạo thiết bị đầu vào USB HID, cụ thể là Cần điều khiển, từ Arduino rẻ tiền như Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Điều này sẽ cho phép mọi thứ cần thiết để điều khiển máy bay / trực thăng / bất cứ thứ gì trong FSX! Rất nhiều trục và nút có sẵn.
Vì tôi chỉ có một JETI RSAT2 dự phòng, tôi quyết định kết nối nó với Arduino và cố gắng triển khai một trình phân tích cú pháp PPM nhỏ cùng với thư viện Joystick.
Tôi giả định rằng bất kỳ ai làm theo các bước này đều quen thuộc với việc kết nối và lập trình Arduino. Tôi sẽ không nhận bất kỳ bảo hành nào đối với trục trặc hoặc hư hỏng!
Quân nhu
Bạn sẽ cần…
- bất kỳ Arduino nào được hỗ trợ bởi thư viện Joystick, tôi đã sử dụng Sparkfun Pro Micro 5V / 16 MHz
- phiên bản gần đây của Arduino IDE
- bất kỳ bộ thu RC nào xuất ra tín hiệu PPM, như JETI RSAT2
- một vài dây nhảy (tối thiểu 3)
- thư viện Joystick được cài đặt trong Arduino IDE
- thư viện arduino-timer:
Bước 1: Nối dây RX và Arduino
Hệ thống dây điện khá đơn giản. Tôi quyết định chỉ cấp nguồn cho Arduino từ USB, vì nó sẽ mô phỏng thiết bị Cần điều khiển. Điều này sẽ cung cấp cho Arduino nguồn 5V, cũng có thể được sử dụng để cấp nguồn cho bộ thu RC.
Tôi đã sử dụng Pin VCC, cung cấp đầu ra được điều chỉnh và chân Gnd gần nhất - chỉ cần kết nối nó với đầu nối + và - chân của PPM. Khi Arduino được cấp nguồn, bộ thu cũng đang bật nguồn.
Đối với tín hiệu PPM, tôi quyết định sử dụng ngắt để phân tích cú pháp chúng. Có sẵn các ngắt, ví dụ: tại Pin 3, vì vậy chỉ cần kết nối nó ở đó - không có "chân RC gốc" trên arduino, nhưng có thể có nhiều cách khác nhau để đọc tín hiệu của bộ thu.
Tôi đã phải tắt cảnh báo điện áp RX, vì điện áp VCC với nguồn cung cấp USB sẽ chỉ khoảng 4,5V - nhưng khá ổn định, vì vậy không có vấn đề gì cả.
Bước 2: Nhận một số tín hiệu PPM
Khi bộ thu VÀ TX được cấp nguồn, tôi nhận được tín hiệu PPM như trong hình. 16 kênh, lặp lại mãi mãi. Nếu Failsafe trên RSAT bị tắt và máy phát tắt nguồn, đầu ra PPM sẽ bị vô hiệu hóa.
Thông tin thêm về PPM có sẵn tại đây:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Vì tôi không bay đồ thật trong trường hợp này, nên tôi không quan tâm đến thời gian lý thuyết và chỉ tìm hiểu trên máy hiện sóng xem bộ thu của tôi xuất ra âm thanh gì khi di chuyển các que từ hoàn toàn trái sang phải hoàn toàn (cài đặt tiêu chuẩn trong TX). Nó dường như -100% tương ứng với các xung có độ dài 600µs và + 100% đến 1600µs. Tôi cũng không quan tâm đến độ dài của các xung tạm dừng (400µs) trong mã Arduino của mình, nhưng tôi giả định khoảng cách khung hình là min. 3000µs.
Bước 3: Định cấu hình máy phát
Vì chỉ cần biết vị trí thực tế của các bề mặt điều khiển, một kênh / "servo" cho mỗi chức năng RC là đủ. Do đó, một thiết lập máy phát khá đơn giản có thể được thực hiện - tương tự như một mô hình RC thông thường. Mỗi chức năng chính aileron, thang máy, bánh lái và van tiết lưu chỉ yêu cầu một kênh phát tương ứng servo. Tôi cũng đã bổ sung cánh đảo gió, phanh và bánh răng, để lại 9 kênh miễn phí cho đến nay. Xin lưu ý rằng Flaps được đặt trong giai đoạn bay và không được điều khiển trực tiếp thông qua thanh, thanh trượt hoặc nút.
Bước 4: Chạy Joystick
Thư viện Joystick khá dễ sử dụng và cung cấp một số ví dụ và bài kiểm tra. Trước tiên, sẽ hữu ích khi kiểm tra xem Arduino có được phát hiện là Cần điều khiển thích hợp hay không, các hướng dẫn được liên kết trong phần mục nhập và bản thân thư viện cung cấp một số hướng dẫn tốt.
Trong bảng điều khiển Thiết bị và Máy in, Arduino hiển thị là "Sparkfun Pro Micro" và cửa sổ kiểm tra cần điều khiển hiển thị 7 trục và nhiều nút được hỗ trợ. Thậm chí có thể sử dụng công tắc mũ khi được lập trình trong Arduino.
Bước 5: Mã hóa Arduino
Điều vẫn còn thiếu là phân tích cú pháp thực tế của tín hiệu PPM và gán cho các trục và nút của Cần điều khiển. Tôi đã quyết định lập bản đồ sau:
Kênh / Chức năng / Chỉ định phím điều khiển:
- Throttle -> Trục bướm ga
- Aileron -> Trục X
- Thang máy -> Trục Y
- Bánh lái -> Trục quay X
- Flaps -> Trục quay Y
- Phanh -> Trục Z
- Bánh răng -> Nút 0
Khi cần số xuống, nút đầu tiên của Cần điều khiển sẽ được nhấn và sẽ được nhả ra khi tăng số. Tuy nhiên, điều này sẽ yêu cầu FSUIPC cho FSX, ngoài ra, FSX sẽ chỉ chấp nhận một nút để chuyển đổi thiết bị, điều này không chính xác là những gì đang xảy ra với các mô hình của tôi.
Tôi đã cung cấp phiên bản mã hiện tại của mình với rất nhiều nhận xét, điều này đang hoạt động khá tốt đối với tôi - vui lòng thay đổi nhiệm vụ của bạn hoặc thêm các chức năng mới. 9 kênh RC cuối cùng hiện không được sử dụng.
Để thiết lập, lớp Cần điều khiển cần được khởi tạo, về cơ bản bằng cách xác định các phạm vi trục số:
/ * Đặt phạm vi trục (được xác định trong tiêu đề, 0 - 1000) * /
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Bằng cách sử dụng các giá trị từ 0 đến 1000, có thể ánh xạ trực tiếp độ dài xung (600 - 1600µs) tới các giá trị của phím điều khiển mà không cần thay đổi tỷ lệ.
DIN 3 được khởi tạo dưới dạng đầu vào kỹ thuật số, kích hoạt pullups và một ngắt được đính kèm:
pinMode (PPM_PIN, INPUT_PULLUP);
AttachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
Đối với mục đích gỡ lỗi, tôi đã thêm một số bản in qua giao diện Serial trong các khoảng thời gian đều đặn, sử dụng thư viện arduino-timer:
nếu (SERIAL_PRINT_INTERVAL> 0) {
Scheduler.every (SERIAL_PRINT_INTERVAL, (void *) -> bool {SerialPrintChannels (); return true;}); }
Ngắt của chân sẽ được gọi bất cứ khi nào giá trị logic của chân thay đổi, vì vậy đối với mỗi cạnh trong tín hiệu PPM. Đánh giá độ dài xung chỉ bằng cách định thời đơn giản bằng micros ():
uint32_t curTime = micros ();
uint32_t xungLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Bằng cách đánh giá trạng thái của chân hiện tại và kết hợp nó với độ dài xung và các xung trong quá khứ, các xung mới có thể được phân loại. Sau đây có điều kiện sẽ phát hiện khoảng cách giữa các khung:
if (lastState == 0 && pulseLength> 3000 && pulseLength <6000)
Đối với các xung tiếp theo, độ dài xung sẽ được ánh xạ tới trạng thái trục bằng cách cắt bớt và phân biệt độ dài xung để phù hợp với phạm vi trục của cần điều khiển:
uint16_t rxLength = xungLength;
rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels [curChannel] = rxLength - 600;
Mảng rxChannels cuối cùng chứa 16 giá trị từ 0 - 1000, cho biết vị trí thanh / trượt và nút.
Sau khi nhận được 16 kênh, ánh xạ tới Cần điều khiển được thực hiện:
/ * trục * /
Joystick.setThrottle (các kênh [0]); Joystick.setXAxis (kênh [1]); Joystick.setYAxis (1000 - kênh [2]); Joystick.setRxAxis (kênh [3]); Joystick.setRyAxis (kênh [4]); Joystick.setZAxis (1000 - kênh [5]); / * các nút * / Joystick.setButton (0, (các kênh [6] <500? 1: 0)); / * cập nhật dữ liệu qua USB * / Joystick.sendState ();
Tôi đã đảo ngược một số trục trong mã, điều này không cần thiết tuyệt đối, vì trục cũng có thể được đảo ngược bằng cách lật hướng servo hoặc phép gán trong FSX. Tuy nhiên, tôi quyết định giữ lại hướng servo và cũng là nhiệm vụ FSX ban đầu.
Nút được bật hoặc tắt bằng cách ngưỡng kênh 7.
Và đừng quên đánh dấu vào bộ lập lịch… nếu không, sẽ không có bản in gỡ lỗi nào được hiển thị.
void loop () {
Scheduler.tick (); }
Trong ảnh chụp màn hình mà tôi đính kèm, bạn có thể thấy, kênh 1 đã được chuyển từ 1000 (hết ga) sang 0 (không tải).
FSX sẽ phát hiện Arduino giống như bất kỳ Cần điều khiển nào khác, vì vậy chỉ cần gán nút và trục và vui vẻ khi cất cánh!
Điều tôi thực sự thích về cách tiếp cận này là, bạn chỉ có thể sử dụng máy phát của mình như với một mô hình thực, ví dụ: sử dụng các giai đoạn bay v.v.
Đề xuất:
Nguồn điện chuyển mạch có thể thay đổi sử dụng LM2576 [Bộ chuyển đổi Buck, CC-CV]: 5 bước
Bộ nguồn chuyển mạch có thể thay đổi sử dụng LM2576 [Bộ chuyển đổi Buck, CC-CV]: Bộ nguồn chuyển mạch được biết đến với hiệu quả cao. Nguồn cung cấp điện áp / dòng điện có thể điều chỉnh là một công cụ thú vị, có thể được sử dụng trong nhiều ứng dụng như bộ sạc pin Lithium-ion / axit chì / NiCD-NiMH hoặc nguồn điện độc lập. Trong
Nhiệt kế hồng ngoại không tiếp xúc dựa trên Arduino - Nhiệt kế dựa trên IR sử dụng Arduino: 4 bước
Nhiệt kế hồng ngoại không tiếp xúc dựa trên Arduino | Nhiệt kế dựa trên IR sử dụng Arduino: Xin chào các bạn trong phần hướng dẫn này, chúng tôi sẽ tạo một Nhiệt kế không tiếp xúc bằng arduino. nhiệt độ sau đó trong phạm vi đó
Chuyển đổi bàn phím và chuột tự động - Chuyển đổi ngược dòng USB: 5 bước
Công tắc bàn phím và chuột tự động - USB Upstream Switch: Trong dự án này, chúng tôi sẽ lắp ráp một công tắc bàn phím và chuột tự động cho phép chia sẻ dễ dàng giữa hai máy tính. Ý tưởng cho dự án này xuất phát từ nhu cầu của tôi, tại bất kỳ thời điểm nào, có hai máy tính bàn thí nghiệm của tôi. Hầu hết các lần đó là D
Chuyển đổi nguồn cấp cho máy tính thành nguồn cấp cho phòng thí nghiệm có thể thay đổi được trên băng ghế dự bị: 3 bước
Chuyển đổi Bộ nguồn cho Máy tính thành Bộ cấp nguồn cho Phòng thí nghiệm trên đầu có thể thay đổi: Giá Ngày nay cho một bộ nguồn phòng thí nghiệm vượt quá $ 180. Nhưng thay vào đó, một bộ nguồn máy tính lỗi thời lại hoàn hảo cho công việc. Với những thứ này, bạn chỉ tốn 25 đô la và có bảo vệ ngắn mạch, bảo vệ nhiệt, bảo vệ quá tải và
Bộ chuyển đổi 12v sang USB Biến áp 12v sang 5v (tuyệt vời cho Ô tô): 6 bước
Bộ chuyển đổi 12v sang USB Máy biến áp 12v sang 5v (tuyệt vời cho Ô tô): Phần này sẽ hướng dẫn bạn cách tạo bộ chuyển đổi 12v sang USB (5v). Cách sử dụng rõ ràng nhất của điều này là đối với bộ điều hợp xe hơi 12v, nhưng bất cứ nơi nào bạn có 12v, bạn đều có thể sử dụng nó! Nếu bạn cần 5v cho bất kỳ thứ gì khác ngoài USB, chỉ cần bỏ qua các bước về cách thêm cổng USB