Mục lục:

Màn hình ô tô Arduino: 7 bước (có hình ảnh)
Màn hình ô tô Arduino: 7 bước (có hình ảnh)

Video: Màn hình ô tô Arduino: 7 bước (có hình ảnh)

Video: Màn hình ô tô Arduino: 7 bước (có hình ảnh)
Video: Tự học lập trình Arduino Tập 23 | kết nối lcd 16x2 với arduino P1 | in ký tự cho màn hình lcd 16x2 2024, Tháng bảy
Anonim
Image
Image
Màn hình ô tô Arduino
Màn hình ô tô Arduino
Màn hình ô tô Arduino
Màn hình ô tô Arduino

Tôi đã xây dựng màn hình dựa trên chẩn đoán trên bo mạch (OBD-II) bằng cách sử dụng màn hình LCD TFT 7 của Adafruit, Teensy 3.6, Bộ điều hợp Freematics OBD-II I2C và một số cảm biến dự phòng tiếng kêu mà tôi tìm thấy trên Amazon. Màn hình có hai trang: một cho khi Honda Accord của tôi đang lái và một cho khi ngược lại.

Khi ô tô của tôi đang lái, RPM, MPH, phần trăm tải động cơ, điện áp pin, nhiệt độ cabin và nhiệt độ nước làm mát động cơ được hiển thị (có một số thống kê xe khác có sẵn để hiển thị nếu người ta không muốn những số liệu này).

Khi ô tô của tôi đang lùi, Teensy 3.6 tương thích với Arduino IDE sẽ đọc một hình ảnh bitmap động về ô tô của tôi mà tôi tìm thấy trực tuyến, hiển thị nó và sau đó đọc các cảm biến dự phòng. Bốn cảm biến đều có khoảng cách tính bằng feet cộng với hình ảnh động phía sau xe thay đổi màu sắc dựa trên mức độ gần của đối tượng với xe (chỉ màu xanh lá cây có nghĩa là <5 feet, màu xanh lá cây và màu vàng có nghĩa là <2,6 feet và màu xanh lá cây, màu vàng, và màu đỏ có nghĩa là <1 foot).

Cuối cùng, tôi đã thêm khả năng làm mờ màn hình vào ban đêm.

Kết quả cuối cùng trông tuyệt vời và hoạt động rất tốt trong xe của tôi. Tôi thậm chí đã kết thúc việc cài đặt nó trong bảng điều khiển trung tâm, đó là một quá trình hoàn toàn khác mà tôi sẽ không tham gia trong phần hướng dẫn này. Dưới đây là danh sách các bộ phận mà tôi đã sử dụng để tạo ra màn hình LCD này.

1) Bộ chuyển đổi OBD-II của Freematics - $ 35

2) Cảm biến dự phòng - $ 15

3) Màn hình LCD TFT 7 - $ 38

4) Trình điều khiển màn hình LCD dựa trên SPI - $ 35

5) Thanh thiếu niên 3,6 - $ 30

6) Cấp độ Shifter - $ 4

7) 74HC125 Tri State Buffer IC - $ 6 cho 2 gói (Tôi chắc rằng bạn có thể tìm thấy tiếng kêu này ở nơi khác)

8) Thẻ MicroSD> = 1 GB - $ 4

9) Dây dẫn, tụ điện và điện trở.

10) LP3470-2.93 IC khởi động lại nguồn - $ 2

11) (tùy chọn): Cảm biến nhiệt độ DS18B20 - $ 8

12) (tùy chọn): Bộ chia OBD-II - $ 10

13) (tùy chọn): Thêm dây cầu chì mạch - $ 8 cho gói 5

Bước 1: Đọc các cảm biến dự phòng

Đọc các cảm biến dự phòng
Đọc các cảm biến dự phòng
Đọc các cảm biến dự phòng
Đọc các cảm biến dự phòng
Đọc các cảm biến dự phòng
Đọc các cảm biến dự phòng
Đọc các cảm biến dự phòng
Đọc các cảm biến dự phòng

Bước này khá phức tạp vì các cảm biến dự phòng này giao tiếp với một bộ thu phát và sau đó đến một màn hình LCD nhỏ như trong hình trên. Tôi muốn có một cách để loại bỏ màn hình của chúng và sử dụng của riêng tôi. Với sự trợ giúp của một trang web mà tôi tìm thấy sau một số googling (Cảm biến lùi đỗ xe), tôi đã có thể đọc giao thức truyền thông độc quyền mà bộ thu phát gửi đến màn hình LCD. Vì một số lý do, giao thức truyền thông không phải là giao thức điển hình như I2C, UART, CAN, USB, v.v. và giao thức khác nhau tùy thuộc vào nhà cung cấp. Tôi thực sự khuyên bạn nên mua bộ tôi đã liên kết ở trên nếu bạn định sử dụng mã của tôi vì nó được viết riêng cho các cảm biến đó.

Trước khi ngắt kết nối màn hình LCD mà họ cung cấp, tôi đã thăm dò ba dây nối bộ thu phát và màn hình LCD. Có dây + 5V màu đỏ, dây màu đen nối đất và dây màu xanh lam. Sau khi kết nối máy hiện sóng của tôi với dây màu xanh và mặt đất, tôi thấy một dấu vết tương tự như hình ảnh nhìn thấy ở trên nhưng không chính xác (tôi sử dụng hình ảnh từ trang web được liên kết ở trên). Dấu vết của tôi có bit bắt đầu thời lượng dài hơn CAO, tiếp theo là 17 bit thời lượng ngắn hơn. Các bit 0-5 sau bit bắt đầu không có thông tin hữu ích. Bit 6-8 tương ứng với cảm biến A, B, C hoặc D. Bit 9-16 tương ứng với chiều dài tính bằng mét. Tôi đã bao gồm một bản phác thảo Arduino IDE đọc các cảm biến và xuất dữ liệu qua bảng điều khiển nối tiếp.

Bước 2: Tạo hình ảnh bitmap và đưa nó vào thẻ MicroSD

Tạo hình ảnh bitmap và đưa nó vào thẻ MicroSD
Tạo hình ảnh bitmap và đưa nó vào thẻ MicroSD
Tạo hình ảnh bitmap và đưa nó vào thẻ MicroSD
Tạo hình ảnh bitmap và đưa nó vào thẻ MicroSD

Tôi đã sử dụng một phần mềm chỉnh sửa ảnh miễn phí có tên GIMP để cắt và thay đổi kích thước hình ảnh chiếc ô tô của mình từ chế độ xem trên cùng. Sau đó, tôi đã xuất hình ảnh dưới dạng hình ảnh bitmap 24 bit có tên "car.bmp" có kích thước 110 pixel x 250 pixel. Tôi đã tải nó lên thẻ microSD và đặt thẻ microSD vào vi điều khiển Teensy 3.6 của mình.

Lý do chính mà tôi sử dụng Teensy 3.6 thay vì UNO là tốc độ mà Teensy có thể đọc thẻ SD và hiển thị hình ảnh bằng trình điều khiển màn hình RA8875. Sử dụng UNO, quá trình này mất khoảng 8 giây, trong khi Teensy 3,6 mất 1,8 giây.

Bước 3: Kết nối phần cứng

Kết nối phần cứng
Kết nối phần cứng

Adafruit có một màn hình TFT LCD 7 thực sự đẹp mắt được điều khiển bởi một vi mạch có tên là RA8875. Tôi chọn trình điều khiển hiển thị và hiển thị này vì hai lý do. Thứ nhất, có nhiều thư viện được viết sẵn cho màn hình. Thứ hai, trình điều khiển màn hình có thể nói chuyện với bất kỳ vi điều khiển nào qua SPI, nghĩa là không có nhiều dây kết nối vi điều khiển với RA8875.

Có hai nhược điểm đối với thiết lập này. Đầu tiên là thực tế là có một lỗi phần cứng với bo mạch RA8875 từ Adafruit yêu cầu sử dụng IC đệm ba trạng thái 74HC125 nếu bạn muốn sử dụng bất kỳ thiết bị dựa trên SPI nào chẳng hạn như thẻ SD. Để hiểu đầy đủ hơn về lỗi phần cứng, vui lòng đọc diễn đàn sau. Thứ hai, là khoảng thời gian tương đối dài để hình ảnh được gửi đến màn hình LCD. Ngoài ra, khoảng thời gian dài để một hình ảnh được gửi đến màn hình LCD là do kết nối SPI, bị giới hạn bởi tốc độ đồng hồ của microntrollers và lượng lớn dữ liệu phải được gửi đến trình điều khiển màn hình. rất ít dây.

Tôi đã tạo một giản đồ Fritzing để bất kỳ ai muốn tạo màn hình này đều có thể dễ dàng đọc được chân nào trên Teensy 3.6 kết nối với. Tôi đã bao gồm một tệp.frz bên dưới. Hai thành phần duy nhất không được dán nhãn là tụ điện, đó là tụ điện 1F 16V và tụ gốm 100μF. Tôi bao gồm những thứ này để đảm bảo nguồn điện cho vi điều khiển Teensy là DC + 5V ổn định và không chứa bất kỳ điện áp tăng đột biến nào (có thể không cần thiết nhưng tôi đã bao gồm chúng vì nguồn điện áp của ô tô có thể dao động nhanh chóng tùy thuộc vào tải trên pin).

Một vài điều cần đề cập về các thành phần. Đầu tiên, bộ chuyển mức lấy bất kỳ tín hiệu 5V nào và biến nó thành điện áp an toàn 3.3V Teensy 3.6. Điều này là cần thiết cho bộ chuyển đổi OBD I2C cũng như bộ thu phát cảm biến dự phòng. Thứ hai, các dòng I2C của thanh thiếu niên yêu cầu điện trở kéo lên 4,7kΩ. Thứ ba, bốn điện trở kết nối "dây thời gian ban đêm" (dây làm mờ) và "dây tham gia dự phòng" là cần thiết để phục vụ như một bộ phân áp để đưa tín hiệu 12V-13V xuống tín hiệu khoảng 2,5-3V.

CẬP NHẬT 22/7/18: Tôi thấy cảm biến nhiệt độ bên trong của mô-đun OBD-I2C đang xuất ra những con số rất lạ. Đôi khi nó sẽ hoạt động, nhưng hầu hết thời gian, mô-đun đang xuất ra nhiệt độ trên 400 độ F. Vì lý do này, tôi quyết định thêm cảm biến nhiệt độ ds18b20 của riêng mình. Bạn được hoan nghênh sử dụng bất kỳ loại cảm biến nhiệt độ nào ở đây, nhưng bạn sẽ phải chỉnh sửa mã Arduino.

CẬP NHẬT 3/1/19: Teensy 3.6 không khởi động khi trời cực lạnh. Tôi đã thêm một mạch đặt lại nguồn để đảm bảo nó khởi động đúng cách.

Bước 4: Thiết kế đồ họa và trình điều khiển màn hình RA8875

Thiết kế đồ họa và trình điều khiển màn hình RA8875
Thiết kế đồ họa và trình điều khiển màn hình RA8875

Trình điều khiển màn hình RA8875 có một thư viện được gọi là Adafruit_RA8875, mà tôi đã sử dụng khi tạo các hình dạng được nhìn thấy trên trang đầu tiên và trang thứ hai. Thư viện cho RA8875 chỉ có thể tạo ra các đường thẳng, hình chữ nhật, hình chữ nhật tròn, hình tam giác, hình elip và hình tròn, vì vậy đồ họa phải được thiết kế một cách khéo léo để tạo ra các hình dạng phức tạp hơn. Ví dụ: vòng màu xám trên trang đầu tiên thực sự là một vòng tròn màu xám có đường kính lớn hơn, tiếp theo là một vòng tròn màu đen hoàn toàn có đường kính nhỏ hơn. Ngoài ra, một phần nhỏ của trang cảm biến dự phòng chứa 2 hình tam giác được sắp xếp theo cách chúng tạo thành hình đa giác. Tôi đã làm điều này để có thể thay đổi màu của một phần riêng lẻ của trang cảm biến dự phòng. Tệp Arduino cho màn hình chứa một loạt các điểm mà tôi đã sử dụng để theo dõi vị trí của các hình tam giác và các hình dạng khác.

Tôi đã sử dụng trang web tuyệt vời này để chọn màu RGB565 và xác định chúng trong bản phác thảo để tôi có thể sử dụng các màu không mặc định đã được xác định trước trong thư viện Adafruit_RA8875.

Về phông chữ, thư viện Adafruit_RA8875 chỉ hỗ trợ một phông chữ trừ khi bạn nhận xét về một phần của thư viện, phần này cho phép bạn sử dụng phông chữ của thư viện Adafruit_GFX. Tôi đã bao gồm thư viện Adafruit_RA8875 được sửa đổi bên dưới. Tôi chỉ nhận xét một vài dòng mã và sau đó có thể sử dụng các phông chữ trong thư viện Adafruit_GFX. Ngoài ra, để sử dụng phông chữ 7 phân đoạn mà tôi đã sử dụng trong dự án này, hãy đảm bảo rằng tệp "FreeSevenSegNumFont.h" mà tôi đang ở trong thư mục phông chữ trong thư viện Adafruit_GFX.

Bước 5: Tải lên bản phác thảo

Tải lên bản phác thảo
Tải lên bản phác thảo
Tải lên bản phác thảo
Tải lên bản phác thảo

Để tải bản phác thảo lên Teensy 3.6, bạn sẽ cần cài đặt Teensyduino. Sau đó, bạn sẽ cần phải thay thế các thư viện Adafruit_RA8875 và Adafruit_GFX trong vị trí thư viện dành cho thanh thiếu niên (không phải vị trí điển hình của bạn trong tài liệu). Trên Mac, tôi phải nhấp chuột phải vào biểu tượng ứng dụng Arduino trong các ứng dụng, sau đó điều hướng đến / Contents / Java / hardware / teensy / avr / library. Trên windows, tôi khá chắc chắn rằng nó nằm dưới ổ C của bạn trong các tệp Chương trình x86, Arduino và sau đó là thư mục phần cứng trong đó. Sau khi làm điều đó, bạn sẽ cần phải thay đổi vị trí sổ phác thảo trong ứng dụng Arduino bằng cách chỉnh sửa nó theo tùy chọn thành nơi thư viện dành cho lứa tuổi thanh thiếu niên của bạn (tức là /Application/Arduino.app/Contents/Java/hardware/teensy/avr).

CẬP NHẬT 22/7/16: Vì vấn đề cảm biến nhiệt độ bên trong mà tôi đã nói trước đó, tôi phải cài đặt cảm biến nhiệt độ mô-đun DS18B20. Bạn sẽ thấy 4 bản phác thảo arduino trong tệp zip. Vui lòng tải lên bản phác thảo display_code nếu bạn muốn sử dụng cảm biến nhiệt độ bên trong của mô-đun OBD-II I2C. Vui lòng tải lên bản phác thảo display_code_with_new_tempeosystem_sensor nếu bạn muốn sử dụng mô-đun DS18B20 mà tôi đã liên kết ở trên.

CẬP NHẬT 17/11/17: Tôi đã sửa một số lỗi trong phần mềm bao gồm DS18B20 xuất ra nhiệt độ 185 Fahrenheit, màn hình không bật lên trong thời tiết lạnh và các điểm ảnh bị sai màu khi màn hình bị mờ.

Sau đó, sử dụng hình ảnh tôi có ở trên để đảm bảo cài đặt dành cho lứa tuổi thanh thiếu niên của bạn phù hợp với hình ảnh. Tôi nhận thấy việc ép xung thanh thiếu niên lên 240MHz không cho phép bộ điều hợp I2C OBD-II giao tiếp với thanh thiếu niên. Cuối cùng, chỉ cần nhấp vào tải lên.

Tôi đã viết các bình luận khá rộng rãi trong các tệp phác thảo arduino. Vui lòng xem ở đó để biết giải thích về cách hoạt động của phần mềm. Xin vui lòng liên hệ với tôi với bất kỳ câu hỏi. Tôi sẽ cố gắng trả lời họ trong khả năng của mình. Chúc may mắn!

Bước 6: In 3D Vỏ màn hình LCD

In 3D Vỏ màn hình LCD
In 3D Vỏ màn hình LCD
In 3D một Vỏ LCD
In 3D một Vỏ LCD
In 3D một Vỏ LCD
In 3D một Vỏ LCD

Tôi đã tạo một nắp trên và dưới màn hình LCD được in 3D để bảo vệ màn hình 7 . Tôi đã đính kèm các tệp phần. IPT của nhà phát minh cũng như các tệp. STL.

Tôi cũng bao gồm một phần gọi là backup_sensor_ring.ipt, là một vòng vừa vặn với các cảm biến dự phòng mà tôi đã liên kết ở trên. Xe của tôi đã khoan sẵn các lỗ cảm biến dự phòng quá lớn so với các cảm biến dự phòng mà tôi đã mua trên Amazon, vì vậy tôi phải tạo một vòng đệm để vừa với các cảm biến dự phòng. Nếu bạn định khoan vào ốp lưng của mình bằng miếng khoan tròn đi kèm trong bộ, bạn sẽ không cần bộ phận này.

Bước 7: Tách cổng OBD-II để Arduino chỉ có nguồn khi ô tô đang chạy

Tách cổng OBD-II nên Arduino chỉ có nguồn khi ô tô đang chạy
Tách cổng OBD-II nên Arduino chỉ có nguồn khi ô tô đang chạy
Tách cổng OBD-II nên Arduino chỉ có nguồn khi ô tô đang chạy
Tách cổng OBD-II nên Arduino chỉ có nguồn khi ô tô đang chạy
Tách cổng OBD-II nên Arduino chỉ có nguồn khi ô tô đang chạy
Tách cổng OBD-II nên Arduino chỉ có nguồn khi ô tô đang chạy

Tôi nhận ra ngay sau khi lắp đặt màn hình của mình rằng màn hình luôn bật, ngay cả khi xe tắt máy. Nhìn vào sơ đồ chân của OBD-II, tôi thấy rằng đường dây điện 12V đến đầu nối OBD-II luôn được kết nối trực tiếp với pin.

Để giải quyết vấn đề này, tôi đã mua một bộ chia OBD-II, cắt dây đi đến chân 16 trên một trong hai đầu nối trên bộ chia, sau đó kết nối dây đã cắt đó với một dây mạch bổ sung.

Sau đó, sử dụng đồng hồ vạn năng của mình, tôi đi đến hộp cầu chì bên lái xe và kiểm tra các cầu chì hiện có để xem cầu chì nào có điện sau khi chìa khóa được bật vào ổ điện.

Cuối cùng, tôi kết nối thêm một dây mạch với cầu chì mà tôi đã đặt để màn hình hiện chỉ bật khi xe của tôi đang chạy. Vui lòng thực hiện một số nghiên cứu về cách thêm mạch đúng cách cho ô tô của bạn. Tôi thấy hướng dẫn trên youtube này là một hướng dẫn tốt.

Đề xuất: