สารบัญ:

ใช้ Arduino เพื่อแสดง Engine RPM: 10 ขั้นตอน (พร้อมรูปภาพ)
ใช้ Arduino เพื่อแสดง Engine RPM: 10 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ใช้ Arduino เพื่อแสดง Engine RPM: 10 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ใช้ Arduino เพื่อแสดง Engine RPM: 10 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: EP 27. Arduino ฉบับไวจนไฟลุก !! - สาระเดฟ ใน 3 นาที 2024, กรกฎาคม
Anonim
ใช้ Arduino เพื่อแสดง Engine RPM
ใช้ Arduino เพื่อแสดง Engine RPM
ใช้ Arduino เพื่อแสดง Engine RPM
ใช้ Arduino เพื่อแสดง Engine RPM
ใช้ Arduino เพื่อแสดง Engine RPM
ใช้ Arduino เพื่อแสดง Engine RPM

คู่มือนี้จะสรุปวิธีที่ฉันใช้ Arduino UNO R3, หน้าจอ LCD ขนาด 16x2 พร้อม I2C และแถบ LED ที่จะใช้เป็นมาตรวัดความเร็วเครื่องยนต์และไฟเปลี่ยนเกียร์ในรถแทร็ก Acura Integra ของฉัน มันถูกเขียนขึ้นในแง่ของผู้ที่มีประสบการณ์หรือสัมผัสกับซอฟต์แวร์ Arduino หรือการเข้ารหัสโดยทั่วไป, ซอฟต์แวร์คณิตศาสตร์ MATLAB และการสร้างหรือปรับเปลี่ยนวงจรไฟฟ้า ในอนาคตอาจมีการแก้ไขเพื่อให้เข้าใจได้ง่ายขึ้นสำหรับผู้ที่มีประสบการณ์น้อยหรือไม่มีเลยในหัวข้อเหล่านี้

ขั้นตอนที่ 1: เลือก Sigal Wire

เลือกลวดซิกัล
เลือกลวดซิกัล

คุณจะต้องได้รับสัญญาณที่สัมพันธ์กับความเร็วของเครื่องยนต์ คุณสามารถเพิ่มระบบที่วัดความเร็วของเครื่องยนต์ได้ แต่จะมีประโยชน์มากกว่ามากหากใช้สายไฟที่มีอยู่ซึ่งมีข้อมูลความเร็วของเครื่องยนต์ รถยนต์คันเดียวอาจมีหลายแหล่งสำหรับเรื่องนี้ และอาจแตกต่างกันอย่างมากถึงแม้จะเป็นปีต่อปีในรถยนต์รุ่นเดียว เพื่อประโยชน์ของบทช่วยสอนนี้ ฉันจะใช้ตัวอย่างรถของฉัน แทร็กที่ดัดแปลง 2000 Acura Integra LS ฉันพบในเครื่องยนต์ของฉัน (B18B1 ที่มี OBD2) มีแรงดันไฟฟ้าที่ไม่ได้ใช้ซึ่งสูง 12V และลดลงเหลือ 0V เมื่อเสร็จสิ้นการปฏิวัติเต็มรูปแบบ

สิ่งที่จะช่วยระบุสัญญาณความเร็วรอบเครื่องยนต์ที่อาจเกิดขึ้น:

  • แผนภาพการเดินสายไฟสำหรับรถของคุณ
  • ค้นหาฟอรัมสำหรับรถของคุณที่เกี่ยวข้องกับสัญญาณเครื่องยนต์/ECU
  • ช่างยนต์ที่เป็นมิตรหรือผู้ที่ชื่นชอบรถ

ขั้นตอนที่ 2: ขยายสายไปยังบอร์ด Arduino

ขยายสายไปยังบอร์ด Arduino
ขยายสายไปยังบอร์ด Arduino
ขยายสายไปยังบอร์ด Arduino
ขยายสายไปยังบอร์ด Arduino

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

ขั้นตอนที่ 3: การวิเคราะห์สัญญาณ

การวิเคราะห์สัญญาณ
การวิเคราะห์สัญญาณ

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

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

ปกติสัญญาณของฉันคือ 12V และลดลงเหลือ 0V เมื่อหมุนครบหนึ่งรอบ หากคุณทราบเวลาที่จะหมุนให้ครบหนึ่งรอบ หรือครบหนึ่งรอบ ก็สามารถแปลเป็นรอบ/นาทีได้ง่ายๆ โดยใช้แนวคิดพื้นฐานบางประการ

1 / (วินาทีต่อรอบ) = รอบต่อวินาที หรือ Hz

รอบต่อนาที = Hz * 60

ขั้นตอนที่ 4: เขียนโค้ดการวิเคราะห์สัญญาณของคุณ

รหัสการวิเคราะห์สัญญาณของคุณ
รหัสการวิเคราะห์สัญญาณของคุณ

วิธีนี้ต้องใช้เวลาสำหรับสัญญาณอินพุตเพื่อให้ครบหนึ่งรอบ โชคดีที่ซอฟต์แวร์ Arduino IDE มีคำสั่งที่ทำอย่างนั้นได้ นั่นคือ PulseIn

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

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

หมายเหตุ: หลังจากการลองผิดลองถูก ฉันพบว่าผู้จัดจำหน่ายทำการหมุนสองครั้งสำหรับการหมุนรอบเพลาข้อเหวี่ยงของเครื่องยนต์ทุกๆ ครั้ง ดังนั้นฉันจึงแบ่งคำตอบเป็น 2 เพื่อพิจารณา

ขั้นตอนที่ 5: ระบุตัวกรอง

ระบุตัวกรอง
ระบุตัวกรอง

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

หลังจากการวิเคราะห์สัญญาณแล้ว สัญญาณรบกวนเกือบทั้งหมดมาที่ความถี่ (Hz) สูงกว่าที่เครื่องยนต์กำลังส่งออก (ซึ่งเป็นความจริงสำหรับระบบไดนามิกส่วนใหญ่) ซึ่งหมายความว่าฟิลเตอร์กรองความถี่ต่ำเป็นตัวเลือกในอุดมคติที่จะดูแลเรื่องนี้

ตัวกรองความถี่ต่ำช่วยให้ความถี่ต่ำ (ที่ต้องการ) ผ่านและลดทอนความถี่สูง (ที่ไม่ต้องการ)

ขั้นตอนที่ 6: การกรอง: ตอนที่ 1

การกรอง: ตอนที่ 1
การกรอง: ตอนที่ 1
การกรอง: ตอนที่ 1
การกรอง: ตอนที่ 1
การกรอง: ตอนที่ 1
การกรอง: ตอนที่ 1

การออกแบบตัวกรองสามารถทำได้ด้วยมือ อย่างไรก็ตาม การใช้ MATLAB จะช่วยเร่งความเร็วได้อย่างมากหากคุณมีสิทธิ์เข้าถึงซอฟต์แวร์

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

ตัวแปรเดียวในฟังก์ชันคือเอกภาพ Tau เท่ากับ 1 / Omega โดยที่ Omega คือความถี่ตัดที่คุณต้องการ (ต้องเป็นเรเดียนต่อวินาที) ความถี่ตัดคือขีดจำกัดที่ความถี่ที่สูงกว่าจะถูกลบออกและความถี่ที่ต่ำกว่าจะถูกเก็บไว้

ฉันตั้งค่าความถี่ตัดให้เท่ากับ RPM เครื่องยนต์ของฉันจะไม่ไปถึง (990 RPM หรือ 165 Hz) กราฟ FFT แสดงความถี่คร่าวๆ ที่สัญญาณดิบของฉันถืออยู่และความถี่ที่ออกมาจากตัวกรอง

ขั้นตอนที่ 7: การกรอง: ตอนที่ 2

การกรอง: ตอนที่ 2
การกรอง: ตอนที่ 2
การกรอง: ตอนที่ 2
การกรอง: ตอนที่ 2

ที่นี่ MATLAB ถูกนำมาใช้อีกครั้งเพื่อเห็นแก่เวลา มีการกำหนดความถี่ตัด จากนั้นฟังก์ชันการถ่ายโอนผลลัพธ์จะปรากฏขึ้น โปรดทราบว่าเศษส่วนนี้ใช้กับโดเมน Laplace เท่านั้น และไม่สามารถใช้กับไมโครคอนโทรลเลอร์ตามเวลาโดยตรง เช่น Arduino UNO R3 ได้

ขั้นตอนที่ 8: การกรอง: ตอนที่ 3

การกรอง: ตอนที่ 3
การกรอง: ตอนที่ 3
การกรอง: ตอนที่ 3
การกรอง: ตอนที่ 3

MATLAB มีคำสั่งที่จะแปลงฟังก์ชันต่อเนื่อง (โดเมนความถี่) เป็นฟังก์ชันที่ไม่ต่อเนื่อง (โดเมนเวลา) ผลลัพธ์ของคำสั่งนี้จะให้สมการที่สามารถรวมเข้ากับโค้ด Arduino IDE ได้อย่างง่ายดาย

ขั้นตอนที่ 9: การกรอง: ตอนที่ 4

การกรอง: ตอนที่ 4
การกรอง: ตอนที่ 4
การกรอง: ตอนที่ 4
การกรอง: ตอนที่ 4

ในภาพร่าง Arduino ให้รวมตัวแปร u และ y ก่อนการตั้งค่า คำสั่ง float กำหนดวิธีที่ตัวแปรจะเก็บข้อมูล (เช่น ค่าสูงสุด ทศนิยม ฯลฯ…) และลิงก์ไปยังข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนี้จะมีให้ที่นี่: https://www.arduino.cc/reference/en/language /varia…

ในลูปที่เกิดการแปลงสัญญาณดิบเป็นความเร็วเครื่องยนต์ ให้ใส่ตัวแปร u และสมการพหุคูณ y มีหลายวิธีในการใช้สิ่งนี้ แต่ควรตั้งค่าตัวแปร u ให้เท่ากับสัญญาณอินพุตดิบที่กำลังวัด และตัวแปร y จะเป็นค่าที่กรอง

ขั้นตอนที่ 10: แสดงความเร็วของเครื่องยนต์ที่กรองแล้ว

แนะนำ: