หุ่นยนต์เป็นหนึ่งในเทคโนโลยีที่ก้าวไปข้างหน้าอย่างรวดเร็วในยุคปัจจุบัน การใช้เทคโนโลยีอินเทอร์เน็ตของสรรพสิ่ง (IoT) เข้ามาช่วยในการควบคุมและกำหนดการใช้งานของหุ่นยนต์ก็กลายเป็นเรื่องที่น่าสนใจอย่างมาก เฉพาะอย่างยิ่งเมื่อเราสามารถใช้ ESP32 และแพลตฟอร์ม Blynk เข้ามาช่วยในการสร้างและบังคับการทำงานของหุ่นยนต์ได้อย่างง่ายดาย ในบทความนี้เราจะสำรวจถึงขั้นตอนการสร้างและบังคับหุ่นยนต์ผ่านอินเทอร์เน็ตโดยใช้ ESP32 และ Blynk อย่างละเอียดและง่ายๆ มาดูกันเลย!
Blynk คืออะไร?
Blynk เป็นแพลตฟอร์มการพัฒนาแอปพลิเคชันที่ออกแบบมาเพื่อให้ผู้ใช้สามารถควบคุมอุปกรณ์ IoT ได้ โดยการใช้งานแอปพลิเคชันบนสมาร์ทโฟนหรือแท็บเล็ตของพวกเขา สิ่งที่น่าสนใจกับ Blynk คือความสามารถในการสร้างอินเตอร์เฟซผ่านการลากและวาง (drag-and-drop) ที่ใช้งานง่าย ไม่ว่าคุณจะเป็นนักพัฒนามืออาชีพหรือไม่ก็ตาม คุณสามารถสร้างแอปควบคุมอุปกรณ์ IoT ได้ในเวลาอันสั้น
คุณสมบัติและการใช้งานของ Blynk
- การสร้างอินเตอร์เฟซที่กำหนดเอง: Blynk มีเครื่องมือในการสร้างอินเตอร์เฟซที่ใช้งานง่าย คุณสามารถเพิ่มปุ่ม สวิตช์ และกราฟเพื่อควบคุมและตรวจสอบสถานะของอุปกรณ์ได้
- ควบคุมผ่านอินเทอร์เฟซสมาร์ทโฟน: คุณสามารถควบคุมอุปกรณ์ IoT ของคุณจากที่ไหนก็ได้ ทั้งจากบ้าน ที่ทำงาน หรือที่ไหนก็ตามที่มีการเชื่อมต่ออินเทอร์เน็ต
- สนับสนุนหลายแพลตฟอร์ม: Blynk สามารถใช้งานได้กับหลายแพลตฟอร์มอุปกรณ์ IoT ที่มีอินเตอร์เฟซที่สามารถทำงานร่วมกับแอปพลิเคชันได้ เช่น Arduino, Raspberry Pi, ESP32, และอุปกรณ์ IoT อื่นๆ
อุปกรณ์ที่ใช้
ก่อนที่เราจะเริ่มต้นสร้างหุ่นยนต์ที่สามารถควบคุมผ่านอินเทอร์เน็ตได้ จำเป็นต้องเตรียมอุปกรณ์พื้นฐานต่อไปนี้:
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
ใส่ถ่าน 19650 จำนนวน 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);
}
เชื่อมต่อสาย Micro USB ระหว่าง คอมพิวเตอร์ กับ ESP32 และ ต้องเปิดสวิตช์เพื่อจ่ายไฟจากรางถ่านให้กับหุ่นยนต์ด้วย
เลือกบอร์ด ESP32 ตามรุ่นที่ใช้ เป็น ESP32 Dev Module
เลือก Port โดยไปที่ Tools -> Port -> COM5
(โดย COM5 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload
แสดงการ Upload สำเร็จ
วิดีโอผลลัพธ์การทำงาน การเคลื่อนที่ของหุ่นยนต์ ESP32
ถ้ายังทำงานไม่ถูกต้อง คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา ให้กลับไปแก้ไขการต่อวงจร การต่อสายต่างๆ เช่น การต่อสายมอเตอร์ จนกว่าจะทำงานถูกต้อง ถึงจะสามารถไปทำงานในขั้นตอนต่อไป
4. เรียนรู้การใช้งาน App Blynk เบื้องต้น
5. ใช้งานเว็บแอพพลิเคชั่น Blynk ที่คอมพิวเตอร์
Blynk เป็นแพลตฟอร์ม IoT (Internet of Things) ที่ช่วยให้คุณสร้างแอปพลิเคชันสำหรับควบคุมอุปกรณ์ดิจิตอลต่าง ๆ ผ่านเครือข่ายอินเทอร์เน็ตได้อย่างง่ายดาย นี่คือขั้นตอนพื้นฐานในการเริ่มต้นใช้งาน Blynk:
สร้างบัญชี Blynk:
ไปที่เว็บไซต์ของ Blynk (https://blynk.io/) และสร้างบัญชีผู้ใช้ใหม่
ใช้ PC คอมพิวเตอร์ แล้วเปิดเบราว์เซอร์ ไปที่ https://blynk.io/ คลิกที่ START FREE
กรอกอีเมล แล้วกด Sign Up
ระบบแจ้งให้ไปยืนยัน Email ที่ใช้สมัคร
ไปที่ Email ที่ใช้สมัคร จะมี Email ที่ส่งมาจาก Blynk เปิดเข้าไป แล้ว คลิกที่ Create Password
สร้างรหัสผ่าน -> Next
ตั้งชื่อผู้ใช้งาน -> Done
พร้อมใช้งานแล้ว
กลับไปที่ blynk.io คลิกที่ LOG IN
เข้าสู่ระบบด้วยข้อมูลบัญชี Email และ รหัสผ่าน ที่คุณสร้าง -> Log In
เลือก + New Template
ตั้งชื่อ ในตัวอย่างคือ ROBOT บอร์ดคือ ESP32 และเชื่อมต่อแบบ WIFI -> Done
ไปที่ Developer Zone
ไปที่ Datastreams -> + New Datastreams -> Virtual Pin
NAEM = FORWARD , PIN = V1 , DATA TYPE = Integer -> Create
ไปที่ + New Datastreams -> Virtual Pin
NAME = LEFT , PIN = V2 , DATA TYPE = Integer -> Create
NAME = BACK , PIN = V3 , DATA TYPE = Integer -> Create
NAME = RIGHT , PIN = V4 , DATA TYPE = Integer -> Create
NAME = STOP , PIN = V5 , DATA TYPE = Integer -> Create
ไปที่ Web Dashboard
ที่ Widget Box ลาก Switch 5 ตัว ไปที่ส่วนแสดงผล
เลือก Switch ที่ส่วนแสดงผล ตัวบนสุด แล้วเลือกรูปเฟือง เพื่อกำหนดค่า
เลือกเป็น FORWARD(V1)
คลิก Save
แล้ว กำหนดค่า ทุก Switch ตามรูป แล้วคลิก Save
ไปที่ Devices -> New Device
เลือก From template
TEMPLATE เลือก Template ที่เราสร้างก่อนหน้านี้ คือ ROBOT และ DEVICE NAME ตั้งชื่อเป็น ROBOT-ESP32 -> Create
ก๊อปปี้ ส่วน New Device Created (พื้นสีดำ) สำหรับเอาไปแก้ไขโค้ดของ Arduino
6. Uplpad Code หุ่นยนต์ ESP32 บังคับผ่านอินเตอร์เน็ต (Blynk)
ก่อนอัพโหลดต้องแก้ไขโค้ด ส่วน Blynk Device Info here ที่ก๊อปปี้ จากส่วน New Device Created ของขั้นตอนที่แล้ว
และ แก้ไข ชื่อเครือข่าย wifi และ รหัสผ่าน
นี่คือโค้ด
#define BLYNK_PRINT Serial
/* Fill in information from Blynk Device Info here */
#define BLYNK_TEMPLATE_ID "TMPxxxxxx"
#define BLYNK_TEMPLATE_NAME "Device"
#define BLYNK_AUTH_TOKEN "YourAuthToken"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Your WiFi credentials.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";
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(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
//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() {
Blynk.run();
}
BLYNK_WRITE(V1) {
Forward(200);
}
BLYNK_WRITE(V2) {
turnLeft(200);
}
BLYNK_WRITE(V3) {
Backward(200);
}
BLYNK_WRITE(V4) {
turnRight(200);
}
BLYNK_WRITE(V5) {
Stop(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/ESP32-Blynk-Robot-2024.ino
7. สร้างแอป Blynk ที่ สมาร์ทโฟน
8. ทดสอบควบคุม หุ่นยนต์ ESP32 บังคับผ่านอินเตอร์เน็ต (Blynk)
วิดีโอผลลัพธ์การทำงาน หุ่นยนต์ ESP32 บังคับผ่านอินเตอร์เน็ต (Blynk)
การปรับปรุงและการขยาย
- เพิ่มเซนเซอร์: เพิ่มเซนเซอร์ต่าง ๆ เช่น เซนเซอร์ระยะทาง ultrasonic, เซนเซอร์อินฟราเรด หรือเซนเซอร์อื่น ๆ เพื่อเพิ่มความสามารถในการตรวจจับและเคลื่อนที่ของหุ่นยนต์
- การควบคุมผ่านอินเตอร์เน็ต: สามารถเชื่อมต่อหุ่นยนต์กับเซิร์ฟเวอร์อินเตอร์เน็ตเพื่อควบคุมผ่านเว็บไซต์หรือแอพพลิเคชันพร้อมทั้งใช้งานข้อมูลที่เกี่ยวข้องอื่น ๆ จากอินเตอร์เน็ต
- การเพิ่มความสามารถในการใช้งาน: เช่น เพิ่มการตอบสนองด้านเสียง, การตรวจจับวัตถุ, หรือการเดินตามเส้นทาง
สรุป
การสร้างหุ่นยนต์ ESP32 และบังคับด้วยแพลตฟอร์ม Blynk มีข้อดีมากมายที่คุณควรพิจารณา:
- ควบคุมผ่านอินเทอร์เน็ต: การใช้ Blynk ช่วยให้คุณสามารถควบคุมหุ่นยนต์ผ่านอินเทอร์เน็ตได้ทุกที่ทุกเวลา ไม่ว่าคุณจะอยู่ที่ไหนก็สามารถใช้สมาร์ทโฟนหรือแท็บเล็ตควบคุมได้โดยทันที เพื่อความสะดวกและเป็นระบบ
- ง่ายต่อการใช้งาน: Blynk มีอินเตอร์เฟซที่ใช้งานง่าย ไม่ว่าคุณจะเป็นผู้เริ่มต้นหรือมืออาชีพ คุณสามารถสร้างและปรับแต่งหน้าจอควบคุมของหุ่นยนต์ได้โดยไม่ต้องมีความรู้ทางเทคนิคมากมาย
- สร้างอินเตอร์เฟซที่กำหนดเอง: คุณสามารถสร้างอินเตอร์เฟซที่เข้ากับความต้องการของคุณได้ เช่น การเพิ่มปุ่มสำหรับควบคุมการเคลื่อนไหวหรือการแสดงข้อมูลต่างๆ อย่างง่ายดาย
- สนับสนุนหลายแพลตฟอร์ม: Blynk สนับสนุนการใช้งานกับหลายแพลตฟอร์มอุปกรณ์ IoT ที่มีอินเตอร์เฟซที่ใช้งานได้ ไม่ว่าจะเป็น ESP32, Arduino, Raspberry Pi หรืออุปกรณ์อื่นๆ ที่สามารถเชื่อมต่อได้ผ่านอินเทอร์เน็ต
- ความยืดหยุ่นและปรับแต่งได้: การใช้ Blynk ช่วยให้คุณสามารถปรับแต่งหรือเปลี่ยนแปลงการควบคุมหุ่นยนต์ได้ตามความต้องการของคุณ เช่น เพิ่มฟีเจอร์ใหม่ แก้ไขการทำงาน หรือปรับปรุงส่วนต่างๆ อย่างอิสระ
การใช้ Blynk เพื่อควบคุมหุ่นยนต์ ESP32 ผ่านอินเทอร์เน็ตมีประโยชน์มากเนื่องจากความสะดวกสบายและความยืดหยุ่นในการใช้งาน ทำให้ผู้ใช้สามารถควบคุมและดูแลหุ่นยนต์ของตนได้อย่างง่ายดายและมีประสิทธิภาพมากยิ่งขึ้น