การส่งค่าสัญญาณ 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);
}

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

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

Leave a Reply

© 2022 GlurGeek.Com
Exit mobile version