ผู้เขียนบทความ :
นายพชร วีระประดิษฐ์ 073 COE#16
นาย ธีระพัฒน์ มนทา 069 COE#16
นาย องอินทร์ เหมรักษ์ 082 COE#16
นาย ปาราเมศ มุ่งประสิทธิชัย 072 COE#16
คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-201 การโปรเเกรมคอมพิวเตอร์ขั้นสูง
1.ความเป็นมา
โปรเจ็กต์ หุ่นยนต์รถบังคับสำรวจผ่าน Application มือถือ TSCINBUNNY เป็นหนึ่งในแนวคิดพื้นฐานของหุ่นยนต์อัตโนมัติเป็นโครงการที่ท้าทายและน่าสนใจในด้านหุ่นยนต์ศึกษาและงานวิจัย โดยใช้กล้อง ESP CAM และไมโครคอนโทรลเลอร์ ESP32 ซึ่งช่วยให้นักเรียน นักวิจัย หรือผู้ที่สนใจได้เรียนรู้และทดลองการใช้งานเทคโนโลยีเหล่านี้ในโครงการที่มีประโยชน์
2.วัตถุประสงค์
วัตถุประสงค์ของโปรเจ็กต์ หุ่นยนต์รถบังคับสำรวจผ่าน Application มือถือ TSCINBUNNY โดยใช้กล้อง ESP CAM และไมโครคอนโทรลเลอร์ ESP32 และพัฒนาทักษะการใช้งานและการเขียนโปรแกรมสำหรับการประมวลผลภาพและการควบคุมหุ่นยนต์เพื่อเป็นสื่อการเรียนรู้สำหรับผู้ที่สนใจในด้านการควบคุมหุ่นยนต์และการประมวลผลภาพ
3.ขอบเขต
1.การสร้างหุ่นยนต์ที่ใช้กล้อง ESP CAM
2.การใช้ ESP32 เป็นตัวควบคุมหลักในการประมวลผลสัญญาณจากกล้องและสั่งการการเคลื่อนที่ของหุ่นยนต์
3.การทดสอบหุ่นยนต์ในสภาพแวดล้อมที่กำหนดเพื่อประเมินความแม่นยำและประสิทธิภาพ
4.ประโยชน์ที่คาดว่าจะได้รับ
1.ได้เรียนรู้เกี่ยวกับการใช้งานกล้อง ESP CAM และ ESP32 รวมถึงการประมวลผลภาพและการควบคุมหุ่นยนต์
2.พัฒนาทักษะในการออกแบบและสร้างหุ่นยนต์ที่สามารถใช้งานได้จริงในสถานการณ์ต่าง ๆ
3.สามารถนำความรู้ที่ได้ไปประยุกต์ใช้ในโครงการอื่น ๆ ที่เกี่ยวข้องกับการควบคุมหุ่นยนต์และการประมวลผลภาพ
4.หุ่นยนต์สำรวจสามารถนำไปใช้ในงานตรวจสอบสภาพแวดล้อมในพื้นที่ที่อันตรายหรือเข้าถึงยาก เช่น การสำรวจพื้นที่แคบในอาคาร การตรวจสอบท่อระบายน้ำ หรือพื้นที่ที่มีสารเคมีอันตราย โดยไม่ต้องเสี่ยงให้มนุษย์เข้าไป
5.ความรู้ที่เกี่ยวข้อง
5.1 การประมวลผลภาพ (Image Processing)
- ความรู้พื้นฐานเกี่ยวกับการประมวลผลภาพจากกล้อง ESP CAM เพื่อใช้ในการวิเคราะห์ภาพ การตรวจจับวัตถุ การรู้จำตำแหน่ง หรือการนำภาพมาประยุกต์ในระบบหุ่นยนต์
5.2 การควบคุมหุ่นยนต์ (Robot Control)
- พื้นฐานของการควบคุมหุ่นยนต์ รวมถึงการออกแบบวงจรควบคุมสำหรับการเคลื่อนที่ของหุ่นยนต์ การส่งคำสั่งเพื่อสั่งการให้หุ่นยนต์เคลื่อนที่ในทิศทางที่ต้องการ
5.3 การสื่อสารระหว่างอุปกรณ์ (Device Communication)
- การสื่อสารแบบไร้สาย (Wi-Fi) ระหว่าง ESP32 และแอปพลิเคชันบนมือถือ รวมถึงโปรโตคอลการสื่อสารที่เหมาะสม เช่น WebSocket หรือ MQTT เพื่อใช้ในการควบคุมหุ่นยนต์ผ่านแอปฯ
5.4 ไมโครคอนโทรลเลอร์ ESP32
- ความรู้เบื้องต้นเกี่ยวกับ ESP32 ในการทำหน้าที่เป็นตัวประมวลผลกลาง ควบคุมการทำงานของหุ่นยนต์ รวมถึงการเขียนโปรแกรมควบคุมการทำงานร่วมกับกล้อง ESP CAM และโมดูลอื่น ๆ
5.5 การพัฒนาแอปพลิเคชันบนมือถือ
- ความรู้ในการสร้างแอปพลิเคชันมือถือเพื่อใช้ควบคุมหุ่นยนต์ รวมถึงการออกแบบ UI และการสื่อสารกับ ESP32 เพื่อรับภาพจากกล้องและส่งคำสั่งควบคุม
6.ผลการดำเนินงาน
ในการดำเนินโปรเจ็กต์หุ่นยนต์รถบังคับสำรวจผ่าน Application มือถือ TSCINBUNNY มีผลการดำเนินงานที่สำคัญดังนี้:
6.1 การประกอบและติดตั้งหุ่นยนต์
- ประสบความสำเร็จในการประกอบโครงสร้างของหุ่นยนต์ติดตั้งกล้อง ESP CAM และเชื่อมต่อ ESP32 กับเซ็นเซอร์และอุปกรณ์ขับเคลื่อนต่าง ๆ ตามที่ออกแบบไว้
6.2 การพัฒนาและทดสอบระบบควบคุม
- สามารถพัฒนาโปรแกรมบน ESP32 ที่รับสัญญาณจาก Application มือถือ และส่งคำสั่งควบคุมการเคลื่อนที่ของหุ่นยนต์ได้อย่างมีประสิทธิภาพ
6.3 การรับส่งภาพจาก ESP CAM สู่แอปพลิเคชัน
- สามารถส่งภาพจากกล้อง ESP CAM ไปยังแอปพลิเคชันมือถือได้แบบเรียลไทม์ ผ่านการสื่อสารแบบไร้สาย (Wi-Fi) เพื่อให้ผู้ใช้งานสามารถสำรวจพื้นที่ได้อย่างมีประสิทธิภาพ
6.4 การสร้างแอปพลิเคชัน TSCINBUNNY
- ประสบความสำเร็จในการพัฒนาแอปพลิเคชัน TSCINBUNNY สำหรับการควบคุมหุ่นยนต์และการแสดงผลภาพจากกล้อง มีการออกแบบ UI ที่ใช้งานง่ายและสื่อสารกับ ESP32 ได้อย่างเสถียร
6.5 การทดสอบและปรับปรุงการทำงานของหุ่นยนต์ในสถานการณ์จริง
- ได้ทำการทดสอบการทำงานของหุ่นยนต์ในสภาพแวดล้อมที่กำหนด และปรับปรุงการควบคุมหุ่นยนต์เพื่อให้สามารถเคลื่อนที่และส่งข้อมูลได้อย่างแม่นยำ โดยผลการทดสอบแสดงให้เห็นว่าหุ่นยนต์สามารถทำงานได้ตามวัตถุประสงค์และมีความเสถียรในการควบคุม
7.สรุปผลและข้อเสนอแนะ
7.1 สรุปผล
โปรเจ็กต์หุ่นยนต์รถบังคับสำรวจผ่าน Application มือถือ TSCINBUNNY โดยใช้กล้อง ESP CAM และ ESP32 ได้รับการพัฒนาและทดสอบตามวัตถุประสงค์ที่กำหนด สามารถสร้างหุ่นยนต์ที่ควบคุมผ่านแอปพลิเคชันมือถือได้สำเร็จ ระบบควบคุมการเคลื่อนที่และการรับส่งภาพเรียลไทม์มีความเสถียร ทำให้หุ่นยนต์สามารถทำงานสำรวจในพื้นที่จำกัดได้อย่างมีประสิทธิภาพ นอกจากนี้โปรเจ็กต์ยังช่วยเพิ่มพูนทักษะในด้านการพัฒนาแอปพลิเคชัน การควบคุมหุ่นยนต์ การเขียนโปรแกรม และการประมวลผลภาพ ซึ่งเป็นประโยชน์ทั้งในด้านการศึกษาและการนำไปต่อยอดในงานวิจัยหรือโครงการอื่น ๆ ที่เกี่ยวข้อง
7.2 ข้อเสนอแนะ
เพิ่มระบบการหลีกเลี่ยงสิ่งกีดขวาง: ควรเพิ่มเซ็นเซอร์ตรวจจับสิ่งกีดขวาง เช่น อัลตราโซนิก หรืออินฟราเรด เพื่อให้หุ่นยนต์สามารถหลบหลีกสิ่งกีดขวางได้อย่างอัตโนมัติ ลดความเสี่ยงจากการชนในพื้นที่สำรวจ
พัฒนาการประมวลผลภาพขั้นสูง: การเพิ่มฟีเจอร์การวิเคราะห์ภาพ เช่น การตรวจจับวัตถุหรือการติดตามเส้นทาง จะช่วยให้หุ่นยนต์สามารถทำงานสำรวจได้หลากหลายและมีประสิทธิภาพมากขึ้น
ปรับปรุงการออกแบบแอปพลิเคชัน: การพัฒนา UI ให้รองรับการตั้งค่าการควบคุมเพิ่มเติม เช่น ความเร็วในการเคลื่อนที่ หรือการเลือกโหมดการทำงาน จะช่วยให้ผู้ใช้งานสามารถปรับแต่งการใช้งานได้หลากหลายขึ้น
ขยายขอบเขตการใช้งาน: ควรพิจารณาการใช้แบตเตอรี่ที่มีความจุมากขึ้นหรือระบบชาร์จพลังงานที่ช่วยให้หุ่นยนต์ทำงานได้นานขึ้น เพื่อรองรับการสำรวจในพื้นที่ขนาดใหญ่หรือในสภาวะแวดล้อมที่ท้าทาย
Code
/*
* @Date: 2022-8-27
* @Description: ESP32 Camera Surveillance Car
* @FilePath:
*/
#include "esp_camera.h"
#include <WiFi.h>
//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
// or another board which has PSRAM enabled
//
// Adafruit ESP32 Feather
// Select camera model
// #define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_M5STACK_PSRAM
#define CAMERA_MODEL_AI_THINKER
const char *ssid = "Bangnee"; // Enter SSID WIFI Name
const char *password = "********"; // Enter WIFI Password
#if defined(CAMERA_MODEL_WROVER_KIT)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 21
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 19
#define Y4_GPIO_NUM 18
#define Y3_GPIO_NUM 5
#define Y2_GPIO_NUM 4
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
#elif defined(CAMERA_MODEL_AI_THINKER)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
#else
#error "Camera model not selected"
#endif
// GPIO Setting
extern int gpLed = 4; // Light
extern String WiFiAddr = "";
void startCameraServer();
void setup()
{
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println();
pinMode(gpLed, OUTPUT); // Light
digitalWrite(gpLed, LOW);
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
// init with high specs to pre-allocate larger buffers
if (psramFound())
{
config.frame_size = FRAMESIZE_HVGA;/* FRAMESIZE_96X96, // 96x96
FRAMESIZE_QQVGA, // 160x120
FRAMESIZE_QCIF, // 176x144
FRAMESIZE_HQVGA, // 240x176
FRAMESIZE_240X240, // 240x240
FRAMESIZE_QVGA, // 320x240
FRAMESIZE_CIF, // 400x296
FRAMESIZE_HVGA, // 480x320
FRAMESIZE_VGA, // 640x480
FRAMESIZE_SVGA, // 800x600
FRAMESIZE_XGA, // 1024x768
FRAMESIZE_HD, // 1280x720
FRAMESIZE_SXGA, // 1280x1024
FRAMESIZE_UXGA, // 1600x1200*/
config.jpeg_quality = 24; /*It could be anything between 0 and 63.The smaller the number, the higher the quality*/
config.fb_count = 2;
Serial.println("FRAMESIZE_HVGA");
}
else
{
config.frame_size = FRAMESIZE_CIF;
config.jpeg_quality = 24;
config.fb_count = 1;
Serial.println("FRAMESIZE_CIF");
}
// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK)
{
Serial.printf("Camera init failed with error 0x%x", err);
return;
}
// drop down frame size for higher initial frame rate
sensor_t *s = esp_camera_sensor_get();
s->set_framesize(s, FRAMESIZE_CIF);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
startCameraServer();
Serial.print("Camera Ready! Use 'http://");
Serial.print(WiFi.localIP());
WiFiAddr = WiFi.localIP().toString();
Serial.println("' to connect");
}
void loop()
{
// put your main code here, to run repeatedly:
}
8.อ้างอิง
Espressif Systems. (2023). ESP32 Series Datasheet. Retrieved from https://www.espressif.com
- ข้อมูลเกี่ยวกับคุณสมบัติและการใช้งานไมโครคอนโทรลเลอร์ ESP32 ที่ใช้เป็นตัวประมวลผลหลักในโครงการนี้
ArduCAM. (2022). Getting Started with ESP32 CAM Module & Video Streaming over Wi-Fi. Retrieved from https://www.arducam.com
- แนวทางการใช้งานกล้อง ESP CAM รวมถึงการตั้งค่าสำหรับการส่งสัญญาณภาพแบบเรียลไทม์ผ่าน Wi-Fi
Azhar, F., & Zubair, H. (2021). Image Processing Techniques in Robotics: A Review. International Journal of Computer Science and Information Technology, 13(4), 32-38.
- บทความวิจัยเกี่ยวกับเทคนิคการประมวลผลภาพในงานหุ่นยนต์ ซึ่งมีความเกี่ยวข้องกับการประยุกต์ใช้ ESP CAM ในโปรเจ็กต์นี้
Blum, J. (2019). Exploring Arduino: Tools and Techniques for Engineering Wizardry. Wiley.
- หนังสือเกี่ยวกับพื้นฐานการพัฒนาไมโครคอนโทรลเลอร์ รวมถึงการประยุกต์ใช้ ESP32 และการสร้างหุ่นยนต์เบื้องต้น
คลิปนำเสนอ