การพัฒนาหุ่นยนต์เพื่อใช้ในการนำทางหรือการเคลื่อนที่อัตโนมัติเป็นหนึ่งในโครงการที่ท้าทายและน่าทึ่งสำหรับนักพัฒนาและผู้สนใจในด้านเทคโนโลยี หุ่นยนต์ที่สามารถหลบสิ่งกีดขวางอย่างแม่นยำและปลอดภัยจะเป็นประโยชน์อย่างมากในหลายสถานการณ์ เช่น ในงานอุตสาหกรรมหรือการใช้งานในสถานที่ที่ต้องการการเคลื่อนที่อัตโนมัติโดยเฉพาะ
ในบทความนี้เราจะสร้างหุ่นยนต์โดยใช้ ESP8266 และ Arduino IDE ซึ่งเป็นสิ่งที่ทุกคนสามารถทำได้ด้วยความรู้พื้นฐานในการเขียนโปรแกรมและการใช้งานไมโครคอนโทรลเลอร์อย่าง ESP8266โดยเฉพาะ
หลักการทำงานของ หุ่นยนต์หลบสิ่งกีดขวาง ESP8266
หลักการทำงานของหุ่นยนต์หลบสิ่งกีดขวาง ESP8266 นั้นเรียกว่า “หุ่นยนต์อัจฉริยะ” หรือ “หุ่นยนต์เลี่ยงสิ่งกีดขวาง” (obstacle-avoidance robot) ซึ่งมีการทำงานอย่างน่าสนใจและเป็นประโยชน์ในการป้องกันการชนกับสิ่งกีดขวางในการเคลื่อนที่ หลักการทำงานของหุ่นยนต์นี้สามารถอธิบายได้ดังนี้:
ตรวจจับสิ่งกีดขวาง: หุ่นยนต์มีเซนเซอร์อินฟราเรด ติดตั้งด้านหน้าเพื่อตรวจจับสิ่งกีดขวาง ซึ่งเซนเซอร์จะส่งสัญญาณอินฟราเรดออกไปและวัดระยะห่างจากสิ่งกีดขวาง หากมีสิ่งกีดขวางอยู่ใกล้เซนเซอร์ สัญญาณที่ส่งออกจะถูกสะท้อนกลับมาเข้าสู่เซนเซอร์ ซึ่งหุ่นยนต์จะรับรู้และตรวจจับสิ่งกีดขวางด้วยการวัดและวิเคราะห์ข้อมูลจากเซนเซอร์นี้
การตัดสินใจและการทำปฏิบัติ: เมื่อหุ่นยนต์ตรวจจับสิ่งกีดขวาง มันจะทำการตัดสินใจเกี่ยวกับการทำปฏิบัติที่เหมาะสมในสถานการณ์นั้น ๆ หากมีสิ่งกีดขวางอยู่ข้างหน้า หุ่นยนต์จะทำการหลบหลีกหรือหยุดเคลื่อนที่และรอให้สิ่งกีดขวางผ่านไปก่อนที่จะดำเนินการเดินทางต่อ
ควบคุมการเคลื่อนที่: หลังจากที่หุ่นยนต์ตัดสินใจและกำหนดการทำปฏิบัติแล้ว มันจะใช้มอเตอร์ ( DC motor) เพื่อเคลื่อนที่ โดยการเปลี่ยนแปลงความเร็วและทิศทางของมอเตอร์ให้เหมาะสมเพื่อหลีกเลี่ยงสิ่งกีดขวางอย่างปลอดภัย
รีเสวนาและปรับปรุง: หลังจากการหลบหลีกสิ่งกีดขวางสำเร็จแล้ว หุ่นยนต์อาจทำการรีเสวนาและปรับปรุงการทำงานของตนเพื่อป้องกันการชนกับสิ่งกีดขวางในอนาคตโดยใช้ข้อมูลที่ได้รับจากเซนเซอร์และประสบการณ์ที่เกิดขึ้น
ดังนั้น หุ่นยนต์หลบสิ่งกีดขวาง ESP8266 มีความสำคัญในการนำเสนอเทคโนโลยีที่มีความสามารถในการรับมือกับสถานการณ์ของโลกแบบอัตโนมัติและอย่างอัจฉริยะ ทำให้เป็นที่น่าสนใจและมีความสำเร็จในการป้องกันการชนกับสิ่งกีดขวางในสภาพแวดล้อมต่าง ๆ ที่หลากหลาย
ขั้นตอนการทำงาน
- ติดตั้ง Arduino IDE: ดาวน์โหลดและติดตั้ง Arduino IDE จากเว็บไซต์ทางการของ Arduino และตั้งค่าให้สามารถใช้งานกับ ESP8266 ได้โดยเพิ่มบอร์ด ESP8266 ลงใน Arduino IDE ผ่านเมนู Preferences > Additional Board Manager URLs และเลือกเวอร์ชันล่าสุดของ ESP8266 จาก Board Manager.
- เชื่อมต่อ ESP8266 กับ Arduino IDE: เชื่อมต่อ ESP8266 กับคอมพิวเตอร์ผ่าน USB to Serial Converter และเปิด Arduino IDE เลือกเลือกบอร์ด ESP8266 และตั้งค่าพอร์ตที่ใช้งานในเมนู Tools.
- เขียนโปรแกรม: เขียนโปรแกรมด้วยภาษา C/C++ ใน Arduino IDE เพื่อควบคุมการทำงานของ ESP8266 ตามที่ต้องการ เช่น การเคลื่อนที่ของหุ่นยนต์ การตรวจจับเซนเซอร์ หรือการประมวลผลข้อมูล
- อัปโหลดโปรแกรม: หลังจากเขียนโปรแกรมเสร็จสิ้น ให้กดปุ่มอัปโหลดเพื่ออัปโหลดโปรแกรมลงใน ESP8266 ผ่านทางพอร์ต USB และรอให้กระบวนการเสร็จสมบูรณ์
- ทดสอบและปรับแก้ไข: ทดสอบการทำงานของโปรแกรมบน ESP8266 เพื่อควบคุมหุ่นยนต์ตามที่ต้องการ และปรับแก้ไขโปรแกรมตามความต้องการของโปรเจ็คหุ่นยนต์หลบสิ่งกีดขวาง ESP8266
อุปกรณ์ที่ใช้
1. RB-0023 2WD Smart Robot Car Chassis Kits
2. RB-0108 NodeMCU V3 CH340G Lua WIFI ESP8266 ESP-12E
3. RB-0109 NodeMcu Breadboard for NodeMCU V3
4. RB-0106 Micro USB Cable Wire 1m for NodeMCU
5. RB-0003 Motor Driver Module L298N
6. RB-0016 Jumper (F2M) cable wire 20cm Female to Male
7. RB-0017 Jumper (F2F) cable wire 20cm Female to Female
8. RB-0019 รางถ่าน 18650 – 2 ก้อน
9. RB-0021 ถ่านชาร์จ 18650 NCR18650B 3.7v 3400mAh 2 ก้อน
10. RB-0049 แจ๊กขั้วถ่าน 9 โวลต์ สำหรับ Ardiuno
11. RB-0025 4เสารองแผ่นพีซีบีโลหะแบบเหลี่ยม 8 mm
12. RB-0006 Ultrasonic Sensor HC-SR04
13. RB-0007 Mounting Bracket for HC-SR04 แบบยาว
14. RB-0026 สกรูหัวกลม+น็อตตัวเมีย ขนาด 3มม ยาว 12มม
การสร้าง หุ่นยนต์หลบสิ่งกีดขวาง ESP8266
1.ประกอบหุ่นยนต์และเชื่อมต่อวงจร
ยึด Breadboard เข้ากับโครงหุ่นยนต์
เสียบ บอร์ด ESP8266 V3 ลงไปที่ Breadboard
ยึด Motor Driver เข้ากับโครงหุ่นยนต์
ใช้กาวร้อน ยึดรางถ่านเข้ากับโครงหุ่นยนต์
การต่อวงจร
- ตัดแจ๊กขั้วถ่าน ด้าน 9V ออก แล้วเชื่อมต่อสายสีดำเข้ากับสายสีดำของรางถ่าน และสายสีแดงเข้ากับสวิตช์ปิดเปิด
- สายสีแดงของรางถ่านเชื่อมต่อเข้ากับสวิตช์ปิดเปิดอีกด้าน
- ใช้สาย Jumper (F2M) ผู้-เมีย สีแดง เชื่อมต่อจากสวิตช์ปิดเปิด จุดเดียวกันกับสายสีแดงของแจ๊กขั้วถ่าน ไปที่ Power Supply ของ Motor Driver
- ใช้สาย Jumper (F2M) ผู้-เมีย สีดำ เชื่อมต่อระหว่าง กราวด์ (GND) ของ Motor Driver กับ GND ของ Breadboard ESP8266
จากนั้น ใช้สาย Jumper (F2F) เมีย-เมีย เชื่อมต่อวงจร ระหว่าง Breadboard ESP8266 กับ Motor Driver ตามรูป
มี Jumper อยู่ที่ขา ENA และ ENB ของ บอร์ด Motor Driver ให้ถอดออก
เมื่อ เปิดสวิตช์ ต้องมีไฟเข้า โดยสังเกตไฟ LED สีฟ้า ที่ Breadboard ESP8266 และ ไฟ LED สีแดงที่ Motor Driver จะมีไฟติด
เชื่อมต่อสายสีแดง – ดำ เข้ากับมอเตอร์ ทั้ง 2 ตัว โดยให้สายสีแดงอยู่ด้านบน และ สายสีดำอยู่ด้านล่าง
ยึดมอเตอร์ ทั่ง 2 ตัว เข้ากับ โครงหุ่นยนต์
ยึด ล้อหน้า เข้ากับ โครงหุ่นยนต์
ภาพรวมการต่อหุ่นยนต์ ณ ขณะนี้
เชื่อมต่อ สายมอเตอร์ทั้ง 2 ด้าน เข้ากับ Motor Driver (ตรวจสอบสีของสายไฟให้ถูกต้องตามรูป)
2.ติดตั้ง Arduino IDE และการ Upload Code
สิ่งแรกคือการติดตั้ง Arduino IDE เพื่อให้คุณสามารถค้นหา Arduino IDE ใน Google
จากนั้นคุณมีสองทางเลือก
หนึ่งคือการติดตั้งเวอร์ชัน1 หรือเพื่อติดตั้งเวอร์ชัน 2
เราจะติดตั้งเวอร์ชัน 2 เพราะมีคุณสมบัติเพิ่มเติมบางอย่าง แต่ไม่ว่าคุณจะเลือกอะไรมันจะทำงานเช่นกัน ดังนั้นคุณสามารถเลือกอย่างใดอย่างหนึ่ง
ดาวน์โหลด Arduino IDE จากที่นี่
https://www.arduino.cc/en/software
กำหนดค่าให้ รองรับบอร์ด ES8266
ไปที่ File > Preferences
คัดลอกและวางบรรทัดต่อไปนี้ลงในฟิลด์ Boards Manager URLs -> OK
https://arduino.esp8266.com/stable/package_esp8266com_index.json
จากนั้นไปที่ตัวจัดการบอร์ดโดยไปที่ Tools -> Board: -> Boards Manager…
ที่ช่องค้นหา พิมพ์ esp8266 จะพบ esp8266 by ESP8266 Community แล้วคลิก INSTALL
แสดงการติดตั้งสำเร็จ
เมื่อไปที่ Tools -> Board: อีกครั้ง จะพบ บอร์ด esp8266 เพิ่มเข้ามาแล้ว
3. ทดสอบ การเคลื่อนที่ของหุ่นยนต์
การทดสอบนี้ เป็นการตรวจสอบการต่อสายต่างๆ เช่น การเชื่อมต่อสายของมอเตอร์ ทั้ง 2 ตัว รวมทั้งสายอื่นๆ ของหุ่นยนต์ที่เราสร้าง ว่าถูกต้องหรือไม่ ถ้าถูกต้องหุ่นยนต์จะดำเนินการดังนี้
คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา
และนี่คือโค้ดที่ใช้ทดสอบ
#define ENA 14 // Enable/speed motors Right GPI14(D5)
#define IN_1 0 // L298N in1 motors Right GPIO0(D3)
#define IN_2 2 // L298N in2 motors Right GPIO2(D4)
#define IN_3 12 // L298N in3 motors Left GPIO12(D6)
#define IN_4 13 // L298N in4 motors Left GPIO13(D7)
#define ENB 15 // Enable/speed motors Left GPIO15(D8)
int speedCar = 255; // 0 to 255
int speed_0 = 0;
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
pinMode(ENB, OUTPUT);
}
void loop() {
goForword();
delay(1000);
goBack();
delay(1000);
goLeft();
delay(400);
goRight();
delay(400);
}
void goForword() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goBack() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goRight() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goLeft() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goForwordRight() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar - speed_0);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goForwordLeft() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar - speed_0);
}
void goBackRight() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar - speed_0);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goBackLeft() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar - speed_0);
}
void stopRobot() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
ลิงค์โค้ด https://lungmaker.com/code/test-motor-esp8266.ino
เชื่อมต่อสาย Micro USB ระหว่าง คอมพิวเตอร์ กับ ESP8266 และ ต้องเปิดสวิตช์เพื่อจ่ายไฟจากรางถ่านให้กับหุ่นยนต์ด้วย
ตรวจสอบ Port ของบอร์ด ESP8266 โดย คลิกที่ Device Manager
ที่ Ports (COM & LPT) จะพบ Port ของบอร์ด ESP8266 ในตัวอย่างเป็น USB-SERIAL CH304 (COM4)
ไปที่ Tools -> Board -> esp8266 แล้วเลือกให้ตรงกับบอร์ดที่ใช้งาน สำหรับ NodeMCU ESP8266 V3 ให้เลือกบอร์ด NodeMCU 1.0 (ESP-12 Module)
เลือก Port โดยไปที่ Tools -> Port -> COM4
(โดย COM4 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload
รอจนกระทั่งขึ้น hard resetting via RTS pin… ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
วิดีโอผลลัพธ์การทำงาน การเคลื่อนที่ของหุ่นยนต์ ESP8266
ถ้ายังทำงานไม่ถูกต้อง คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา ให้กลับไปแก้ไขการต่อวงจร การต่อสายต่างๆ เช่น การต่อสายมอเตอร์ จนกว่าจะทำงานถูกต้อง ถึงจะสามารถไปทำงานในขั้นตอนต่อไป
4.เชื่อมต่อ Ultrasonic Sensor HC-SR04 และทดสอบ
และนี่คือโค้ดที่ใช้ทดสอบ
const int pingPin = D1;
int inPin = D2;
void setup() {
Serial.begin(115200);
}
void loop() {
long duration, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(inPin, INPUT);
duration = pulseIn(inPin, HIGH);
cm = microsecondsToCentimeters(duration);
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
ลิงค์โค้ด : https://lungmaker.com/code/test-esp8266-sr04.ino
Upload Code
ที่ Arduino IDE ไปที่ Tools -> Serial Monitor แล้วเลือก Both NL & CR และ เลือก 115200 baud
Serial Monitor จะแสดง ระยะทางที่ห่าง จาก สิ่งกีดขวาง มีหน่วยเป็น cm (เซนติเมตร)
แสดงว่า การเชื่อมต่อ เซ็นเซอร์ Ultrasonic Sensor HC-SR04 ของเรานั้นถูกต้อง และ พร้อมใช้งานแล้ว
ถ้ายังทำงานไม่ถูกต้อง ให้กลับไปแก้ไขการต่อวงจร การต่อสายเซ็นเซอร์ จนกว่าจะทำงานถูกต้อง ถึงจะสามารถไปทำงานในขั้นตอนต่อไป
5. ทดสอบ หุ่นยนต์หลบสิ่งกีดขวาง ESP8266
โค้ด หุ่นยนต์หลบสิ่งกีดขวาง
#define ENA 14 // Enable/speed motors Right GPI14(D5)
#define IN_1 0 // L298N in1 motors Right GPIO0(D3)
#define IN_2 2 // L298N in2 motors Right GPIO2(D4)
#define IN_3 12 // L298N in3 motors Left GPIO12(D6)
#define IN_4 13 // L298N in4 motors Left GPIO13(D7)
#define ENB 15 // Enable/speed motors Left GPIO15(D8)
int speedCar = 160; // 0 to 255
int speed_0 = 0;
const unsigned int TRIG_PIN = 5; // GPIO5(D1)
const unsigned int ECHO_PIN = 4; // GPIO4(D2)
int x;
void setup() {
Serial.begin(115200);
pinMode(ENA, OUTPUT);
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(TRIG_PIN, LOW);
const unsigned long duration = pulseIn(ECHO_PIN, HIGH);
int distance = duration / 29 / 2;
x = (distance);
if (distance < 20) {
goBack();
delay(10);
goLeft();
delay(10);
} else {
goForword();
delay(1);
}
delay(100);
}
void goForword() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goBack() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goRight() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goLeft() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goForwordRight() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar - speed_0);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goForwordLeft() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar - speed_0);
}
void goBackRight() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar - speed_0);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goBackLeft() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar - speed_0);
}
void stopRobot() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
ลิงค์โค้ด https://lungmaker.com/code/esp8266-obstacle-robot.ino
วิดีโอผลลัพธ์การทำงาน หุ่นยนต์หลบสิ่งกีดขวาง ESP8266
สรุป
การสร้างหุ่นยนต์ ESP8266 ที่สามารถหลบสิ่งกีดขวางด้วย Arduino IDE มีข้อดีมากมายที่น่าสนใจ:
- ความสะดวกในการใช้งาน: Arduino IDE เป็นเครื่องมือที่ใช้งานง่ายและมีชุดคำสั่งที่เข้าใจง่าย ทำให้ผู้ใช้ทุกคน ไม่ว่าจะเป็นมือใหม่หรือมือเชี่ยวชาญ สามารถเขียนโปรแกรมได้โดยง่าย
- เพิ่มความเฉลียวฉลาดให้กับหุ่นยนต์: การใช้ ESP8266 เป็นส่วนหนึ่งของหุ่นยนต์ให้ความสามารถในการรับรู้และตอบสนองต่อสิ่งกีดขวาง เช่น เซนเซอร์หรือการเชื่อมต่อกับระบบเซิร์ฟเวอร์
- เสถียรภาพและประสิทธิภาพ: ESP8266 เป็นโมดูลที่มีประสิทธิภาพสูงและมีเสถียรภาพในการทำงาน ทำให้หุ่นยนต์สามารถทำงานอย่างมีประสิทธิภาพและเสถียร
- การพัฒนาและปรับแต่งได้: ESP8266 มีความยืดหยุ่นในการพัฒนาและปรับแต่งโปรแกรมตามความต้องการของผู้ใช้ ทำให้สามารถปรับปรุงและพัฒนาความสามารถของหุ่นยนต์ได้อย่างไม่จำกัด
- การใช้งานและเรียนรู้: การสร้างหุ่นยนต์ ESP8266 ให้ความสามารถในการหลบสิ่งกีดขวางเป็นโอกาสที่ดีในการศึกษาและเรียนรู้เกี่ยวกับเทคโนโลยี IoT (Internet of Things) และการพัฒนาหุ่นยนต์ในยุคปัจจุบัน