Professional Documents
Culture Documents
รายงานผลการทดลอง
รายงานผลการทดลอง
บทนา
Gyro Sensor (Gyroscope Sensor) คือ อุปกรณ์ที่ทางานด้วยหลักฟิสิกส์ตามกฎแรงโน้มถ่วงของนิวตัน กาเนิดขึ้นในปี 1852
โดยนักฟิสิกส์ที่ชื่อ ณอง โบนาปต์ เลอง ฟูโกลต์ (Leon Foucault) โดยการนาวงล้อมาติดในวงแหวนที่หมุนได้ โดยที่วงล้อจะนอนอยู่แนว
ระนาบ แต่วงแหวนสามารถหมุนได้อิสระ และพอฟูโกลต์เปลี่ยนจากวงล้อเป็น Rotor ก็ทาให้ได้พบว่า การเคลื่อนไหวของ Rotor ก็หมุน
ตัวเองในทิศเดิมของมัน โดยไม่อิงกับแรงโน้มถ่วงโลกเช่นกัน โดย Gyro Sensor เป็นการตรวจจับแบบ 3 แกน (3-Axes) เช่นเดียวกันกับ
Accelerator Sensor แต่จะมีความถูก ต้อง และแม่นยามากกว่า เช่นการควบคุมการเล่นเกมส์ต่างๆ โดยเฉพาะเกมส์ที่ต้องอาศัยการ
เคลื่อนไหวในหลายๆ ทิศทาง การที่มี Gyro Sensor ก็จะทาให้การควบคุมมีความถูกต้องแม่นยามากขึ้น จึงเป็นประโยชน์กับการสร้างเข็ม
ทิศเครื่องบิน ทาให้นักบินสามารถคุมเครื่องให้อยู่ในแนวตรงในสภาพอากาศที่ เลวร้าย หรือในเรื่องเรือ ก็ถูกนาไปใช้กับการนาไปช่วยลดการ
โคลงของเรือ เป็นต้น
ขั้นตอนการทางานของอุปกรณ์
Accelerometer หรือ Gyro Module เป็นโมดูลวัดความเร่ง วัดได้ 3 แกน X Y และ Z เมื่อเราทาการหมุนเอียงตัวอุปกรณ์โมดูล
ค่ามุมภายในตัวอุปกรณ์ จะเปลี่ยนแปลงไป จากแนวระดับ โมดูลนี้จะส่งค่ามุม ที่เป็นค่าตัวเลขกลับมายังบอร์ดควบคุม ESP8266 เพื่อ
แสดงผลผ่าน Serial Monitor ทางโปรแกรม Ariduno IDE และจากโปรแกรมที่ทาการทดลอง เมื่อมีการเปลี่ยนมุมเอียงจนถึงค่าที่กาหนด
จะทาให้หลอดไฟ LED สีต่าง ๆ ติดขึ้น ตามทิศทางที่ทาการเปลี่ยนแปลงองศา ตามตารางด้านล่าง ดังนี้
ขั้นตอนในการทดลอง
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
สรุปผลการทดลอง
จากการทดลองพบว่ าเมื่อทาการเอียงทามุมตัวอุปกรณ์ จากแนวระดับ 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) {