Posted on

ทำไม BLDC Motors ถึงหมุน?

ข้อดีของมอเตอร์ Brushless DC (BLDC) เมื่อเทียบกับมอเตอร์ DC แบบแปรงถ่าน

มอเตอร์กระแสตรงไร้แปรงถ่าน (BLDC) เป็นมอเตอร์ที่ให้ ประสิทธิภาพสูง ควบคุมได้แม่นยำ และเหมาะกับงานสมัยใหม่ มากกว่ามอเตอร์ DC แบบแปรงถ่าน โดยมีข้อดีหลักดังนี้

  • ประสิทธิภาพสูงกว่า
    ไม่มีการสูญเสียพลังงานจากการเสียดสีของแปรงถ่าน ทำให้แปลงพลังงานไฟฟ้าเป็นพลังงานกลได้ดีกว่า

  • ให้แรงบิดสูงอย่างสม่ำเสมอในช่วงการทำงาน
    มอเตอร์ BLDC สามารถรักษาแรงบิดสูงได้ต่อเนื่องตลอดช่วงความเร็ว
    ในขณะที่มอเตอร์ DC แบบแปรงถ่านให้แรงบิดสูงสุดเฉพาะบางจุดของการหมุนเท่านั้น
    ผลลัพธ์คือ มอเตอร์ BLDC ขนาดเล็กสามารถให้กำลังได้สูงกว่าที่คาด

  • ควบคุมแรงบิดและความเร็วได้อย่างแม่นยำ
    สามารถใช้งานร่วมกับระบบป้อนกลับ (Feedback) เช่น Hall Sensor หรือ Encoder
    เพื่อควบคุมแรงบิดและความเร็วให้ตรงตามที่ต้องการได้อย่างแม่นยำ

  • ใช้พลังงานอย่างมีประสิทธิภาพ และเกิดความร้อนต่ำ
    การควบคุมที่แม่นยำช่วยลดการสูญเสียพลังงาน ลดความร้อนสะสม และเพิ่มอายุการใช้งานของมอเตอร์

  • เหมาะกับระบบใช้แบตเตอรี่
    เนื่องจากกินไฟน้อยกว่าและมีประสิทธิภาพสูง
    ทำให้ อายุการใช้งานแบตเตอรี่ยาวนานขึ้นอย่างชัดเจน

  • สัญญาณรบกวนทางไฟฟ้าต่ำ และไม่มีประกายไฟ
    ไม่มีแปรงถ่าน จึงไม่เกิดประกายไฟจากการสัมผัส
    ลด EMI และเหมาะกับงานอิเล็กทรอนิกส์หรืออุปกรณ์ความแม่นยำสูง

  • บำรุงรักษาน้อย อายุการใช้งานยาว
    ไม่มีชิ้นส่วนที่สึกหรอง่ายอย่างแปรงถ่าน
    เหมาะกับงานที่ต้องทำงานต่อเนื่องหรือเข้าถึงซ่อมยาก

  • ใช้งานแพร่หลายในหลายอุตสาหกรรม
    เช่น ออโตเมชัน หุ่นยนต์ ยานยนต์ไฟฟ้า เครื่องมือแพทย์ พัดลมอุตสาหกรรม และระบบขับเคลื่อนต่าง ๆ


ทำไมมอเตอร์ BLDC ถึงหมุนได้โดยไม่มีแปรงถ่าน?

เนื่องจาก โรเตอร์เป็นแม่เหล็กถาวร
จึงไม่จำเป็นต้องใช้แปรงถ่านในการส่งกระแสไฟฟ้าเหมือนมอเตอร์ DC แบบดั้งเดิม

การจ่ายกระแสไฟฟ้าไปยังขดลวดสเตเตอร์จะถูก ควบคุมจากภายนอกโดยไดรเวอร์อิเล็กทรอนิกส์
ซึ่งทำหน้าที่สลับเฟสกระแสอย่างแม่นยำ ทำให้เกิดสนามแม่เหล็กหมุนและขับให้โรเตอร์หมุนตาม

แนวคิดนี้ช่วยให้:

  • ควบคุมการหมุนได้ละเอียดกว่า
  • ลดการสูญเสียทางกล
  • เพิ่มประสิทธิภาพและความทนทานของระบบโดยรวม

สรุป:

มอเตอร์ BLDC จึงเป็นตัวเลือกที่เหมาะสำหรับงานที่ต้องการ ความแม่นยำ, ประสิทธิภาพสูง, และการทำงานต่อเนื่อง เช่น ยานยนต์ไฟฟ้า, หุ่นยนต์, เครื่องใช้ไฟฟ้า และโดรน ซึ่งเหนือกว่ามอเตอร์ DC แบบแปรงที่เหมาะกับงานง่าย ๆ และต้นทุนต่ำกว่า

อ้างอิงข้อมูลเชิงเทคนิคจาก Renesas
(Engineer School – Brushless DC Motor Overview)

https://www.renesas.com/us/en/support/engineer-school/brushless-dc-motor-01-overview

Posted on

SLAM (Simultaneous Localization and Mapping)

SLAM (Simultaneous Localization and Mapping)
คือเทคโนโลยีที่ทำให้ หุ่นยนต์สามารถสร้างแผนที่ของพื้นที่ (Mapping) และ รู้ตำแหน่งของตัวเองบนแผนที่นั้น (Localization) ได้ พร้อมกันแบบ Real-time โดยไม่ต้องมีแผนที่ล่วงหน้า

ทำงานอย่างไร:

  • ใช้เซ็นเซอร์ เช่น Lidar, กล้อง หรือ IMU → ตรวจจับสิ่งรอบตัว
  • ประมวลผลข้อมูล → สร้างแผนที่พื้นที่ที่หุ่นยนต์กำลังเคลื่อนที่อยู่
  • คำนวณตำแหน่งปัจจุบันของตัวเองบนแผนที่นั้น
  • นำผลที่ได้ไปใช้ในการวางแผนเส้นทาง (Navigation) และหลบหลีกสิ่งกีดขวาง (Obstacle Avoidance)

ข้อดีของระบบ SLAM

  • พาหุ่นยนต์เดินได้เองในที่ที่ไม่เคยไป ไม่ต้องติดแท็กหรือ Marker ใดๆ
  • ใช้ได้ทั้งภายในอาคารและพื้นที่ซับซ้อน
  • เคลื่อนที่ได้แม่นยำ ลดการชน ลดการหลงทาง
  • เป็นหัวใจของ AGV, AMR, Robot Delivery, หุ่นยนต์ทำความสะอาด ฯลฯ

สรุป

SLAM คือสมองที่ช่วยให้หุ่นยนต์ “สร้างแผนที่” และ “รู้ตำแหน่งของตัวเอง” เพื่อเดินนำทางได้แบบอัตโนมัติ ไม่ต้องมีคนบังคับ

Posted on

IMU (Inertial Measurement Unit)

IMU (Inertial Measurement Unit) คือ เซ็นเซอร์วัดการเคลื่อนที่ที่ประกอบด้วยชุดตรวจจับ 3 แกนหลัก ได้แก่

  • Gyroscope Sensor → วัดการหมุน (Angular Rate / องศาการหมุน)
  • Accelerometer Sensor → วัดความเร่ง/ทิศทางการเคลื่อนที่
  • Magnetometer Sensor → วัดทิศทางสนามแม่เหล็กโลก (ใช้สำหรับบอกทิศทาง/Heading)

เมื่อรวมกันทั้ง 3 ส่วน จะกลายเป็น IMU 9-axis (9 แกน) ซึ่งสามารถระบุตำแหน่งเชิงมุม (Orientation), การเคลื่อนที่ (Motion), และทิศทาง (Heading) ของวัตถุได้อย่างแม่นยำ นิยมใช้ในหุ่นยนต์, โดรน, รถอัตโนมัติ, AR/VR, โทรศัพท์มือถือ และระบบนำทางต่างๆ

Posted on

Node-RED เบื้องต้น

🔧 Node-RED คืออะไร?

Node-RED คือเครื่องมือแบบ Visual Programming (ลากเส้นต่อกล่อง) สำหรับการทำงานกับ IoT, Automation, API และอื่นๆ โดยเขียนด้วย Node.js ใช้งานผ่านเว็บเบราว์เซอร์


🚀 เริ่มต้นใช้งาน Node-RED

1. ติดตั้ง Node.js

Node-RED ต้องการ Node.js ในระบบก่อน:

  • ไปที่ https://nodejs.org และดาวน์โหลดเวอร์ชัน LTS
  • ติดตั้งตามปกติ

2. ติดตั้ง Node-RED

เปิด Terminal หรือ Command Prompt แล้วพิมพ์:

bash
npm install -g --unsafe-perm node-red

3. เปิด Node-RED

ใน Terminal พิมพ์:

bash
node-red

จะเห็นข้อความประมาณว่า:

arduino
Server now running at http://127.0.0.1:1880/

เปิดเว็บเบราว์เซอร์ไปที่ http://localhost:1880


🧱 หน้าตา Node-RED

ส่วนประกอบหลัก:

  1. Nodes (กล่อง): ฟังก์ชันต่างๆ เช่น input, output, logic
  2. Flow (ผังงาน): หน้ากระดานที่เราลากกล่องมาต่อกัน
  3. Deploy: ปุ่มสำหรับบันทึกและเริ่มใช้งาน flow

✨ ตัวอย่างแรก: เปิด-ปิดไฟด้วย Switch

ลาก Node ตามนี้:

  1. [inject] ➡️ [debug]

  2. ดับเบิ้ลคลิก inject แล้วตั้งค่าดังนี้:

    • Payload: string

    • ค่า: "เปิดไฟ"

  3. ดับเบิ้ลคลิก debug แล้วเลือกแสดง msg.payload

กดปุ่ม Inject ➡️ ดูค่าที่แสดงใน debug ด้านขวา

Tip: ลาก Node switch, function, mqtt, http มาใช้ต่อได้ เช่น เชื่อมกับไฟ LED หรือ API


📦 ตัวอย่าง Nodes ยอดนิยม

Node ใช้งานสำหรับ
inject ส่งค่าเริ่มต้นเข้า flow
debug แสดงค่าที่ปลายทาง
function เขียน JavaScript เพิ่มเติม
mqtt เชื่อมต่อกับ IoT
http ส่งหรือรับ API
rpi gpio ควบคุม Raspberry Pi GPIO

✅ ตัวอย่าง

  • Node-RED เชื่อมกับเซนเซอร์
  • Node-RED อ่านค่าจาก MQTT
  • Node-RED สั่ง Relay
  • Node-RED เชื่อมกับ PLC หรือ SCADA

Node-RED เชื่อมกับเซนเซอร์

🧩 แนวทางการเชื่อม Node-RED กับเซนเซอร์

📍 1. เซนเซอร์ต่อกับ Arduino / ESP32 / NodeMCU

เช่น:

  • Arduino อ่านค่าจากเซนเซอร์
  • ส่งค่าผ่าน Serial / MQTT / HTTP ไปยัง Node-RED

✅ ตัวอย่าง 1: Arduino + DHT11 ส่งค่าอุณหภูมิผ่าน Serial มา Node-RED

🔌 อุปกรณ์:

  • Arduino UNO
  • เซนเซอร์ DHT11
  • สาย USB ต่อกับคอม

🔧 Sketch ใน Arduino:

#include <DHT.h>
DHT dht(2, DHT11); // ต่อที่ขา D2

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  if (!isnan(t) && !isnan(h)) {
    Serial.print("T:");
    Serial.print(t);
    Serial.print(",H:");
    Serial.println(h);
  }

  delay(2000);
}

🌐 Node-RED ตั้งค่า:

1.เพิ่ม Node serial in

  • พอร์ต: COMx (ตามที่ Arduino ต่อ)
  • Baudrate: 9600

2.ต่อกับ Node function (แปลงข้อมูล):

let data = msg.payload.trim(); // ตัวอย่าง: "T:25.4,H:60.2"
let parts = data.split(',');
let t = parseFloat(parts[0].split(':')[1]);
let h = parseFloat(parts[1].split(':')[1]);
msg.payload = { temperature: t, humidity: h };
return msg;

3. ต่อกับ Node debug หรือ ui_gauge หากทำ Dashboard

📍 2. เซนเซอร์ต่อกับ Raspberry Pi

  • ใช้ Node rpi-gpio in/out ใน Node-RED ควบคุมหรืออ่านค่า GPIO ได้เลย
  • ใช้ Python script หรือ Bash แล้วส่งค่าผ่าน MQTT หรือ exec

📍 3. ใช้โปรโตคอล MQTT (นิยมมาก)

  • ใช้ Node mqtt in เพื่อรับค่าจากเซนเซอร์ที่ publish มาผ่าน MQTT broker เช่น Mosquitto
  • Node-RED ฟังค่าผ่าน topic เช่น sensor/temp
Posted on

ตัวอย่างการควบคุม สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ด้วย Arduino + ไมโคร Step Driver TB6600 เบื้องต้น

ตัวอย่างการควบคุม สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ด้วย Arduino + ไมโคร Step Driver TB6600 เบื้องต้น

Linear_Slide_LSSX05_TB6600 https://drive.google.com/drive/folders/1YALYYlV6PUrQz-IYNR843RhyF7twXqQ4?usp=sharing

สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ปรับตั้ง ดิฟต์สวิตช์ของไมโคร Step Driver TB6600 ดังนี้

  • DIP Switch S1 S2 S3 ตั้งเป็น On Off On
  • DIP Switch S4 S5 S6 ตั้งเป็น On Off On
#include <AccelStepper.h>
// The X Stepper pins
#define PUL_PIN 2  // PUL_PIN
#define DIR_PIN 3  // DIR_PIN

AccelStepper stepper(AccelStepper::DRIVER, PUL_PIN, DIR_PIN);
 
void setup()
{
    stepper.setMaxSpeed(3500.0);     // ปรับความเร็ว หน่วยเป็น พัลส์ต่อวินาที steps per second
    stepper.setAcceleration(5500.0); // ปรับความเร่ง หน่วยเป็น พัลส์ต่อวินาทีกำลังสอง steps per second per second
    stepper.setCurrentPosition(0);           //เซตค่าตำแหน่งเริ่มเท่ากับ 0 ก่อนเข้าลูป
}
void loop()
{    
    stepper.runToNewPosition(0); //เริ่มต้นที่ตำแหน่ง 0
    delay(500);
    stepper.runToNewPosition(1500); // ระยะการเคลื่อนที่ไปทางบวก ด้านขวา จำนวน พัลส์
    delay(500);
    
    stepper.runToNewPosition(0);
    delay(500);
    stepper.runToNewPosition(-1500); // ระยะการเคลื่อนที่กลับ ทางลบ ด้านซ้าย จำนวน พัลส์
    delay(500);
}

 

 

Posted on

ตัวอย่างการสั่งงานด้วย Arduino Code สำหรับทดสอบการทำงานบอลสกรู

ตัวอย่างการควบคุม สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ด้วย Arduino + ไมโคร Step Driver TB6600 เบื้องต้น

Linear_Slide_LSSX05_TB6600

https://drive.google.com/drive/folders/1YALYYlV6PUrQz-IYNR843RhyF7twXqQ4?usp=sharing

สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ปรับตั้ง ดิฟต์สวิตช์ของไมโคร Step Driver TB6600 ดังนี้

  • DIP Switch S1 S2 S3 ตั้งเป็น ON OFF ON 400 P/R 2/A
  • DIP Switch S4 S5 S6 ตั้งเป็น ON OFF OFF 2.0A

ตัวอย่างการควบคุม สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ด้วย Arduino + ไมโคร Step Driver TB6600 เบื้องต้น

ตัวอย่างโปรแกรมควบคุมรางสไลด์ แบบไป-กลับ ตามตำแหน่งที่กำหนด

ซอร์สโค้ดเพื่อควบคุมการทำงาน ได้ตามวีดิโอด้านบน

 

 

#include <AccelStepper.h>
 //12V full step 200 pulse/rev,       1.5A
 //    S1 S2 S3                    S4  S5  S6
 //    NO NO OFF                   NO  OFF NO
 
// The X Stepper pins
#define STEPPER1_DIR_PIN 3
#define STEPPER1_STEP_PIN 2

AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);

 int MaxAcc = 10000;
 int MaxSpd = 800;
 int State = 0;
 int Step = 0;
void setup()
{  
    stepper1.setMaxSpeed(MaxSpd);
    stepper1.setAcceleration(MaxAcc);
    stepper1.setCurrentPosition(0);
    stepper1.moveTo(1000);
    Serial.begin(9600);
    delay(2000);
    Serial.println("Power ON ");
    Serial.print("State = ");
    Serial.print(State);
    Serial.print("t position = ");
    Serial.println(stepper1.currentPosition());
    delay(2000);
}
void loop()
{
 //Serial.println(stepper1.currentPosition());
  switch (State) 
  {
    case 0:    // 
      if (stepper1.distanceToGo() == 0)
      {
        State =1;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(0);
      }
      break;
    case 1:    // your hand is close to the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State = 2;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(2500);
      }
      break;
    case 2:    // your hand is a few inches from the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State=3;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(0);
      }
      break;
    case 3:    // your hand is nowhere near the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State = 4;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(-1000);       
      }
      break;
    case 4:    // your hand is nowhere near the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State = 5;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(0);       
      }
      break;
    case 5:    // your hand is nowhere near the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State = 0;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(-2000);       
      }
      break;
  }
  
stepper1.run();
}

เอาต์พุตแสดงตำแหน่ง ที่เคลื่อนที่ไป โดยจะทำงานวนไปตั้งแต่ stateที่ 0 ถึง state 5

การต่อสายสัญญาณ ระหว่างบอร์ดอาดูโน่ และ ไดร์ฟเวอร์ สเต็ปเปอร์มอเตอร์

การตั้งค่าตัวไดร์ฟเวอร์ ขับสเต็ปเปอร์ ความละเอียด 200 สเต็ปต่อรอบ ตั้งค่ากระแส1.0 แอมป์

 

ตัวอย่างการสั่งงานด้วย Arduino Code

  •  กระแสที่ 3 แอมป์
  • Micro Step = 4, PPR = 800

ตัวอย่างการสั่งงานด้วย Arduino Code สำหรับทดสอบการทำงานเบื้องต้น

  • กระแสที่ 3 แอมป์
  • Micro Step = 4, PPR = 800

Linear_Slide_LSSX05_TB6600

#include <AccelStepper.h>
 
// The X Stepper pins
#define PUL_PIN 2  // PUL_PIN
#define DIR_PIN 3  // DIR_PIN

AccelStepper stepper(AccelStepper::DRIVER, PUL_PIN, DIR_PIN);
 
void setup(){
    stepper.setMaxSpeed(10000.0);     // ปรับความเร็ว
    stepper.setAcceleration(10000.0); // ปรับความเร่ง
}
void loop(){    
    stepper.runToNewPosition(0);
    delay(500);
    stepper.runToNewPosition(10000); // ระยะการเคลื่อนที่ไป
    delay(500);
    stepper.runToNewPosition(0);
    delay(500);
    stepper.runToNewPosition(-10000); // ระยะการเคลื่อนที่กลับ
    delay(500);
}

ตัวอย่างการสั่งงานด้วย Arduino Code แบบมี Home Limit Switch

#include <AccelStepper.h>
 
// The X Stepper pins
#define STEPPER1_DIR_PIN 3
#define STEPPER1_STEP_PIN 2
AccelStepper stepper(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);
 const int buttonPin = 7; //home switch
 int state = 0;
 int buttonState = 0; 
 int MaxAcc = 6000;
 int MaxSpd = 4000;
void setup()
{
     Serial.begin(9600);
     pinMode(buttonPin, INPUT_PULLUP);
    stepper.setMaxSpeed(MaxSpd); // ทดลองปรับความเร็ว
    stepper.setAcceleration(MaxAcc); // ทดลองปรับความเร่ง
}
void loop()
{    
    //Serial.println(state);
    buttonState = digitalRead(buttonPin);
    if((buttonState == HIGH)&&(state == 0))//
    {
        stepper.setMaxSpeed(MaxSpd); // หมุนช้าเข้าหาสวิตช์ Home
        stepper.setAcceleration(MaxAcc);
        stepper.setSpeed(-500);
        stepper.runSpeed();
        
    }
    else if ((buttonState == LOW) &&(state == 0))
    {
          stepper.setMaxSpeed(MaxSpd); 
          stepper.setAcceleration(MaxAcc);
          stepper.setCurrentPosition(0);
          state = 1;
          delay(1000);
    } 
    if(state ==1 )
    {
      stepper.runToNewPosition(12000);
      delay(1000);
      stepper.runToNewPosition(0);
      delay(1000);
    }
}

 

Posted on

Free Drive Protocol USB Video Class (UVC) คืออะไร?

Free Drive Protocol USB Video Class (UVC) คืออะไร?
  • *UVC free driver, Plug & Play
  • Free Drive Protocol USB Video Class (UVC) เป็นมาตรฐานการสื่อสารแบบโอเพ่นซอร์สสำหรับอุปกรณ์วิดีโอ USB ช่วยให้อุปกรณ์วิดีโอสามารถเชื่อมต่อและทำงานกับคอมพิวเตอร์โดยไม่ต้องติดตั้งไดรเวอร์พิเศษ

UVC มีข้อดีหลายประการ ดังนี้:

  • ใช้งานง่าย: ผู้ใช้ไม่จำเป็นต้องติดตั้งไดรเวอร์พิเศษเพื่อใช้อุปกรณ์ UVC กับคอมพิวเตอร์
  • เข้ากันได้: อุปกรณ์ UVC เข้ากันได้กับระบบปฏิบัติการ Windows, macOS และ Linux
  • ราคาไม่แพง: อุปกรณ์ UVC มักมีราคาไม่แพงกว่าอุปกรณ์วิดีโอแบบดั้งเดิม
  • ใช้งานหลากหลาย: อุปกรณ์ UVC สามารถใช้กับแอปพลิเคชันวิดีโอที่หลากหลาย เช่น การสนทนาทางวิดีโอ การถ่ายภาพ และการสตรีมวิดีโอ

ประเภทของอุปกรณ์ UVC

อุปกรณ์ UVC มีหลายประเภท ดังนี้:

  • เว็บแคม: เว็บแคม UVC มักใช้สำหรับการสนทนาทางวิดีโอและการถ่ายภาพ
  • กล้องวิดีโอ: กล้องวิดีโอ UVC มักใช้สำหรับการบันทึกวิดีโอ
  • การ์ดจับภาพ: การ์ดจับภาพ UVC ช่วยให้คุณสามารถจับภาพวิดีโอจากแหล่งต่างๆ เช่น เครื่องเล่น DVD หรือกล้องวิดีโอแอนาล็อก
  • อุปกรณ์อื่นๆ: ยังมีอุปกรณ์ UVC อื่นๆ อีกมากมาย เช่น ไมโครโฟนและลำโพง

วิธีใช้ Free Drive Protocol USB Video Class (UVC)

  • การใช้ Free Drive Protocol USB Video Class (UVC) นั้นง่ายมาก เพียงทำตามขั้นตอนต่อไปนี้:
  1. เชื่อมต่ออุปกรณ์ UVC กับคอมพิวเตอร์ของคุณ
  2. รอให้คอมพิวเตอร์ของคุณตรวจจับอุปกรณ์
  3. เปิดแอปพลิเคชันวิดีโอที่คุณต้องการใช้
  4. เลือกอุปกรณ์ UVC ของคุณจากรายการอุปกรณ์วิดีโอ

ตัวอย่างการใช้งาน Free Drive Protocol USB Video Class (UVC)

  • Free Drive Protocol USB Video Class (UVC) สามารถใช้กับแอปพลิเคชันวิดีโอที่หลากหลาย ดังนี้:
  • การสนทนาทางวิดีโอ: คุณสามารถใช้เว็บแคม UVC สำหรับการสนทนาทางวิดีโอผ่าน Skype, Zoom หรือ Google Meet
  • การถ่ายภาพ: คุณสามารถใช้กล้อง UVC สำหรับการถ่ายภาพด้วยแอปพลิเคชันเช่น Windows Camera หรือ Photo Booth
  • การสตรีมวิดีโอ: คุณสามารถใช้กล้อง UVC สำหรับการสตรีมวิดีโอผ่าน Twitch หรือ YouTube
  • การจับภาพวิดีโอ: คุณสามารถใช้การ์ดจับภาพ UVC สำหรับการจับภาพวิดีโอจากแหล่งต่างๆ เช่น เครื่องเล่น DVD หรือกล้องวิดีโอแอนาล็อก

สรุป

  • Free Drive Protocol USB Video Class (UVC) เป็นมาตรฐานการสื่อสารที่มีประโยชน์สำหรับอุปกรณ์วิดีโอ USB ช่วยให้อุปกรณ์วิดีโอสามารถเชื่อมต่อและทำงานกับคอมพิวเตอร์โดยไม่ต้องติดตั้งไดรเวอร์พิเศษ UVC ใช้งานง่าย เข้ากันได้ ราคาไม่แพง และใช้งานหลากหลาย

Posted on

ตัวอย่างการคำนวณ เซนเซอร์วัดอุณหภูมิและความชื้น Calculation example Temperature Humidity Sensor Voltage Output 0-10V

1. การคำนวณอุณหภูมิ 

สมการหา อุณหภูมิ (℃) = (TV – V0) / Vr * Tr + T0

เมื่อ

  • TV : คือแรงดันไฟขาออก, หน่วย V
  • V0: คือค่าแรงดันไฟฟ้าขั้นต่ำ หน่วย V ตัวอย่างเช่น 0 – 10V ใช้ค่า V0 = 0
  • Vr: คือช่วงแรงดันไฟฟ้า หน่วย V เช่น 0 -10V ใช้ค่า Vr = 10
  • Tr: คือช่วงอุณหภูมิ หน่วย °C เช่น -20 ~ 80°C ใช้ค่า Tr = 80
  • T0: คือค่าอุณหภูมิต่ำสุด หน่วย ℃ เช่น -20~80℃, ใช้ค่า T0 = -20

ตัวอย่างการคำนวณ

  • แรงดันไฟฟ้าที่ TV คือ 5V
  • ช่วงคือ -20 ~ 80
  • จากนั้นอุณหภูมิ ℃ = (TV – V0) / Vr*Tr + T0
  • จากนั้นอุณหภูมิ ℃ = (5-0) / 10*80 + -20 = 20℃

2. การคำนวณ Humidity 

สมการหา Humidity (%RH) = (HV – V0) / Vr*Hr + H0

  • HV: แรงดันเอาต์พุต, หน่วย V
  • V0: ค่าแรงดันไฟฟ้าขั้นต่ำ หน่วย V ตัวอย่างเช่น 0-10V, V0 = 0
  • Vr: ช่วงแรงดันไฟฟ้า หน่วย V เช่น 0 – 10V, Vr = 10
  • Hr : ช่วงความชื้น หน่วย %RH เช่น 0~100%RH จากนั้น Hr =100 H0: ค่าความชื้นขั้นต่ำ หน่วย %RH เช่น 0~100°C, H0=0

ตัวอย่างการคำนวณ

  • แรงดันไฟฟ้าที่ HV คือ 5V
  • ช่วงคือ 0 ~ 100%RH
  • จากนั้นความชื้น = 5/10*100 = 50%RH

แรงดันไฟฟ้าขาออกสูงสุดคือไม่เกินแรงดันไฟฟ้าของแหล่งจ่ายไฟ -2V  เพื่อให้ได้เอาต์พุต 10V ที่อุณหภูมิสูงหรือความชื้นสูงแนะนำให้จ่ายไฟอย่างน้อย 12V

Posted on

วิธีการใช้งาน Arduino Opta PLC อย่างง่าย

วิธีการใช้งาน Arduino Opta  PLC อย่างง่าย

  • พูดถึง Ardunio เป็นแพลตฟอร์มยอดนิยมของคนที่สนใจการเขียนโปรแกรมเพื่อควบคุมฮาร์แวร์ทั้งในแบบเป็นงานอดิเรก หรือแม้กระทั้งนำไปใช้ในระดับมืออาชีพ แต่สำหรับ Arduino Opta PLC ตัวนี้ เพิ่งเปิดตัวมาได้ไม่นาน มันเกิดจากความร่วมมือกันระหว่าง Arduino และผู้ผลิตPLC ที่มีชื่อดังยี่ห้อ Finder ต่อไปเราจะเรียก PLC ตัวนี้ สั้นๆ ว่า Opta อ่านว่า ออปต้า

รูปที่1

  • ในปัจจุบัน Opta มีทั้งหมดสามรุ่นได้แก่ Opta Lite, Opta RS485, และ Opta WiFi ในบทความนี้จะได้ทดลองใช้ Opta RS485 หมายถึง ในรุ่นนี้จะมีช่องทางการสื่อสาร RS485 ให้ด้วยที่จะมีประโยชน์มาก ซึ่งจะกล่าวเพิ่มเติมในภายหลัง
  • แพลตฟอร์ม Arduino ที่ได้รับการจดจำมากที่สุดตลอดกาลตอนนี้ก็คือ Arduino Uno มันสามารถทำให้ผู้ที่ยังไม่เคยใช้งานการเขียนโปรแกรมมาก่อนสามารถเริ่มต้นได้อย่างรวดเร็ว รวมถึงการมีไลเบอรีจำนวนมากให้สามารถนำมาต่อยอดใช้งานได้ทันที ที่สำคัญคือฮาร์ดแวร์ที่เป็นมาตรฐานลดระยะเวลาที่ต้องออกแบบ PCB ใหม่ ทั้งหมดทำให้ผู้ใช้สามารถใช้งานได้ง่ายและนำไปต่อยอดได้อย่างรวดเร็ว
  • จากที่กล่าวมาทั้งหมดนี้ ผู้ผลิตสัญญาณว่า จะนำแนวคิดที่กล่าวมาข้างต้นนี้ มาใช้กับArduino Opta เช่นเดียวกัน โดยสามารถรองรับการเขียนโปรแกรมบน Arduino IDE และได้เพิ่ม PLC IDE ที่สามารถรองรับภาษา PLC ตามมาตรฐาน  IEC 61131-3 ซึ่งเป็นภาษาที่ใช้ในการเขียนโปรแกรม PLC ที่ช่างเทคนิค วิศวกร ต่างๆ คุ้นเคยกันอยู่แล้ว ผมคิดว่า ทาง Arduino พยายามที่นำ แพลตฟอร์ม Arduino เข้าสู่โลกของอุตสาหกรรม ที่ต้องการความน่าเชื่อถือ ความเข้ากันได้ของอินพุตและเอาต์พุต ร่วมถึงภาษาที่ใช้ในการพัฒนาซึ่งบุคคลากรในอุตสาหกรรมคุ้นเคยกันอยู่แล้ว

ผมสามารถสรุปข้อดีของ Arduino Opta ได้ดังนี้

  1. สามารถเขียนโปรแกรมแบบคลาสสิค ด้วยภาษาซี บน Arduino IDE หรือจะใช้ PLC IDE ซึ่งเขียนด้วยภาษา PLC ตามมาตรฐาน IEC 61131-3 ก็ได้ แล้วแต่ความถนัดของผู้ใช้งาน
  2. รองรับโปรโตคอลการสื่อสาร Fieldbus และ Modbus
  3. รองรับ WiFi (เฉพาะรุ่นที่มี)
  4. รองรับ Arduino Cloud
  5. มีการออกแบบที่ทนทาน พร้อมตัวยึดรางแบบ Dinrail

คุณลักษณะของ Arduino Opta

ในส่วนนี้ เราจะมีสำรวจสเปคของ Arduino Opta กัน ซึ่งสามารถทำตารางสรุปได้ดังนี้

รูปที่2

โดยทุกรุ่นมีสเปคคร่าวๆ ดังนี้

  • แรงดันไฟเลี้ยง สามารถใช้ได้ตั้งแต่ 12 ถึง 24 โวลต์
  • อินพุต 8 ช่อง สามารถกำหนดเป็น ดิจิตอล อินพุต หรือ เป็นอนาลอกอินพุต ก็ได้
  • เอาต์พุตเป็น รีเลย์ 4 ช่อง หน้าสัมผัสทดกระแสได้ 10 แอมป์
  • ตัวประมวลผล เป็นแบบแกนคู่ จาก ST เบอร์ STM32H747XI
  • หน่วยความจำแรม 1 เมกะไบต์
  • หน่วยความจำแฟลต 2 เมกะไบต์

อินพุตของ Arduino Opta

  • ตามเอกสารจากดาต้าชีส ตัว Opta สามารถกำหนดอินพุตให้สามารถรับได้ทั้งอนาลอกและดิจิตอล โดยเมื่อกำหนดให้อินพุตเป็นแบบดิจิตอล สามารถรองรับสัญญาณ LOW หรือ HIGH ได้ แต่เมื่อกำหนดเป็นอินพุตอนาลอก สามารถรองรับแรงดัน 0 ถึง 10 โวลต์ดีซี

เอาต์พุตของ Arduino Opta

  • เอาต์พุตของ Opta เป็นหน้าสัมผัสรีเลย์แบบ ปกติเปิด (normally open NO) โดยรีเลย์แต่ละตัวจะมีหน้าสัมผัสทนกระแสได้ 10A 250VAC

 

ทดลองเขียนโปรแกรมภาษาซี บนArduino IDE

  • เราสามารถเขียนโปรแกรมภาษาซีบน Arduino IDE แล้วโปรแกรมเข้าไปยังตัว Opta ได้แบบเดียวกับบอร์ด Arduino ทั่วไป ในบทความนี้ได้ทดสอบบน Arduino IDE 2.0.4
  • เมื่อเปิด Arduino IDE ขึ้นมา ให้ไปที่  Tools à Board à Board Manager

รูปที่ 3

ในช่องค้นหา ใส่คำว่า opta มองหา Arduino Mbed OS Opta Boards by Arduino จากนั้นคลิ๊กติดตั้งให้เรียบร้อย

รูปที่ 4

  • ขั้นต่อไป กลับมาที่ ตัว Opta ให้ต่อสายไฟเลี้ยงเข้า สามารถใช้ได้ตั้งแต่ 12 ถึง 24 โวลต์ ให้สังเกตดีๆ  เพราะมีช่องบวก สองช่อง ช่องลบ สองช่อง

รูปที่ 5

  • สุดท้ายเป็นการต่อสาย USB type C เข้ากับตัว Opta สายนี้ใช้เพื่อโหลดโค้ดและมอนิเตอร์ค่าระหว่างการทำงานได้

รูปที่ 6

  • กลับมาที่หน้าต่างของ Arduino IDE ไปที่ Tools à board àArduino Mbed OS Opta Boardà Opta

รูปที่ 7

  • ส่วนการเลือกพอร์ตให้ไปที่ Tools à Port

รูปที่ 8

  • ถึงขั้นตอนนี้ เราสามารถเริ่มต้นการเขียนโปรแกรมได้แล้ว โดยตัวอย่างโปรแกรมเป็นดังนี้

ภาพรวมของโปรแกรมจะส่งสัญญาณไปควบคุมLED ให้กะพริบในรูปแบบที่เรียกว่า Kinght Rider คือจะกะพริบแบบสแกนวนไปทั้งซ้ายและขวา ที่ตำแหน่งของ LED status ตัวอย่างโค้ด บรรทัดที่16 ถึง 25 จะสร้างการกะพริบจากตัวแรก ไปยังตัวสุดท้าย ส่วนโค้ดบรรทัดที่ 28 ถึง 37 จะสร้างการกะพริบจากท้ายกลับมายังตัวแรก วนกลับไปมาเรื่อย

รูปที่ 9