Basic ESP32 Control Servo motor 2CH

สำหรับโครงงานนี้เป็นการนำ ESP32 ในการควบคุมการทำงาน Servo motor 2 ช่อง โดยใช้ขา P4 และ P5 ในการส่งสัญญาณควบคุม ทั้งนี้รูปแบบคำสั่งในการโปรแกรมจะเป็นอีกแบบหนึ่งในการปรับขนาดของความถี่ ที่เหมาะสมสำหรับนำไปใช้กับเซอร์โวมอเตอร์ โดยในโครงงานนี้ใช้ช่องสัญญาณส่งออกมาจำนวน 2 ช่องในการควบคุม สามารถปรับความละเอียดของการสัญญาณในการควบคุมได้ ซึ่งโปรแกรมคำสั่งสำคัญในการใช้งานมี 3 ส่วนดังนี้คือ
1. ledcSetup(Channel, freq, resolution);
2. ledcAttachPin(LED1, ledChannel_1);
3. ledcWrite(ledChannel_1,40);

จากรูปที่แสดงจะเป็นลักษณะการทดลองการเขียนโปรแกรมควบคุมการทำงานเบื้องต้นที่สามารถแยกอิสระระหว่างกันได้ 2 ช่อง และตรวจสอบการสร้างสัญญาณควบคุมที่เกิดขึ้นด้วยออสซิลโลสโคป โดยโปรแกรมที่ใช้ในการทดลองจะแสดงข้างล่างนี้ครับ
ตัวอย่างโปรแกรมควบคุม
/* Code Program for Test MCU ESP32 For Driver Sevo motor Arduino IDE V.1.8.2 Test by Nattapon Date : 29/9/2019 Program Version V.0 */ #define LED1 4 //On Board LED #define LED2 5 //On Board LED const int freq = 50; const int ledChannel_1 = 0; const int ledChannel_2 = 1; const int resolution = 10; //SET Resolution 8, 10, 12, 15 void setup() { pinMode(4, OUTPUT); pinMode(5, OUTPUT); ledcSetup(ledChannel_1, freq, resolution); ledcSetup(ledChannel_2, freq, resolution); ledcAttachPin(LED1, ledChannel_1); ledcAttachPin(LED2, ledChannel_2); } void loop() { ledcWrite(ledChannel_1,40); ledcWrite(ledChannel_2,80); delay(2000); ledcWrite(ledChannel_1,60); ledcWrite(ledChannel_2,60); delay(2000); ledcWrite(ledChannel_1,80); ledcWrite(ledChannel_2,40); delay(2000); }

ในรูปข้างบนเป็นลักษณะของการวัดสัญญาณที่ขา P4 และ P5 ของบอร์ด ESP32 เพื่อตรวจสอบลักษณะการสร้างสัญญาณที่เกิดขึ้นว่ามีขนาดแอมปริจูด (Amplitude) และความถี่ (Frequency) ที่ถูกต้องและสามารถใช้กับตัวเซอร์โวมอเตอร์ได้


ลักษณะรูปสัญญาณที่แสดงข้างบนเป็นสัญญาณที่เกิดขึ้นจากขา P4 และ P5 ของบอร์ด ESP32 ที่วัดต่างช่วงเวลาที่เกิดขึ้น ทั้งนี้เพื่อให้เห็นความเปลี่ยนแปลงของสัญญาณและสัมพันธ์กับโปรแกรมคำสั่ง

จากนั้นนำเซอร์โวมอเตอร์ต่อเข้ากับบอร์ด ESP32 เพื่อสังเกตการทำงานของ ซึ่งจากการทดลองตัวเซอร์โวมอเตอร์ สามารถทำงานได้ถูกต้อง แต่ถ้าเราต่อเซอร์โวมอเตอร์มากกว่า 1 ตัวขึ้นไปแนะนำให้ใช้แหล่งจ่ายไฟเลี้ยง 5V แยกจากภายนอกสำหรับจ่ายให้เซอร์โวมอเตอร์ ทั้งนี้บอร์ด ESP32 ไม่สามารถจ่ายกำลังไฟฟ้าได้มากพอ

สำหรับข้างบนจะเป็นลักษณะของวงจรที่เราทำการทดลอง เพื่อให้ผู้อ่านเข้าใจได้ง่ายยิ่งขึ้น โดยในที่นี้ จะทำการทดลองโดยใช้เซอร์โวมอเตอร์เพียง 1 ตัวและทำการสลับช่องสัญญาณที่เกิดขึ้นจากบอร์ด ESP32 แทนเพื่อเป็นการทดสอบว่าสัญญาณที่เกิดขึ้นทั้ง 2 ช่องสามารถใช้งานได้

ในรูปสุดท้ายจะเป็นลักษณะของการทดลองในภาพรวมอีกเล็กน้อยและสำหรับโครงงานเล็กๆ นี้หวังว่าคงจะเป็นแนวทางให้ผู้อ่านสามารถนำไปต่อยอดกับการสร้างโครงงานใหม่ๆ ครับ เช่น การทำหุ่นยนต์เล็กๆ ควบคุมผ่าน WiFi, การควบคุมอุปกรณ์อิเล็กทรอนิกส์ต่างๆ ด้วยสัญญาณแบบเดียวกับเซอร์โวมอเตอร์นี้ครับ.
Reference
- https://howtomechatronics.com/how-it-works/how-servo-motors-work-how-to-control-servos-using-arduino/
- http://doc.inex.co.th/ds3109-mg-360-degree-digital-servo-motor-review/
- https://www.instructables.com/ESP32-Internal-Details-and-Pinout/
- https://microcontrollerslab.com/esp32-servo-motor-web-server-arduino/
- https://www.techcoil.com/blog/how-to-control-a-servo-motor-with-an-esp32-development-board/