You are on page 1of 4

รายงานผลการทดลอง

เรื่อง การใช้เซ็นเซอร์ตรวจจับความเอียง 3 แกน GY-521 ควบคุมผ่าน ESP8266

ผู้ทาการทดลอง 1. นาย เสกสิทธิ์ พันสวรรค์ รหัส 2010717301013 วิชาเอก วิศวกรรมไฟฟ้ากาลัง


2. นาย ธนัญกรณ์ สงพรมทิพย์ รหัส 2010717301045 วิชาเอก วิศวกรรมไฟฟ้ากาลัง
3. นาย พชร ศิริระพร รหัส 2010717301047 วิชาเอก วิศวกรรมไฟฟ้ากาลัง
อาจารย์ผู้สอน อาจารย์ อัฏฐ์วุฒิ ไหวพริบ

บทนา
Gyro Sensor (Gyroscope Sensor) คือ อุปกรณ์ที่ทางานด้วยหลักฟิสิกส์ตามกฎแรงโน้มถ่วงของนิวตัน กาเนิดขึ้นในปี 1852
โดยนักฟิสิกส์ที่ชื่อ ณอง โบนาปต์ เลอง ฟูโกลต์ (Leon Foucault) โดยการนาวงล้อมาติดในวงแหวนที่หมุนได้ โดยที่วงล้อจะนอนอยู่แนว
ระนาบ แต่วงแหวนสามารถหมุนได้อิสระ และพอฟูโกลต์เปลี่ยนจากวงล้อเป็น Rotor ก็ทาให้ได้พบว่า การเคลื่อนไหวของ Rotor ก็หมุน
ตัวเองในทิศเดิมของมัน โดยไม่อิงกับแรงโน้มถ่วงโลกเช่นกัน โดย Gyro Sensor เป็นการตรวจจับแบบ 3 แกน (3-Axes) เช่นเดียวกันกับ
Accelerator Sensor แต่จะมีความถูก ต้อง และแม่นยามากกว่า เช่นการควบคุมการเล่นเกมส์ต่างๆ โดยเฉพาะเกมส์ที่ต้องอาศัยการ
เคลื่อนไหวในหลายๆ ทิศทาง การที่มี Gyro Sensor ก็จะทาให้การควบคุมมีความถูกต้องแม่นยามากขึ้น จึงเป็นประโยชน์กับการสร้างเข็ม
ทิศเครื่องบิน ทาให้นักบินสามารถคุมเครื่องให้อยู่ในแนวตรงในสภาพอากาศที่ เลวร้าย หรือในเรื่องเรือ ก็ถูกนาไปใช้กับการนาไปช่วยลดการ
โคลงของเรือ เป็นต้น

รูปที่ 1 แสดงหลักการทางานของ Gyro Sensor

ขั้นตอนการทางานของอุปกรณ์
Accelerometer หรือ Gyro Module เป็นโมดูลวัดความเร่ง วัดได้ 3 แกน X Y และ Z เมื่อเราทาการหมุนเอียงตัวอุปกรณ์โมดูล
ค่ามุมภายในตัวอุปกรณ์ จะเปลี่ยนแปลงไป จากแนวระดับ โมดูลนี้จะส่งค่ามุม ที่เป็นค่าตัวเลขกลับมายังบอร์ดควบคุม ESP8266 เพื่อ
แสดงผลผ่าน Serial Monitor ทางโปรแกรม Ariduno IDE และจากโปรแกรมที่ทาการทดลอง เมื่อมีการเปลี่ยนมุมเอียงจนถึงค่าที่กาหนด
จะทาให้หลอดไฟ LED สีต่าง ๆ ติดขึ้น ตามทิศทางที่ทาการเปลี่ยนแปลงองศา ตามตารางด้านล่าง ดังนี้

Rotation Direction Difference Angle (°) LED Display


Forward Axis X ≤ 50 Yellow
Left Axis Y ≤ 50 Green
Right Axis Y ≥ 150 Red
อุปกรณ์ในการทดลอง
1. NodeMCU ESP8266 V2 CP2102 LUA based ESP8266-12E
2. สาย Micro USB Type B to USB 2.0 Type A ยาว 1 เมตร
3. MB-102 บอร์ดทดลอง Breadboard โฟโต้บอร์ด Protoboard 830 Point MB-102
4. สายไฟจัมเปอร์ ผู้-ผู้ ยาว 20cm. จานวน 10 เส้น
5. สายไฟจัมเปอร์ ผู้-เมีย ยาว 20cm. จานวน 3 เส้น
6. ตัวต้านทาน 220 Ohm 1/4W Metal film 1% จานวน 3 ชิ้น
7. LED 5mm หลอดสี สีแดง จานวน 1 ดวง
8. LED 5mm หลอดสี สีเหลือง จานวน 1 ดวง
9. LED 5mm หลอดสี สีเขียว จานวน 1 ดวง
10. GY-521 IMU 3-axis Accelerometer/Gyro Module (MPU6050)

ขั้นตอนในการทดลอง
1.ทาการเขียนโค้ดโปรแกรมลงโปรแกรม Arduino IDE และทาการทดสอบโค้ดโปรแกรม พร้อมทั้งทาการอัพโหลดโค้ดที่ผ่านการ
Compline แล้วลงไปยังบอร์ดควบคุม ESP8266
2.ทาการเชื่อมต่ออุปกรณ์ทั้งหมดลงบอร์ดทดลอง และทาการเชื่อมต่อสายไฟจัมเปอร์ ตามรายละเอียด ดังนี้
NodeMCU ESP8266 เชื่อมต่อกับหลอดไฟ LED สีแดง, เหลือง และเขียว
• ขา D0 -> LED Red
• ขา D5 -> LED Green
• ขา D6 -> LED Yellow
NodeMCU ESP8266 เชื่อมต่อกับเซ็นเซอร์ตรวจจับความเอียง 3 แกน GY-521 IMU 3-axis (MPU6050)
• Vin -> VCC
• GND -> GND
• ขา D1 -> SDA
• ขา D2 -> SCL

รูปที่ 2 แสดงวิธีการต่ออุปกรณ์ทดลอง ESP8266 ร่วมกับ Gyro Sensor


ผลการทดลอง
การทดลองกระทาโดยการเอียงทามุมตัว Gyro Sensor ไปในทิศทางที่ทาการทดสอบจานวน 4 ทิศทาง คือ ด้านหน้า ด้านซ้าย
ด้านขวา และด้านหลัง โดยในการเอียงทามุมจะเริ่มต้น ที่มุม 0° 45° และ 90° ตามลาดับ และสังเกตผลการทดลองจากหลอดไฟ LED ที่
แสดงผลตามค่าที่ได้ทาการโปรแกรมไว้ รวมถึงผลค่ามุมที่แสดงออกมาจาก Serial Monitor ซึ่งผลการทดลองเป็นไปดังตาราง ดังนี้

Rotation Test LED Display Angle from Serial Monitor (°)


Direction Angle (°) Red Yellow Green X-Axis Y-Axis Z-Axis
0° - - - 91 87 174
Forward 45° - - - 46 87 152
90° - √ - 7 88 79
0° - - - 88 87 174
Left 45° - - - 90 45 161
90° - - √ 91 3 73
0° - - - 90 87 174
Right 45° - - - 92 135 159
90° √ - - 91 173 92
0° - - - 93 89 172
Backward 45° - - - 136 83 161
90° - - - 179 79 79

รูปที่ 3 แสดงผลจากการทดลองทั้ง 4 ทิศทาง

สรุปผลการทดลอง
จากการทดลองพบว่ าเมื่อทาการเอียงทามุมตัวอุปกรณ์ จากแนวระดับ 0° ไปยังระดับ 90° หลอดไฟ LED สีเหลืองจะติด โดย
หลอดไฟจะเริ่มติดเมื่อมุมในแกน x ต่ากว่า 30° ส่วนเมื่อทาการเอียงไปในทิศทางซ้าย จากแนวระดับ 0° ไปยังระดับ 90° หลอดไฟ LED สี
เขียวจะติด โดยหลอดไฟจะเริ่มติดเมื่อมุมในแกน y ต่ากว่า 30° เช่นกัน และเมื่อทาการเอียงไปในทิศทางขวา จากแนวระดับ 0° ไปยังระดับ
90° หลอดไฟ LED สีแดงจะติด โดยหลอดไฟจะเริ่มติดเมื่อมุมในแกน y มากกว่า 150° ซึ่งจากการทดลองจะพบว่าการเอียงในทิศทาง
ด้านหน้า และด้านซ้าย หลอดไฟจะเริ่มติดไม่ตรงตามค่าที่ได้โปรแกรมไว้ที่น้อยกว่า 50° ซึ่งสาเหตุอาจเกิดจากค่าความต้านรวมภายในวงจร
ของหลอดไฟสีเขียวและสีเหลืองที่มีความต้านทานในหลอด LED ที่น้อยกว่าสีแดง จึงทาแรงดันในจุทางานของ LED ไม่ถึงค่าที่กาหนดจน
ต้องทาการปรับมุมองศาจนกว่าระดับแรงดันที่ออกจาก Gyro Sensor จะถึงจุดที่สามารถขับแสงสว่างหลอดไฟสีเขียวและสีเหลืองได้
โค้ดโปรแกรมที่ใช้ในการทาการทดลอง

digitalWrite(ledR, HIGH);
#include "I2Cdev.h"
digitalWrite(ledG, LOW);
#include "MPU6050_6Axis_MotionApps20.h"
digitalWrite(ledY, LOW);
#include "Wire.h"
}
MPU6050 mpu;
if (valy < 50) {
int16_t ax, ay, az;
digitalWrite(ledR, LOW);
int16_t gx, gy, gz;
digitalWrite(ledG, HIGH);
int valx , valy , valz;
digitalWrite(ledY, LOW);
char rd;
}
int prevVal;
if (valx < 50) {
int ledR = 16 ;
digitalWrite(ledR, LOW);
int ledG = 14 ;
digitalWrite(ledG, LOW);
int ledY = 12 ;
digitalWrite(ledY, HIGH);
int pin11 = 5 , pin10 = 4 ;
}
int val1 , val2 ;
if (valz > 150) {
int valgy1 = 0 , valgy2 = 0;
digitalWrite(ledR, LOW);
void setup()
digitalWrite(ledG, LOW);
{
digitalWrite(ledY, LOW);
pinMode(ledR, OUTPUT) ;
}
pinMode(ledG, OUTPUT) ;
pinMode(ledY, OUTPUT) ;
delay(100);
Wire.begin();
}
Serial.begin(38400);
Serial.println("Initialize MPU");
mpu.initialize();
Serial.println(mpu.testConnection() ? "Connected" :
"Connection failed");
}
void loop()
{
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
valx = map(ax, -17000, 17000, 0, 179);
valy = map(ay, -17000, 17000, 0, 179);
valz = map(az, -17000, 17000, 0, 179);
Serial.print("axis x = ") ;
Serial.print(valx) ;
Serial.print(" axis y = ") ;
Serial.print(valy) ;
Serial.print(" axis z = ") ;
Serial.println(valz) ;
if ( valy > 150) {

You might also like