เครื่องมือวัดโปรไฟล์ลิ้นไอ้ (Camshaft) แบบอัตโนมัติ
เมื่อ 30 ปีก่อน พี่เองก็เคยนั่งกระดาษกราฟ หน้าปัดวัด (Dial Indicator) และล้อวัดองศา (Degree Wheel) อยู่หลายวันเพื่อพล็อตโปรไฟล์ลิ้นไอ้สำหรับเครื่องยนต์แข่ง หลังจากที่ได้เล่นกับสเต็ปเปอร์มอเตอร์และไมโครคอนโทรลเลอร์มาพอสมควร ก็เลยคิดว่า "เฮ้ย ทำไมไม่สร้างเครื่องมือที่ทำมันให้อัตโนมัติซะเลยล่ะ?"
ดีไซน์นี้เป็นของพี่เองจ้า แม้ว่าจะมีเครื่องมือวัดลิ้นไอ้ด้วย Arduino ให้เห็นบนเน็ตอยู่หลายแบบ และพี่ก็ได้แรงบันดาลใจ รวมถึงโค้ดที่ดัดแปลงมาจาก GitHub และที่อื่นๆ ด้วย
พี่มีวิดีโอการทำงานมาให้ดูกัน
โปรโตคอลลับของหน้าปัดวัดดิจิทัล
การสร้างเครื่องยนต์แข่งต้องวัดลิ้นไอ้ให้ละเอียดถึงระดับหนึ่งในหมื่นของนิ้ว ไมโครมิเตอร์ธรรมดาไม่สามารถแมปเส้นโค้งที่กวาดไปมาได้ Arduino Camshaft Measurement Tool ตัวนี้จะดักจับข้อมูลการเคลื่อนที่ (displacement telemetry) จากหน้าปัดวัดดิจิทัลแบบเรียลไทม์ แล้วพล็อตกราฟการยก (lift graph) แบบ 360 องศาที่แม่นยำสุดๆ ลงบนแล็ปท็อปของน้องโดยตรงเลย!
หน้าปัดวัดดิจิทัลราคาถูกๆ ประมาณ 25 ดอลลาร์ ดูเหมือนจะเป็นอุปกรณ์สแตนด์อโลนใช่ไหม? แต่จริงๆ แล้วใต้แผ่นพลาสติกเล็กๆ นั้นมีแผ่นโลหะจิ๋ว 4 จุดซ่อนอยู่ (VCC, GND, CLK, DATA)
- กับดักระดับแรงดัน (Logic Level Trap): หน้าปัดวัดทั่วไปพวกนี้ทำงานด้วยแบตเตอรี่กระดุม 1.5V ขณะที่ Arduino ใช้ 5V ถ้าน้องต่อตรงๆ กันละก็ Arduino จะส่งแรงดัน 5V เข้าไปทันที แล้วหน้าปัดวัดน้องก็... จบ! (ห้ามช็อตนะตัวนี้)
- น้องต้องใช้ วงจรลดระดับแรงดันด้วยทรานซิสเตอร์ NPN (NPN Transistor Level Shifter) หรือโมดูลแปลงระดับลอจิกแบบ 4 ช่อง
3.3V-to-5Vโดยเฉพาะ - ข้อมูลไม่ได้ส่งออกมาเรื่อยๆ นะ มันส่งเป็นระเบิด (bursts) หน้าปัดวัดเป็น "เจ้านาย (Master)" มันจะส่งสัญญาณนาฬิกา
(CLK)ออกมาทุกๆ ไม่กี่มิลลิวินาที ตามด้วยข้อมูลไบนารีดิบๆ 24 บิต(DATA)
การดักจับและพล็อตข้อมูลสตริง 24 บิต
Arduino ต้องทำตัวเป็นผู้ฟังแบบพาสซีฟและทำหน้าที่เป็นตัวดักจับข้อมูลความเร็วสูง
attachInterrupt(digitalPinToInterrupt(CLOCK_PIN), readBit, FALLING);- ทุกครั้งที่สัญญาณนาฬิกาตก (clock dips) Arduino จะอ่านสถานะของพิน DATA ทันที
(1 หรือ 0) - จากนั้นมันจะเลื่อนข้อมูล (shift) นี้เข้าไปในตัวแปร
longจำนวนมหึมา ซึ่งแทนค่าหน่วยนิ้วหรือมิลลิเมตร - ขั้นตอนการสร้างกราฟ: Arduino จะต่อเข้ากับ Rotary Encoder ที่ติดอยู่กับแกนกลางของลิ้นไอ้ที่กำลังหมุน
- ที่
0 องศาการยก (lift) คือ0.0000" - ที่
90 องศาการยกอาจเป็น0.4560" - Arduino จะส่งตัวเลขทั้งคู่นี้
(90, 0.4560)ผ่าน Serial Monitor ไปยัง PC เพื่อพล็อต "เส้นโค้งโปรไฟล์" ของลิ้นไอ้โลหะชิ้นใหญ่ได้เลย!
อุปกรณ์ที่ต้องจัดให้พร้อม (สู้งานนะน้อง)
- Arduino Uno/Nano (พอสำหรับดักจับโปรโตคอลมาตรฐานของหน้าปัดวัด)
- หน้าปัดวัดดิจิทัลยี่ห้อ Harbor Freight หรือทั่วไป (ต้องมีพอร์ตลับให้เข้าถึงได้)
- โมดูลแปลงระดับลอจิกแบบสองทาง 3.3V ไป 5V (ข้อนี้ห้ามต่อรอง! ไม่งั้นเครื่องมือพังแน่)
- Rotary Encoder แบบออปติคัลความละเอียดสูง (เพื่อติดตามองศาการหมุนของลิ้นไอ้)
- ขาตั้งวัดแบบแม่เหล็กและหนักมาก (ต้องแข็งแรงมั่นคงสุดๆ การสั่นไหวแม้แต่นิดเดียวจะทำลายค่าการอ่านระดับไมโครได้)