คราวนี้เราจะจัดการกับการเชื่อมต่อตัววัดความเร่งสามแกนแบบแอนะล็อก ADXL335 กับ Arduino
จำเป็น
- - Arduino;
- - มาตรความเร่ง ADXL335;
- - คอมพิวเตอร์ส่วนบุคคลที่มีสภาพแวดล้อมการพัฒนา Arduino IDE
คำแนะนำ
ขั้นตอนที่ 1
มาตรความเร่งใช้เพื่อกำหนดเวกเตอร์ความเร่ง มาตรความเร่ง ADXL335 มีสามแกน และด้วยเหตุนี้ จึงสามารถกำหนดเวกเตอร์ความเร่งในพื้นที่สามมิติได้ เนื่องจากแรงโน้มถ่วงเป็นเวกเตอร์ด้วย มาตรความเร่งสามารถกำหนดทิศทางของมันเองในพื้นที่สามมิติที่สัมพันธ์กับจุดศูนย์กลางของโลก
ภาพประกอบแสดงรูปภาพจากหนังสือเดินทาง (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) สำหรับมาตรความเร่ง ADXL335 นี่คือแกนพิกัดของความไวของตัวตรวจวัดความเร่งที่สัมพันธ์กับตำแหน่งทางเรขาคณิตของตัวอุปกรณ์ในอวกาศ รวมถึงตารางค่าแรงดันไฟจากช่องมาตรวัดความเร่ง 3 ช่อง ขึ้นอยู่กับการวางแนวในอวกาศ ข้อมูลในตารางมีไว้สำหรับเซ็นเซอร์ที่อยู่นิ่ง
มาดูกันดีกว่าว่ามาตรความเร่งแสดงให้เราเห็นอะไร ให้เซ็นเซอร์วางในแนวนอน เช่น บนโต๊ะ จากนั้นเส้นโครงของเวกเตอร์ความเร่งจะเท่ากับ 1g ตามแกน Z หรือ Zout = 1g อีกสองแกนจะมีเลขศูนย์: Xout = 0 และ Yout = 0 เมื่อเซ็นเซอร์ถูกหมุน "ที่ด้านหลัง" เซ็นเซอร์จะถูกนำไปในทิศทางตรงกันข้ามกับเวกเตอร์แรงโน้มถ่วง กล่าวคือ Zout = -1g. ในทำนองเดียวกัน การวัดจะใช้ทั้งสามแกน เป็นที่ชัดเจนว่าเครื่องวัดความเร่งสามารถจัดตำแหน่งได้ตามต้องการในอวกาศ ดังนั้นเราจะอ่านค่าอื่นที่ไม่ใช่ศูนย์จากทั้งสามช่องสัญญาณ
หากโพรบถูกเขย่าอย่างรุนแรงตามแนวแกน Z ในแนวตั้ง ค่า Zout จะมากกว่า "1g" ความเร่งที่วัดได้สูงสุดคือ "3g" ในแต่ละแกนในทิศทางใดก็ได้ (กล่าวคือ มีทั้ง "บวก" และ "ลบ")
ขั้นตอนที่ 2
ฉันคิดว่าเราเข้าใจหลักการทำงานของมาตรความเร่งแล้ว ทีนี้มาดูแผนภาพการเชื่อมต่อกัน
ชิปมาตรความเร่งแบบแอนะล็อก ADXL335 ค่อนข้างเล็กและบรรจุอยู่ในแพ็คเกจ BGA และติดตั้งบนบอร์ดที่บ้านได้ยาก ดังนั้น ฉันจะใช้โมดูล GY-61 สำเร็จรูปที่มีมาตรความเร่ง ADXL335 โมดูลดังกล่าวในร้านค้าออนไลน์ของจีนมีค่าใช้จ่ายเกือบหนึ่งเพนนี
ในการจ่ายไฟให้กับมาตรความเร่งจำเป็นต้องจ่ายแรงดัน +3, 3 V ให้กับพิน VCC ของโมดูล ช่องวัดเซ็นเซอร์เชื่อมต่อกับพินอะนาล็อกของ Arduino เช่น "A0", "A1" และ A2". นี่คือวงจรทั้งหมด:)
ขั้นตอนที่ 3
โหลดภาพสเก็ตช์นี้ลงในหน่วยความจำ Arduino เราจะอ่านค่าที่อ่านได้จากอินพุตแบบอะนาล็อกในสามช่องสัญญาณ แปลงเป็นแรงดันไฟฟ้าและส่งออกไปยังพอร์ตอนุกรม
Arduino มี ADC 10 บิต และแรงดันพินสูงสุดที่อนุญาตคือ 5 โวลต์ แรงดันไฟฟ้าที่วัดได้จะถูกเข้ารหัสด้วยบิตที่รับได้เพียง 2 ค่า - 0 หรือ 1 ซึ่งหมายความว่าช่วงการวัดทั้งหมดจะถูกหารด้วย (1 + 1) เป็นกำลังที่ 10 นั่นคือ บน 1024 ส่วนเท่า ๆ กัน
ในการแปลงค่าที่อ่านได้เป็นโวลต์ คุณต้องแบ่งแต่ละค่าที่วัดที่อินพุตแบบอะนาล็อกด้วย 1024 (ส่วน) แล้วคูณด้วย 5 (โวลต์)
เรามาดูกันว่าอะไรมาจากมาตรความเร่งจริง ๆ โดยใช้แกน Z เป็นตัวอย่าง (คอลัมน์สุดท้าย) เมื่อเซ็นเซอร์อยู่ในตำแหน่งแนวนอนและเงยหน้าขึ้นมอง ตัวเลขจะมา (2.03 +/- 0.01) นี่ควรสอดคล้องกับความเร่ง "+ 1g" ตามแนวแกน Z และมุม 0 องศา พลิกเซ็นเซอร์ ตัวเลขมาถึง (1, 69 +/- 0, 01) ซึ่งควรสอดคล้องกับ "-1g" และมุม 180 องศา
ขั้นตอนที่ 4
ลองเอาค่าจากมาตรความเร่งที่มุม 90 และ 270 องศาแล้วป้อนลงในตาราง ตารางแสดงมุมการหมุนของมาตรความเร่ง (คอลัมน์ "A") และค่า Zout ที่สอดคล้องกันในหน่วยโวลต์ (คอลัมน์ "B")
เพื่อความชัดเจน พล็อตของแรงดันไฟฟ้าที่เอาต์พุต Zout เทียบกับมุมการหมุนจะแสดงขึ้น สนามสีน้ำเงินคือช่วงพัก (ที่อัตราเร่ง 1g) กล่องสีชมพูบนกราฟคือระยะขอบเพื่อให้เราสามารถวัดความเร่งได้สูงถึง + 3g และสูงถึง -3g
ที่การหมุน 90 องศา แกน Z จะมีอัตราเร่งเป็นศูนย์ เหล่านั้น. ค่า 1.67 โวลต์เป็นศูนย์ที่มีเงื่อนไข Zo สำหรับแกน Z จากนั้นคุณจะพบความเร่งดังนี้:
g = Zout - Zo /ความไว_z ในที่นี้ Zout คือค่าที่วัดได้เป็นมิลลิโวลต์ Zo คือค่าที่ความเร่งเป็นศูนย์ในหน่วยมิลลิโวลต์, sensitivity_z คือความไวของเซ็นเซอร์ตามแนวแกน Z ปรับเทียบมาตรวัดความเร่งและคำนวณค่าความไวเฉพาะสำหรับคุณ เซ็นเซอร์โดยใช้สูตร:
sensitive_z = [Z (0 องศา) - Z (90 องศา)] * 1000 ในกรณีนี้ ความไวของมาตรความเร่งตามแกน Z = (2, 03 - 1, 68) * 1000 = 350 mV ในทำนองเดียวกัน ความไวจะต้องคำนวณสำหรับแกน X และ Y
คอลัมน์ "C" ของตารางแสดงอัตราเร่งที่คำนวณได้จากห้ามุมที่ความไว 350 อย่างที่คุณเห็น พวกมันเกือบจะตรงกับที่แสดงในรูปที่ 1
ขั้นตอนที่ 5
เมื่อนึกถึงหลักสูตรเรขาคณิตพื้นฐาน เราได้สูตรการคำนวณมุมการหมุนของมาตรความเร่ง:
angle_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx]
ค่าอยู่ในหน่วยเรเดียน หากต้องการแปลงเป็นองศา ให้หารด้วย Pi แล้วคูณด้วย 180
ด้วยเหตุนี้ ภาพร่างที่สมบูรณ์ซึ่งคำนวณความเร่งและมุมการหมุนของมาตรความเร่งตามแกนทั้งหมดจึงแสดงในภาพประกอบ ความคิดเห็นให้คำอธิบายสำหรับรหัสโปรแกรม
เมื่อส่งออกไปยังพอร์ต "Serial.print ()" อักขระ "\ t" หมายถึงอักขระแท็บเพื่อให้คอลัมน์เท่ากันและค่าต่างๆ จะอยู่ใต้อีกอันหนึ่ง "+" หมายถึงการต่อ (concatenation) ของสตริง ยิ่งไปกว่านั้น ตัวดำเนินการ "String ()" จะบอกคอมไพเลอร์อย่างชัดเจนว่าค่าตัวเลขจะต้องถูกแปลงเป็นสตริง ตัวดำเนินการปัดเศษ () ปัดเศษมุมให้ใกล้ที่สุด 1 องศา
ขั้นตอนที่ 6
ดังนั้นเราจึงได้เรียนรู้วิธีรับและประมวลผลข้อมูลจากเครื่องวัดความเร่งแบบแอนะล็อก ADXL335 โดยใช้ Arduino ตอนนี้เราสามารถใช้มาตรความเร่งในการออกแบบของเราได้แล้ว