ในยุคปัจจุบันที่เทคโนโลยีก้าวล้ำไปอย่างรวดเร็ว การสร้างหุ่นยนต์เป็นหนึ่งในแนวทางที่น่าสนใจอย่างยิ่งสำหรับนักพัฒนาและผู้เริ่มต้นในด้านดังกล่าว ในบทความนี้ เราจะพาคุณไปสู่การสร้างหุ่นยนต์ที่สามารถเดินตามเส้นได้โดยใช้เซ็นเซอร์ 3 ตัว และบอร์ด ESP32 ร่วมกับ Arduino IDE ซึ่งเป็นเครื่องมือที่ทันสมัยและมีประสิทธิภาพในการพัฒนาหุ่นยนต์ที่ท่านต้องการสร้างขึ้นมา

เทคโนโลยีและอุปกรณ์ที่ใช้

  • เซ็นเซอร์เลเซอร์ (Line Sensor): เป็นเซ็นเซอร์ที่ใช้สำหรับตรวจจับเส้นทาง โดยสามารถตรวจจับเส้นทางที่มีสีคงที่เช่นดำหรือเทาได้ มักใช้ในการนำหุ่นยนต์เดินตามเส้น
  • บอร์ด ESP32: เป็นบอร์ดไมโครคอนโทรเลอร์ที่มีความสามารถมากมาย เช่น การเชื่อมต่อ WiFi, Bluetooth, และการประมวลผลที่เร็วและมีประสิทธิภาพ
  • Arduino IDE: เป็นโปรแกรมที่ใช้ในการเขียนและอัปโหลดโค้ดลงในบอร์ด Arduino หรือ ESP32 ซึ่งมีความสะดวกและใช้งานง่ายสำหรับผู้เริ่มต้น


อุปกรณ์ที่ใช้

1. RB-0024 4WD Smart Robot Car Chassis Kits
2. RB-0173 DevKitC V4 ESP32 Development Board
3. RB-0272 ESP32 Expansion Board 38Pins
4. RB-0003 Motor Driver Module L298N
5. RB-0019 รางถ่าน 18650 – 2 ก้อน
6. RB-0025 เสารองแผ่นพีซีบีโลหะแบบเหลี่ยม 8 mm
7. RB-0049 แจ๊กขั้วถ่าน 9 โวลต์ สำหรับ Ardiuno
8. RB-0042 เพาเวอร์สวิตซ์สำหรับเปิดปิด (ON / OFF Rocker Switch)
9. RB-0015 Jumper (F2M) cable wire 20cm Female to Male
10. RB-0021 ถ่านชาร์จ 18650 NCR18650B 3.7v 3400mAh 2 ก้อน
11. RB-0017 Jumper (F2F) cable wire 20cm Female to Female
12. RB-0106 Micro USB Cable Wire 1m for NodeMCU
13. RB-0137 3 Road Tracing Sensor Robot
14. RB-0121 Jumper (F2F) cable wire 30cm Female to Female
15. RB-0026 สกรูหัวกลม+น็อตตัวเมีย ขนาด 3มม ยาว 12มม


หลักการทำงานที่พื้นฐาน


การสร้างหุ่นยนต์เดินตามเส้นโดยใช้เซ็นเซอร์ 3 ตัวนั้นสามารถทำได้โดยใช้ ESP32 ร่วมกับ Arduino ในการควบคุมการเคลื่อนไหวของหุ่นยนต์โดยอ้างอิงจากข้อมูลที่ได้รับจากเซ็นเซอร์เพื่อติดตามเส้นทางที่กำหนดไว้ ดังนี้คือหลักการทำงานที่อาจจะนำมาใช้ในการสร้างหุ่นยนต์ดังกล่าว:

  • ติดตั้งเซ็นเซอร์: ให้ติดตั้งเซ็นเซอร์สายไปยัง ESP32 เพื่อรับข้อมูลจากพื้นผิวเส้นทางที่หุ่นยนต์จะต้องเดินตาม ในกรณีนี้ 3 เซ็นเซอร์อาจจะต้องติดตั้งแบบสามเซ็นเซอร์ในเส้นทางที่แตกต่างกัน ที่เป็นไปได้คือเซ็นเซอร์แบบอินฟราเรด (infrared sensors)

  • อ่านข้อมูล: ESP32 จะต้องอ่านข้อมูลจากเซ็นเซอร์เพื่อตรวจจับตำแหน่งและทิศทางของเส้นทาง

  • ประมวลผลข้อมูล: หลังจากได้รับข้อมูลจากเซ็นเซอร์ ตัว ESP32 จะทำการประมวลผลเพื่อตรวจสอบตำแหน่งปัจจุบันของหุ่นยนต์ในเส้นทาง และหาทิศทางที่ถูกต้องในการเดินต่อไป

  • ควบคุมการเคลื่อนไหว: หลังจากที่ตรวจสอบและประมวลผลข้อมูลแล้ว ต่อไปคือการควบคุมการเคลื่อนไหวของหุ่นยนต์เพื่อให้เดินตามเส้นทางที่ต้องการ นี่อาจเป็นการควบคุมมอเตอร์เพื่อเปลี่ยนทิศทางหรือความเร็วของหุ่นยนต์

  • วนวางโค้ด: สร้างลูปวนเพื่อให้โปรแกรมทำงานอยู่ซ้ำๆ โดยอ่านข้อมูลจากเซ็นเซอร์อย่างต่อเนื่องและปรับปรุงการเคลื่อนไหวของหุ่นยนต์ตามความจำเป็น

  • การแก้ปัญหา: หากเซ็นเซอร์ตรวจจับว่าหุ่นยนต์ออกนอกเส้นทางหรือพบกับอุปสรรค ระบบจะต้องมีการจัดการปัญหานี้ อาจเป็นการหยุดหุ่นยนต์และรอให้มีการแก้ไขด้วยมือ หรืออาจเป็นการปรับแต่งการเคลื่อนไหวเพื่อเลี่ยงอุปสรรค


แนวคิดของ หุ่นยนต์เดินตามเส้น 3 เซ็นเซอร์

  1. เมื่อ “เซ็นเซอร์กลาง” ของหุ่นยนต์  อยู่บริเวณเทปสีดำ (L=0 C=1 R=0) ให้หุ่นยนต์เดินไปข้างหน้า





2. เมื่อ “เซ็นเซอร์ซ้าย” ของหุ่นยนต์  อยู่บริเวณเทปสีดำ (L=1 C=0 R=0) ให้หุ่นยนต์เดินเลี้ยวไปทางด้านซ้าย เพื่อไม่ให้หุ่นยนต์หลุดไปนอกเส้น



3. เมื่อหุ่นยนต์เลี้ยวซ้าย ทำให้ “เซ็นเซอร์กลาง” ของหุ่นยนต์  กลับมาอยู่บริเวณเทปสีดำอีกครั้ง (L=0 C=1 R=0) ทำให้หุ่นยนต์เดินไปข้างหน้า เหมือนขั้นตอนที่ 1



4. และเมื่อ “เซ็นเซอร์ซ้าย” ของหุ่นยนต์  อยู่บริเวณเทปสีดำ อีกครั้ง (L=1 C=0 R=0) หุ่นยนต์จะเลี้ยวซ้าย เพื่อให้ “เซ็นเซอร์กลาง” ของหุ่นยนต์  กลับมาอยู่บริเวณเทปสีดำ อีกครั้ง เช่นกัน เป็นลักษณะนี้เรื่อยๆ จึงทำให้หุ่นยนต์สามารถเคลื่อนที่ ไปตามเส้นที่เรากำหนดไว้ได้

และ เมื่อหุ่นยนต์ เจอเส้นทางที่ต้องเลี้ยวขวา ก็ใช้หลักการเดียวกัน เพียงแต่เปลี่ยนไปเป็น “เซ็นเซอร์ขวา”


นี่เป็นหลักการทำงานที่พื้นฐานของหุ่นยนต์เดินตามเส้นด้วยการใช้ ESP32 ร่วมกับ Arduino และเซ็นเซอร์ อย่างไรก็ตาม การสร้างหุ่นยนต์เดินตามเส้นนั้นอาจมีความซับซ้อนขึ้นขึ้นอยู่กับการออกแบบและการใช้เทคโนโลยีที่ต่างกัน และการปรับปรุงการทำงานของระบบนี้สามารถทำได้ตามความต้องการของโครงการและความชำนาญของผู้พัฒนา.


การสร้าง หุ่นยนต์เดินตามเส้น 3 เซ็นเซอร์ ด้วย ESP32

1.ประกอบหุ่นยนต์และเชื่อมต่อวงจร


บัดกรีสายมอเตอร์ โดย สายสีแดงอยู่ด้านบน และ สายสีดำอยู่ด้านล่าง ทั้ง 4 ตัว



ยึดมอเตอร์เข้ากับโครงหุ่นยนต์ (ด้านล่าง)



ยึดเสา 6 ต้น สำหรับใส่โครงหุ่นยนต์ด้านบน


การต่อวงจร



ยึด Expansion Board (บอร์ดขยายขา ESP32) , โมดูลขับมอเตอร์ และ รางถ่าน เข้ากับโครงหุ่นยนต์ด้านบน



ใส่บอร์ด ESP32 เข้ากับ บอร์ดขยายขา ESP32



ต่อสายไฟ จากรางถ่าน กับ แจ๊กขั้วถ่าน โดย สายสีแดง ต่อ ผ่านสวิตช์ปิดเปิด แล้ว เสียบแจ๊กขั้วถ่าน เข้ากับ DC 6.5 – 16V ของ บอร์ดขยายขา ESP32



ใส่ถ่าน 19650 จำนนวน 2 ก้อน และ เมื่อเปิดไฟเข้า ต้องมีไฟติดทั้ง 3 บอร์ด คือ บอร์ดขยายขา ESP32 , บอร์ด ESP32 และ โมดูลขับมอเตอร์


เชื่อมต่อวงจร ระหว่าง บอร์ดขยายขา ESP32 กับ โมดูลขับมอเตอร์

(ใช้ Jumper (F2F) ความยาว 20 cm ในการเชื่อมต่อ)



เชื่อมต่อ มอเตอร์ ทั้ง 4 ตัวเข้ากับ โมดูลขับมอเตอร์ (ตรวจสอบการต่อสายและสีของสาย)


ใส่ล้อและยึดน็อตโครงหุ่นยนต์ชั้นบนกับชั้นล่างเข้าด้วยกัน


ภาพรวมการต่อหุ่นยนต์


2.ติดตั้ง Arduino IDE


สิ่งแรกคือการติดตั้ง Arduino IDE เพื่อให้คุณสามารถค้นหา Arduino IDE ใน Google

จากนั้นคุณมีสองทางเลือก

หนึ่งคือการติดตั้งเวอร์ชัน1 หรือเพื่อติดตั้งเวอร์ชัน 2

เราจะติดตั้งเวอร์ชัน 2 เพราะมีคุณสมบัติเพิ่มเติมบางอย่าง แต่ไม่ว่าคุณจะเลือกอะไรมันจะทำงานเช่นกัน ดังนั้นคุณสามารถเลือกอย่างใดอย่างหนึ่ง



ดาวน์โหลด Arduino IDE จากที่นี่

https://www.arduino.cc/en/software

This image has an empty alt attribute; its file name is e1-1024x573.png




2. กำหนดค่าให้ รองรับบอร์ด ESP32


ไปที่ File > Preferences

This image has an empty alt attribute; its file name is e2-1024x633.png


คัดลอกและวางบรรทัดต่อไปนี้ลงในฟิลด์ Boards Manager URLs

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

This image has an empty alt attribute; its file name is e3-1024x629.png



คลิกไอคอนตัวจัดการบอร์ดที่มุมด้านซ้าย ค้นหา ESP32 และกดปุ่มติดตั้งสำหรับ esp32 โดย Espressif Systems

This image has an empty alt attribute; its file name is e4-1024x633.png



3. ทดสอบ การเคลื่อนที่ของหุ่นยนต์


การทดสอบนี้ เป็นการตรวจสอบการต่อสายต่างๆ เช่น การเชื่อมต่อสายของมอเตอร์ ทั้ง 4 ตัว รวมทั้งสายอื่นๆ ของหุ่นยนต์ที่เราสร้าง ว่าถูกต้องหรือไม่ ถ้าถูกต้องหุ่นยนต์จะดำเนินการดังนี้

คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา


และนี่คือโค้ดที่ใช้ทดสอบ

int MA1 = 27;     // Motor A1
int MA2 =  26;     // Motor A2
int PWM_A =  14;   // Speed Motor A

int MB1 =  17;     // Motor B1
int MB2 =  16;     // Motor B2
int PWM_B =  4;  // Speed Motor B

int SPEED = 255;  // Speed PWM สามารถปรับความเร็วได้ถึง 0 - 255

void setup() {

  //Setup Channel A
  pinMode(MA1, OUTPUT); //Motor A1
  pinMode(MA2, OUTPUT); //Motor A2
  pinMode(PWM_A, OUTPUT); //Speed PWM Motor A

  //Setup Channel B
  pinMode(MB1, OUTPUT);  //Motor B1
  pinMode(MB2, OUTPUT);  //Motor B2
  pinMode(PWM_B, OUTPUT); //Speed PWM Motor B
}

void loop() {


  Stop(5000);
  Forward(600);
  Stop(200);
  Backward(600);
  Stop(200);
  turnLeft(600);
  Stop(200);
  turnRight(600);


}

void Backward(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, HIGH);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, HIGH);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void Forward (int time)
{
  digitalWrite(MA1, HIGH);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void turnLeft(int time)
{
  digitalWrite(MA1, HIGH);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, 0);

  delay(time);
}

void turnRight(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, 0);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void Stop(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, 0);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, 0);

  delay(time);

}


ลิงค์โค้ด https://lungmaker.com/code/test-motor-esp32.ino


เชื่อมต่อสาย Micro USB ระหว่าง คอมพิวเตอร์ กับ ESP32 และ ต้องเปิดสวิตช์เพื่อจ่ายไฟจากรางถ่านให้กับหุ่นยนต์ด้วย



เลือกบอร์ด ESP32 ตามรุ่นที่ใช้ เป็น ESP32 Dev Module



เลือก Port โดยไปที่ Tools -> Port -> COM5
(โดย COM5 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)



คลิกที่ Upload



แสดงการ Upload สำเร็จ


วิดีโอผลลัพธ์การทำงาน การเคลื่อนที่ของหุ่นยนต์ ESP32

ถ้ายังทำงานไม่ถูกต้อง คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา ให้กลับไปแก้ไขการต่อวงจร การต่อสายต่างๆ เช่น การต่อสายมอเตอร์ จนกว่าจะทำงานถูกต้อง ถึงจะสามารถไปทำงานในขั้นตอนต่อไป



4. เชื่อมต่อวงจร ระหว่าง บอร์ดขยายขา ESP32 กับ เซ็นเซอร์

(ใช้ Jumper (F2F) ความยาว 30 cm ในการเชื่อมต่อ)




และนี่คือโค้ดที่ใช้ทดสอบ

/*
read analog data from A1-A3 and send to PC via Serial port
*/

int sensor_L, sensor_C, sensor_R;  //optical sensor values
String tmp;
int ADC_stabilize = 5;

void setup() {
  // initialize the serial communication:
  Serial.begin(9600);
}

void loop() {
  //take a snapshot
  sensor_L = digitalRead(23);
  delay(ADC_stabilize);  //stabilize
  sensor_L = digitalRead(23);
  delay(ADC_stabilize);

  sensor_C = digitalRead(22);
  delay(ADC_stabilize);
  sensor_C = digitalRead(22);
  delay(ADC_stabilize);

  sensor_R = digitalRead(21);
  delay(ADC_stabilize);
  sensor_R = digitalRead(21);
  delay(ADC_stabilize);

  tmp = "L=" + String(sensor_L) + " C=" + String(sensor_C) + " R=" + String(sensor_R);

  // send the value of analog inputs:
  Serial.println(tmp);

  // wait a bit for next reading
  delay(1000);  //1000=1 sec
}


ลิงค์โค้ด https://lungmaker.com/code/tesi-line-sensor-esp32.ino


Upload โค้ด



เซ็นเซอร์ ทั้ง 3 ตัว ของหุ่นยนต์ เมื่ออยู่บริเวณ พื้นสีขาว ไฟ LED สีแดงทั้ง 3 ตัว จะติด



และเมื่อ “เซ็นเซอร์ขวา” ของหุ่นยนต์  อยู่บริเวณเทปสีดำ

และ 
เซ็นเซอร์ซ้าย และ  เซ็นเซอร์กลาง อยู่บริเวณพื้นสีขาว ไฟ LED สีแดง ด้านขวาจะดับ



แล้วไปที่ Tools -> Serial Monitor





เลือก Both NL & CR และ เลือก 9600 baud

Serial Monitor จะแสดง L=0 C=0 R=1



และเมื่อ “เซ็นเซอร์กลาง” ของหุ่นยนต์  อยู่บริเวณเทปสีดำ

และ เซ็นเซอร์ซ้าย และ  เซ็นเซอร์ขวา อยู่บริเวณพื้นสีขาว

ไฟ LED สีแดง ของ เซ็นเซอร์ตัวกลาง จะดับ




Serial Monitor จะแสดง L=0 C=1 R=0



และเมื่อ “เซ็นเซอร์ซ้าย” ของหุ่นยนต์  อยู่บริเวณเทปสีดำ

และ เซ็นเซอร์ขวา และ  เซ็นเซอร์กลาง อยู่บริเวณพื้นสีขาว

ไฟ LED สีแดง ของ เซ็นเซอร์ซ้าย จะดับ



Serial Monitor จะแสดง L=1 C=0 R=0

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




5. ทดสอบ หุ่นยนต์เดินตามเส้น


โค้ดหุ่นยนต์เดินตามเส้น ESP32

int MA1 = 27;    // Motor A1
int MA2 = 26;    // Motor A2
int PWM_A = 14;  // Speed Motor A

int MB1 = 17;   // Motor B1
int MB2 = 16;   // Motor B2
int PWM_B = 4;  // Speed Motor B


int SPEED = 255;  // Speed PWM สามารถปรับความเร็วได้ถึง 0 - 255

/*-------definning Sensor------*/

int sensor[3] = { 0, 0, 0 };

void setup() {

  //Setup Channel A
  pinMode(MA1, OUTPUT);    //Motor A1
  pinMode(MA2, OUTPUT);    //Motor A2
  pinMode(PWM_A, OUTPUT);  //Speed PWM Motor A

  //Setup Channel B
  pinMode(MB1, OUTPUT);    //Motor B1
  pinMode(MB2, OUTPUT);    //Motor B2
  pinMode(PWM_B, OUTPUT);  //Speed PWM Motor B

  pinMode(23, INPUT);  //sensor_L
  pinMode(22, INPUT);  //sensor_C
  pinMode(21, INPUT);  //sensor_R
}

void loop() {

  sensor[0] = digitalRead(23);
  sensor[1] = digitalRead(22);
  sensor[2] = digitalRead(21);

  if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 0)) {
    SPEED = 220;
    Backward(2);
  } else if ((sensor[0] == 0) && (sensor[1] == 1) && (sensor[2] == 0)) {
    SPEED = 220;
    Forward(10);
  } else if ((sensor[0] == 1) && (sensor[1] == 0) && (sensor[2] == 0)) {
    SPEED = 220;
    turnLeft(10);
    SPEED = 220;
    Forward(1);
  } else if ((sensor[0] == 1) && (sensor[1] == 1) && (sensor[2] == 0)) {
    SPEED = 220;
    turnLeft(1);
    SPEED = 220;
    Forward(1);
  } else if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 1)) {
    SPEED = 220;
    turnRight(10);
    SPEED = 220;
    Forward(1);
  } else if ((sensor[0] == 0) && (sensor[1] == 1) && (sensor[2] == 1)) {
    SPEED = 220;
    turnRight(1);
    SPEED = 220;
    Forward(1);
  }
}


void Backward(int time) {
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, HIGH);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, HIGH);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void Forward(int time) {
  digitalWrite(MA1, HIGH);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void turnLeft(int time) {
  digitalWrite(MA1, HIGH);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, 0);

  delay(time);
}

void turnRight(int time) {
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, 0);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void Stop(int time) {
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, 0);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, 0);

  delay(time);
}


ลิงค์โค้ด https://lungmaker.com/code/robot-esp32-line.ino


การทดสอบ หาพื้นที่เป็นสีขาว หรือ สีอ่อนๆ และใช้ เทปพันสายไฟ สีดำ โดยขนาด ความกว้างของเส้นประมาณ 3 เซนติเมตร โดยใช้ใช้ 2 เทปพันสายไฟ เรียงต่อกันเพื่อเพิ่มขนาดของเส้น


วิดีโอผลลัพธ์การทำงาน หุ่นยนต์เดินตามเส้น ESP32


สรุป

การสร้างหุ่นยนต์เดินตามเส้นด้วยเซ็นเซอร์ 3 เซ็นเซอร์ และบอร์ด ESP32 เป็นโครงการที่น่าสนใจและมีประโยชน์ ทำให้ผู้ที่สนใจสามารถเรียนรู้เรื่องการเขียนโปรแกรมและการทำงานของหุ่นยนต์ได้อย่างเพลิดเพลิน โดยใช้เทคโนโลยีที่ทันสมัยและเครื่องมือที่มีความสะดวกสบายอย่าง Arduino IDE และ ESP32 ที่มีประสิทธิภาพสูง ลองท้าทายตัวเองและสร้างหุ่นยนต์ที่น่าตื่นเต้นขึ้นมาดูกันเถอะ!

Leave a Reply

Your email address will not be published. Required fields are marked *

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save