26.Wio Terminal EP.13, การอ่านค่าจาก เซนเซอร์วัดความเร่ง Acellerator & Gyroscope


 Wio Terminal EP.13, การอ่านค่าจาก เซนเซอร์วัดความเร่ง Acellerator & Gyroscope

การนำเสนอในครั้งนี้ ก็ยังคงมาในแนวทางของการใช้ Arduino IDE โดยขอนำเสนอวิธีการอ่านค่าจากเซยเซอร์ Accelerator & Gyroscope ซึ่งฝังอยู่ภายในเครื่อง แต่มีเงื่อนไขว่า ท่านจะต้องไปดาวน์โหลด ไลบรารี่ไฟล์ จาก  GitHub คือ Seeed_Arduino_LIS3DHTR เมื่อได้มาแล้ว ให้เปิด Arduino IDE และเลือกเมเนู Sketch >> Include Library >> Add .ZIP Library จากนั้นให้เลือกโฟลเดอร์ที่ท่านเก็บไฟล์ที่ได้ดาวน์โหลดมาก่อนหน้านี้และเลือกไฟล์ Seeed_Arduino_LIS3DHTR-master.zip รอสักครู่ เป็นอันเสร็จสิ้นการเพิ่มไลบรารี่ จากนั้นก็เขียนโค้ดตามตัวอย่างนี้ ที่ต้องบอกว่าให้เขียนโค้ดตามตัวอย่างนี้ เนื่องจากว่า ไฟล์ตัวอย่างที่ได้จากการเพิ่มไลบรารี่ไฟล์ มีข้อผิดพลาดอยู่หลายแห่ง โดยเฉพาะในช่วง header และ declaration รวมถึงในส่วนของ ฟังก์ชั่น setup()

 
คำอธิบาย
    การเขียนโค้ด ผู้เขียน ได้แยกออกเป็นฟังก์ชั่นย่อย เท่าที่จะทำได้ ดังนี้
    1. ฟังก์ชั่น readAccel() ไว้ใช้สำหรับอ่านค่าจากเซนเซอร์ วัดความเร่ง Acellerator & Gyroscope
    2. ฟังก์ชั่น initLabel()  ไว้ใช้ในการวางข้อความบนหน้าจอแสเดงผล
    3. ฟังก์ชั่น displayData() ไว้ใช้ในการนำค่าที่อ่านเข้ามาแปลงค่าและแสดงผลบนหน้าจอแสเดงผล
    4. ฟังก์ชั่น setup()  ไว้ใช้ในการกำหนดค่าให้กับ เซนเซอร์วัดความเร่ง Acellerator & Gyroscope และกำหนดรูปแบบในการแสดงผล บนหน้าจอแสเดงผล
    5. ฟังก์ชั่น loop()  ไว้ใช้ในกาอ่านค่าจากเซนเซอร์ และแสดงผล บนหน้าจอแสเดงผล


ขั้นตอนการทำงาน
    1. วาดหน้าจอของมิเตอร์
    2. อ่านค่าจากเซ็นเซอร์วัดความเร่ง Acellerator & Gyroscope
    3. แปลงค่าและแสดงผล
    


เขียนโค้ด ใช้ทดสอบ


/*
   plakemphet.blogspot.com
   Gyro Sensor and temperature
   3/10/2021
   Library download at https://github.com/Seeed-Studio/Seeed_Arduino_LIS3DHTR
   use menu Sketch >> Include Library >> Add .ZIP Library 
   then browse to your downloaded Seeed_Arduino_LIS3DHTR folder
*/

#include "LIS3DHTR.h"
#include "TFT_eSPI.h"

LIS3DHTR<TwoWire> lis; //IIC
TFT_eSPI tft;

float x_values, y_values, z_values;
int plot_x, plot_y;   // Variable for Dot-level

void readAccel()
{
  // Get value from accelerator
  x_values = lis.getAccelerationX();
  y_values = lis.getAccelerationY();
  z_values = lis.getAccelerationZ();
}

void initLabel()
{
  // Draw Label
  tft.setTextColor(TFT_GREEN);
  tft.drawString("Angle", 10, 20);
  tft.drawString("X: ", 10, 50);
  tft.drawString("Y: ", 10, 70);
  tft.drawString("Z: ", 10, 90);
  tft.drawString("Accel", 10, 120);
  tft.drawString("X: ", 10, 150);
  tft.drawString("Y: ", 10, 170);
  tft.drawString("Z: ", 10, 190);
  tft.drawString("Temperature", 160, 20);
}

void displayData()
{
  tft.setTextColor(TFT_YELLOW);
  // Clear specific area
  tft.fillRect(45, 45, 75, 60, TFT_BLACK); // Clear Angle at x, y, width-x, width-y
  tft.fillRect(45, 145, 75, 60, TFT_BLACK); // Clear Accel
  tft.fillRect(195, 45, 50, 20, TFT_BLACK); // Clear Temperature
  // Display value of Accelerator
  tft.drawString(String(round(180.0 / 3.1415 * asin(x_values))), 50, 50);
  tft.drawString(String(round(180.0 / 3.1415 * asin(y_values))), 50, 70);
  tft.drawString(String(round(180.0 / 3.1415 * asin(z_values))), 50, 90);
  tft.drawString(String(x_values), 50, 150);
  tft.drawString(String(y_values), 50, 170);
  tft.drawString(String(z_values), 50, 190);
  // Display temperature from accelerator
  tft.drawString(String(lis.getTemperature()), 200, 50);
}

void setup()
{
  lis.begin(Wire1);
  if (!lis) {
    tft.drawString("ERROR", 5, 20);
    while (1);
  }
  delay(100);
  // Define FullScale 2G - 16G
  lis.setFullScaleRange(LIS3DHTR_RANGE_2G);
  // Define DataRate 1Hz, 10HZ, 25HZ, 50HZ, 100HZ, 200HZ, 1_6KHZ,5KHZ
  lis.setOutputDataRate(LIS3DHTR_DATARATE_10HZ);
  lis.setHighSolution(true); //High solution enable
  // Display set up
  tft.begin();
  tft.setRotation(3);
  tft.setTextColor(TFT_YELLOW);
  tft.setTextSize(2);
  tft.fillScreen(TFT_BLACK);
  initLabel();
}

void loop()
{
  readAccel();
  displayData();
  delay(500);
}

  



 ผลที่ได้จากการทำงาน


รูปที่ 1 ผลจากการทำงานของคำสั่ง

## ภาพที่อยู่ในบล็อกนี้ อาจมีบางภาพหายไป เนื่องจากปัญหาของ blogspot.com ซึ่งเป็นการอย่างแพร่หลาย ##


โพสต์ยอดนิยมจากบล็อกนี้

14. Wio Terminal EP.01 , เริ่มตันกับ Wio Terminal ด้วย circuitPython

28. Wio Terminal GPS

24. Wio Terminal EP.11, อนาล็อกมิเตอร์ วัดความสว่างของแสง