หุ่นยนต์รถบังคับสำรวจผ่าน Application มือถือ TSCINBUNNY

ผู้เขียนบทความ :

นายพชร วีระประดิษฐ์ 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 และการสร้างหุ่นยนต์เบื้องต้น

คลิปนำเสนอ

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *