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);
}
ESP32 Control Servo motor 2CH

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

ESP32 Control Servo motor 2CH
ESP32 Control Servo motor 2CH

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

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

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

ในรูปสุดท้ายจะเป็นลักษณะของการทดลองในภาพรวมอีกเล็กน้อยและสำหรับโครงงานเล็กๆ นี้หวังว่าคงจะเป็นแนวทางให้ผู้อ่านสามารถนำไปต่อยอดกับการสร้างโครงงานใหม่ๆ ครับ เช่น การทำหุ่นยนต์เล็กๆ ควบคุมผ่าน WiFi, การควบคุมอุปกรณ์อิเล็กทรอนิกส์ต่างๆ ด้วยสัญญาณแบบเดียวกับเซอร์โวมอเตอร์นี้ครับ.

Reference

  1. https://howtomechatronics.com/how-it-works/how-servo-motors-work-how-to-control-servos-using-arduino/
  2. http://doc.inex.co.th/ds3109-mg-360-degree-digital-servo-motor-review/
  3. https://www.instructables.com/ESP32-Internal-Details-and-Pinout/
  4. https://microcontrollerslab.com/esp32-servo-motor-web-server-arduino/
  5. https://www.techcoil.com/blog/how-to-control-a-servo-motor-with-an-esp32-development-board/