วันนี้มาคุยกันถึง Chip อีกตัวคือ Gyroscope (L3G4200D ) ที่อยู่บน Module GํY-80 กันครับ
และเช่นเดิมครับ เราจะใช้ I2C เพื่อการติดต่อกับ Chip ตัวนี้ซึ่งบนบัสเดียวกันนี้ยังมีอุปกรณ์อื่นๆ ได้แก่ Accelerometer, Gyroscope, Barometer และ Magnetometer อยู่ด้วย
เริ่มกันก่อนที่ Gyroscope คืออะไร มันเป็นอุปกรณ์ทำหน้าที่วัด "ความเร็วเชิงมุม" (Angular velocity) ครับ ซึ่งให้ผลการวัดออกมาเป็น องศา/วินาที หรือ สามารถแปลงให้เป็น เรเดียน/วินาที ก็ได้ ทั้งหมดนี้ก็เพื่อใช้วัดความเร็วในการหมุนครับ
ทีนี้จะเอาความเร็วในการหมุนมาทำอะไรดีล่ะ ก็ง่ายๆครับ หากเราเอาค่าที่วัดได้มาอินทีเกรตเทียบกับเวลา เราก็จะได้มุมเทียบกับจุดอ้างอิงนั้นเองครับ แต่อันนี้มันในทางทฤษฎีนะครับ ในทางปฎิบัตินั้นปัญหาจะเกิดขึ้นจากค่าที่วัดได้จะมีสารพัด noise และ drift ครับ ว่าง่ายๆ ก็คือ ถึงแม้เราจะจับให้ Sensor อยู่เฉยๆ มันก็จะให้ค่าที่ไม่เป็นศูนย์ออกมา มีทั้งสัญญาณรบกวน และค่าคงที่แถมมาให้ด้วย แน่นอนครับ ของราคาแพงปัญหานี้ก็จะน้อยหน่อย ให้ค่าที่แม่นยำมากหน่อย ใช้กับการนำร่องของเครื่องบิน ดาวเทียม ของที่ราคาประหยัด อย่าง L3G4200D ที่ใช้ในโทรศัพท์มือถือ ก็มีความแม่นน้อย สัญญาณรบกวนมากหน่อย เราก็ต้องใช้วิธีทางคณิตศาสตร์และการเขียนโปรแกรมเพื่อจัดการเอาสิ่งที่เราไม่ต้องการออกครับ เช่น การใช้ Low pass filter หรือ การใช้ข้อมูลร่วมกับ Sensor อื่นๆ เพื่อวิเคราะห์สิ่งที่ต้องการ อันนี้ก็จะนำไปสู่การใช้ Kalman filter หรือ Complemetary filter นะครับ โอกาสหน้าจะเขียนให้อ่าน
มาลองดูรายละเอียดของ L3G4200D กันซะหน่อยครับ ตัวนี้เป็น Gyroscope ราคาถูกที่นิยมใช้กันในอุปกรณ์ประเภทพกพา เช่น โทรศัพท์ เครื่องบินบังคับวิทยุ ประมาณนี้ครับ ซึ่งจะให้ค่าความเร็วเชิงมุมออกมาทั้ง 3 แกน (Roll, Pitch, Yaw) หรือ แกน x, y, z
การสื่อสารกับ L3G4200D ก็ทำได้ทั้้ง SPI และ I2C ครับ แต่บังเอิญเราติดตั้งร่วมกันหลาย Chip จึงต้องเลือกใช้ protocol ที่มีใช้งานในทุก Chip ซึ่งคือ I2C นะครับ การต่อก็ตามภาพด้านล่างครับ
*** หมายเหตุ I2C ก็คือ การสื่อสารแบบใช้สาย 2 เส้น SDA และ SCL ดังนั้น บางทีจึงเรียกว่า Two Wire Interface (TWI) นะครับ ***
สำหรับ Arduino UNO (ส่วนถ้าเป็นบอร์ดอื่นๆ ก็ลองเปิดเว็บ http://arduino.cc/en/Main/Products) แล้วลองดูขาของ TWI ดูนะครับ
A4 -> SDA
A5 -> SCL
VCC -> 5V
GND - > GND
ทีนี้ การต่อแบบ I2C เราก็ต้องรู้ Address ของ Chip ที่จะสั่งให้ทำงานให้กันหน่อย L3G4200D จะมี Address ที่สำคัญเยอะพอสมควร ในกรณีที่ต้องการปรับแต่งค่ามากกว่าที่ใช้กันทั่วไป คงต้องเข้าไปหาในคู่มือ นะครับ
ขอยกตัวอย่างวิธีการอ่านค่าจาก register หน่อยนะครับ ถ้าเข้าไปลองเปิดคู่มือดูในหน้า 6 Output Register Mapping จะเห็นว่า .....
ในการอ่านค่าความเร็วเชิงมุมในทั้ง 3 แกนนั้น L3G4200D จะบอกค่าออกมาทาง register นะครับ ซึ่งค่าที่ให้จะมีความละเอียด 16 บิต โดยแต่ละแกนจะให้ออกมาทาง register 2 ตัว เช่น
OUT_X_L มี Address ที่ 0x28 หรือ 0010 1000
OUT_X_H มี Address ที่ 0x28 หรือ 0010 1001
เอาค่าที่ได้จากสอง register มาต่อกัน (Concatenate) ก็จะได้ค่า 16 บิตของความเร็วเชิงมุมแกน X
ทำแบบนี้เช่นเดียวกันสำหรับการอ่านค่าของแกนอื่นๆ นะครับ นอกจากนี้เรายังสามารถปรับค่ารายละเอียดการทำงานต่างๆ ของ L3G4200D ได้ เช่น การปรับความละเอียดในการอ่านค่า สั่งให้ทำงาน หรือ สั่งให้อยู่ใน sleep mode เป็นต้น
ในส่วนของการเข้าไปลุยกับ register นี้ ผู้ใช้ทั่วไปไม่ต้องกังวลนะครับ ให้ใช้ library กับ ตัวอย่างที่ให้ไว้ แล้วไปดัดแปลงเอาก็ได้ครับ อาจจะไม่ต้องเข้าไปยุ่งกับ register เอง เพื่อลดความซับซ้อนก็ได้ ปล่อยมันไว้อย่างนั้นเลยครับ
โอเคครับ มาถึง code กันเลย
ออกมากก็จะได้ค่าแสดงบน serial monitor ครับ ลองหมุนๆ ขยับๆ ดูนะครับ ว่าเห็นตัวเลขเปลี่ยนสอดคล้องกันลักษณะการหมุนรึเปล่า
ถ้าผมลองเอาค่าที่ได้จาก Serial monitor ไปลอง plot กราฟดูใน Matlab ก็ได้จะได้ค่าตามรูปนี้นะครับ
อย่างที่เขียนไว้ข้างบนครับ ภาพนี้ทดสอบโดยการวาง Gyroscope L3G4200D ของเราไว้เฉยๆ บนโต๊ะนะครับ ไม่ได้ขยับไปไหนเลย ดังนั้นก็จะเห็นได้ชัดเจนว่าอยู่ดีๆ ก็มีค่ามาให้ด้วย แทนที่ควรจะเป็นศูนย์ แถมด้วย noise อีกเยอะพอสมควร ดังนั้นถ้าจะเอาค่าที่ได้ไปอินทีเกรตเพื่อหามุมละก็... คงเพี้ยนไปมากๆ ใช้งานไม่ได้แน่ๆ
แล้วจะทำอย่างไร .... โปรดติดตามตอนต่อไปครับ
อ่านบทความตอนแรก
ลิงค์ที่น่าสนใจ
http://bildr.org/2011/06/l3g4200d-arduino/
http://en.wikipedia.org/wiki/Low-pass_filter
https://www.arduitronics.com/product/96/gy-80-imu-10dof-l3g4200d-adxl345-hmc5883l-bmp085
เราให้คำปรึกษาหลังการขายกับลูกค้าด้วยนะครับ
ติดต่อผ่าน facebook โทรศัพท์ หรือ line ได้ครับ
ไม่ได้คิดแต่จะขายของถูกๆ อย่างเดียวครับ
โดย Mountain A
www.facebook.com/arduitronics
หน้านี้เป็นสารบัญของบทความที่ปรากฏในเว็บของ Arduitronics.com นะครับ จะขอแบ่งออกเป็นหัวข้อตามกลุ่มของสินค้าในร้านดังต่อไปนี้
หน้าที่เข้าชม | 15,375,394 ครั้ง |
ผู้ชมทั้งหมด | 5,878,472 ครั้ง |
เปิดร้าน | 21 พ.ค. 2556 |
ร้านค้าอัพเดท | 6 ก.ย. 2568 |