Mục lục:

Phím vô lăng đến Bộ điều hợp âm thanh nổi trên ô tô (CAN Bus -> Key1): 6 bước
Phím vô lăng đến Bộ điều hợp âm thanh nổi trên ô tô (CAN Bus -> Key1): 6 bước

Video: Phím vô lăng đến Bộ điều hợp âm thanh nổi trên ô tô (CAN Bus -> Key1): 6 bước

Video: Phím vô lăng đến Bộ điều hợp âm thanh nổi trên ô tô (CAN Bus -> Key1): 6 bước
Video: Android Car Stereo Steering Wheel Control Installation for Joying, Pumpkin, others 2024, Tháng mười một
Anonim
Có thể đánh hơi xe buýt
Có thể đánh hơi xe buýt

Key1) "src =" https://content.instructables.com/ORIG/F3X/UXCI/KCT3F9KZ/F3XUXCIKCT3F9KZ-p.webp

Gửi lệnh đến âm thanh nổi
Gửi lệnh đến âm thanh nổi

Key1) "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">

Vài ngày sau khi mua một chiếc xe cũ, tôi phát hiện ra rằng mình không thể phát nhạc từ điện thoại qua dàn âm thanh trên xe hơi. Bực hơn nữa là xe có bluetooth nhưng chỉ cho phép gọi thoại chứ không nghe nhạc. Nó cũng có cổng USB Windows Phone, nhưng nó sẽ không hoạt động với iPhone nếu không có dongle 60 USD.

Sau khi thay thế dàn âm thanh trên những chiếc xe trước đây của mình, không cần suy nghĩ hay nghiên cứu nhiều, tôi đã đặt mua một dàn âm thanh thay thế trị giá 40 đô la từ một trang web nổi tiếng về "giá rẻ". Hệ thống âm thanh nổi đi kèm với camera lùi, Car Play và một loạt các tính năng bổ sung, dường như có giá trị tốt hơn nhiều so với dongle đắt tiền hơn chỉ làm một việc.

Sau khi mua và sơn một tấm ốp mặt mới, in 3D một giá đỡ và rất nhiều công việc bổ sung (tự nó có thể là một hướng dẫn), tôi đã đi đến một khám phá khó chịu. Các lệnh phím vô lăng được gửi qua CAN bus, nhưng âm thanh nổi chỉ có đầu vào Key1. Không phải là người bỏ cuộc giữa chừng, tôi đã đặt mua một bộ chuyển đổi trị giá 60 bảng Anh, hóa ra nó không hoạt động. Tại thời điểm này, tôi quyết định tự làm một bộ chuyển đổi.

Tôi không phải là một kỹ sư điện, tôi chỉ có kiến thức điện tử thô sơ và đây là một công trình học hỏi và tìm tòi đối với tôi. Lời khuyên của tôi là trước tiên hãy kiểm tra thông số kỹ thuật xe của bạn và đặt mua một bộ đàm tương thích, nhưng nếu bạn đã bị mắc kẹt (như tôi), hãy làm theo hướng dẫn và tự chịu rủi ro.

Quân nhu

Bộ chuyển đổi (khoảng 15 đô la)

  • Arduino Pro Mini 5V (hoặc bo mạch tương thích)
  • Mô-đun bus MCP2515 CAN
  • Tấm đục lỗ 60x80mm
  • Chiết áp kỹ thuật số X9C104 100K Ohm (phụ thuộc vào hệ thống âm thanh nổi của bạn)
  • DC-DC Bộ điều chỉnh bước xuống LM2596S 3-40V 3A
  • Giá đỡ cầu chì cáp + cầu chì (100-200 Ohm)
  • Hộp dự án hoặc máy in 3D để in nó
  • Giắc cắm âm thanh nổi trên ô tô (nam + nữ)
  • Vật tư hàn, dây điện, v.v.

Người trợ giúp kiểm tra (không hoàn toàn cần thiết nhưng sẽ giúp kiểm tra dễ dàng hơn nhiều)

  • Arduino (bất kỳ bo mạch 5V nào cũng được)
  • Mô-đun bus MCP2515 CAN
  • Breadboard + jumper

Bước 1: CÓ THỂ Đánh hơi xe buýt

Thay vì có một loạt dây chạy xung quanh bên trong xe của bạn kết nối một loạt các hệ thống, một số phương tiện hiện đại có các cặp dây chạy đến từng thành phần. Thông tin được gửi dưới dạng gói dữ liệu kỹ thuật số thông qua các dây này và tất cả các hệ thống có thể đọc tất cả các thông báo. Đây là mạng xe buýt CAN (có thể có nhiều mạng trong ô tô của bạn, vì vậy tất cả thông tin có thể không hiển thị).

Những gì chúng tôi muốn làm, là kết nối với mạng CAN bus và "đánh hơi" lưu lượng dữ liệu. Bằng cách này, chúng ta có thể "nhìn thấy" khi một phím vô lăng được nhấn. Mỗi gói có một ID, đại diện cho hệ thống con của phương tiện đã gửi gói và dữ liệu đại diện cho trạng thái hệ thống. Trong trường hợp này, chúng tôi đang cố gắng tìm ID của hệ thống con gửi thông báo về phím vô lăng và biểu diễn dữ liệu của từng phím.

Nếu may mắn, bạn có thể tìm thấy các giá trị cho chiếc xe của mình ở đâu đó trên mạng và có thể bỏ qua bước này.

Quá trình này có một chút liên quan và đã được giải thích ở những nơi khác, vì vậy tôi sẽ chỉ tóm tắt nó:

  • Tìm các giá trị chính xác cho giao tiếp xe buýt CAN trên xe của bạn. Đối với chiếc xe của tôi (Ý tưởng Fiat 2009), đó là tốc độ truyền 50KBPS và tốc độ đồng hồ 8MHz.
  • Kết nối với mạng bus CAN bằng mô-đun bus CAN và Arduino trong cấu hình "trình đánh hơi".
  • Đọc các giá trị bus CAN trên máy tính xách tay của bạn bằng công cụ như https://github.com/alexandreblin/python-can-monito…. Sẽ rất khó thực hiện nếu không có nó, vì có rất nhiều tin nhắn được gửi đi ngay cả khi xe không hoạt động gì.
  • Nhấn nút vô lăng và lưu ý các thay đổi giá trị. Điều này có thể hơi phức tạp vì có rất nhiều tin nhắn được gửi đi và có thể khó tìm ra đó là tin nhắn nào.

Dưới đây là hai bài viết tuyệt vời giải thích chuyên sâu về quy trình:

  • https://medium.com/@alexandreblin/can-bus-reverse-…
  • https://www.instructables.com/id/CAN-Bus-Sniffing-…

Cuối cùng, bạn sẽ có ID hệ thống con mà chúng tôi sẽ sử dụng để chỉ nghe các thông báo CAN bus trên vô lăng và danh sách các giá trị thập lục phân cho các lệnh chính. Trong trường hợp của tôi, dữ liệu trông như thế này:

ID | ID Hex | Byte 0 | Byte 1 | Cái nút

--------------------------------------------- 964 | 3C4 | 00 | 00 | Không có nút 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Điện thoại 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | Chiến thắng 964 | 3C4 | 00 | 02 | Lên 964 | 3C4 | 00 | 01 | Giảm 964 | 3C4 | 00 | 04 | VÂNG

ID hệ thống con là 3C4 (trong trường hợp này), là một số thập lục phân, vì vậy chúng ta nên viết nó giống như 0x3C4 trong các bản phác thảo Arduino. Chúng tôi cũng quan tâm đến byte 0 và 1 (trong trường hợp của bạn có thể có nhiều byte hơn). Đây cũng là các giá trị thập lục phân, vì vậy chúng cũng phải được viết bằng 0x ở đầu.

Nếu bạn chuyển đổi các giá trị thành nhị phân, bạn sẽ nhận thấy rằng các bit không trùng lặp (ví dụ: + 0b10000000 và - 0b01000000), điều này có thể được nhấn nhiều phím cùng một lúc.

Tôi khuyên bạn nên xây dựng trình đánh hơi bằng các vật liệu được liệt kê trong phần "trình trợ giúp kiểm tra", vì vậy bạn có thể sử dụng lại nó sau này để mô phỏng xe của mình. Điều này sẽ giúp bạn không phải ngồi trong xe hơi trong khi bạn đang chế tạo và thử nghiệm bộ chuyển đổi. Bạn có thể sử dụng bản phác thảo được cung cấp để hoạt động như trình mô phỏng. Sửa đổi "subsystemId", "data0" và "data1" với các giá trị bạn đã phát hiện ra.

Bước 2: Gửi lệnh đến âm thanh nổi

Gửi lệnh đến âm thanh nổi
Gửi lệnh đến âm thanh nổi

Trước khi bắt đầu xây dựng bộ điều hợp, tốt nhất là trước tiên bạn nên kiểm tra xem dàn âm thanh nổi có thể nhận lệnh hay không.

Tôi có một cục pin ô tô dự phòng, vì vậy tôi đã kết nối trực tiếp hệ thống âm thanh nổi với nó. Nếu bạn có nguồn điện đầu vào 12V, thậm chí còn tốt hơn. Rất tiếc, tôi không thể tìm thấy nhiều thông tin trực tuyến về đầu vào Key1 trên thiết bị của mình, vì vậy tôi đã sử dụng thử nghiệm. Tôi không quá lo lắng về việc cháy âm thanh nổi vào thời điểm này, vì nó tương đối rẻ và đây là nỗ lực cuối cùng của tôi để làm cho nó hoạt động với xe của tôi.

Dàn âm thanh có màn hình học lệnh, nơi có thể chọn một trong hai giá trị điện trở (1K và 3,3K) và xem giá trị "điện áp" (0-255). "Điện áp" được trích dẫn vì nó gây hiểu nhầm. Tôi đã dành rất nhiều thời gian để áp dụng các điện áp khác nhau cho Key1 mà không may mắn. Tôi cũng đã thử sử dụng các điện trở khác nhau để áp dụng điện áp mà không có may mắn.

Bước đột phá xảy ra khi tôi thử chạm dây Key1 vào mặt đất của pin, dẫn đến "điện áp" giảm xuống 0. Điều này kết hợp với các điện trở khác nhau sẽ tạo ra các giá trị "điện áp" nhất quán trên màn hình học.

Bây giờ tôi đã biết cách gửi đầu vào cho hệ thống âm thanh nổi, tôi cần một cách để gửi chúng từ Arduino. Tại thời điểm này, tôi chưa nghe nói về bộ ghép kênh, cùng với một số điện trở, có thể là giải pháp nhanh hơn và đáng tin cậy hơn (tôi vẫn không chắc liệu điều này có khả thi hay không), vì vậy tôi đã sử dụng chiết áp kỹ thuật số. Lúc đầu, tôi gặp vấn đề khi bắt nồi kỹ thuật số hoạt động, cho đến khi tôi phát hiện ra rằng tôi cần phải nối nó như một bộ lưu biến để hoạt động như một biến trở thay vì một bộ chia điện áp. Về cơ bản, tôi phải kết nối các thiết bị đầu cuối RH và RW.

Bên cạnh sự kháng cự, thời gian là rất quan trọng. Nếu ngưỡng kháng cự quá ngắn, lệnh sẽ không được đăng ký. Nếu quá dài, nó có thể được đăng ký nhiều lần. Giảm 240ms, tiếp theo là độ trễ 240ms cho đến khi lệnh tiếp theo hoạt động khá đáng tin cậy đối với âm thanh nổi của tôi. Mặc dù có vẻ như rất ít thời gian, nhưng điều đó có nghĩa là chúng tôi có thể gửi tối đa 2 lệnh mỗi giây, điều này rất đáng chú ý nếu bạn đang cố gắng tăng hoặc giảm âm lượng nhanh chóng. Tôi đã thử chơi với các thời gian và mẫu khác nhau, điều này đã làm tăng tốc độ nhưng không đáng tin cậy lắm. Nếu bạn có bất kỳ ý tưởng nào về cách cải thiện điều này, vui lòng để lại chúng trong phần bình luận.

Trước khi tiếp tục, tôi khuyên bạn nên xây dựng một nguyên mẫu để kiểm tra xem dàn âm thanh của bạn có chấp nhận cùng một loại đầu vào hay không. Ngay cả khi nó chấp nhận các điện áp khác nhau, bộ điều hợp sẽ hoạt động với những thay đổi nhỏ đối với hệ thống dây điện và bản phác thảo Arduino.

Bước 3: Xây dựng bộ điều hợp

Xây dựng bộ điều hợp
Xây dựng bộ điều hợp
Xây dựng bộ điều hợp
Xây dựng bộ điều hợp
Xây dựng bộ điều hợp
Xây dựng bộ điều hợp

Sau khi thử nghiệm tất cả các thành phần riêng biệt và thử chúng cùng nhau trên bảng mạch, đã đến lúc mang đến cho chúng một ngôi nhà lâu dài hơn. Quá trình này mất vài giờ để lắp đặt các thành phần và hàn.

Ở trên cùng bên trái là bộ điều chỉnh bậc xuống, chuyển đổi 12V từ pin ô tô thành 5V có thể được sử dụng bởi các thành phần khác.

Ở dưới cùng bên trái là mô-đun bus CAN, đọc các giá trị từ mạng bus CAN của ô tô và chuyển tiếp chúng tới Arduino.

Ở trên cùng bên phải là chiết áp kỹ thuật số (được nối dây như một bộ lưu biến) hoạt động như một biến trở giữa mặt đất và đầu vào Key1 của dàn âm thanh nổi.

Ở dưới cùng bên phải là Arduino, hoạt động như bộ não của bộ điều hợp, chuyển đổi các thông báo bus CAN thành các điện trở được đọc bởi âm thanh nổi.

Trên đầu vào 12V là cầu chì 150mA, rất có thể sẽ không bảo vệ mạch, nhưng có để ngăn cháy trong trường hợp đoản mạch.

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

Phần mềm
Phần mềm

Sau khi tải xuống, hãy đặt cả ba tệp.ino vào một thư mục duy nhất. Bằng cách đó, tất cả sẽ là một phần của cùng một bản phác thảo và được triển khai cho Arudino cùng nhau.

Bạn cũng cần thêm các thư viện bắt buộc vào Arduino IDE. Để thực hiện việc này, hãy tải xuống các tệp sau:

github.com/autowp/arduino-mcp2515/archive/…

github.com/philbowles/Arduino-X9C/archive/…

sau đó thêm cả hai bằng cách đi tới Phác thảo> Bao gồm Thư viện> Thêm Thư viện. Zip…

CanBusStereoAdapter.ino

Thiết lập cơ bản được thực hiện trong tệp này.

Lệnh chính Các giá trị bus CAN được xác định ở trên cùng. Trừ khi bạn có cùng một chiếc xe với tôi, rất có thể bạn sẽ phải đặt giá trị của chính mình. Bạn có thể sử dụng các giá trị thập lục phân từ trình ngửi, tôi đã sử dụng nhị phân để dễ thấy rằng không có sự chồng chéo ngẫu nhiên trong các bit.

Tất cả các ô tô không có các lệnh trên vô lăng giống nhau, vì vậy hãy thoải mái xóa, thêm hoặc chỉnh sửa các giá trị đã xác định.

Đừng quên thay thế id hệ thống con của bạn trong "STEERING_ID".

CanBus.ino

Tệp này thiết lập trình nghe bus CAN, thông dịch các gói và đặt các giá trị kháng vào một bộ đệm tròn.

Điều chỉnh cấu hình xe buýt CAN trong chức năng "setupCanBus" cho phù hợp với xe của bạn.

Chúng tôi sử dụng bộ đệm tròn vì như đã đề cập trước đó, đầu vào lệnh vô lăng nhanh hơn nhiều so với đầu vào âm thanh nổi. Bằng cách này, chúng tôi không bỏ lỡ bất kỳ lệnh nào trong khi chiết áp kỹ thuật số đang thực hiện công việc của nó. Nếu chúng ta nhập quá nhiều lệnh, những lệnh cũ nhất sẽ bị loại bỏ trước tiên, vì chúng ít quan trọng nhất. Điều này cũng cho phép chúng tôi xử lý trường hợp khi nhấn nhiều nút, vì đầu vào âm thanh nổi chỉ chấp nhận một giá trị duy nhất tại một thời điểm.

Nếu bạn đã thay đổi bất kỳ định nghĩa lệnh nào trong "CanBusStereoAdapter.ino", bạn cũng cần cập nhật chúng trong chức năng "handleMessageData". "handleMessageData" kiểm tra xem các khung dữ liệu bus CAN được cung cấp có chứa bất kỳ lệnh nào trong số các lệnh đã biết hay không bằng cách sử dụng thao tác bitwise AND.

Ví dụ: nếu tôi nhấn >> và + cùng lúc, điều này sẽ cho chúng ta một khung dữ liệu có giá trị là 0b10010000. >> (đối với ô tô của tôi) là 0b00010000 trong hệ nhị phân và + là 0b10000000.

--------------- >> -------------- + ------------- << --- - dữ liệu0 | 0b10010000 | 0b10010000 | Lệnh 0b10010000 | VÀ 0b00010000 | VÀ 0b10000000 | Kết quả AND 0b00001000 | = 0b00010000 | = 0b10000000 | = 0b00000000

Ở đây chúng ta có thể thấy rằng kết quả của phép toán AND sẽ lớn hơn 0 nếu lệnh hiện diện trong khung dữ liệu. Vì vậy, tất cả những gì chúng ta phải làm là kiểm tra {data frame} & {command value}> 0, cho mỗi lệnh chúng ta đã xác định.

Hãy nhớ rằng mỗi khung dữ liệu chứa các lệnh khác nhau, vì vậy sẽ ổn nếu các giá trị lệnh giống nhau, vì chúng tôi đang kiểm tra chúng dựa trên các khung của chính chúng. Trong ví dụ của tôi, cả hai << và ESC đều có cùng giá trị 0b00001000 (0x08), nhưng << là trong data0 và ESC trong data1.

Sau khi chúng tôi xác định rằng một lệnh có trong khung, chúng tôi thêm giá trị pot kỹ thuật số vào vùng đệm tròn. Các giá trị nằm trong khoảng từ 0 đến 99, nhưng tôi nhận thấy rằng "điện áp" được đọc bởi dàn âm thanh không phải là tuyến tính, vì vậy hãy tự kiểm tra các giá trị cho chính mình.

DigitalPot.ino

Tệp này bật các giá trị ra khỏi bộ đệm tròn và gửi chúng đến nồi kỹ thuật số để thực thi. Trong trường hợp của tôi "pot.setPotMin (false);" sẽ tăng điện trở lên mức tối đa, mà âm thanh nổi sẽ đọc là "điện áp" tối đa. Hệ thống âm thanh nổi của bạn có thể yêu cầu bạn đặt nồi kỹ thuật số ở mức tối thiểu, vì vậy hãy thử nghiệm nó.

Bước 5: Bao vây dự án

Bao vây dự án
Bao vây dự án

Tôi có một máy in 3D vì vậy tôi đã quyết định in vỏ bọc hai phần cho bộ điều hợp của mình. Tôi đã bao gồm một tệp Fusion 360 mà bạn có thể chỉnh sửa và các tệp gcode sẽ phù hợp với bảng điều khiển có kích thước 60x80mm.

Nếu bạn không có quyền truy cập vào máy in 3D, bạn có thể sử dụng bao che dự án làm sẵn hoặc hộp đựng chắc chắn.

Bước 6: Kết luận

Ban đầu tôi dự định kết nối bộ chuyển đổi với nguồn điện liên tục và thức dậy trên một số thông báo CAN bus nhất định, vì ô tô của tôi không có dây đánh lửa trong khoang âm thanh nổi. Sau đó, tôi quyết định chống lại nó vì tôi không muốn mạo hiểm tiêu hao pin và lo lắng về bộ chuyển đổi khi tôi đang ở xa ô tô. Tôi đã sử dụng bộ chia hộp cầu chì ô tô để chạy dây đánh lửa và không phải làm phức tạp thêm bộ chuyển đổi.

Từ các thử nghiệm của tôi, mức tiêu thụ điện là 20-30 mA. Tôi đã giảm nó xuống 10 mA ở chế độ ngủ và thậm chí có thể xuống thấp hơn bằng cách loại bỏ đèn LED khỏi các thành phần, nhưng tôi quyết định không bận tâm đến nó vì nó sẽ chỉ chạy khi xe đang chạy.

Tôi khá hài lòng với kết quả cuối cùng. Thời gian phản hồi là hợp lý, và nó hiếm khi bỏ lỡ lệnh.

Mặc dù khoản đầu tư thời gian của tôi lớn hơn nhiều so với chi phí của bộ chuyển đổi bán sẵn trên thị trường (không hoạt động), nhưng kiến thức tôi thu được là vô giá.

Đề xuất: