3-axis Accelerometer Module (MMA7361)
nextbackseo@gmail.com | Posted on |
สารบัญ
Toggle3-axis Accelerometer Module (MMA7361)
แนะนำ 3-axis Accelerometer Module (MMA7361) เซ็นเซอร์วัดความเร่งสำหรับนักพัฒนาและนักสร้างสรรค์ เมื่อการเคลื่อนไหวถูกแปลงเป็นสัญญาณไฟฟ้า ในโลกของ IoT หุ่นยนต์ และอุปกรณ์สวมใส่ (wearable devices) การตรวจจับการเคลื่อนไหว ทิศทาง และแรงกระแทกเป็นหัวใจสำคัญของฟังก์ชันการทำงานมากมาย ตั้งแต่การนับก้าวเดินในสมาร์ทวอทช์ การตรวจจับการล้มในอุปกรณ์สำหรับผู้สูงอายุ ไปจนถึงการทรงตัวของโดรนและหุ่นยนต์ เบื้องหลังความสามารถเหล่านี้คือ Accelerometer หรือเซ็นเซอร์วัดความเร่ง หนึ่งในโมดูล Accelerometer ที่ได้รับความนิยมในหมู่นักพัฒนาและผู้ที่ชื่นชอบงานอิเล็กทรอนิกส์คือ MMA7361 โมดูลเซ็นเซอร์วัดความเร่ง 3 แกนราคาประหยัด ที่มาพร้อมความสามารถในการตรวจจับการเคลื่อนไหวได้อย่างแม่นยำ ใช้งานง่าย และกินไฟน้อย บทความนี้จะพาคุณไปรู้จักกับ MMA7361 อย่างละเอียด ตั้งแต่หลักการทำงาน สเปกสำคัญ วิธีเชื่อมต่อกับ Arduino ไปจนถึงตัวอย่างการประยุกต์ใช้งานจริง 3-axis Accelerometer Module (MMA7361)
เพื่อให้คุณสามารถนำเซ็นเซอร์ตัวนี้ไปสร้างสรรค์โปรเจกต์ต่างๆ ได้อย่างมั่นใจ MMA7361 คืออะไร MMA7361 เป็นโมดูลเซ็นเซอร์วัดความเร่ง (Accelerometer) แบบ 3 แกน (Triple Axis) ที่ใช้ชิปหลักจาก Freescale Semiconductor (ปัจจุบันคือ NXP Semiconductors) โมดูลนี้ถูกออกแบบมาให้ตรวจจับความเร่งในแกน X (ซ้าย-ขวา) Y (หน้า-หลัง) และ Z (ขึ้น-ลง) ได้อย่างอิสระ โมดูลนี้ได้รับความนิยมเป็นอย่างมากในหมู่นักพัฒนา Arduino และผู้ที่ชื่นชอบงาน DIY เพราะเป็นอะนาล็อกที่เข้าใจง่าย เชื่อมต่อกับไมโครคอนโทรลเลอร์ได้โดยตรงโดยไม่ต้องใช้โปรโตคอลการสื่อสารที่ซับซ้อน อีกทั้งยังเป็นรุ่นที่ใช้ทดแทน MMA7260 รุ่นเก่าที่ไปแล้ว
หลักการทำงานของ Capacitive Micromachined Accelerometer
หลักการทำงาน Capacitive Micromachined Accelerometer เบื้องหลังความสามารถในการตรวจจับความเร่งของ MMA7361 คือหลักการ การเปลี่ยนแปลงของความจุไฟฟ้า (Capacitive Sensing) ภายในชิปเซ็นเซอร์จะมีโครงสร้างกล้องจุลทรรศน์ที่เปรียบเสมือนแผ่นตัวเก็บประจุขนาดเล็ก เมื่อเซ็นเซอร์เกิดการเคลื่อนไหวหรือถูกแรงกระแทก แผ่นตัวเก็บประจุเหล่านี้จะขยับตัว ส่งผลให้ค่าความจุไฟฟ้าเปลี่ยนแปลงไป วงจรภายในเซ็นเซอร์จะทำการแปลงการเปลี่ยนแปลงของความจุไฟฟ้านี้ให้เป็นสัญญาณแรงดันไฟฟ้าอะนาล็อก โดยยิ่งเคลื่อนไหวรุนแรงหรือความเร่งมากเท่าไหร่ แรงดันไฟฟ้าที่ส่งออกจากเซ็นเซอร์ก็จะเปลี่ยนไปมากเท่านั้น สัญญาณนี้จะถูกส่งออกมาทางขา XOUT, YOUT และ ZOUT ซึ่งเราสามารถนำไปเชื่อมต่อกับ Arduino เพื่ออ่านค่าและนำไปคำนวณต่อได้ทันที คุณสมบัติเด่นและสเปกทางเทคนิค MMA7361 มีจุดเด่นหลายประการที่ทำให้เหมาะกับงานหลากหลายประเภท
- เลือกระยะการวัดได้ 2 ระดับ (Selectable Sensitivity)
หัวใจสำคัญของ Accelerometer คือช่วงความเร่งสูงสุดที่วัดได้ (g-range) MMA7361 ให้เลือก 2 ระดับคือ ±1.5g และ ±6g โดยเลือกผ่านขาสวิตช์หรือการควบคุมด้วยไมโครคอนโทรลเลอร์ (GS Pin) โหมด ±1.5g มีความละเอียดสูง (800mV/g) เหมาะสำหรับการวัดมุมเอียง (Tilt Sensing) การทรงตัว หรือการเคลื่อนไหวที่ละเอียดอ่อน โหมด ±6g ความละเอียดลดลง (206mV/g) แต่สามารถวัดแรงกระแทกหรือความเร่งที่รุนแรงได้ เช่น การตรวจจับการตกกระแทกในอุปกรณ์พกพา หรือการวัดแรงสั่นสะเทือน
- กินไฟน้อย (Low Power Consumption)
MMA7361 ถูกออกแบบมาสำหรับอุปกรณ์ที่ใช้พลังงานจากแบตเตอรี่ โดยในโหมดทำงานปกติ (Measurement Mode) กินกระแสไฟฟ้าเพียง 400-500 μA เท่านั้น และที่สำคัญยิ่งกว่านั้นคือมีโหมด Sleep Mode ที่กินไฟแค่ 3 μA เมื่อไม่ได้ใช้งาน การสั่งให้เซ็นเซอร์เข้าสู่โหมดหลับสามารถทำได้ง่ายๆ ผ่านขาสัญญาณ (Sleep Pin) ทำให้เหมาะกับโปรเจกต์ IoT หรืออุปกรณ์สวมใส่อย่างยิ่ง
- แรงดันไฟฟ้าทำงานกว้างและมี Voltage Regulator ในตัว
ชิป MMA7361 หลักทำงานที่แรงดัน 2.2V ถึง 3.6V แต่โมดูลสำเร็จรูปส่วนใหญ่จะติดตั้ง Voltage Regulator (เช่น RT9161) ทำให้สามารถป้อนไฟได้ถึง 3.3V – 8V หรือบางรุ่นรองรับ 5V โดยตรง สะดวกต่อการเชื่อมต่อกับ Arduino ที่จ่ายไฟ 5V โดยไม่ต้องกังวลว่าแรงดันจะสูงเกินไป
- ฟังก์ชันพิเศษอื่นๆ
0g-Detect (Freefall Detection) ขาสัญญาณนี้จะแจ้งเตือนเมื่อเซ็นเซอร์อยู่ในสภาวะไร้น้ำหนัก (0g) ซึ่งใช้ตรวจจับการตกอิสระได้ Self Test ฟังก์ชันสำหรับทดสอบว่าเซ็นเซอร์ทำงานปกติหรือไม่ Low Pass Filter มีวงจรกรองสัญญาณรบกวนในตัว ทำให้ค่าที่อ่านได้มีเสถียรภาพ
สเปก MMA7361
คุณสมบัติ รายละเอียด แรงดันไฟฟ้า (โมดูล) 3.3V – 8V (หรือ 5V แล้วแต่ผู้ผลิต) แรงดันไฟฟ้า (ชิป) 2.2V – 3.6V กระแสไฟ (ทำงาน/หลับ) 400 μA / 3 μA ระยะการวัด ±1.5g, ±6g ความไว (Sensitivity) 800 mV/g (@1.5g), 206 mV/g (@6g) อินเทอร์เฟซ อะนาล็อก (Analog Output) จุดตัดสัญญาณรบกวน 400 Hz (XY), 300 Hz (Z) เวลาเริ่มทำงาน (Enable Time) 0.5 ms ขนาดโมดูล (ตัวอย่าง) 23 x 26 mm หรือ 26 x 23 mm การเชื่อมต่อและการเขียนโค้ดกับ Arduino ข้อดีที่สุดของโมดูล MMA7361 คือความเรียบง่ายในการเชื่อมต่อ เนื่องจากเป็นเอาต์พุตแบบอะนาล็อก ทำให้เชื่อมต่อกับ Arduino Uno หรือบอร์ดอื่นๆ ได้โดยตรง การเชื่อมต่อฮาร์ดแวร์ การเชื่อมต่อพื้นฐานสำหรับอ่านค่า XYZ มีดังนี้
- MMA7361 Module Arduino Uno
- VCC (หรือ 5V) 5V
- GND GND
- XOUT A0 (Analog Pin 0)
- YOUT A1 (Analog Pin 1)
- ZOUT A2 (Analog Pin 2)
หมายเหตุเพิ่มเติม (สำหรับการเลือกช่วง g) หากต้องการใช้โหมด 1.5g (ความไวสูง) ต่อขา GS เข้ากับ GND หากต้องการใช้โหมด 6g (วัดแรงกระแทกสูง) ต่อขา GS เข้ากับ VCC (5V หรือ 3.3V) หากต้องการใช้ Sleep Mode (ประหยัดไฟ) ต่อขา Sleep เข้ากับ 5V เพื่อ Wake Up, ต่อ GND เพื่อ Sleep
โค้ดตัวอย่าง Arduino
โค้ดด้านล่างนี้จะอ่านค่า Raw (0-1023) จากเซ็นเซอร์ และแปลงเป็นค่าแรงดันไฟฟ้า และแปลงเป็นค่า G (ความเร่ง)
cpp
// โค้ดสำหรับอ่านค่า MMA7361 แบบพื้นฐาน
// อ้างอิงจาก DFRobot Wiki [citation5][citation9]
const int xPin = A0; // กำหนดขา X
const int yPin = A1; // กำหนดขา Y
const int zPin = A2; // กำหนดขา Z
float sensitivity = 0.8; // 800mV/g = 0.8 V/g (สำหรับโหมด 1.5g)
float zero_g_voltage = 1.65; // แรงดันไฟฟ้าที่ 0g (เมื่อ VCC=3.3V, VCC/2)
void setup() {
Serial.begin(9600);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(zPin, INPUT);
}
void loop() {
int xRaw = analogRead(xPin);
int yRaw = analogRead(yPin);
int zRaw = analogRead(zPin);
// แปลงค่า Raw (0-1023) เป็นแรงดันไฟฟ้า (0-5V หรือ 0-3.3V ตาม VCC)
float xVoltage = (xRaw / 1023.0) * 5.0;
float yVoltage = (yRaw / 1023.0) * 5.0;
float zVoltage = (zRaw / 1023.0) * 5.0;
// แปลงแรงดันเป็นค่า g (ลบค่า Zero-g Offset)
float xG = (xVoltage – zero_g_voltage) / sensitivity;
float yG = (yVoltage – zero_g_voltage) / sensitivity;
float zG = (zVoltage – zero_g_voltage) / sensitivity;
Serial.print(X ); Serial.print(xG); Serial.print( g\t);
Serial.print(Y ); Serial.print(yG); Serial.print( g\t);
Serial.print(Z ); Serial.println(zG);
delay(500);
}
คำอธิบายโค้ด
- analogRead() อ่านค่าแรงดันที่ขาเซ็นเซอร์เป็นตัวเลข 0-1023
- Convert to Voltage หาก Arduino ใช้ไฟ 5V ค่า 1023 เท่ากับ 5V
- Convert to g เมื่อเซ็นเซอร์วางราบกับพื้น แกน Z ควรอ่านค่าได้ประมาณ +1g (แรงโน้มถ่วงโลก) ส่วนแกน X และ Y ควรได้ 0g
การประยุกต์ใช้งานจริง
การประยุกต์ใช้งานจริง (Applications) MMA7361 ถูกนำไปใช้ในโปรเจกต์ที่หลากหลาย เนื่องจากความสมดุลระหว่างราคา ความแม่นยำ และการกินไฟ การตรวจจับมุมเอียง (Tilt/Inclination Sensing) ใช้ในงานควบคุมหุ่นยนต์ด้วยท่าทาง หรือระบบกันขโมยรถจักรยานยนต์ที่ส่งสัญญาณเตือนเมื่อรถล้ม Pedometer (เครื่องนับก้าวเดิน) อัลกอริทึมการนับก้าวมักใช้ Accelerometer ในการตรวจจับรูปแบบการเคลื่อนไหวขณะเดิน Freefall Detection (ตรวจจับการตกกระแทก) ในฮาร์ดดิสก์ไดรฟ์หรือแล็ปท็อป เซ็นเซอร์จะตรวจจับสภาวะไร้น้ำหนักและสั่งให้หัวอ่านเก็บเข้าที่ก่อนตกถึงพื้น Vibration Detection (ตรวจจับการสั่นสะเทือน) งานวิจัยของมหาวิทยาลัยเทคโนโลยีมาเลเซียได้นำ MMA7361 ไปใช้เปรียบเทียบกับเซ็นเซอร์อื่นๆ (MPU6050, ADXL335) ในการตรวจจับรอยรั่วของท่อส่งน้ำ โดยวัดการสั่นสะเทือนของน้ำที่รั่วออกมา Robotics (หุ่นยนต์) ใช้ตรวจจับการชนหรือการล้มของหุ่นยนต์ เพื่อให้หุ่นยนต์ปรับสมดุลหรือหยุดทำงาน MMA7361 คือตัวเลือกที่ดีสำหรับผู้เริ่มต้นและผู้ที่มองหาความเรียบง่าย MMA7361
อาจไม่ใช่ Accelerometer ที่ทันสมัยที่สุดในตลาด เมื่อเทียบกับเซ็นเซอร์ดิจิทัลสมัยใหม่อย่าง MPU6050 (ที่มีทั้ง Accelerometer และ Gyroscope ในตัว) แต่ จุดแข็งของ MMA7361 อยู่ที่ความเรียบง่าย ราคาประหยัด และกินไฟน้อย สำหรับผู้ที่เพิ่งเริ่มต้นศึกษาเกี่ยวกับเซ็นเซอร์วัดความเร่ง การใช้ MMA7361 เป็นก้าวแรกที่ดีที่สุด เพราะการทำงานแบบอะนาล็อกช่วยให้คุณเข้าใจความสัมพันธ์ระหว่างแรงทางกายภาพ (g) กับสัญญาณไฟฟ้า (โวลต์) ได้อย่างเป็นรูปธรรม โดยไม่ต้องงมงายกับ I2C Registers หรือ Library ที่ซับซ้อน ไม่ว่าคุณจะกำลังสร้างโครงงานวิทยาศาตร์ เครื่องวัดระดับน้ำในแท็งก์ หุ่นยนต์เตะบอล หรืออุปกรณ์ IoT สำหรับบ้านอัจฉริยะ MMA7361 คือเครื่องมือที่ทรงพลังและคุ้มค่าที่ควรมีติดตู้อุปกรณ์ไว้
Arduino IDE, Arduino UNO คือ, Arduino โค้ด, Arduino โหลด, Arduino คือ, Arduino ต่อ Relay, Arduino บอร์ด, Sensor ตรวจจับวัตถุ Arduino, เขียน Arduino, เขียน Code Arduino, เซ็นเซอร์ Arduino, เซ็นเซอร์อุณหภูมิ Arduino, เรียน Arduino, โค้ด Arduino, โค้ด Arduino เซ็นเซอร์, โค้ด Arduino ง่ายๆ, โปรเจค Arduino เซ็นเซอร์อุณหภูมิ, โปรแกรม Arduino, โปรแกรม Arduino IDE, โปรแกรม Arduino UNO, ใช้ Arduino, กล้อง Arduino, ข้อมูล Arduino, ขาย Arduino, คู่มือ Arduino, ซอฟต์แวร์ Arduino, ซื้อ Arduino, ต่อ Arduino, ต่อ LCD กับ Arduino, นวัตกรรม Arduino, บอร์ด Arduino, ร้าน Arduino, ร้านขายอุปกรณ์อิเล็ค, วงจร Arduino, สอน Arduino, ออกแบบ Arduino, อุปกรณ์ Arduino, อุปกรณ์ Sensor Arduino
ใส่ความเห็น