กลับหน้าหลัก
views
วิธีใช้งาน GY-521 MPU6050 วัดความเอียง 3 แกน กับ Arduino
Last updated on

วิธีใช้งาน GY-521 MPU6050 วัดความเอียง 3 แกน กับ Arduino


วิธีใช้งาน GY-521 MPU6050 วัดความเอียง 3 แกน กับ Arduino

เซ็นเซอร์ GY-521 ที่ใช้ชิป MPU6050 เป็นโมดูล IMU (Inertial Measurement Unit) ที่รวม Accelerometer และ Gyroscope ไว้ด้วยกัน สามารถวัดความเร่งและการหมุนได้ 3 แกน ใช้งานง่ายผ่าน I2C Protocol มี Library สำเร็จรูปให้ดาวน์โหลด บทความนี้จะสอนต่อวงจรและเขียนโค้ดอ่านค่าความเอียงเพื่อควบคุม LED

วงจรต่อ GY-521 MPU6050 กับ Arduino UNO พร้อม LED 3 ดวงแสดงทิศทางการเอียง

อุปกรณ์ที่ต้องใช้

  • 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 UNOGY-521 MPU6050
5VVCC
GNDGND
A4 (SDA)SDA
A5 (SCL)SCL

วิธีต่อ LED แสดงผล

Arduinoสี LEDความหมาย
ขา 3แดงตำแหน่งราบ (แกน Z > 150)
ขา 4เหลืองแนวตั้งฉากพื้น (แกน X < 50)
ขา 5เขียวเอียงซ้าย-ขวา (แกน Y < 50 หรือ > 150)

หมายเหตุ: ต่อตัวต้านทาน 220 Ohm �直直直直直直直 อนุกรมกับ LED ทุกดวงเพื่อจำกัดกระแสไม่ให้ LED ขาด

ตารางแสดงการต่อขาระหว่าง Arduino UNO กับ GY-521 MPU6050 และ LED

ติดตั้ง Library MPU6050

โหลด Library จาก GitHub - Electronic Cats/MPU6050 หรือค้นหา “MPU6050” ใน Arduino IDE Library Manager ก็ได้

วิธีติดตั้งผ่าน Library Manager:

  1. เปิด Arduino IDE
  2. ไปที่ Sketch > Include Library > Manage Libraries
  3. พิมพ์ “MPU6050” ในช่องค้นหา
  4. เลือก 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);
}

วิธีทดสอบการทำงาน

  1. ต่อวงจรตามรูปด้านบนให้ครบ
  2. เปิด Arduino IDE แล้ว copy โค้ดด้านบนวาง
  3. เลือก Board เป็น Arduino UNO ที่ Tools > Board
  4. เลือก Port ที่เชื่อมต่อที่ Tools > Port
  5. Upload โค้ดลงบอร์ด
  6. เปิด Serial Monitor ที่ Tools > Serial Monitor (baud rate 9600)
  7. สังเกตค่าที่แสดงและการติดของ LED ตามการเอียง

ผลลัพธ์ที่คาดหวัง

Serial Monitor แสดงค่า X Y Z ขณะวางเซ็นเซอร์ในตำแหน่งต่างๆ คือราบ แนวตั้ง และเอียงซ้าย-ขวา
ตำแหน่งเซ็นเซอร์ค่าแกน Xค่าแกน Yค่าแกน ZLED ที่ติด
วางราบ (ขนานพื้น)~0~0> 150แดง
แนวตั้งฉากพื้น< 50~0~0เหลือง
เอียงไปทางขวา~0< 50~0เขียว
เอียงไปทางซ้าย~0> 150~0เขียว

จุดที่ต้องปรับ: ค่า Threshold (150, 50) ที่ใช้ในโค้ดเป็นค่าอ้างอิง ค่าจริงที่ได้ขึ้นอยู่กับการ Calibration ของแต่ละโมดูล ถ้า LED ไม่ติดตามที่คาดหวัง ให้ปรับค่า Threshold ในโค้ดให้เหมาะสมกับฮาร์ดแวร์ที่ใช้

วิดีโออ้างอิง

วิธีใช้งาน GY-521 MPU6050 กับ Arduino

อยากทำโปรเจคแบบนี้?

รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน

หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก

จ้างทำโปรเจคเลย

ความคิดเห็น