การพัฒนาหุ่นยนต์ได้เป็นหนึ่งในแนวทางที่น่าสนใจในโลกของเทคโนโลยี การนำเทคโนโลยีในการควบคุมผ่านการสื่อสารไร้สายอย่าง 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

กำหนดค่าให้ รองรับบอร์ด ESP32
ไปที่ File > Preferences

คัดลอกและวางบรรทัดต่อไปนี้ลงในฟิลด์ Boards Manager URLs
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

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

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. 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 สามารถเป็นเครื่องมือที่ดีในการเรียนรู้การโปรแกรมและการพัฒนาซอฟต์แวร์ให้กับนักพัฒนา โดยที่ไม่ต้องมีความชำนาญในการเขียนโค้ดลึกลงไปในระดับที่ซับซ้อนมาก่อน