วิธีใช้งาน GY-521 MPU6050 วัดความเอียง 3 แกน กับ Arduino
วิธีใช้งาน GY-521 MPU6050 วัดความเอียง 3 แกน กับ Arduino
เซ็นเซอร์ GY-521 ที่ใช้ชิป MPU6050 เป็นโมดูล IMU (Inertial Measurement Unit) ที่รวม Accelerometer และ Gyroscope ไว้ด้วยกัน สามารถวัดความเร่งและการหมุนได้ 3 แกน ใช้งานง่ายผ่าน I2C Protocol มี Library สำเร็จรูปให้ดาวน์โหลด บทความนี้จะสอนต่อวงจรและเขียนโค้ดอ่านค่าความเอียงเพื่อควบคุม LED
อุปกรณ์ที่ต้องใช้
- Arduino UNO R3
- สาย USB สำหรับ upload โค้ด
- Adapter 9V 2A จ่ายไฟให้บอร์ด (ถ้าต้องการ)
- บอร์ดทดลอง Breadboard MB-102 (830 จุด)
- สาย Jumper ผู้-ผู้, ผู้-เมีย, เมีย-เมีย
- ตัวต้านทาน 220 Ohm
- LED สีแดง, เหลือง, เขียว อย่างละ 1 ดวง
- โมดูล GY-521 MPU6050
วิธีต่อวงจร GY-521 MPU6050 กับ Arduino
การต่อ GY-521 กับ Arduino UNO ใช้พอร์ต I2C ซึ่งมีขาอยู่ที่ A4 (SDA) และ A5 (SCL) สำหรับ UNO ส่วนบอร์ดอื่นเช่น Mega ใช้ขาต่างกัน ต้องตรวจสอบ Pinout ของบอร์ดที่ใช้ก่อน
| Arduino UNO | GY-521 MPU6050 |
|---|---|
| 5V | VCC |
| GND | GND |
| A4 (SDA) | SDA |
| A5 (SCL) | SCL |
วิธีต่อ LED แสดงผล
| Arduino | สี LED | ความหมาย |
|---|---|---|
| ขา 3 | แดง | ตำแหน่งราบ (แกน Z > 150) |
| ขา 4 | เหลือง | แนวตั้งฉากพื้น (แกน X < 50) |
| ขา 5 | เขียว | เอียงซ้าย-ขวา (แกน Y < 50 หรือ > 150) |
หมายเหตุ: ต่อตัวต้านทาน 220 Ohm �直直直直直直直 อนุกรมกับ LED ทุกดวงเพื่อจำกัดกระแสไม่ให้ LED ขาด
ติดตั้ง Library MPU6050
โหลด Library จาก GitHub - Electronic Cats/MPU6050 หรือค้นหา “MPU6050” ใน Arduino IDE Library Manager ก็ได้
วิธีติดตั้งผ่าน Library Manager:
- เปิด Arduino IDE
- ไปที่ Sketch > Include Library > Manage Libraries
- พิมพ์ “MPU6050” ในช่องค้นหา
- เลือก Library ที่ต้องการ แล้วกด Install
โค้ด Arduino อ่านค่าเซ็นเซอร์วัดความเอียง
#include "Wire.h"
#include "MPU6050.h"
MPU6050 mpu;
// กำหนดขาที่ต่อ LED
const int LED_RED = 3; // แสดงตำแหน่งราบ (แกน Z)
const int LED_YELLOW = 4; // แสดงแนวตั้งฉาก (แกน X)
const int LED_GREEN = 5; // แสดงการเอียงซ้าย-ขวา (แกน Y)
void setup() {
Serial.begin(9600);
// เริ่มต้น I2C
Wire.begin();
// เริ่มต้น MPU6050
mpu.initialize();
// ตรวจสอบการเชื่อมต่อ
if (mpu.testConnection()) {
Serial.println("MPU6050 initialized successfully");
} else {
Serial.println("MPU6050 connection failed");
}
// ตั้งค่าขาของ LED เป็น Output
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
// ปิด LED ทั้งหมดก่อน
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
}
void loop() {
int16_t ax, ay, az;
int16_t gx, gy, gz;
// อ่านค่า Accelerometer และ Gyroscope
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// แปลงค่า Accelerometer เป็น g (gravity)
// ค่าเต็ม (full-scale) ของ MPU6050 คือ ±2g ซึ่งมีค่า ADC ประมาณ ±16384
double accelX = (double)ax / 16384.0;
double accelY = (double)ay / 16384.0;
double accelZ = (double)az / 16384.0;
// แปลงเป็นมุม (approximate tilt angle)
// ค่า Z ใกล้ 1g = วางราบ, ค่า X หรือ Y มาก = เอียงมาก
// ปรับ scale สำหรับแสดงผล (คูณด้วย ~16000 กลับ)
int zValue = (int)(az / 109); // ปรับให้ได้ค่าประมาณ 150 เมื่อราบ
int xValue = (int)(ax / 109);
int yValue = (int)(ay / 109);
// แสดงผลใน Serial Monitor
Serial.print("X: ");
Serial.print(xValue);
Serial.print(" | Y: ");
Serial.print(yValue);
Serial.print(" | Z: ");
Serial.println(zValue);
// ปิด LED ทั้งหมดก่อน
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
// ตรวจสอบการเอียงและเปิด LED ตามเงื่อนไข
// Z > 150 = วางราบ (แกน Z รับแรงโน้มถ่วงเต็มที่)
if (zValue > 150) {
digitalWrite(LED_RED, HIGH);
}
// X < 50 = แนวตั้งฉากพื้น
if (xValue < 50) {
digitalWrite(LED_YELLOW, HIGH);
}
// Y < 50 หรือ Y > 150 = เอียงไปทางใดทางหนึ่ง
if (yValue < 50 || yValue > 150) {
digitalWrite(LED_GREEN, HIGH);
}
delay(100);
}
วิธีทดสอบการทำงาน
- ต่อวงจรตามรูปด้านบนให้ครบ
- เปิด Arduino IDE แล้ว copy โค้ดด้านบนวาง
- เลือก Board เป็น Arduino UNO ที่ Tools > Board
- เลือก Port ที่เชื่อมต่อที่ Tools > Port
- Upload โค้ดลงบอร์ด
- เปิด Serial Monitor ที่ Tools > Serial Monitor (baud rate 9600)
- สังเกตค่าที่แสดงและการติดของ LED ตามการเอียง
ผลลัพธ์ที่คาดหวัง
| ตำแหน่งเซ็นเซอร์ | ค่าแกน X | ค่าแกน Y | ค่าแกน Z | LED ที่ติด |
|---|---|---|---|---|
| วางราบ (ขนานพื้น) | ~0 | ~0 | > 150 | แดง |
| แนวตั้งฉากพื้น | < 50 | ~0 | ~0 | เหลือง |
| เอียงไปทางขวา | ~0 | < 50 | ~0 | เขียว |
| เอียงไปทางซ้าย | ~0 | > 150 | ~0 | เขียว |
จุดที่ต้องปรับ: ค่า Threshold (150, 50) ที่ใช้ในโค้ดเป็นค่าอ้างอิง ค่าจริงที่ได้ขึ้นอยู่กับการ Calibration ของแต่ละโมดูล ถ้า LED ไม่ติดตามที่คาดหวัง ให้ปรับค่า Threshold ในโค้ดให้เหมาะสมกับฮาร์ดแวร์ที่ใช้
วิดีโออ้างอิง
อยากทำโปรเจคแบบนี้?
รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน
หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก
จ้างทำโปรเจคเลย