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

ในบทความนี้ เราจะพูดถึงหลักการและกระบวนการสร้างหุ่นยนต์ที่ใช้ ESP32 (ESP-WROOM-32) โปรโตคอลพร้อมการใช้ Arduino IDE เพื่อความสะดวกและความสามารถในการพัฒนาที่ยืดหยุ่นมากขึ้น


หลักการ

  • ESP32 (ESP-WROOM-32): ESP32 เป็นโมดูล Wi-Fi และ Bluetooth ที่มีประสิทธิภาพสูง มีความสามารถในการประมวลผลที่มากขึ้นเมื่อเปรียบเทียบกับ ESP8266 ทำให้เหมาะสำหรับการใช้ในงานหุ่นยนต์ที่ต้องการประมวลผลหนักๆ

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

  • เซนเซอร์: การใช้เซนเซอร์เพื่อตรวจจับสิ่งกีดขวางเป็นสิ่งสำคัญในการสร้างหุ่นยนต์หลบสิ่งกีดขวาง สำหรับตัวอย่างนี้ เราสามารถใช้เซนเซอร์อินฟราเรด (Infrared sensor) หรือเซนเซอร์อัลตราโซนิก (Ultrasonic sensor) เพื่อตรวจจับสิ่งกีดขวางได้

  • การควบคุมการเคลื่อนที่: หลักการพื้นฐานสำหรับหุ่นยนต์หลบสิ่งกีดขวางคือการควบคุมการเคลื่อนที่โดยใช้มอเตอร์ (DC motor) ในการทำงานนี้ได้


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

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-123 HY-SRF05 SRF05 Ultrasonic Distance Sensor Module
14. RB-0121 Jumper (F2F) cable wire 30cm Female to Female
15. RB-0007 Mounting Bracket for HC-SR04 แบบยาว
16. RB-0026 สกรูหัวกลม+น็อตตัวเมีย ขนาด 3มม ยาว 12มม 10ตัว

การสร้าง หุ่นยนต์หลบสิ่งกีดขวาง ESP32

  • เตรียมฮาร์ดแวร์: ทำการเชื่อมต่อ ESP32 กับเซนเซอร์ที่เลือกใช้ (เช่น เซนเซอร์อินฟราเรดหรืออัลตราโซนิก) และมอเตอร์ (DC motor) ตามการออกแบบและความต้องการของโปรเจค


  • เขียนโค้ด: เริ่มต้นโครงสร้างโค้ดใน Arduino IDE โดยการกำหนดการทำงานของเซนเซอร์ในการตรวจจับสิ่งกีดขวาง และการควบคุมมอเตอร์ในการเคลื่อนที่เพื่อหลบหลีก

เซนเซอร์อัลตราโซนิก (Ultrasonic sensor) เป็นเซนเซอร์ที่ใช้ในการวัดระยะทางโดยใช้คลื่นเสียงอัลตราโซนิก เป็นหลักการทำงานที่มีความคล้ายคลึงกับการใช้เสียงเป็นตัวบ่งชี้ในการวัดระยะทาง โดยเซนเซอร์อัลตราโซนิกประกอบด้วยสองส่วนหลัก คือ ส่วนส่งคลื่นเสียง (Transmitter) และส่วนรับคลื่นเสียง (Receiver) ซึ่งมีหลักการทำงานดังนี้:

  • การส่งคลื่นเสียง: เซนเซอร์อัลตราโซนิกจะเริ่มการทำงานโดยการส่งคลื่นเสียงจากส่วนส่งคลื่นเสียงออกไปในสิ่งแวดล้อม โดยคลื่นเสียงที่ส่งออกจะมีความถี่สูงกว่าคลื่นเสียงที่มนุษย์สามารถได้ยินได้ (ทั่วไปอยู่ในช่วง 40 kHz)

  • การสะท้อนและการรับคลื่นเสียง: เมื่อคลื่นเสียงที่ส่งออกชนกับวัตถุที่อยู่ในสิ่งแวดล้อม คลื่นเสียงจะถูกสะท้อนกลับมาสู่เซนเซอร์ และส่วนรับคลื่นเสียงจะตรวจจับคลื่นเสียงที่ถูกส่งกลับมา

  • การคำนวณระยะทาง: เมื่อเซนเซอร์ได้รับคลื่นเสียงที่ถูกส่งกลับมา ระยะทางจะถูกคำนวณโดยการวัดเวลาที่ใช้ในการส่งคลื่นเสียงไปและกลับมา โดยใช้สูตรเวลาที่ใช้ = ระยะทาง x ความเร็วของเสียง ซึ่งในอากาศความเร็วของเสียงประมาณ 343 เมตรต่อวินาที

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

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

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


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




กำหนดค่าให้ รองรับบอร์ด 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 กับ เซ็นเซอร์ HY-SRF05

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






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

const unsigned int TRIG_PIN=15;

const unsigned int ECHO_PIN=2;
 
const unsigned int BAUD_RATE=115200;
 
 
void setup() {
 
  pinMode(TRIG_PIN, OUTPUT);
 
  pinMode(ECHO_PIN, INPUT);
 
  Serial.begin(BAUD_RATE);
 
}
 
 
void loop() {
 
  digitalWrite(TRIG_PIN, LOW);
 
  delayMicroseconds(2);
 
  digitalWrite(TRIG_PIN, HIGH);
 
  delayMicroseconds(10);
 
  digitalWrite(TRIG_PIN, LOW);
 
  
 
 
 const unsigned long duration= pulseIn(ECHO_PIN, HIGH);
 
 int distance= duration/29/2;
 
 if(duration==0){
 
   Serial.println("Warning: no pulse from sensor");
 
   } 
 
  else{
 
      Serial.print("distance to nearest object:");
 
      Serial.println(distance);
 
      Serial.println(" cm");
 
  }
 
 delay(100);
 
 }


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


Upload Code




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



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

Serial Monitor จะแสดง ระยะทางที่ห่าง จาก สิ่งกีดขวาง มีหน่วยเป็น cm (เซนติเมตร)

แสดงว่า การเชื่อมต่อ เซ็นเซอร์ HY-SRF05 ของเรานั้นถูกต้อง และ พร้อมใช้งานแล้ว



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 = 200;  // Speed PWM สามารถปรับความเร็วได้ถึง 0 - 255

const unsigned int TRIG_PIN = 15;

const unsigned int ECHO_PIN = 2;

//long x;
int x;

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(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}

void loop() {

  digitalWrite(TRIG_PIN, LOW);

  delayMicroseconds(2);

  digitalWrite(TRIG_PIN, HIGH);

  delayMicroseconds(10);

  digitalWrite(TRIG_PIN, LOW);

  const unsigned long duration = pulseIn(ECHO_PIN, HIGH);

  int distance = duration / 29 / 2;


  x = (distance);

  if (distance < 20) {
    Backward(400);
    turnLeft(1000);
  } else {

    Forward(1);
  }


  delay(100);
}

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/esp32-obstacle-robot.ino



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


สรุป

การได้ทดลองสร้างหุ่นยนต์หลบสิ่งกีดขวางโดยใช้ ESP32 และเซ็นเซอร์อัลตราโซนิกนั้นมีข้อดีมากมายดังนี้:

  • เรียนรู้และปรับปรุงทักษะ: การสร้างหุ่นยนต์ด้วยตัวเองช่วยให้คุณได้ฝึกทักษะการพัฒนาซอฟต์แวร์และฮาร์ดแวร์ที่สำคัญ ซึ่งเป็นประโยชน์สำหรับนักพัฒนาที่ต้องการพัฒนาทักษะในด้านนี้หรือนักศึกษาทางวิศวกรรม.

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

  • เพิ่มความยืดหยุ่นในการทำงาน: หุ่นยนต์ที่สามารถหลบสิ่งกีดขวางได้สามารถใช้ในหลายสถานการณ์ เช่น การใช้ในงานอุตสาหกรรม, การตรวจสอบสภาพแวดล้อม, หรือใช้ในงานที่ต้องการการเคลื่อนไหวอัตโนมัติที่ถูกแขวนกับสภาพแวดล้อม.

  • เสถียรภาพและประสิทธิภาพ: การใช้ ESP32 และเซ็นเซอร์อัลตราโซนิกช่วยให้หุ่นยนต์มีความเสถียรและประสิทธิภาพในการตรวจจับและหลบสิ่งกีดขวางได้ดี เนื่องจาก 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