Mục lục:

Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới: 9 bước (có hình ảnh)
Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới: 9 bước (có hình ảnh)

Video: Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới: 9 bước (có hình ảnh)

Video: Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới: 9 bước (có hình ảnh)
Video: Hướng dẫn sử dụng màn hình Android trên xe ô tô #huongdansudungmanhinhandroid #android #dvdandroid 2024, Tháng bảy
Anonim
Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới
Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới
Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới
Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới
Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới
Arduino tùy chỉnh để giữ các nút vô lăng CÓ THỂ với âm thanh nổi trên ô tô mới

Tôi đã quyết định thay thế hệ thống âm thanh nổi trên xe hơi nguyên bản trong chiếc Volvo V70 -02 của mình bằng một hệ thống âm thanh nổi mới để tôi có thể thưởng thức những thứ như mp3, bluetooth và tai nghe.

Xe của tôi có một số điều khiển vô lăng cho hệ thống âm thanh nổi mà tôi muốn vẫn có thể sử dụng. Tôi không mong đợi đó là một vấn đề vì có một số bộ điều hợp trên thị trường được cho là tương thích với xe của tôi. Tuy nhiên, tôi sớm phát hiện ra rằng họ không phải vậy! (Có vẻ như bộ điều hợp cho V70 có thể gặp sự cố với -02 ô tô do giao thức CAN hơi khác.)

Vậy phải làm gì sau đó? Giữ âm thanh nổi cũ? Sống một cuộc sống với các nút không hoạt động? Dĩ nhiên là không! Nếu không có bộ điều hợp hoạt động trên thị trường thì chúng tôi sẽ phải xây dựng một bộ chuyển đổi!

Hướng dẫn này có thể được áp dụng (với một số điều chỉnh) cho xe ô tô mà các nút trên tay lái giao tiếp qua xe buýt CAN.

Bước 1: Tìm hiểu cách gửi lệnh đến âm thanh nổi

Tìm hiểu cách gửi lệnh đến âm thanh nổi
Tìm hiểu cách gửi lệnh đến âm thanh nổi
Tìm hiểu cách gửi lệnh đến âm thanh nổi
Tìm hiểu cách gửi lệnh đến âm thanh nổi

Điều đầu tiên bạn nên làm là tìm hiểu loại đầu vào từ xa mà dàn âm thanh mong đợi. Thông thường, các nhà sản xuất sẽ không cho bạn biết điều đó và bạn cũng có thể không có quyền truy cập vào các điều khiển từ xa đang hoạt động cho kỹ thuật đảo ngược.

Điều khiển từ xa cho dàn âm thanh mới của tôi (Kenwood) bao gồm một dây duy nhất và tôi không thể tìm hiểu bất kỳ thông tin nào về cách hoạt động của nó. Tuy nhiên, nó cũng có một giắc cắm 3,5 mm cho đầu vào từ xa. Tôi cũng không thể tìm ra bất cứ điều gì về điều đó. Nhưng có một số thông tin về giắc cắm 3,5 mm cho các thương hiệu khác cho thấy rằng các lệnh khác nhau được xác định bằng cách áp dụng một lực cản cụ thể giữa đầu và ống bọc (và tùy chọn giữa vòng và ống bọc). Ví dụ. https://forum.arduino.cc/index.php?topic=230068.0. Vì vậy, tôi quyết định thử điều đó, được trang bị một breadboard, một loạt các điện trở và một phích cắm 3,5 mm được cắm vào âm thanh nổi và kết nối với breadboard. Lúc đầu, không có gì được nhận dạng, nhưng âm thanh nổi có menu "chế độ học tập" và ở đó các lệnh có thể được thiết lập thành công trong khi áp dụng các kháng khác nhau. Sự thành công!

Tuy nhiên, sau đó tôi phát hiện ra rằng tôi đã mắc sai lầm ở đây: Không phải tất cả các lệnh mà âm thanh nổi dường như học được đều thực sự hoạt động. Ví dụ. 30 kOhm được tìm thấy trong chế độ học tập nhưng không hoạt động sau đó và đối với một số lệnh tôi thiết lập, sự khác biệt về điện trở quá nhỏ nên sau đó lệnh sai được kích hoạt.

Vì vậy, tôi khuyên bạn nên sử dụng breadboard có điện trở và nút chuyển đổi cho tất cả các lệnh từ xa mà bạn muốn xử lý và thực sự kiểm tra xem tất cả chúng sẽ hoạt động.

Nếu dàn âm thanh trên ô tô của bạn không thể nhận đầu vào theo cách tương tự thì bạn sẽ phải tìm cách hoạt động của nó để có thể điều chỉnh giải pháp này. Nếu bạn không thể tìm ra tất cả thì bạn có một vấn đề.

Bước 2: Tìm hiểu nơi kết nối với xe buýt CAN

Tìm hiểu nơi kết nối với xe buýt CAN
Tìm hiểu nơi kết nối với xe buýt CAN

Bạn cần xác định vị trí tốt để kết nối với xe buýt CAN. Vì bạn đang thay thế một dàn âm thanh nổi cũ giao tiếp qua CÓ THỂ, bạn sẽ có thể tìm thấy điều đó đằng sau dàn âm thanh nổi. Bus CAN bao gồm một cặp dây xoắn (CAN-L và CAN_H). Tham khảo sơ đồ đấu dây cho xe của bạn để đảm bảo.

Bước 3: Kỹ thuật đảo ngược thông báo CAN

Kỹ thuật đảo ngược thông báo CAN
Kỹ thuật đảo ngược thông báo CAN

Trừ khi Google có thể cho bạn biết bạn nên nghe thông báo CAN nào thì bạn sẽ cần kết nối với bus CAN và thực hiện một số thao tác ngược lại. Tôi đã sử dụng Arduino Uno và một tấm chắn CAN. (Bạn không thực sự cần tấm chắn CAN, vì bạn sẽ thấy sau này, bạn có thể sử dụng một số thành phần rẻ tiền trên bảng mạch chính.)

Tham khảo ý kiến của Google để biết bạn nên sử dụng tốc độ truyền khi kết nối với ô tô của mình. (Thông thường, bạn sẽ thấy rằng có mạng CAN tốc độ cao và tốc độ thấp. Bạn đang kết nối với mạng tốc độ thấp.)

Bạn cũng sẽ cần lập trình Arduino để ghi lại tất cả các thông báo CÓ THỂ qua giao diện nối tiếp để bạn có thể lưu chúng vào tệp nhật ký trên máy tính của mình. Arduino IDE tiêu chuẩn sẽ không lưu dữ liệu vào tệp nhật ký nhưng bạn có thể sử dụng ví dụ: Thay vào đó, bột trét.

Trước khi bắt đầu viết chương trình, bạn cần cài đặt thư viện CAN_BUS_Shield.

Dưới đây là một số mã giả để giúp bạn bắt đầu với chương trình của mình:

cài đặt()

{init kết nối nối tiếp init CAN thư viện} loop () {nếu nhận được thông báo CAN {đọc mục nhập nhật ký định dạng thông báo CAN ghi mục nhập nhật ký vào nối tiếp}}

Gợi ý:

Bạn sẽ sử dụng một phiên bản của lớp MCP_CAN để truy cập chức năng thư viện CAN:

MCP_CAN m_can;

Init CAN:

while (m_can.begin ()! = CAN_OK)

{trì hoãn (1000); }

Kiểm tra và đọc các tin nhắn CÓ THỂ:

while (m_can.checkReceive () == CAN_MSGAVAIL)

{// Nhận id CAN, độ dài tin nhắn và dữ liệu tin nhắn m_can.readMsgBufID (& m_canId, & m_msgLen, m_msgBuf); // Làm gì đó với dữ liệu tin nhắn tại đây}

Nếu bạn cần thêm trợ giúp, bạn có thể tìm thấy liên kết đến chương trình của tôi ở bước sau. Thư viện lá chắn CAN cũng bao gồm một ví dụ. Hoặc kiểm tra hướng dẫn của mviljoen2 bao gồm một bước tương tự.

Trước tiên, bạn sẽ cần một tệp tham chiếu để giúp bạn lọc ra dữ liệu. Chuyển đánh lửa sang chế độ radio và ghi lại mọi thứ trong vài phút mà không cần chạm vào bất kỳ nút nào.

Sau đó, đối với mỗi nút, hãy bắt đầu ghi nhật ký, nhấn nút và dừng ghi nhật ký.

Khi hoàn thành, bạn cần lọc ra mọi thứ có trong nhật ký tham chiếu của mình từ nhật ký nút để tìm các ứng cử viên của mình. Tôi phát hiện ra rằng vẫn còn rất nhiều thông báo nên tôi đã tạo thêm nhật ký và sau đó yêu cầu rằng "ứng cử viên cho lệnh A phải có trong tất cả các tệp nút A và không có trong tệp tham chiếu nào". Điều đó khiến tôi chỉ có một số khả năng để thử.

Các bản ghi sẽ chứa rất nhiều thông báo vì vậy bạn sẽ cần phải viết một số chương trình cho việc này hoặc có thể sử dụng Excel. (Tôi đã sử dụng một chương trình với các điều kiện được mã hóa rất khó cho nhu cầu của mình nên tôi e rằng tôi không thể cung cấp một chương trình mà bạn có thể sử dụng.)

Một lời cảnh báo: Bạn không thể chắc chắn rằng một nút sẽ luôn tạo ra một thông báo giống hệt nhau. Một số bit có thể chứa các bộ đếm tăng dần, v.v. (Tuy nhiên, bạn có thể ngoại trừ id thông báo giống nhau.)

Nếu bạn tình cờ có một chiếc Volvo V70 -02, đây là những gì bạn đang theo đuổi:

  • Id tin nhắn: 0x0400066Byte0: 0x00, 0x40, 0x80 hoặc 0xc0 (không quan tâm)
  • Byte1: 0x00 (không quan tâm)
  • Byte2: 0x00 (không quan tâm)
  • Byte3: 0x00-0x07 (không quan tâm)
  • Byte4: 0x1f (không quan tâm)
  • Byte5: 0x40 (không quan tâm)
  • Byte6: 0x40 (không quan tâm)
  • Byte7: Định danh nút: 0x77 = tăng âm lượng, 0x7b = giảm âm lượng, 0x7d = bản nhạc tiếp theo, 0x7e = bản nhạc trước.

Khi bạn tin rằng bạn đã tìm thấy các lệnh, bạn nên sửa đổi chương trình để nó chỉ ghi lại các thông báo thú vị. Nhìn vào cửa sổ nhật ký nối tiếp trong khi bạn nhấn các nút để xác minh rằng bạn đã xác định đúng thư.

Bước 4: Nguyên mẫu phần cứng

Nguyên mẫu phần cứng
Nguyên mẫu phần cứng

Phần cứng của bạn cần có khả năng:

  1. Xác định các lệnh nhận được trên xe buýt CAN
  2. Gửi lệnh ở định dạng khác đến âm thanh nổi

Nếu bạn có đủ không gian, bạn có thể sử dụng Arduino và tấm chắn CÓ THỂ cho phần đầu tiên và gắn một số phần cứng bổ sung cho phần thứ hai. Tuy nhiên có một số hạn chế:

  • Chi phí của lá chắn CAN
  • Kích thước
  • Nguồn điện Arduino sẽ không hài lòng nếu nó được kết nối trực tiếp với ô tô của bạn 12V (nó có thể hoạt động nhưng tuổi thọ của nó có thể sẽ bị rút ngắn).

Vì vậy, thay vào đó tôi đã sử dụng như sau:

  • Atmega 328, "bộ não Arduino". (Có một số biến thể, hãy lấy biến thể tương đương với biến thể trên Arduino Uno. Bạn có thể mua nó có hoặc không có bộ nạp khởi động Arduino.)
  • 16 MHz tinh thể + tụ cho tín hiệu đồng hồ.
  • Bộ thu phát MCP2551 CÓ THỂ.
  • MCP2515 CAN điều khiển.
  • TSR1-2450, chuyển đổi 6,5-36V thành 5V. (Không được sử dụng trong nguyên mẫu vì phần mềm sẽ không quan tâm đến nguồn cung cấp điện.)
  • Công tắc CD4066B sẽ được sử dụng khi gửi lệnh đến dàn âm thanh nổi.
  • Một vài điện trở. (Các giá trị có thể được tìm thấy trong sơ đồ Eagle ở bước sau.)

Một điều tốt với cấu hình này là nó hoàn toàn tương thích với Arduino và thư viện lá chắn CAN.

Nếu bạn muốn xử lý nhiều hơn bốn nút, bạn có thể cân nhắc sử dụng thứ gì đó khác ngoài CD4066B. CD4066B có thể được mô tả như bốn công tắc trong một, mỗi công tắc được điều khiển bởi một trong các chân GPIO của Atmegas. Với mỗi công tắc có một điện trở được kết nối có thể được sử dụng để điều khiển điện trở được sử dụng làm đầu vào cho âm thanh nổi. Vì vậy, điều này có thể dễ dàng được sử dụng để gửi bốn lệnh khác nhau. Nếu chúng được kết hợp thì có thể thu được các giá trị điện trở bổ sung. Đây là nguyên nhân dẫn đến sai lầm mà tôi đã đề cập trước đó. Tôi có bốn nút, nhưng tôi đã lên kế hoạch thực hiện hai trong số chúng bằng cách nhấn dài và nhấn ngắn để cung cấp cho tôi sáu lệnh khác nhau. Nhưng cuối cùng tôi phát hiện ra rằng tôi không thể tìm thấy sự kết hợp của các điện trở có thể cung cấp cho tôi sáu kết hợp làm việc. Thay vào đó, có thể kết nối tín hiệu đầu ra analog với âm thanh nổi (đầu cắm 3,5 mm). (Lưu ý rằng Atmega không có chân ra analog thực sự nên sẽ cần một số phần cứng bổ sung.)

Với mục đích thử nghiệm, tôi cũng đã tạo một trình mô phỏng "xe hơi và âm thanh nổi" đơn giản để kết nối với nguyên mẫu của mình. Nó làm cho việc gỡ lỗi dễ dàng hơn và trừ khi bạn thích ngồi trong ô tô và chương trình của mình, tôi có thể khuyên bạn nên điều đó.

Nguyên mẫu được minh họa bằng breadboard dưới cùng trong hình ảnh. Để cung cấp điện, lập trình và ghi nhật ký nối tiếp, nó được gắn vào Arduino Uno nơi chip Atmega đã được gỡ bỏ.

Bảng mạch phía trên là bộ mô phỏng xe hơi + âm thanh nổi sẽ được sử dụng để thử nghiệm ban đầu đối với nguyên mẫu.

Nguyên mẫu + trình mô phỏng được thiết kế để hoạt động như thế này:

  • Nhấn một trong các nút chuyển đổi trên bảng mô phỏng. (Đó là các nút trên tay lái của bạn.)
  • Khi chương trình giả lập phát hiện một nút nhấn, nó sẽ gửi thông báo CAN tương ứng mỗi 70 ms miễn là nhấn nút. (Bởi vì các bản ghi mà tôi đã lấy trước đó chỉ ra rằng nó đang hoạt động như thế nào trong xe của tôi.) Nó cũng sẽ gửi rất nhiều tin nhắn CAN "rác" để mô phỏng giao thông khác trên xe buýt.
  • Tin nhắn CAN được gửi trên xe buýt CAN.
  • Các thông điệp CAN được nhận bởi mẫu thử nghiệm.
  • MCP2515 ném tất cả các thư không liên quan dựa trên id thư.
  • Khi MCP2515 nhận được một tin nhắn cần được xử lý, nó sẽ cho biết rằng nó có một tin nhắn được xếp hàng đợi.
  • Atmega sẽ đọc thông báo và quyết định nút nào được coi là đang hoạt động.
  • Atmega cũng sẽ theo dõi thời điểm nhận được tin nhắn cuối cùng, sau một thời gian nhất định, nút này sẽ được coi là phát hành. (Thông báo CAN chỉ cho biết rằng một nút đang tắt, không phải là nó đã được đẩy hoặc nhả ra.)
  • Nếu một nút được coi là hoạt động thì một hoặc nhiều công tắc trong CD4066B sẽ được kích hoạt.
  • Trình mô phỏng (hiện đang hoạt động như một hệ thống âm thanh nổi của bạn) sẽ phát hiện ra rằng có một lực cản được áp dụng giữa đầu mút và ống bọc. (Đầu này được kết nối với 3.3V và thông qua một điện trở đến một chân đầu vào tương tự. Khi không có lệnh nào hoạt động, chân này sẽ đọc 3.3V, khi một lệnh hoạt động, giá trị sẽ trở nên thấp hơn và nhận dạng lệnh.
  • Trong khi một lệnh được kích hoạt, đèn led tương ứng cũng sẽ được kích hoạt. (Có sáu đèn LED vì tôi định sử dụng cách bấm dài / ngắn khác nhau cho hai trong số các nút của mình.)

Để biết thêm chi tiết về phần cứng nguyên mẫu, hãy xem sơ đồ Eagle ở bước sau.

Thông tin chi tiết bổ sung về phần cứng bảng mô phỏng:

  • Tinh thể 16 MHz
  • Tụ điện 22 pF
  • Điện trở LED nên được chọn dựa trên các đặc tính của LED
  • Điện trở kết nối với A7 và 3.3V, chọn ví dụ: 2kOhm (không quan trọng).
  • Các điện trở kết nối với MCP2551 và MCP2515 được kéo lên / kéo xuống. Chọn ví dụ: 10 kOhm.

(Hoặc bạn có thể sử dụng lá chắn CÓ THỂ cho "phần CÓ THỂ" của trình mô phỏng nếu bạn muốn.)

Điều quan trọng là bạn phải biết cách các chân Atmega được ánh xạ tới các chân Arduino khi bạn thiết kế phần cứng.

(Không kết nối trực tiếp bất kỳ đèn led nào với CD 4066B, nó chỉ có thể xử lý dòng điện thấp. Tôi đã thử điều đó khi lần đầu tiên kiểm tra đầu ra và con chip trở nên vô dụng. Điều tốt là tôi đã mua một vài chiếc chỉ vì chúng rất rẻ.)

Bước 5: Lập trình cầu chì

Có thể bạn đã nhận thấy ở bước trước rằng nguyên mẫu không có thành phần riêng biệt nào để tạo tín hiệu đồng hồ cho MCP2515. Đó là bởi vì đã có một tinh thể 16 MHz được sử dụng làm tín hiệu xung nhịp Atmega mà chúng ta có thể sử dụng. Nhưng chúng ta không thể đơn giản kết nối nó trực tiếp với MCP2515 và theo mặc định không có tín hiệu hết clock trên Atmega.

(Nếu muốn, bạn có thể bỏ qua bước này và thay vào đó thêm phần cứng xung nhịp bổ sung.)

Tuy nhiên, chúng ta có thể sử dụng một thứ gọi là "lập trình cầu chì" để kích hoạt tín hiệu xung nhịp trên một trong các chân GPIO.

Trước tiên, bạn sẽ cần tìm một tệp có tên "boards.txt "được sử dụng bởi Arduino IDE của bạn. Bạn sẽ cần sao chép mục nhập cho Arduino Uno, đặt tên mới cho nó và thay đổi giá trị cho low_fuses.

Bảng mới của tôi trông như thế này:

##################################################### ############ # Dựa trên Arduino Uno # Thay đổi: # low_fuses được thay đổi từ 0xff thành 0xbf để bật xung nhịp 16 MHz # ra trên Atmega PB0 / pin 14 = Arduino D8

clkuno.name = Hết giờ (Arduino Uno)

clkuno.upload.protocol = arduino clkuno.upload.maximum_size = 32256 clkuno.upload.speed = 115200 clkuno.bootloader.low_fuses = 0xbf clkuno.bootloader.high_fuses = 0xde clkuno.bootloader.extended_fuses clkuno.bootloader.extended_fuses.bootloader.file = optiboot_atmega328.hex clkuno.bootloader.unlock_bits = 0xff clkuno.bootloader.lock_bits = 0xcf clkuno.build.mcu = atmega328p clkuno.build.f_cpu = 16000000L clkuno.build.core = arduino clkuno.

##############################################################

Lưu ý rằng đồng hồ ra được kích hoạt bằng cách đặt bit điều khiển của nó thành 0.

Khi bạn đã tạo bo mạch mới trong tệp cấu hình bo mạch, bạn sẽ phải ghi một bộ tải khởi động mới vào Atmega. Có nhiều cách khác nhau để thực hiện việc này, tôi đã sử dụng phương pháp được mô tả trong

Sau khi bạn đã thực hiện việc này, hãy nhớ chọn loại bảng mới của bạn chứ không phải Arduino Uno khi bạn tải một chương trình lên Atmega.

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

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

Đã đến lúc làm cho phần cứng ngu ngốc trở nên thông minh bằng cách thêm một số phần mềm.

Dưới đây là một số mã giả cho nguyên mẫu:

lastReceiveTime = 0

lastReceiveCmd = none cmdTimeout = 100 setup () {kích hoạt cơ quan giám sát cấu hình các chân D4-D7 làm chân đầu ra init CAN thiết lập CAN lọc} loop () {đặt lại cơ quan giám sát nếu (nhận được thông báo CAN) {cho mỗi lệnh nút {nếu thông báo CAN thuộc về lệnh nút {lastReceiveTime = now lastReceiveCmd = cmd}}} if now> lastReceiveTime + cmdTimeout {lastRenitionCmd = none} cho mỗi lệnh nút {if lastReceiveCmd là lệnh nút {set command pin output = on} else {set command pin output = off }}}

cmdTimeout quyết định chúng ta nên đợi bao lâu trước khi xem xét nút hoạt động cuối cùng được phát hành. Bởi vì các lệnh thông báo nút CAN được gửi khoảng 70 ms nên nó cần phải lớn hơn so với lệnh với một số lề. Nhưng nếu nó là lớn sẽ có một trải nghiệm trễ. Vì vậy, 100 ms có vẻ như là một ứng cử viên tốt.

Nhưng một cơ quan giám sát là gì? Đó là một tính năng phần cứng nhỏ hữu ích có thể cứu chúng ta trong trường hợp xảy ra sự cố. Hãy tưởng tượng rằng chúng ta có một lỗi khiến chương trình bị treo trong khi lệnh tăng âm lượng đang hoạt động. Sau đó, chúng tôi sẽ kết thúc với âm thanh nổi ở âm lượng tối đa! Nhưng nếu cơ quan giám sát không được đặt lại trong thời gian cụ thể, nó sẽ quyết định rằng có điều gì đó không mong muốn đã xảy ra và chỉ cần đặt lại.

void setup ()

{// cho phép tối đa 250 ms cho vòng lặp wdt_enable (WDTO_250MS); // thứ init khác} void loop () {wdt_reset (); // làm công việc}

CÓ THỂ lọc? Vâng, bạn có thể cấu hình bộ điều khiển CAN để loại bỏ tất cả các thông báo không phù hợp với bộ lọc để phần mềm không phải mất thời gian cho các thông báo mà chúng ta không quan tâm.

mặt nạ dài không dấu = 0x1fffffff; // Bao gồm tất cả 29 bit tiêu đề trong mặt nạ

bộ lọc dài không dấuId = 0x0400066; // Chúng tôi chỉ quan tâm đến thông báo CAN này id m_can.init_Mask (0, CAN_EXTID, mask); // Mặt nạ 0 áp dụng cho bộ lọc 0-1 m_can.init_Mask (1, CAN_EXTID, mặt nạ); // Mặt nạ 1 áp dụng cho bộ lọc 2-5 m_can.init_Filt (0, CAN_EXTID, filterId); m_can.init_Filt (1, CAN_EXTID, filterId); m_can.init_Filt (2, CAN_EXTID, filterId); m_can.init_Filt (3, CAN_EXTID, filterId); m_can.init_Filt (4, CAN_EXTID, filterId); m_can.init_Filt (5, CAN_EXTID, filterId);

Kiểm tra mã thư viện CAN và tài liệu điều khiển CAN để biết thêm chi tiết về cách thiết lập bộ lọc + mặt nạ.

Bạn cũng có thể thiết lập bộ điều khiển CAN để tăng ngắt khi nhận được thông báo (chưa được lọc ra). (Không có trong ví dụ trên nhưng có một số mã cho nó trong chương trình của tôi.) Trong trường hợp này, nó không thực sự thêm bất kỳ giá trị nào và có thể gây nhầm lẫn nếu bạn không quen lập trình.

Tóm lại, đó là phần mềm nguyên mẫu. Nhưng chúng tôi cũng cần một số mã cho bảng mô phỏng:

lastSentTime = 0

minDelayTime = 70 setup () {cấu hình chân A0-A5 làm chân đầu ra, cấu hình chân D4-D7 làm chân đầu vào với pullup bên trong. init CAN} loop () {send "junk" can msg set activeButton = none for each button {if button is push {set activeButton = button}} if activeButton! = none {if now> lastSentTime + minDelayTime {send button lệnh có thể nhắn tin } set lastSentTime = now }finity = read pin A7 foreach (cmd) {if (min <finity <max) {led on} else {led off}} đợi 1 ms}

Điều này sẽ liên tục gửi tin nhắn CAN "rác" khoảng mỗi ms và trong khi một nút được đẩy lệnh tương ứng mỗi 70 ms.

Bạn có thể cần ghi lại đầu vào trên chân A7 trong khi nhấn các nút khác nhau để tìm ra các giá trị phù hợp cho các biến tối thiểu và tối đa thuộc mỗi nút. (Hoặc bạn có thể tính toán nó, nhưng thực sự đọc đầu vào sẽ cho bạn các giá trị chính xác hơn.)

Bạn cần phải cẩn thận một chút khi lập trình các chế độ ghim. Nếu bạn vô tình đặt các chân dùng để sử dụng pullup bên trong làm chân đầu ra thì bạn sẽ tạo một lối tắt tiềm ẩn có thể làm hỏng Arduino của bạn khi bạn đặt đầu ra cao.

Nếu bạn muốn kiểm tra các chương trình của tôi, chúng có thể được tải xuống tại đây:

  • Chương trình ghi nhật ký tin nhắn CÓ THỂ
  • Chương trình cho bảng mô phỏng
  • Chương trình cho nguyên mẫu / bảng cuối cùng

Bạn nên biết rằng những chương trình đó không thực sự khớp với mã giả ở đây, chúng chứa rất nhiều thứ "bổ sung" không thực sự cần thiết và nếu bạn không quen với lập trình hướng đối tượng thì có thể hơi khó đọc..

Bước 7: Phần cứng cuối cùng

Phần cứng cuối cùng
Phần cứng cuối cùng
Phần cứng cuối cùng
Phần cứng cuối cùng
Phần cứng cuối cùng
Phần cứng cuối cùng

Khi bạn hài lòng với chương trình của mình (hãy nhớ kiểm tra nguyên mẫu trong ô tô sau khi kiểm tra lần cuối với bảng mô phỏng) thì đó là lúc để xây dựng phần cứng thực sự.

Bạn có ba tùy chọn ở đây:

  • Nhanh chóng và bẩn - hàn các thứ lại với nhau trên bảng nguyên mẫu PCB.
  • Hardcore DIY - khắc PCB của riêng bạn.
  • Cách lười biếng - đặt hàng một PCB chuyên nghiệp để hàn các thành phần trên.

Nếu bạn không vội, tôi có thể giới thiệu lựa chọn cuối cùng. Nếu bạn chỉ cần một chiếc PCB nhỏ như thế này thì rất rẻ nếu bạn đặt mua nó từ Trung Quốc. (Và sau đó bạn có thể sẽ nhận được mười miếng hoặc lâu hơn để bạn có thể mắc phải một số sai lầm khi hàn.)

Để đặt hàng PCB, bạn sẽ cần gửi thiết kế của mình ở định dạng Gerber. Có nhiều phần mềm khác nhau cho việc này. Tôi đã sử dụng Eagle mà tôi có thể giới thiệu. Bạn có thể mong đợi một vài giờ để học nó nhưng sau đó nó hoạt động tốt. Đối với những bảng nhỏ như thế này bạn có thể sử dụng miễn phí.

Hãy cẩn thận khi bạn thực hiện thiết kế. Bạn không muốn đợi bốn tuần để được giao hàng chỉ để biết rằng bạn đã làm sai điều gì đó.

(Nếu bạn có kỹ năng hàn tốt, bạn có thể thiết kế các thành phần được gắn trên bề mặt và mua một bộ chuyển đổi thực sự nhỏ. Tôi thì không.)

Sau đó đặt hàng tại v.d. https://www.seeedstudio.com/fusion_pcb.html. Làm theo hướng dẫn để biết cách tạo tệp Gerber từ thiết kế của bạn. Bạn cũng có thể xem trước kết quả để đảm bảo rằng nó ổn.

(Cuối cùng, tôi phải chọn các điện trở khác cho R4-R7 hơn được liệt kê trong hình sơ đồ. Thay vào đó tôi sử dụng 2k, 4,7k, 6,8k và 14,7k.)

Và hãy nhớ - đừng nhầm giữa việc đánh số chân Atmega với cách đánh số chân Arduino!

Tôi khuyên bạn không nên hàn trực tiếp chip Atmega mà hãy sử dụng ổ cắm. Sau đó, bạn có thể dễ dàng loại bỏ nó trong trường hợp bạn cần lập trình lại nó.

Bước 8: Gắn xe

Gắn trên ô tô
Gắn trên ô tô
Gắn trên ô tô
Gắn trên ô tô

Bây giờ đến phần thú vị nhất - gắn nó vào xe của bạn và bắt đầu sử dụng! (Sau khi bạn đã làm / mua một chiếc ốp lưng cho nó.)

Nếu bạn đã thử nghiệm đầy đủ nguyên mẫu trong xe của mình, mọi thứ sẽ hoạt động hoàn hảo.

(Như tôi đã đề cập trước đó, tôi đã không làm như vậy, vì vậy tôi phải thay thế một số điện trở và thực hiện một số thay đổi trong chương trình của mình.)

Ngoài ra, hãy cân nhắc xem bạn có nên gắn nó phía sau dàn âm thanh hay ở một nơi nào khác hay không. Tôi tìm thấy một vị trí tốt bên trên hộp đựng găng tay của mình, nơi tôi có thể lấy nó từ bên trong hộp đựng găng tay mà không cần lấy bất cứ thứ gì ra. Điều đó có thể hữu ích nếu tôi quyết định nâng cấp nó sau này.

Cuối cùng thì các nút của tôi cũng hoạt động trở lại! Làm sao tôi có thể sống sót trong hai tháng mà không có chúng?

Bước 9: Cải tiến trong tương lai

Như đã đề cập, nếu tôi tạo phiên bản 2.0 này, tôi sẽ thay thế 4066B bằng một thứ khác (có thể là chiết áp kỹ thuật số) để có tính linh hoạt cao hơn.

Ngoài ra còn có rất nhiều thứ khác bạn có thể làm. Ví dụ. thêm mô-đun bluetooth và tạo ứng dụng điều khiển từ xa cho điện thoại của bạn. Hoặc một mô-đun gps, sau đó khi bạn ở gần nhà, bạn có thể tự động tăng âm lượng và gửi thông báo "cửa sổ xuống" CÓ THỂ để tất cả những người hàng xóm của bạn có thể thưởng thức âm nhạc tuyệt vời của bạn.

Đề xuất: