ในโปรเจกต์นี้ เราจะเปลี่ยนหน้าจอวิทยุรถยนต์ทั่วไป (Aftermarket Head Unit) ให้กลายเป็นศูนย์แสดงข้อมูลอัจฉริยะ (Digital Dash) โดยการเชื่อมต่อ Raspberry Pi เข้ากับพอร์ต OBD-II ของรถยนต์ผ่าน Bluetooth เพื่อดึงข้อมูลสถานะเครื่องยนต์แบบเรียลไทม์มาแสดงผลอย่างมืออาชีพ
ข้อมูลจำเพาะของฮาร์ดแวร์
การเลือกอุปกรณ์ที่ถูกต้องเป็นสิ่งสำคัญเพื่อให้ระบบทำงานได้อย่างเสถียรในสภาพแวดล้อมที่มีการสั่นสะเทือนสูงและอุณหภูมิสูง เช่น ภายในรถยนต์

- Raspberry Pi Model B หรือ B+: คอมพิวเตอร์ Single-board ขนาดเล็กที่มีพอร์ต Composite Video (RCA) ในตัว ซึ่งเหมาะอย่างยิ่งสำหรับการเชื่อมต่อกับหน้าจอวิทยุรถยนต์รุ่นเก่าที่ไม่มีพอร์ต HDMI
- Aftermarket Head Unit: หน้าจอวิทยุรถยนต์แบบ Aftermarket ที่ต้องรองรับช่อง Auxiliary Input (AV-IN) เพื่อรับสัญญาณวิดีโอจาก Raspberry Pi
- USB Bluetooth 4.0 Low Energy Adapter: แนะนำยี่ห้อ Plugable เพื่อการเชื่อมต่อ Serial Port Profile (SPP) ที่เสถียร
- 2A Car Supply: ระบบไฟฟ้าในรถยนต์ไม่เสถียร ควรใช้ Step-down Converter คุณภาพดีเพื่อป้องกันบอร์ดเสียหาย หรือใช้ Micro USB Car Charger ที่จ่ายกระแสไฟได้อย่างน้อย 2 Amperes เต็ม
- ELM327 Bluetooth Adapter: อุปกรณ์ที่แปลงสัญญาณจากพอร์ต OBD-II ให้เป็นสัญญาณ Bluetooth เพื่อส่งข้อมูลไปยัง Raspberry Pi
- RCA Cable: สำหรับเชื่อมต่อสัญญาณวิดีโอและเสียงจาก Pi ไปยังหน้าจอ
- Keyboard: (ไม่บังคับ) ใช้สำหรับการตั้งค่าซอฟต์แวร์เริ่มต้น
เจาะลึก OBD-II (On-Board Diagnostics): มันคืออะไร?

OBD-II หรือชื่อเต็ม On-Board Diagnostics Generation 2 เป็นมาตรฐานสากลที่ถูกบังคับใช้ในยานพาหนะมาตั้งแต่ปี 1996 ระบบนี้ทำหน้าที่เหมือน "สมองอิเล็กทรอนิกส์" ของรถยนต์ คอยตรวจสอบเครื่องยนต์ (ECU), ระบบส่งกำลัง (transmission) และการปล่อยมลพิษ (emissions)
พอร์ตเชื่อมต่อมาตรฐานนี้เรียกว่า SAE J1962 Diagnostic Connector ซึ่งมี 16 พิน และมักจะติดตั้งอยู่ภายในระยะสองฟุตจากพวงมาลัย การเข้าถึงพอร์ตนี้ช่วยให้เราสามารถอ่านค่าเซ็นเซอร์ต่างๆ ได้โดยตรง เช่น ความเร็วรอบเครื่องยนต์ (RPM), ความเร็วรถยนต์, อุณหภูมิน้ำหล่อเย็น และรหัสข้อผิดพลาด (Diagnostic Trouble Codes - DTC)
แนะนำ PyOBD: หัวใจของการดึงข้อมูล
pyOBD (หรือ pyOBD2) เป็นซอฟต์แวร์ Scantool แบบ Open Source ที่เขียนด้วยภาษา Python ทั้งหมด ซึ่งออกแบบมาโดยเฉพาะเพื่อสื่อสารกับชิปตระกูล ELM32x
โปรแกรมนี้ส่ง "AT Commands" ผ่าน Serial Port เพื่อสื่อสารกับ ECU ของรถยนต์ จากนั้นจะประมวลผลข้อมูลตัวเลขที่ได้รับและแสดงผลผ่าน Graphical User Interface (GUI) ที่สวยงามบนหน้าจอวิทยุรถยนต์ของคุณ สำหรับโปรเจกต์นี้ เราได้ใช้ Source Code จากรีโพซิโทรี sakurusurya2000/pyobd และ peterh/pyobd เป็นพื้นฐานในการพัฒนา
การติดตั้งซอฟต์แวร์
เพื่อให้ระบบทำงานได้ คุณต้องติดตั้งระบบปฏิบัติการ Raspbian และมีการเชื่อมต่ออินเทอร์เน็ตเพื่อดาวน์โหลดไลบรารีที่จำเป็น
- อัปเดตระบบ: เปิด Terminal และพิมพ์คำสั่งต่อไปนี้ (ไม่ต้องพิมพ์สัญลักษณ์ #):
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo reboot
- ติดตั้ง Dependencies และเครื่องมือสื่อสาร: เราต้องการไลบรารีสำหรับจัดการ Serial port, Bluetooth และ GUI (wxPython):
sudo apt-get install python-serial
sudo apt-get install bluetooth bluez-utils blueman
sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-i18n libwxgtk2.8-dev
sudo apt-get install git-core
sudo reboot
การติดตั้งในรถยนต์

เมื่อซอฟต์แวร์พร้อมแล้ว ให้ทำตามขั้นตอนการติดตั้งฮาร์ดแวร์เหล่านี้:
- เสียบ USB Bluetooth Dongle และ SD Card เข้ากับ Raspberry Pi
- เสียบ ELM327 adapter เข้ากับพอร์ต OBD-II ของรถยนต์ (ไฟสถานะบนอะแดปเตอร์ควรจะติด)
- เชื่อมต่อสาย RCA จาก Video Output ของ Pi เข้ากับ AV-IN ของวิทยุรถยนต์
- เชื่อมต่อแหล่งจ่ายไฟ 2A เข้ากับ Pi
- บิดกุญแจรถไปที่ตำแหน่ง ON (หรือสตาร์ทรถ) และเลือกโหมด Auxiliary Input บนหน้าจอวิทยุรถยนต์
- เมื่อเห็นหน้าจอ Login ให้เข้าสู่ระบบและรัน GUI:
startx
- ขั้นตอนสำคัญ: เปิด BlueZ (เครื่องมือจัดการ Bluetooth) ทำการ Pair และ Trust อะแดปเตอร์ ELM327 จากนั้นคลิกขวาที่ชื่ออุปกรณ์แล้วเลือก "Connect To: SPP Dev" หากสำเร็จ คุณจะเห็นข้อความแจ้งเตือน "Serial port connected to /dev/rfcomm0"
- เปิด Terminal และรันโปรแกรมหลัก:
cd pyobd-pi
sudo su
python obd_gui.py
การควบคุม: ใช้ปุ่มลูกศร ซ้าย-ขวา บน Keyboard เพื่อสลับหน้าจอแสดงค่าต่างๆ และกด Ctrl + C หรือ Alt + Esc เพื่อออกจากโปรแกรม
คุณสมบัติการบันทึกข้อมูล
นอกจากการแสดงผลแบบสดแล้ว ระบบยังสามารถบันทึกข้อมูลการขับขี่ลงในไฟล์เพื่อการวิเคราะห์ภายหลังได้อีกด้วย

หากต้องการบันทึกข้อมูล ให้ใช้คำสั่ง:
cd pyobd-pi
python obd_recorder.py
ไฟล์ข้อมูลที่บันทึกจะถูกเก็บไว้ในโฟลเดอร์: /home/username/pyobd-pi/log/ ซึ่งคุณสามารถนำไปใช้ในการพล็อตกราฟความเร็วหรืออัตราสิ้นเปลืองน้ำมันเชื้อเพลิงได้ในภายหลัง
การวิเคราะห์ตรรกะของโค้ด
โปรแกรม obd_gui.py ทำงานโดยใช้ Event-driven Loop:
- การเริ่มต้น: โปรแกรมจะสแกนหา Serial Port (เช่น
/dev/rfcomm0) เพื่อสื่อสารกับ ELM327 - การยืนยันโปรโตคอล: มันจะส่งคำสั่งเพื่อสอบถามรถยนต์ว่าใช้โปรโตคอลการสื่อสารใด (CAN, ISO9141, ฯลฯ)
- การดึงข้อมูล: มันจะวนลูปเพื่อส่ง Request PIDs (Parameter IDs) เช่น
010Cสำหรับความเร็วรอบเครื่องยนต์ (RPM) - การแยกวิเคราะห์: มันจะรับค่าฐานสิบหก (hexadecimal) ที่ส่งคืนมาจากรถยนต์ และใช้สูตรคำนวณ เช่น
((A*256)+B)/4เพื่อแปลงเป็นค่า RPM ที่เข้าใจได้ - การแสดงผล: ค่าที่ได้จะถูกวาดลงบนหน้าจอ GUI โดยใช้ไลบรารี
wxPythonเพื่อสร้างมาตรวัดแบบเข็มหรือแบบดิจิทัล
วิดีโอสาธิตทีละขั้นตอน

คำเตือนด้านความปลอดภัย: โปรดใช้ความระมัดระวังในการใช้งานระบบนี้ขณะขับขี่ หลีกเลี่ยงการจ้องหน้าจอเป็นเวลานาน และตรวจสอบให้แน่ใจว่าการเดินสายทั้งหมดเรียบร้อยเพื่อไม่ให้รบกวนการควบคุมรถยนต์ ขอให้สนุกกับการสร้างสรรค์เทคโนโลยีในรถยนต์ของคุณ!