Three Axis Low-g Accelerometer Sensor with Arduino UNO

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

Datasheet for Accelerometer Sensor —-> MMA7260

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


รูปที่ 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 เข้าด้วยกันตามลำดับ


/* 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 และเราจะสังเกตการเปลี่ยนแปลงค่าที่เกิดขึ้นจากการเคลื่อนที่ไปในทิศทางต่างๆ ที่เราทำการทดลอง







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