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

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

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

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



ขั้นตอนการสร้าง


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


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



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



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


การต่อวงจร



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



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



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



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


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



เชื่อมต่อ มอเตอร์ ทั้ง 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 และ ต้องเปิดสวิตช์เพื่อจ่ายไฟจากรางถ่านให้กับหุ่นยนต์ด้วย

This image has an empty alt attribute; its file name is 9-1024x768.jpg



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

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



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

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



คลิกที่ Upload


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



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



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




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

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


4. Upload Code หุ่นยนต์ ESP32 บังคับ ผ่าน Bluetooth


นี่คือโค้ด หุ่นยนต์ ESP32 บังคับ ผ่าน Bluetooth

#include <BluetoothSerial.h>
BluetoothSerial btSerial;
#define BT_NAME "ESP32BT-CAR"  // Set bluetooth name

boolean btConnected = false;
char key, previousKey;
long previousMillis = 0;
int timeout = 1000;

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() {

  Serial.begin(115200);
  btSerial.begin(BT_NAME);

  Serial.println("ESP32 Bluetooth Mobile Robot");
  Serial.println();

  //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() {
  if (btSerial.available()) {
    previousMillis = millis();

    char inChar = (char)btSerial.read();

    if (btConnected == false) {
      btConnected = true;

      Serial.println("Bluetooth connected.");
    }

    if (inChar >= '0' && inChar <= '9') {
      key = inChar;
      if (key != previousKey) {

        switch (key) {
          case '5':
            Serial.println("Robot stop.");
            Stop(1);
            break;

          case '1':
            Serial.println("Robot move forward.");
            Forward(1);

            break;

          case '2':
            Serial.println("Robot move backward.");
            Backward(1);

            break;

          case '3':
            Serial.println("Robot turn right.");
            turnRight(10);

            break;

          case '4':
            Serial.println("Robot turn left.");
            turnLeft(10);

            break;
        }

        previousKey = key;
      }
    }
  }

  if (millis() - previousMillis > timeout && btConnected == true) {

    Serial.println("Bluetooth disconnected.");

    btConnected = false;
  }
}

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-bluetooth.ino



5. ติดตั้ง แอปพลิเคชั่น BlueDuino (Arduino Joystick)


ใช้สมาร์ทโฟนดาวน์ ระบบปฏิบัติการแอนดรอยด์ (Android) ดาวน์โหลดและติดตั้งแอพชื่อ BlueDuino (Arduino Joystick) จาก Google Play Store





เปิดการเชื่อมต่อ Bluetooth




เลือกเชื่อมต่อกับ ESP32BT-CAR (ตามที่เราเขียนโค้ดไว้ สามารถเปลี่ยนแปลงได้ตามความต้องการ)


เลือกจับคู่



แสดงการจับคู่สำเร็จ


เลือกที่ Connection to Device


เลือกเชื่อมต่อกับ ESP32BT-CAR


เลือกที่ Joystick


เลือกไปที่ ขวามือ ด้านบน รูป คล้ายๆ เครื่องหมาย +



แก้ไข ตามรูป ที่เป็น ตัวเลข 1 – 5
Up = 1, Down = 2 , Right = 3 , Left = 4, และ X = 5 (X = หยุด)



และเมื่อกลับไปหน้าเดิม ถึงตอนนี้แอปของเราก็พร้อมที่จะทำการทดสอบแล้ว




6. ทดสอบควบคุม หุ่นยนต์ ESP32 บังคับ ผ่าน Bluetooth

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

การปรับปรุงและการขยาย

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



สรุป

การใช้หุ่นยนต์ ESP32 ที่สามารถควบคุมผ่าน Bluetooth ด้วย Arduino IDE มีข้อดีหลายประการดังนี้:

  • ความสะดวกในการควบคุม: การใช้ Bluetooth ในการควบคุมหุ่นยนต์ทำให้สามารถควบคุมหุ่นยนต์ได้โดยไม่ต้องอยู่ใกล้หรือต่อสายผ่าน USB ซึ่งทำให้มีความสะดวกในการใช้งานมากขึ้น เช่น สามารถควบคุมหุ่นยนต์จากหลักสูตรมือถือหรืออุปกรณ์ที่มีการสื่อสาร Bluetooth ได้ง่ายขึ้น

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

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

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

  • การเรียนรู้และพัฒนาทักษะ: การใช้ 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