การส่งค่าสัญญาณ PWM ใน Arduino

PWM(Pulse Width Modulation) คือเทคนิดการส่งสัญญาณแบบสวิต หรือ ส่งค่าดิจิตอล 0-1 โดยให้สัญญาณความถี่คงที่ การควบคุมระยะเวลาสัญญาณสูงและสัญญาณต่ำ ที่ต่างกัน ก็จะทำให้ค่าแรงดันเฉลี่ยของสัญญาณสวิต ต่างกันด้วย

สำหรับโมดูล PWM ของ Arduino มีความละเอียด 8 bit หรือ ปรับได้ 255 ระดับ ดังนั้นค่าสัญญาณ 0 โวลต์ถึง 5 โวลต์ จะถูกแสดงเป็นสัญญาณแบบดิจิตอล จะได้ 0 ถึง 255 ซึ่งเราสามารถเทียบสัดส่วนคำนวนจากเลขจริง เป็น เลขทางดิจิตอลได้

ตัวอย่าง สมมุติว่าเราต้องการไฟติดในระดับ 2 V

ถ้า 5V = 255 ดังนั้น จะได้ (255*2)/5 = 90 ดังนั้นเราจะได้ที่ระดับ 90

เช่น โค้ด

int sensorPin = A0;

// select the pin for the LED
int ledPin = 9;

// variable from the sensor
int sensorValue;
int ledValue;

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
ledValue = map( sensorValue, 0, 1023, 0, 255);
Serial.println(ledValue);
delay(100);
// fade LED
analogWrite (ledPin , ledValue);
}

1
โดยบริเวณที่มีไฮไลท์สีเหลืองคือค่าของเซ็นเซอร์ โดยในค่าแรกคือค่าเริ่มต้นของการหมุน ซึ่งเมื่อบิดสุดจะได้ค่า 1023 คือช่องที่ 2
ต่อมาค่า 0 ช่องที่ 3 คือค่าเริ่มต้นของระดับไฟ มาสุดคือ 255 คือช่องที่ 4 หากเราใช้โปรแกรม UnoArdusim ในการทดลองเราสามารถลองปรับค่าช่องที่ 4 ได้เพื่อที่จะสังเกตุไฟ LED จะพบว่าไฟ LED จะสว่างน้อยลงหากใส่ค่าน้อยกว่า 255 ประโยชน์ในการต่อยอดคือถ้าเรามีเซ็นเซอร์ในระบบใช้จริงเราก็จะสามารถรู้ค่าต่างๆจากการวัด
เช่น ถ้าเรามีเซ็นเซอร์วัดอุณหภูมิ วัดได้ที่ 0-100 องศาเซลเซียส เราก็จะมี 225 ระดับ แสดงว่าเราจะสามารถรู้ค่าละเอียดได้คือ 100/225 ประมาณ 0.44 องศาต่อ 1 ระดับ
โดยสามารถเช็คผลได้จากมอนิเตอร์ที่แสดงค่า ดังรูปด้านล่าง
1.ภาพเมื่อรัน สังเกตุมอนิเตอร์มีค่าเป็น 0โดยการรับค่ามาจากเซ็นเซอร์
 2
2.ภาพเมื่อรันไปเรื่อยๆแล้วเกิดสัญญาณ Pulse ที่ส่งมาจากเซ็นเซอร์ สังเกตุว่าจะมีค่าขึ้นที่มอนิเตอร์ และไฟ LED จะติด
3
3.หากเราใช้โปรแกรม UnoArdusim ทดลองเราสามารถปรับ Pluse กับ Period เพื่อให้ค่ามีช่วง Pluse มากขึ้นได้ ไฟ LED ก็จะติดบ่อยและนานขึ้น แต่ถ้าช่วง Pluse น้อยกว่า Period มากๆ ก็จะทำให้ได้ค่า 0 นานขึ้นคือไฟ LED จะติดช้าลง โดยหน่วยของฟังก์ชั่นนี้จะใช้เป็นไมโครเซค
4
ไฟล์สำหรับทดลอง sourcecode.ino

Thanaphat Kaenjan
at GlurGeek.Com
ชื่อ ธนภัทร แก่นจันทร์
เรียนอยู่คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์ ปี 1
มหาวิทยาลัยกรุงเทพ รหัสนักศึกษา 1580901328

Leave a Reply

© 2022 GlurGeek.Com