ตัวตรวจจับความเร่งบน POP-32i

ตัวตรวจจับความเร่งบน POP-32i

ตัวตรวจจับความเร่งบน POP-32i

เซ็นเซอร์ MC3479 เป็นตัวตรวจจับความเร่ง 3 แกนที่ติดตั้งในบอร์ด POP32i ซึ่งสามารถวัดความเร่งในแกน X, Y, และ Z ได้อย่างแม่นยำ โดยบอร์ด POP32i รองรับการสื่อสารผ่าน I2C และสามารถแสดงผลค่าความเร่งผ่านหน้าจอ OLED ที่ติดตั้งมาพร้อมกัน

คุณสมบัติของ MC3479

  • วัดความเร่ง 3 แกน (X, Y, Z)
  • ช่วงการวัด: ±2g, ±4g, ±8g, ±16g
  • ความละเอียดสูงสุด: 16-bit
  • ใช้พลังงานต่ำ (~2.4 µA ในโหมด Active)
  • สื่อสารผ่าน I2C ความเร็วสูงสุด 400 kHz

วิธีการใช้งาน

  • เตรียมอุปกรณ์
    • บอร์ด POP32i
    • สาย USB สำหรับเชื่อมต่อบอร์ดกับคอมพิวเตอร์
    • ซอฟต์แวร์ Arduino IDE สำหรับเขียนและอัพโหลดโค้ด
    • ไลบรารีที่เกี่ยวข้อง:
      • Wire.h สำหรับการสื่อสาร I2C (มีมาให้สำหรับ Arduino อยู่แล้ว)
      • POP32.h สำหรับสั่งงานบอร์ด POP32 (สามารถติดตั้งได้ที่ https://inex.co.th/store/manual/POP32i-Sheet230316-re.pdf )

เชื่อมต่อบอร์ดเข้ากับคอมพิวตอร์เพื่ออัปโหลดโปรแกรม

โปรแกรมตัวอย่างการอ่านค่า MC3479 และแสดงผลบน OLED

#include <Wire.h>      // ไลบรารีสำหรับการสื่อสาร I2C
#include <POP32.h>     // ไลบรารีสำหรับใช้งาน OLED กับบอร์ด POP32
#define I2C_ADDRESS 0x6C    // ที่อยู่ I2C ของเซ็นเซอร์ MC34X9
#define REG_OUT_X_LSB 0x0D  // เรจิสเตอร์สำหรับอ่านค่าแกน X (LSB)
#define REG_OUT_Y_LSB 0x0F  // เรจิสเตอร์สำหรับอ่านค่าแกน Y (LSB)
#define REG_OUT_Z_LSB 0x11  // เรจิสเตอร์สำหรับอ่านค่าแกน Z (LSB)
#define LSB_TO_G 0.000061   // ค่าคงที่สำหรับแปลงจาก LSB เป็นหน่วย g (แรงโน้มถ่วง)
void setup() {
  Wire.begin();  // เริ่มต้นการสื่อสาร I2C
  oled.clear();              
  oled.text(0, 0, “MC34X9 Init…”); 
  writeRegister(0x07, 0x01);  // Active mode
  writeRegister(0x20, 0x01);  // ±2g, 16-bit
  oled.text(1, 0, “Ready!”);         
  oled.show();               
  delay(1000);               
}
void loop() {
  // อ่านค่าแกน X, Y, Z จากเซ็นเซอร์และแปลงเป็นหน่วย g
  float accelX_g = readAccel(REG_OUT_X_LSB) * LSB_TO_G; // อ่านค่าแกน X
  float accelY_g = readAccel(REG_OUT_Y_LSB) * LSB_TO_G; // อ่านค่าแกน Y
  float accelZ_g = readAccel(REG_OUT_Z_LSB) * LSB_TO_G; // อ่านค่าแกน Z
  oled.clear(); // ล้างหน้าจอ OLED ก่อนแสดงค่าข้อมูลใหม่
  // แสดงค่าที่อ่านได้บนหน้าจอ OLED
  oled.text(1, 0, “X: %f “, accelX_g); // แสดงค่าแกน X (หน่วย g)
  oled.text(2, 0, “Y: %f “, accelY_g); // แสดงค่าแกน Y (หน่วย g)
  oled.text(3, 0, “Z: %f “, accelZ_g); // แสดงค่าแกน Z (หน่วย g)
  oled.show(); 
  delay(100); 
}
// ฟังก์ชันสำหรับอ่านค่าดิบจากเซ็นเซอร์ MC34X9
int16_t readAccel(uint8_t reg) {
  Wire.beginTransmission(I2C_ADDRESS); // เริ่มต้นการสื่อสารกับเซ็นเซอร์ที่อยู่ 0x6C
  Wire.write(reg);                         // เขียนค่าเรจิสเตอร์ที่ต้องการอ่าน
  Wire.endTransmission(false);             // จบการส่งข้อมูล
  Wire.requestFrom(I2C_ADDRESS, 2);    // ขอข้อมูล 2 ไบต์จากเซ็นเซอร์
  return (int16_t)((Wire.read() | (Wire.read() << 8))); // รวมค่า LSB และ MSB เป็นค่า 16 บิต
}
void writeRegister(uint8_t reg, uint8_t value) {
  Wire.beginTransmission(I2C_ADDRESS); //เริ่มต้นการส่งข้อมูลไปยังเซ็นเซอร์ที่อยู่ 0x6C
  Wire.write(reg);          //ส่งที่อยู่ของเรจิสเตอร์ที่ต้องการเขียนค่า
  Wire.write(value);        //ส่งค่าที่ต้องการเขียนลงในเรจิสเตอร์
  Wire.endTransmission();   //จบการส่งข้อมูล
}

การทำงานของโปรแกรม

  • การตั้งค่าล่วงหน้า
    • เรียกใช้งานไลบลารี่สื่อสารแบบ I2C และกำหนดตำแหน่งขาของเซนเซอร์เชื่อมต่อ
    • กำหนดขารีจิตเตอร์สำหรับอ่านค่าแกนต่างๆ
    • กำหนดค่าคงที่สำหรับแปลงค่าเป็นหน่วย g (แรงโน้มถ่วง)
  • การทำงานส่วนเริ่มต้น
    • เรื่มต้นการสื่อสาร I2C
    • ตั้งค่าช่วง ±2g และความละเอียด 16 บิต (writeRegister(0x20, 0x01))
  • การทำงานวนซ้ำ
    • อ่านค่าข้อมูลจากเซ็นเซอร์ที่เรจิสเตอร์ของแกน X, Y, และ Z จากนั้นแปลงค่าที่ได้จาก LSB เป็นหน่วย g ด้วยค่าคงที่ LSB_TO_G
    • แสดงผลค่าข้อมูลเร่งความเร็วในแต่ละแกนบนหน้าจอ OLED
  • ฟังก์ชันช่วย
    • readAccel(): อ่านค่าดิบจากเซ็นเซอร์
    • writeRegister(): ตั้งค่าเรจิสเตอร์ของเซ็นเซอร์

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

ทดลองเอียงบอร์ดขึ้นลง ซ้ายขวา ค่าของแกน X  และ Y จะเพิ่มขึ้นหรือลดลงตามระดับความเอียงของบอร์ด และตำแหน่งของแกน Z เมื่อหันด้านหน้าบอร์ดขึ้นค่าของแกน Z จะมีค่าเป็นลบ แต่เมื่อพลิกบอร์ดหันด้านหน้าบอร์ดลงพื้นค่าที่ได้จะค่อยๆเพิ่มขึ่นตามการพลิกจนมีค่าเป็นบวก

วิดีโอตัวอย่าง

Facebook Comments Box