Three Axis Low-g Accelerometer Sensor with Arduino UNO

โครงงานนี้เป็นการทดลองเชื่อมต่อระหว่างเซนเซนเซอร์ความเร่งแบบ 3 แกน (Three Axis Accelerometer Sensor) ด้วยไอซีเบอร์ MMA7260 กับบอร์ดประมวลผล Arduino UNO เพื่อศึกษาการทำงาน การเชื่อมต่อวงจรรวมและการอ่านค่าที่ได้จากตัวเซนเซอร์ สำหรับเป็นแนวทางนำไปประยุกต์ใช้งาน โดยในโครงงานจะมีตัวอย่างของโปรแกรมที่สามารถนำไปเป็นไอเดียต่างๆ ต่อไป

Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 1 บล็อกไดอะแกรมแสดงโครงสร้างภายในตัวไอซี MMA7260 [Picture by Ref.2]

Datasheet for Accelerometer Sensor —-> MMA7260

Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 2 ทิศทางของการเซนเซอร์ความเร่ง [Picture by Ref.2]

รูปที่ 2 แสดงทิศทางและตำแหน่งของการเคลื่อนที่ตัวเซนเซอร์ MMA7260 ซึ่งทำให้เราสามารถทราบทิศทางของการเปลี่ยนแปลงที่เกิดขึ้นและสามารถกำหนดการนำไปใช้งานได้อย่างถูกต้อง โดยในส่วนนี้เราจะมาทดลองเชื่อมต่อกับบอร์ดประมวลผล Arduino UNO อีกครั้ง เพื่อให้เห็นค่าที่ได้จากเซนเซอร์เละเข้าใจการทำงานเพิ่มขึ้น

Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 3 การต่ออุปกรณ์ต่างๆ ให้กับตัวไอซี MMA7260 [Picture by Ref.2]
Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 4 การเชื่อมต่อระหว่างบอร์ดประมวลผลต่างๆ และตัวไอซีเซนเซอร์ [Picture by Ref.2]

รูปที่ 3 และรูปที่ 4 แสดงลักษณะการต่ออุปกรณ์ให้กับไอซีเซนเซอร์ MMA7260 (ในรูปที่ 3) โดยจะสังเกตเห็นว่าที่ขาเอาต์พุต Xout, Yout, Zout จะต่อตัวต้านทาน (1k) และตัวเก็บประจุ (0.1uF) เพื่อทำหน้าที่กรองความถี่ต่ำผ่าน (Low pass filter) ซึ่งสัญญาณที่ได้จะส่งไปยังบอร์ดประมวลผลต่อไป และที่ขารับไฟเลี้ยงไอซี (ขาที่ 3, ขา4) จะใช้ตัวเก็บประจุขนาด (0.1uF) สำหรับทำหน้าที่ฟิลเตอร์ให้กับตัวไอซี ในส่วนรูปที่ 4 จะเป็นลักษณะของการเชื่อมต่อกับบอร์ดประมวลผล โดยจะแนะนำการนำไฟเลี้ยงจากบอร์ดประมวลผลและการเลือกใช้ขาแปลงสัญญาณอะนาลอกเป็นดิจิตอล (A/Din) ในการใช้งาน รวมทั้งการเชื่อมต่อที่ขาสลีฟโหมด (Sleep Mode) และขา g-Select1,g-Select2 เข้าด้วยกันตามลำดับ

Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 5 แสดงลักษณะของการเตรียมการทดลองโครงงาน
Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 6 ค่าที่ได้จากการทดลองโดยให้ไอซีเซนเซอร์อยูที่ตำแหน่งแนวราบปกติตามรูปที่ 5
  /*
 Code Arduino Ref by ---> http://www.himix.lt/arduino/arduino-and-accelerometer-mma7260/
 Connection pins for Arduino to Accelerometer MMA7260
 Arduino UNO ----> MMA7260
 +5V   ---> VCC
 +5V   ---> SLP
 GND  ---> GND
 GND  ---> GS1
 GND  ---> GS2
 A0     ---> X
 A1     ---> Y
 A2     ---> Z 
 */
 
const int x = 0;
const int y = 1; 
const int z = 2; 

float sensorValue = 0;
int rawX, rawY, rawZ; 
float X, Y, Z;
float rollrad, pitchrad;
float rolldeg, pitchdeg;
 
void setup() {
   Serial.begin(9600);  // initialize serial communications at 9600
 }
 
void loop() {
  rawX=analogRead(x);
  rawY=analogRead(y);
  rawZ=analogRead(z);
  
  X = (rawX/256.00)-1.45; // used for angle calculations
  Y = (rawY/256.00)-1.49; // used for angle calculations
  Z = (rawZ/256.00)-1.10; // used for angle calculations
    
  rollrad = atan(Y/sqrt(X*X+Z*Z)); // radians
  pitchrad = atan(X/sqrt(Y*Y+Z*Z)); // radians
  
  rolldeg = 180*(atan(Y/sqrt(X*X+Z*Z)))/PI; // degrees
  pitchdeg = 180*(atan(X/sqrt(Y*Y+Z*Z)))/PI; // degrees
  
  // You can comment or uncomment if needed
  Serial.print("X = "); Serial.print(rawX); Serial.print(" Y = "); Serial.print(rawY); Serial.print(" Z = "); Serial.print(rawZ); // raw data
  // Serial.print(" Roll(rad) = "); Serial.print(rollrad); Serial.print(" Pitch(rad) = "); Serial.print(pitchrad); // in radians
  Serial.print(" Roll(deg) = "); Serial.print(rolldeg); Serial.print(" Pitch(deg) = "); Serial.println(pitchdeg); // in degrees
}

สำหรับตัวอย่างโปรแกรมข้างบนนี้ จะใช้ในการทดลองร่วมกับไอซีเซนเซอร์ MMA7260 ซึ่งจะแสดงค่าที่ได้ เมื่อเกิดการเคลื่อนที่ไปในทิศทางต่างๆ ของตัวไอซี โดยตัวโปรแกรม Arduino IDE จะแสดงผลไปที่หน้า Serial monitor และเราจะสังเกตการเปลี่ยนแปลงค่าที่เกิดขึ้นจากการเคลื่อนที่ไปในทิศทางต่างๆ ที่เราทำการทดลอง

Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 7 การทดลองที่ 1 เมื่อทดลองให้แกน X ถูกปรับการเอียง
Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 8 ผลที่ได้จากการทดลองที่ 1 เมื่อปรับการเอียงแกน X (ในกรอบสีแดง)
Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 9 การทดลองที่ 2 เมื่อทดลองให้แกน Y ถูกปรับการเอียง
Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 10 ผลที่ได้จากการทดลองที่ 2 เมื่อปรับการเอียงแกน Y
Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 11 การทดลองที่ 3 เมื่อทดลองให้แกน Z ถูกปรับการเอียง
Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 12 ผลที่ได้จากการทดลองที่ 3 เมื่อปรับการเอียงแกน Z
Three Axis Low-g Accelerometer Sensor with Arduino UNO
รูปที่ 13 ลักษณะของการทดลองโครงงาน

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

Reference

  1. https://extremeelectronics.co.in/avr-tutorials/interfacing-mma7260-triple-axis-accelerometer-with-atmega32-avr-tutorial/
  2. https://www.nxp.com/docs/en/data-sheet/MMA7260QT.pdf
  3. https://www.pololu.com/product/766
  4. https://jsavaglio.wordpress.com/2010/06/01/arduino-and-the-mma7260qt-3-axis-accelerometer/