สารบัญ:

Arduino Car Display: 7 ขั้นตอน (พร้อมรูปภาพ)
Arduino Car Display: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Car Display: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Car Display: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Lesson 21: Seven Segment Display with Arduino | Step by Step Arduino Course 2024, กรกฎาคม
Anonim
Image
Image
Arduino Car Display
Arduino Car Display
Arduino Car Display
Arduino Car Display

ฉันสร้างจอแสดงผลแบบออนบอร์ดสำหรับการวินิจฉัย (OBD-II) โดยใช้ TFT LCD ขนาด 7 นิ้วจาก Adafruit, Teensy 3.6, อะแดปเตอร์ Freematics OBD-II I2C และเซ็นเซอร์สำรองบางตัวที่ฉันพบใน Amazon จอแสดงผลมีสองหน้า: อันหนึ่งสำหรับ Honda Accord ของฉันในการขับขี่และอีกอันสำหรับเมื่ออยู่ในระบบถอยหลัง

เมื่อรถของฉันอยู่ในระบบขับเคลื่อน RPM, MPH, เปอร์เซ็นต์ภาระเครื่องยนต์, แรงดันแบตเตอรี่, อุณหภูมิห้องโดยสาร และอุณหภูมิน้ำหล่อเย็นเครื่องยนต์จะแสดงขึ้น (มีสถิติยานพาหนะอื่นๆ อีกหลายรายการที่จะแสดงหากไม่ต้องการข้อมูลเหล่านี้)

เมื่อรถของฉันถอยกลับ Teensy 3.6 ที่เข้ากันได้กับ Arduino IDE จะอ่านภาพบิตแมปแบบเคลื่อนไหวของรถของฉันที่ฉันพบทางออนไลน์ แสดง แล้วอ่านเซ็นเซอร์สำรอง เซ็นเซอร์ทั้งสี่ตัวแต่ละตัวมีระยะห่างเป็นฟุต บวกกับภาพเคลื่อนไหวด้านหลังรถซึ่งจะเปลี่ยนสีตามระยะที่วัตถุอยู่ใกล้กับรถ (สีเขียวหมายถึง <5 ฟุต สีเขียวและสีเหลืองหมายถึง <2.6 ฟุต และสีเขียว สีเหลือง และสีแดงหมายถึง < 1 ฟุต)

สุดท้าย ฉันได้เพิ่มความสามารถในการหรี่จอแสดงผลในเวลากลางคืน

ผลลัพธ์ที่ได้ดูดีและทำงานได้ดีมากในรถของฉัน ฉันยังลงเอยด้วยการติดตั้งในคอนโซลกลางซึ่งเป็นกระบวนการอื่นทั้งหมดที่ฉันจะไม่เข้าไปอยู่ในคำแนะนำนี้ รายการชิ้นส่วนที่ฉันใช้สร้างจอ LCD นี้อยู่ด้านล่าง

1) อะแดปเตอร์ Freematics OBD-II - $35

2) เซ็นเซอร์สำรอง - $15

3) จอแสดงผล TFT LCD ขนาด 7 นิ้ว - 38 เหรียญ

4) ไดรเวอร์จอแสดงผล LCD ที่ใช้ SPI - $35

5) ทีนซี่ 3.6 - $30

6) ตัวเลื่อนระดับ - $4

7) 74HC125 Tri State Buffer IC - $ 6 สำหรับ 2 แพ็ค (ฉันแน่ใจว่าคุณสามารถหา cheeper นี้ได้จากที่อื่น)

8) การ์ด MicroSD >= 1 GB - $4

9) ลวด ตัวเก็บประจุ และตัวต้านทาน

10) LP3470-2.93 เปิด IC รีเซ็ต - $2

11) (อุปกรณ์เสริม): DS18B20 Temperature Sensor - $8

12) (ตัวเลือก): ตัวแยก OBD-II - $10

13) (อุปกรณ์เสริม): เพิ่มสายฟิวส์วงจร - $8 สำหรับแพ็ค 5

ขั้นตอนที่ 1: การอ่านเซ็นเซอร์สำรอง

การอ่านเซ็นเซอร์สำรอง
การอ่านเซ็นเซอร์สำรอง
การอ่านเซ็นเซอร์สำรอง
การอ่านเซ็นเซอร์สำรอง
การอ่านเซ็นเซอร์สำรอง
การอ่านเซ็นเซอร์สำรอง
การอ่านเซ็นเซอร์สำรอง
การอ่านเซ็นเซอร์สำรอง

ขั้นตอนนี้ยุ่งยากเพราะเซ็นเซอร์สำรองเหล่านี้สื่อสารกับตัวรับส่งสัญญาณแล้วจึงไปยังจอ LCD ขนาดเล็กดังที่เห็นในภาพด้านบน ฉันต้องการวิธีที่จะกำจัดจอแสดงผลของพวกเขาและใช้งานของฉันเอง ด้วยความช่วยเหลือของเว็บไซต์ที่ฉันพบหลังจาก googling (การแฮ็กเซ็นเซอร์ที่จอดรถแบบย้อนกลับ) ฉันสามารถอ่านโปรโตคอลการสื่อสารที่เป็นกรรมสิทธิ์ซึ่งตัวรับส่งสัญญาณส่งไปยังหน้าจอ LCD ด้วยเหตุผลบางประการ โปรโตคอลการสื่อสารจึงไม่ใช่โปรโตคอลทั่วไป เช่น I2C, UART, CAN, USB เป็นต้น และโปรโตคอลจะแตกต่างกันไปตามซัพพลายเออร์ ฉันขอแนะนำอย่างยิ่งให้คุณซื้อชุดที่ฉันเชื่อมโยงไว้ด้านบน หากคุณกำลังจะใช้รหัสของฉัน เพราะมันเขียนขึ้นสำหรับเซ็นเซอร์เหล่านั้นโดยเฉพาะ

ก่อนที่จะถอด LCD ที่พวกเขาให้มา ฉันได้ตรวจสอบสายไฟสามเส้นที่เชื่อมระหว่างตัวรับส่งสัญญาณและ LCD มีสายสีแดง +5V สายดินสีดำ และสายสีน้ำเงิน หลังจากต่อออสซิลโลสโคปของฉันเข้ากับลวดสีน้ำเงินและกราวด์แล้ว ฉันเห็นร่องรอยคล้ายกับภาพที่เห็นด้านบนแต่ไม่ตรงทั้งหมด (ฉันใช้รูปภาพจากเว็บไซต์ที่ลิงก์ด้านบน) การติดตามของฉันมีบิตเริ่มต้นที่มีระยะเวลานานขึ้นสูง ตามด้วยบิตที่มีระยะเวลาสั้นกว่าอีก 17 บิต บิต 0-5 หลังจากบิตเริ่มต้นไม่มีข้อมูลที่เป็นประโยชน์ บิต 6-8 สอดคล้องกับเซ็นเซอร์ A, B, C หรือ D. บิต 9-16 สอดคล้องกับความยาวเป็นเมตร ฉันรวมร่าง Arduino IDE ที่อ่านเซ็นเซอร์และส่งข้อมูลออกผ่านคอนโซลอนุกรม

ขั้นตอนที่ 2: การสร้างภาพบิตแมปและใส่ลงในการ์ด MicroSD

การสร้างภาพบิตแมปและใส่ลงในการ์ด MicroSD
การสร้างภาพบิตแมปและใส่ลงในการ์ด MicroSD
การสร้างภาพบิตแมปและใส่ลงในการ์ด MicroSD
การสร้างภาพบิตแมปและใส่ลงในการ์ด MicroSD

ฉันใช้ซอฟต์แวร์แก้ไขรูปภาพฟรีที่เรียกว่า GIMP เพื่อครอบตัดและปรับขนาดรูปภาพรถของฉันจากมุมมองด้านบน จากนั้นฉันก็ส่งออกรูปภาพเป็นรูปภาพบิตแมป 24 บิตชื่อ "car.bmp" ซึ่งมีขนาด 110 พิกเซลคูณ 250 พิกเซล ฉันอัปโหลดสิ่งนี้ไปยังการ์ด microSD และใส่การ์ด microSD ในไมโครคอนโทรลเลอร์ Teensy 3.6 ของฉัน

เหตุผลหลักที่ฉันเลือกใช้ Teensy 3.6 แทนที่จะเป็น UNO คือความเร็วที่ Teensy สามารถอ่านการ์ด SD และแสดงภาพโดยใช้ไดรเวอร์การแสดงผล RA8875 การใช้ UNO กระบวนการใช้เวลาประมาณ 8 วินาที ในขณะที่ Teensy 3.6 ใช้เวลา 1.8 วินาที

ขั้นตอนที่ 3: เชื่อมต่อฮาร์ดแวร์

การเชื่อมต่อฮาร์ดแวร์
การเชื่อมต่อฮาร์ดแวร์

Adafruit มี TFT LCD ขนาด 7 นิ้วที่ดูดีจริงๆ ซึ่งขับเคลื่อนโดย IC ที่เรียกว่า RA8875 ฉันเลือกไดรเวอร์จอแสดงผลและจอแสดงผลนี้ด้วยเหตุผลสองประการ ประการแรก มีไลบรารีจำนวนมากที่เขียนไว้ล่วงหน้าสำหรับจอแสดงผล ประการที่สอง ไดรเวอร์การแสดงผลสามารถพูดคุยกับ ไมโครคอนโทรลเลอร์บน SPI หมายความว่ามีสายไม่มากนักที่เชื่อมต่อไมโครคอนโทรลเลอร์กับ RA8875

มีข้อเสียสองประการในการตั้งค่านี้ ประการแรกคือข้อเท็จจริงที่ว่ามีข้อบกพร่องด้านฮาร์ดแวร์กับบอร์ด RA8875 จาก Adafruit ที่ต้องใช้บัฟเฟอร์ไอซีไตรสถานะ 74HC125 หากคุณต้องการใช้อุปกรณ์ที่ใช้ SPI เช่น การ์ด SD เพื่อให้เข้าใจข้อบกพร่องของฮาร์ดแวร์มากขึ้น โปรดอ่านฟอรัมต่อไปนี้ ประการที่สอง คือระยะเวลาที่ค่อนข้างนานในการส่งภาพไปยัง LCD นอกจากนี้ ระยะเวลาที่ใช้ในการส่งรูปภาพไปยัง LCD เป็นเวลานานนั้นเกิดจากการเชื่อมต่อ SPI ซึ่งถูกจำกัดด้วยความเร็วสัญญาณนาฬิกาของ microntrollers และข้อมูลจำนวนมากที่ต้องส่งไปยังไดรเวอร์การแสดงผล สายไฟน้อยมาก

ฉันสร้างแผนผัง Fritzing เพื่อให้ทุกคนที่ต้องการสร้างจอแสดงผลนี้สามารถอ่านสิ่งที่พินบน Teensy 3.6 เชื่อมต่อได้อย่างง่ายดาย ฉันรวมไฟล์.frz ไว้ด้านล่าง ส่วนประกอบสองอย่างเท่านั้นที่ไม่ได้ระบุไว้คือตัวเก็บประจุ ซึ่งเป็นตัวเก็บประจุแบบอิเล็กโทรไลต์ 1F 16V และตัวเก็บประจุแบบเซรามิก 100μF ฉันรวมสิ่งเหล่านี้เพื่อให้แน่ใจว่ากำลังของไมโครคอนโทรลเลอร์ Teensy นั้นคงที่ DC +5V และไม่มีแรงดันไฟฟ้าแหลมใด ๆ (อาจไม่จำเป็น แต่ฉันรวมไว้เพราะแรงดันไฟฟ้าของรถยนต์สามารถผันผวนอย่างรวดเร็วขึ้นอยู่กับโหลดของแบตเตอรี่)

บางสิ่งที่จะพูดถึงเกี่ยวกับส่วนประกอบ ขั้นแรก ตัวเลื่อนระดับจะรับสัญญาณ 5V ใดๆ และเปลี่ยนเป็นแรงดันไฟฟ้าที่ปลอดภัย Teensy 3.6 3.3V นี่เป็นสิ่งจำเป็นสำหรับอะแดปเตอร์ OBD I2C เช่นเดียวกับตัวรับส่งสัญญาณเซ็นเซอร์สำรอง ประการที่สองสาย I2C ของวัยรุ่นต้องการตัวต้านทานแบบดึงขึ้น4.7kΩ ประการที่สาม ตัวต้านทานสี่ตัวที่เชื่อมต่อ "สายเวลากลางคืน" (สายลดแสง) และ "สายเชื่อมต่อสำรอง" มีความจำเป็นเพื่อใช้เป็นตัวแบ่งแรงดันไฟฟ้าเพื่อนำสัญญาณ 12V-13V ลงไปที่สัญญาณประมาณ 2.5-3V

อัปเดต 7/22/18: ฉันพบว่าเซ็นเซอร์อุณหภูมิภายในของโมดูล OBD-I2C แสดงผลตัวเลขที่แปลกมาก บางครั้งมันก็ใช้ได้ แต่โดยส่วนใหญ่แล้ว โมดูลมีอุณหภูมิที่ส่งออกสูงกว่า 400 องศาฟาเรนไฮต์ ด้วยเหตุนี้ ฉันจึงตัดสินใจเพิ่มเซ็นเซอร์อุณหภูมิ ds18b20 ของตัวเอง คุณสามารถใช้เซ็นเซอร์อุณหภูมิประเภทใดก็ได้ที่นี่ แต่คุณจะต้องแก้ไขโค้ด Arduino

อัปเดต 3/1/19: Teensy 3.6 ไม่เริ่มทำงานเมื่ออากาศหนาวจัด ฉันเพิ่มพลังงานในวงจรรีเซ็ตเพื่อให้แน่ใจว่าบูทอย่างถูกต้อง

ขั้นตอนที่ 4: RA8875 Display Driver และการออกแบบกราฟิก

ไดร์เวอร์จอแสดงผล RA8875 และการออกแบบกราฟิก
ไดร์เวอร์จอแสดงผล RA8875 และการออกแบบกราฟิก

ไดรเวอร์การแสดงผล RA8875 มีไลบรารี่ที่เรียกว่า Adafruit_RA8875 ซึ่งฉันใช้เมื่อสร้างรูปร่างที่เห็นในหน้าแรกและหน้าที่สอง ไลบรารีสำหรับ RA8875 สามารถสร้างได้เฉพาะเส้น สี่เหลี่ยม สี่เหลี่ยมมุมมน สามเหลี่ยม วงรี และวงกลม ดังนั้นกราฟิกจะต้องได้รับการออกแบบอย่างชาญฉลาดเพื่อสร้างรูปร่างที่ซับซ้อนมากขึ้น ตัวอย่างเช่น วงแหวนสีเทาในหน้าแรกจะเป็นวงกลมสีเทาเต็มที่มีเส้นผ่านศูนย์กลางใหญ่กว่า ตามด้วยวงกลมสีดำที่มีเส้นผ่านศูนย์กลางเล็กกว่า นอกจากนี้ ส่วนเล็กๆ ส่วนหนึ่งของหน้าเซ็นเซอร์สำรองประกอบด้วยสามเหลี่ยม 2 รูปที่จัดเรียงในลักษณะที่ทำให้เป็นรูปหลายเหลี่ยม ฉันทำเช่นนี้เพื่อเปลี่ยนสีของแต่ละส่วนของหน้าเซ็นเซอร์สำรอง ไฟล์ Arduino สำหรับจอแสดงผลมีอาร์เรย์ของจุดต่างๆ ที่ฉันใช้เพื่อติดตามว่าสามเหลี่ยมและรูปร่างอื่นๆ อยู่ที่ไหน

ฉันใช้เว็บไซต์ที่ยอดเยี่ยมนี้เพื่อเลือกสี RGB565 และกำหนดสีในแบบร่าง ดังนั้นฉันจึงสามารถใช้สีที่ไม่ใช่สีเริ่มต้นที่กำหนดไว้ล่วงหน้าในไลบรารี Adafruit_RA8875

ในแง่ของฟอนต์ ไลบรารี Adafruit_RA8875 รองรับได้เพียงอันเดียว เว้นแต่คุณจะแสดงความคิดเห็นในส่วนของไลบรารี ซึ่งช่วยให้คุณใช้ฟอนต์ในไลบรารี Adafruit_GFX ได้ ฉันรวมไลบรารี Adafruit_RA8875 ที่แก้ไขไว้ด้านล่าง ฉันเพิ่งแสดงความคิดเห็นโค้ดสองสามบรรทัด จากนั้นจึงสามารถใช้แบบอักษรในไลบรารี Adafruit_GFX ได้ นอกจากนี้ หากต้องการใช้ฟอนต์ 7 ส่วนที่ฉันใช้ในโปรเจ็กต์นี้ โปรดตรวจสอบให้แน่ใจว่าไฟล์ "FreeSevenSegNumFont.h" ที่ฉันอยู่ในโฟลเดอร์ฟอนต์ในไลบรารี Adafruit_GFX

ขั้นตอนที่ 5: การอัปโหลด Sketch

กำลังอัปโหลด Sketch
กำลังอัปโหลด Sketch
กำลังอัปโหลด Sketch
กำลังอัปโหลด Sketch

ในการอัปโหลดภาพสเก็ตช์ไปยัง Teensy 3.6 คุณจะต้องติดตั้ง Teensyduino จากนั้นคุณจะต้องเปลี่ยนไลบรารี Adafruit_RA8875 และ Adafruit_GFX ในตำแหน่งห้องสมุดขนาดเล็ก (ไม่ใช่ตำแหน่งทั่วไปของคุณในเอกสาร) บน Mac ฉันต้องคลิกขวาที่ไอคอนแอปพลิเคชัน Arduino ในแอปพลิเคชัน แล้วไปที่ /Contents/Java/hardware/teensy/avr/libraries บน windows ฉันค่อนข้างแน่ใจว่ามันอยู่ใต้ไดรฟ์ C ของคุณในไฟล์ Program x86, Arduino และโฟลเดอร์ฮาร์ดแวร์ในนั้น เมื่อคุณทำอย่างนั้นแล้ว คุณจะต้องเปลี่ยนตำแหน่งสมุดสเก็ตช์ในแอปพลิเคชัน Arduino โดยแก้ไขในการตั้งค่าว่าห้องสมุดเล็ก ๆ ของคุณอยู่ที่ไหน (เช่น /Applications/Arduino.app/Contents/Java/hardware/teensy/avr)

อัปเดตเมื่อ 7/22/16: เนื่องจากปัญหาเซ็นเซอร์อุณหภูมิภายในที่ฉันพูดถึงก่อนหน้านี้ ฉันต้องติดตั้งเซ็นเซอร์อุณหภูมิโมดูล DS18B20 คุณจะเห็น 4 ภาพร่าง Arduino ในไฟล์ zip โปรดอัปโหลดร่าง display_code หากคุณต้องการใช้เซ็นเซอร์อุณหภูมิภายในของโมดูล OBD-II I2C โปรดอัปโหลดภาพร่าง display_code_with_new_temperature_sensor หากคุณต้องการใช้โมดูล DS18B20 ที่ฉันเชื่อมโยงไว้ด้านบน

อัปเดต 11/17/17: ฉันแก้ไขข้อผิดพลาดหลายประการในซอฟต์แวร์รวมถึง DS18B20 ที่ให้อุณหภูมิ 185 องศาฟาเรนไฮต์ จอแสดงผลไม่เปิดเลยในสภาพอากาศหนาวเย็น และพิกเซลติดค้างในสีที่ไม่ถูกต้องเมื่อจอแสดงผลหรี่ลง

จากนั้นใช้ภาพที่ฉันมีด้านบนเพื่อให้แน่ใจว่าการตั้งค่าเล็ก ๆ ของคุณตรงกับรูปภาพ ฉันพบว่าการโอเวอร์คล็อกที่เล็กถึง 240MHz ไม่อนุญาตให้อแด็ปเตอร์ I2C OBD-II สื่อสารกับวัยรุ่น สุดท้ายเพียงคลิกอัปโหลด

ฉันเขียนความคิดเห็นที่ค่อนข้างกว้างขวางในไฟล์ร่าง Arduino โปรดดูคำอธิบายเกี่ยวกับวิธีการทำงานของซอฟต์แวร์ โปรดติดต่อฉันหากมีคำถามใด ๆ ฉันจะพยายามตอบพวกเขาอย่างสุดความสามารถ ขอให้โชคดี!

ขั้นตอนที่ 6: 3D พิมพ์เคส LCD

3D พิมพ์เคส LCD
3D พิมพ์เคส LCD
3D พิมพ์เคส LCD
3D พิมพ์เคส LCD
3D พิมพ์เคส LCD
3D พิมพ์เคส LCD

ฉันสร้างฝาครอบด้านบนและด้านล่างของ LCD ที่พิมพ์ 3 มิติเพื่อปกป้องจอแสดงผลขนาด 7 นิ้ว ฉันได้แนบไฟล์ส่วนนักประดิษฐ์. IPT รวมถึงไฟล์. STL

ฉันยังรวมส่วนที่เรียกว่า backup_sensor_ring.ipt ซึ่งเป็นวงแหวนที่พอดีกับเซ็นเซอร์สำรองที่ฉันเชื่อมโยงไว้ด้านบน รถของฉันมีรูเซ็นเซอร์สำรองที่เจาะไว้ล่วงหน้าแล้วซึ่งใหญ่เกินไปสำหรับเซ็นเซอร์สำรองที่ฉันซื้อใน Amazon ดังนั้นฉันจึงต้องสร้างวงแหวนที่พอดีกับเซ็นเซอร์สำรอง หากคุณกำลังจะเจาะเข้าไปในกันชนของคุณด้วยสว่านทรงกลมที่รวมอยู่ในชุด คุณไม่จำเป็นต้องมีชิ้นส่วนนี้

ขั้นตอนที่ 7: แยกพอร์ต OBD-II เพื่อให้ Arduino มีพลังเฉพาะเมื่อรถกำลังทำงาน

การแยกพอร์ต OBD-II เพื่อให้ Arduino มีพลังเมื่อรถวิ่งเท่านั้น
การแยกพอร์ต OBD-II เพื่อให้ Arduino มีพลังเมื่อรถวิ่งเท่านั้น
การแยกพอร์ต OBD-II เพื่อให้ Arduino มีพลังเมื่อรถวิ่งเท่านั้น
การแยกพอร์ต OBD-II เพื่อให้ Arduino มีพลังเมื่อรถวิ่งเท่านั้น
การแยกพอร์ต OBD-II เพื่อให้ Arduino มีพลังเมื่อรถวิ่งเท่านั้น
การแยกพอร์ต OBD-II เพื่อให้ Arduino มีพลังเมื่อรถวิ่งเท่านั้น

ฉันรู้ทันทีหลังจากติดตั้งจอแสดงผลว่าจอแสดงผลเปิดอยู่เสมอแม้ในขณะที่รถดับ เมื่อดูจากพินของ OBD-II ฉันพบว่าสายไฟ 12V ที่เชื่อมต่อกับขั้วต่อ OBD-II นั้นเชื่อมต่อโดยตรงกับแบตเตอรี่เสมอ

เพื่อหลีกเลี่ยงปัญหานี้ ฉันซื้อตัวแยกสัญญาณ OBD-II ตัดลวดไปที่หมุด 16 ที่หนึ่งในสองตัวเชื่อมต่อบนตัวแยก แล้วต่อสายที่ตัดนั้นเข้ากับสายเพิ่มวงจร

จากนั้นโดยใช้มัลติมิเตอร์ ฉันไปที่กล่องฟิวส์ด้านคนขับและทดสอบฟิวส์ที่มีอยู่เพื่อดูว่าฟิวส์ตัวใดได้รับพลังงานหลังจากเปลี่ยนกุญแจเป็นสวิตช์กุญแจ

ในที่สุด ฉันเชื่อมต่อสายเพิ่มเข้ากับฟิวส์ที่ฉันอยู่ เพื่อให้จอแสดงผลเปิดขึ้นเมื่อรถของฉันทำงานเท่านั้น โปรดทำวิจัยเกี่ยวกับวิธีการเพิ่มวงจรให้กับรถของคุณอย่างเหมาะสม ฉันพบว่าการกวดวิชา youtube นี้เป็นสิ่งที่ดี

แนะนำ: